пятница, 27 августа 2010 г.

Хакеры и худоджники. Любимый фрагмент.

Вероятно все читали замечательное эссе Пола Грэма "Хакеры и художники", но очень хочется привести из него один фрагмент, который мне нравится особенно сильно:
Хакерам теория вычислений нужна не больше, чем художникам - химия красок. Надо знать, как высчитывать время и пространственную сложность, еще - про Тьюрингову полноту. Ну, еще не помешает помнить хотя бы концепцию конечного автомата - на случай, если пишешь синтаксический анализатор или библиотеку регулярных выражений. Вообще-то художникам приходится помнить о химическом составе красок гораздо больше.

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

К примеру, меня в колледже учили: прежде, чем приблизиться к компьютеру, программу следует целиком записать на бумаге. Оказывается, я программировал не так. Мне нравилось программировать перед компьютером, а не над листом бумаги. Хуже того, я не писал терпеливо всю программу, проверяя, нет ли ошибок, я извергал безнадежно кривой код и постепенно приводил его в норму. Отладка, учили меня, - это последний заход, когда вылавливаешь опечатки и упущения. Я же работал так, что программирование походило на бесконечную отладку.

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

Осознание этого факта реально влияет на разработку ПО. Язык программирования прежде всего должен быть гибким. Язык программирования - чтобы думать о программах, а не формулировать программы, которые уже обдуманы. Карандаш, а не ручка. Статический контроль типов - неплохая штука, если б программировали и впрямь так, как учат в колледже. Но ни один известный мне хакер так не работает. Нам требуется язык, что позволит карябать, сажать кляксы и стирать, а не вроде как сидишь с чашкой типов данных и вежливо беседуешь со строгой престарелой тетушкой-компилятором.

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

Ну, разумеется - страница формул впечатляет. (Совет: для особой выразительности вводите греческие переменные.) И потому так соблазнительно заняться проблемами, к которым можно подойти формально, а не над теми, что, скажем так, важны.

Если бы хакеры видели в себе творцов - писателей или художников, - такого соблазна бы не возникало. Писатели и художники математикам не завидуют. Они считают, что занимаются чем-то совершенно не связанным с математикой. Как и хакеры, я полагаю.

9 комментариев:

  1. не читал полную версию, но там действительно автор многократно радуется что переизобрел прототипирование, рекомендации по написанию кода (PEP8-like) и прочее?
    что же до "эксизов" - при разработке профессиональной работы те же самые художники работают сначала на точно таких же "листочках бумаги" которые ругает эссеист. точно также просчитывают и меряют. если он этого не заметил - то интересно как же он разбирался в вопросе?

    П.С."правильно держать ручку" надо хотя бы потому чтобы через n лет не получить (при условии регулярного письма) проблем с суставами. точно так же надо "правильно петь" - некоторые даже весьма известные личности (Йан Гиллан, к примеру) этого не делали и звучали огого как - но к старости кроме как натужно хрипеть не могли ничего. в отличие от тех же проф оперных певцов (которые голос берегут "правильными ручками" еще как)

    ОтветитьУдалить
  2. @Dear mr. DW

    Хм, у меня несколько знакомых художников, они точно ничего не просчитывают и не меряют, откуда вы это взяли?

    ОтветитьУдалить
  3. Очень удачная метафора. Попробуем развить.

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

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

    А картины "хакеров" люди вешают на стены для красоты. Без них можно обойтись, но жизнь будет скучнее.

    ОтветитьУдалить
  4. архитекторы и пром. дизайнеры в повседневной работе ни теор.мех., ни сапромат, ни строй.мех не используют. они рисуют различные эскизы и потом чертят по ним чертежи(сейчас еще 3d модельки в Arhicad'е, 3D Max'е и пр. делают). а расчеты для них делают инженеры, в процессе подбирая подходящие материалы и корректируя некоторые параметры(типа размера балки), или говоря что такое сделать нельзя.(:похоже на компилятор не правда ли?;). а обозначенными науками этих "творцов" грузят в процессе обучения, для того чтобы по-реже творили такое, что "нельзя сделать".
    На стены их эскизы вешают, почему-то, редко..

    ОтветитьУдалить
  5. и, да, очень приятное напоминание о замечательном эссе)
    спасибо)

    ОтветитьУдалить
  6. @Dmitry

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

    ОтветитьУдалить
  7. Хех, у нас из потока в сопромате реально шарило человек 5. Так, чтобы по всем вопросам была ясная картинка, и чтобы можно было в ходе конструирования принимать правильные решения на подсознательном уровне, без предварительных рассчётов.

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

    ОтветитьУдалить
  8. Замечательный фрагмент, прямо кайф словил от прочтения :)
    Автор прямо "истину глаголит".
    Программирование и Математика - это разные науки! Бывает, конечно что они очень тесно соприкасаются, но это всё-таки редкость. Человечество давным-давно осознало огромную пользу в РАЗДЕЛЕНИИ труда! И говорить, что программист должен быть одновременно математиком, это всё равно что говорить - "физик должен быть одновременно химиком". Естесственно, что учёный проффесионально занимающийся аж 2-мя дисциплинами - немеряно крут и ему, возможно, недалеко до важного открытия. Но на деле, как правило, если человек рассредотачивается на 2-е и более дисциплины, то скорее всего - проффесионалом он не будет ни в одном ни в другом!

    ОтветитьУдалить
  9. Смотрели фильм Хакерские войны а? Очень интересно, это документальный фильм.

    ОтветитьУдалить