Чтение онлайн

на главную

Жанры

Кодеры за работой. Размышления о ремесле программиста

Сейбел Питер

Шрифт:

Не знаю, могут ли головоломки, которые дает Microsoft, - или тесты на сообразительность, которые, как я слышал, устраивает Google, или еще что-то такое, - показать, обладает ли человек нужными качествами. Но вот на что смотрю я. Готов ли человек работать в стиле BBN? Часто я вижу, что нет. Это может быть замечательный человек и гениальный программист, но в нем нет искры. Я всегда искал искру и едва ли смогу точно объяснить, как.

Сейбел: Думаете, программирование - это занятие для молодых?

Козелл: Возможно. Оглядываясь, я вижу, что люди, работавшие под моим руководством в конце моей карьеры в BBN, делали то,

что я бы, наверное, уже не смог. Один из моих подчиненных решил, что для создания части интерфейса будет здорово использовать Tel, и всего за полтора дня освоил этот язык настолько, что смог сделать всю необходимую работу и сделать хорошо. Думаю, мне бы это было не по плечу. “Ух ты, а ведь и я так умел”, - подумалось мне тогда.

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

Сейбел: Во многом энергичность - это просто физическая способность работать по много часов в день. Это необходимость или просто одно из последствий увлечения работой?

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

Один из лучших сотрудников BBN умудрялся работать по совершенно нормальному графику и при этом закончить докторскую диссертацию просто за счет своей феноменальной организованности. Каждую субботу он целиком посвящал научной работе, дополнительно возвращаясь к ней в будни по вечерам. Думаю, организованность - важное слагаемое успеха. Гораздо проще делать что-то, имея четкий план, откладывать работу в сторону и вновь приниматься за нее в определенное время, зная, что в нерабочее время можешь о ней не думать. Я понял это недавно, поскольку сейчас моя жизнь стала более размеренной. Сам я программирую достаточно бессистемно, откладывая работу и снова принимаясь за нее позже. Я обнаружил, что если перерыв в работе над какой-то программой составляет больше двух недель, включиться в нее снова бывает очень трудно. Часто, когда я работаю над каким-то маленьким личным проектом и мне действительно хочется его закончить, я говорю сам себе: “Ладно, попробую составить график. Буду работать по два часа каждое утро”. И это почти никогда не срабатывает. В какой-то момент мне надоедает такой темп, я сажусь и заканчиваю все за день-другой непрерывного труда.

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

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

Сейбел: Вы бы назвали себя ученым, инженером, художником, ремесленником или кем-то еще?

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

Сейбел: Начнем с инженерной составляющей. Многие, как Уотте Хамфри и сотрудники Института программной инженерии (SEI), считают, что программирование нужно преподавать как техническую дисциплину, вроде строительства мостов. Человека можно научить строить мосты, рассчитывать, сколько времени на это потребуется, и их мосты, как правило, не рушатся.

Козелл: Именно так. Хорошая аналогия, хотя и не безупречная. На самом деле, парень, который проектирует мост, так чтобы он не обрушился, сам не проверяет стальные канаты на прочность, не замешивает бетон и не делает много другой грязной работы.

Но в определенном смысле программирование действительно является инженерной дисциплиной. Ты должен знать, что делаешь. Трезво оценивать свои возможности. На своем уровне я должен был уметь охватить взглядом все детали, чтобы собрать их воедино. Должен был интуитивно понимать, что будет работать быстро, а что медленно; что будет легко сделать, а что - нет. И в результате, подобно инженеру, подготовить проект.

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

Сейбел: Итак, для вас красота кода тесно связана с тем, что люди будут его изменять.

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

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

Сейбел: А как быть с противоречием между ясностью и эффективностью? Подчас простой, легко читаемый код не является самым быстрым.

Поделиться:
Популярные книги

Возвышение Меркурия. Книга 7

Кронос Александр
7. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 7

Жена со скидкой, или Случайный брак

Ардова Алиса
Любовные романы:
любовно-фантастические романы
8.15
рейтинг книги
Жена со скидкой, или Случайный брак

Совок 2

Агарев Вадим
2. Совок
Фантастика:
альтернативная история
7.61
рейтинг книги
Совок 2

Прометей: каменный век

Рави Ивар
1. Прометей
Фантастика:
альтернативная история
6.82
рейтинг книги
Прометей: каменный век

Ты предал нашу семью

Рей Полина
2. Предатели
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Ты предал нашу семью

Уязвимость

Рам Янка
Любовные романы:
современные любовные романы
7.44
рейтинг книги
Уязвимость

Венецианский купец

Распопов Дмитрий Викторович
1. Венецианский купец
Фантастика:
фэнтези
героическая фантастика
альтернативная история
7.31
рейтинг книги
Венецианский купец

Попаданка для Дракона, или Жена любой ценой

Герр Ольга
Любовные романы:
любовно-фантастические романы
7.17
рейтинг книги
Попаданка для Дракона, или Жена любой ценой

Любимая учительница

Зайцева Мария
1. совершенная любовь
Любовные романы:
современные любовные романы
эро литература
8.73
рейтинг книги
Любимая учительница

Воевода

Ланцов Михаил Алексеевич
5. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Воевода

Деспот

Шагаева Наталья
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Деспот

Мастер...

Чащин Валерий
1. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
6.50
рейтинг книги
Мастер...

Не кровный Брат

Безрукова Елена
Любовные романы:
эро литература
6.83
рейтинг книги
Не кровный Брат

Не грози Дубровскому! Том III

Панарин Антон
3. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том III