среда, 21 октября 2009 г.

[comp.prog.thoughts] Программирование и писательство – это разные вещи

Часто встречаются утверждения о том, что программирование и писательство очень похожи. Например, соответствующая цитата всплыла в обсуждении моей предыдущей заметки:

Тот тип организационного мастерства и аналитических способностей, который нужен для программирования, связан полностью с гуманитарными науками. Логика, например, преподавалась на философском факультете, когда я был в университете. Процесс, используемый при проектировании и написании компьютерных программ, почти полностью идентичен тому, который используется, чтобы сочинять и писать книги. Ален Голуб

Возможно, что процессы писательства и процессы программирования очень похожи и базируются на одинаковых принципах. Но я хочу специально подчеркнуть, что программирование – это не писательство. Между двумя этими занятиями есть существенное различие: писатель должен изложить в тексте свои мысли, тогда как программист должен заставить программу работать.

Грубо говоря, книга может нравится, а может не нравится. Может помочь читателю в чем-то, может изменить его взгляд на что-то, а может и оставить равнодушным. Но все это субъективно. Тогда как (не)работа программы – вещь объективная. Внешний вид аудио-плейера может нравиться или нет, но если плейер ломается на воспроизведении mp3-файла – это объективно. Если файлы не удается извлечь из архива из-за ошибки в архиваторе, если в самолете отключается автопилот из-за ошибки в его программе, если ракета взрывается на старте из-за ошибки в бортовом ПО, если космический аппарат промахивается мимо Марса из-за ошибки в сопряжении программных систем – все это объективно.

Качества текста книги является ключевым фактором в донесении содержания книги до читателя. Тогда как на работу программы качество ее исходников влияет очень опосредованно. Текст может быть написан очень хорошо и профессионально, но программа не будет работать. А может быть жуткой кашей из надерганных из разных мест фрагментов, но работать. Программа может быть образцом элегантного воплощения красивой идеи, но при этом не проходить нагрузочных тестов, а может быть тупым перечислением нескольких сотен граничных случаев, но работать как часы.

Вряд ли кто-нибудь может представить себе детектив, в тексте которого разбросаны вставки вида:

Для Иванова Иван Ивановича: он подкрался к приоткрытой двери, стараясь не скрипеть половицами”

Для Сидорова Сидора Сидоровича: стараясь ступать как можно осторожнее он подошел к наполовину открытой двери”

Или даже:

Для Петрова Петра Петровича, когда он читает в библиотеке: дверь была едва приоткрыта и он очень осторожно…”

Для Петрова Петра Петровича, когда он читает в метро: он тихо стал у двери…”

Маразм, да? А ведь в программировании это обычное дело. И почему? Потому, что у писателя и у программиста очень разные цели изначально. Цель писателя – совершенствование своего текста. Цель программиста – прохождение серии объективных испытаний. Книга должна читаться, программа должна работать. В этом суть.

На мой взгляд, это объясняет, почему много программистов хорошо пишут код, но мало кто из них может писать документацию. Если бы программирование и писательство действительно были насколько похожи, таких универсалов было бы много больше.

PS. В качестве небольшого disclaimer-а. Я не писатель. В моем багаже всего лишь средних размеров руководство по SObjectizer-4, несколько технических статей и порядка 400 страниц внутрикорпоративной технической документации, ну и этот блог. Так что, очень вероятно, я говорю о вещах, в которых не разбираюсь.

PPS. По-моему, писать сложнее, чем программировать.

3 комментария:

Skynin комментирует...

Сказанное Голубом относится к процессу мышления программиста, а не к конечному результату книга/программа.

Группы мышц задействованы те же в процессах "иду на свиданье" и "иду к стоматологу".
И разные, в процессах "иду на свиданье" "сидя жую тортик".

А Вы сравниваете - результаты похода, ощущения от поцелуев и от бормашины.

Они об другом, чем Вы :)

Skynin комментирует...

P.S. Так что, очень вероятно, я говорю о вещах, в которых не разбираюсь.
Вероятней - как подавляющее большинство людей чужды рефлексии, а потому не поняли о чем речь.

Еще пример, о видах мышления:
Немало исследуют активность зон мозга, наблюдая какие при какой деятельности активны. Так вот утрируя - за занятие программированием и писательством отвечают одни и те же зоны мозга. А вот за музыкой, математикой, ..., другие.

Книга должна читаться, программа должна работать. В этом суть.
Как замечено у отцов экстремального программирования - программисты не пишут программы - они пишут код. А программы делаются компилятором. Программисты пишут проект, по которому компилятор соберет готовое изделие.

Книга должна читаться и быть понятой и породить в читающем мысль, переживание. Для этого она должна быть написана на известном языке, и правильно (условие для "компилятора", чтобы пустили в тираж) и логично, связано, без противоречий и пересковов (чтобы не подвисал "читатель"), иначе не будет продаваться.

eao197 комментирует...

Так вот утрируя - за занятие программированием и писательством отвечают одни и те же зоны мозга.

Все это, наверное, правильно. Но уж очень мне не нравится, когда сравнивают работу писателя и программиста. Мне кажется, что между работой какого-нибудь протезиста, который делает нестандартные протезы, и работой программиста гораздо больше общего, чем между программистом и писателем.