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

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

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

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

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

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

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

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

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

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

Или даже:

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

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

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

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

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

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

Отправить комментарий