Fri 4 Aug 2006
Что общего у программиста и писателя
Posted by Alex Lebedev under программирование
[5] Comments
Недавно в одном форуме прочитал очень интересную мысль – в программировании больше от литературы, чем от математики. И что применение сложного алгоритма требуется в 1% случаев, а умение понятно писать на определенном языке – в 100%. Что-то в этом есть.
Давайте предположим, что программирование во всем подобно написанию текстов и посмотрим что из этого следует.
- Чтобы научиться хорошо писать, нужно много читать. Странно, но почему-то многие люди вообще никогда не читали чужой код. “Чукча не читатель, чукча писатель”. Я и сам никогда раньше не думал осознанно о пользе чтения хорошего кода. Очень странно. Скажите, есть ли лучший способ освоить хороший стиль, чем имитация великих работ, созданных в этом стиле?. Как проще изучить новый язык – только по учебнику или читая вещи, написанные на этом языке? Почему-то мало кто этим пользуется. В качестве эксперимента – в течение следующего месяца буду читать хороший исходный код каждый день. Посмотрим, какие результаты это даст.
- Стиль имеет значение. Одну и ту же идею можно выразить разными способами. И способ, как правило, не менее важен для качества текста. чем сама идея. Именно стиль определяет будет ли написанное понято. И хватит ли хоть у одного читателя терпения дочитать до конца и понять хоть что-то. А еще в программировании тоже есть матерная ругать. Например, “public procedure Button1OnClick”.
- Краткость – сестра таланта. Одну и ту же мысль можно выразить разными способами. Среди всех способов, как правило, самыми хорошими являются самые стильные, а лучшим – самый короткий из них. Обращайте внимание на краткость изложения, оно того стоит.
5 Responses to “ Что общего у программиста и писателя ”
Comments:
Leave a Reply
Trackbacks & Pingbacks:
-
Pingback from Лучший способ найти время на юнит-тесты » Outsourcing stories
August 31st, 2006 at 07:34[...] В одном из недавних комментариев Андрей написал о наболевшем: И, наверное, документирование надо рассматривать как еще одну невключаемуюобычно_ в план работ задачу. [...]

August 10th, 2006 at 06:19
Полностью согласен. В наше время, в большинстве проектов(особоено в веб), математика отходит на второй план. Почти в каждой области уже созданы свои фреймворки, позволяющие особо не заморачиваться на математику. Конечно, это не означает, что математика теперь не нужна, есть проекты где она просто необходима…
Сейчас изучаю Java, и если бы не чтение хороших исходников Java проектов, я бы остался без знаний (возможно через какое-то время дошёл бы сам) о некоторых особенностях этой платформы. Но я думаю языки программирования намного ограничение человеческих языков, а значит существует намного меньше приемов(шаблонов) для создания “красивых фраз”. Поэтому, здесь не нужно много читать, здесь нужно просто познакомиться с малым количеством хороших исходников… а дальше изучать новые особого смысла нет. Со стилями тоже самое
есть стандарты оформления кода, и просто нужно писать с пониманием, что пишешь для человека, который будет в будущем это всё читать.
August 10th, 2006 at 07:01
Согласен, языки программирования намного строже естественного языка. Читать для приобретения хорошего вкуса и чувства стиля нужно заметно меньше. Однако, не советую успокаиваться, прочитав небольшое количество текста. Стили и решения, как правило, имеют ограниченную область естественного применения, которую можно понять только ознакомившись с объемом кода намного большим, чем два-три проекта.
Предлагаю рассмотреть вот какой пример. Вы отлично знаете английского язык, но из текстов читали только учебник и сонеты Шекспира – зачем что-то еще, у вас же есть пример отличного стиля. Внимание, вопрос – в каком стиле будут написаны ваши письма заказчику в США? Подходит ли этот стиль для данной задачи?
Еще один момент – чтобы легко отличать хороший код от плохого нужно, чтобы вы во множества видели примеры и того и другого. Тут тоже не хватит чтения малого количества хороших исходников.
Сколько кода нужно прочитать, чтобы развить в себе чувство стиля? Попробуем провести аналогию с литературой. Предположим, что для разумного развития литературного вкуса нужно прочитать книги из школьной программы плюс еще столько же (ИМХО, этого абсолютно недостаточно). Речь идет об объеме в 100-150 книг, что составляет примерно 30 000 страниц или 1 000 000 строк текста. Цифры взяты с потолка, но дают представление о порядке величин. Даже если кода нужно читать в 20 раз меньше, речь все равно идет о десятках проектов и десятках тысяч строк.
August 30th, 2006 at 09:00
Ага, щаз. Пробовали.
Берешь какой-нибудь интересный проект с исходным кодом, начинаешь разбирать {может в этом проблема, может надо просто читать, а как?} и ничего не понимаешь. Нет, языковые конструкции это все понятно, просто либо модули слишком большие, либо классы сильно перегружены функциями, либо нужных комментариев недостает. Вот просто идет программный код и все. Я уж не говорю про стилистику, отступы. Приходится доставать code стайлеры.
Пример, sqlite, раздобыл исходники на C, решил посмотреть как работает. Где-нибудь в середине кода переменной присваивается 0 (ноль), а переменная по своей сути является указателем, так чтобы не запутаться приходится по ходу чтения заменять 0 на NULL – одно дело когда какой-нибудь счетчик и другое дело когда адресная арифметика. Но отсутствие нужных комментариев это наверное самый сильный бич. Когда разбираешь текст, оставляешь в нем свои вопросы, так хотя бы формулируешь для себя, что искать. Находишь ответы – туда же, в код. По-хорошему документировать программу должен не тот, кто ее писал, а тот кто будет ее читать. Например в процессе code review, ведь именно в этом случае будут задаваться правильные вопросы (если я этого не понял, значит и после меня этого не поймут и не поймут тоже самое). И наверное документирование надо рассматривать как еще одну невключаемуюобычно_ в план работ задачу.
P.S. А еще бывает полезно перечитывать творения рук собственных.
August 31st, 2006 at 06:02
Проекты бывают разными и я уверен, что тот же sqlite – весьма интересный пример. Однако один проект сам по себе ничто – важно видеть код разных проектов, чтобы иметь базу для сравнения.
Андрей, вы пишете на C более-менее серьезно? Если нет, то читать код будет примерно так же сложно как книгу на иностранном языке, которым с трудом владеешь.
По поводу примера с присваиванием 0 указателю – мне кажется, что в хорошем коде из имени переменной должно быть ясно, что она содержит указатель. В этом случае мы просто имеем дело с разной семантикой одного и того же действия, что весьма несложно распознать опытным взглядом. Например, в приведенном ниже коде не нужно думать над тем, где вычисляется длинна строки, а где – длинна массива.
width = len(name)
height = len(event_list)
С отступами и стилями тоже достаточно странно. ИМХО, большинство уважающих себя open source проектов весьма аккуратно поддерживают согласованность стиля. Если у sqlite с этим все так плохо, найдите другой проект.