Saturday, 1 November 2008
Хорошо быть программистом
Последние несколько недель я работал с напарником над проектом, который потребовал напряженных программистских усилий. Проект уже закончен, а мы вернулись к обычному распорядку, однако, когда люди слышат об этих сумасшедших авралах на работе, они часто сочувствуют нам. А не должны. Я бы никогда не стал работать таким образом часто, или на протяжении длительных периодов времени, или без должной компенсации со стороны заказчика, если таковой имеется, потому что, по правде говоря, подобные программистские блицкриги — одни из самых любимых периодов в моей жизни. В правильных условиях написание программного обеспечения настолько приятно, что должно быть признано незаконным.
Это относится ко многим программистам, остальных же эта мысль застаёт врасплох, когда они её слышат. Я думаю, это потому, что система образования так хорошо справляется с «выдавливанием» интересного из любого предмета. Ужасает, например, то, как школы могут взять самые животрепещущие предметы и изуродовать их, лишив интереса и оставив только формулы. То же самое и с программированием. Многие корпорации превращают по сути приятное занятие в нечто, что едва можно вытерпеть в обмен на зарплату.
Это очень плохо. Мало найдётся занятий лучше, чем проводить время в творческих раздумьях, поглощенным идеями, видеть как работа претворяется в жизнь, а засыпая, стремиться скорее проснуться, чтобы проверить некоторые задумки. Я не говорю, что всегда надо работать лишние часы, это даже нежелательно — правильное планирование необходимо за исключением редких случаев. Что я хочу сказать это то, что программирование — это огромное удовольствие от творчества, отличная комбинация головоломок, написания кода и мастерства.
Программирование предлагает занимательные задачи и простор для изобретений. Некоторые проблемы носят исследовательский характер и необходимо найти решение оптимизации: «Почему этот код работает так медленно?», «Что же всё-таки вызывает этот баг?» Другие задачи — творческие, например, разработки алгоритмов и архитектур. Все они приводят в восторг, если вам нравится аналитическая работа, погруженная в мир чудовищ, таких как вредоносные программы, роутеры, кеши, протоколы, базы данных, графы и числа.
Эта аналитическая сторона работы является тем, что большинство людей ассоциируют с программированием. Она делает его интересным, похожим на сложную стратегическую игру. Но в большинстве программ главная проблема заключается в коммуникации: с коллегами-программистами через код и с пользователями через интерфейсы. В общем и целом, написание кода это скорее очерк, чем головоломка. Оно формирует ваши идеи и схемы в связное воплощение; это поиск ясности, простоты и краткости. Вместе код и интерфейс изобилуют простыми радостями творения.
Другой источник удовольствия заключается в том, что при определённых условиях при программировании возникает чувство приобщения к прекрасному. Возможно, это и звучит как чушь, но это на самом деле то, что может сделать ваш день лучше. Взять к примеру евклидово доказательство в две строки о бесконечном количестве простых чисел. Думаю, что многие считают его красивым: очень кратко, но какой замечательный результат. В этом красота математики, холодная и строгая, и она наполняет программное обеспечение. Она в умных алгоритмах, вроде быстрой сортировки, в исходных текстах ядер и компиляторов, в элегантных эксплоитах и в уловках, которые мы используем, чтобы решать каждодневные проблемы. Когда ты видишь такие решения, будь это известный алгоритм или небольшой трюк, ты улыбаешься и думаешь: «Как умно», — и от этого становится хорошо. Какая благородная цель!
Нематематическая красота также может присутствовать в коде, как красноречие — в выступлении ораторов. Она — в правильно спроектированном программном обеспечении, которое содержит много функциональности при небольшом количестве кода, в лаконичных и ясных методах, в правильной архитектуре. Некоторые языки программирования усложняют процесс достижения такой красоты, и не все программисты способны достичь ее, но это истинное удовольствие — читать и работать с подобным кодом. Если вы используете выразительный язык и работаете с коллегами, чей код вам нравится, то часто этого достаточно, чтобы работа была в радость.
Теперь о мастерстве. В каком-то смысле, софт это абстракция — где существует поведение программы, кроме как у нас в голове? И всё же мы называем этот процесс «построением» ПО не без причины. Программы приобретают форму модуль за модулем, архитектура начинается с каркаса и вырастает в огромные здания, пользовательские интерфейсы оттачиваются, ошибки в ПО исправляются и узкие места оптимизируются, чтобы все работало быстрее. Программное обеспечение дает глубокое чувство удовлетворения от созидания. Мы создаем вещи из чистых идей, а потом можем видеть как они работают, помогают решать реальные проблемы и делать людей чуточку счастливее. Или гораздо счастливее, в зависимости от обстоятельств.
Возьмем биологию. Несмотря на почти 400 лет научного развития, биология была неспособна решить критические проблемы, такие как эффективные способы лечения вирусных инфекций или рака. Одно из наших лучших достижений — антибиотики — было достигнуто благодаря случайному эксперименту. Вы начинаете клиническое испытание препарата для борьбы с гипертонией и вдруг, бум, у всех испытуемых реальный стояк! Так рождается Виагра. Безусловно, случай играет роль во всех исследованиях, но физика и химия хотя бы имеют всеобъемлющую теоретическую базу, которая стимулирует систематические усовершенствования, тогда как биология была в значительной степени ограничена случайными открытиями. Желаете вылечить рак? Облучите пациента радиацией, накормите его ядом, и, будем надеяться, рак умрёт первым. Это потрясающие случайности и я рад, что у меня такое тоже бывает, но такая наука далека от точности, которой изобилуют другие области человеческого знания.
Программное обеспечение меняет положение дел. Всего лишь 50 лет назад начались открытия в области ДНК, а теперь любой может посмотреть и загрузить сотни законченных геномных последовательностей. Или посмотреть значение тысяч генов (DLEC1 в качестве случайного примера), включая полную последовательность нуклеотидов, аминокислотные последовательности протеинов, полученных прессованием, литературу, описывающую гены — всё, что угодно! Или вы можете поискать в базах генов и протеинов нуклеотиды или аминокислотные последовательности, возможно, после того, как вы составили какую-то последовательность при помощи всё дешевеющего специального оборудования, и в результате получить полный отчёт о совпадениях. И не важно, совпадают ли последовательности полностью или нет, потому что алгоритм в BLAST, стандартном инструменте для поиска последовательностей, позволяет находить даже частичные совпадения в базе данных и биологических видах, с выставлением коэффициента подобия. Эти достижения приведут к значительным прорывам в медицине. Биология входит в новую эру, как физика в 18 столетии, но только ведомая вперёд программным обеспечением.
Да, конечно, биологи играют незначительную роль :P, но мы — программисты — обеспечиваем также и основные направления в развитии науки, культуры и бизнеса. Когда ребенок из страны третьего мира читает статью из Википедии — это тоже наша работа . Мы написали RFC, сетевые стеки, браузеры, MediaWiki, операционные системы и HTTP-серверы. И это не считая многих записей в Википедии, но, так как некоторые из них были написаны в рабочее время, пожалуй, оставлю их в стороне. Влияние информационных технологий идёт дальше битов и байтов: программист изобрёл формат «вики» и наше сообщество изобрело блоги. Генри Мекен правильно указал на то, что «свобода прессы существует только для тех, у кого есть своя собственная пресса». К сожалению, его нет рядом, чтобы увидеть, как наши создания ломают удушающий конформизм и уютную услужливость профессиональной журналистики. Менее гламурно, зато с большой пользой наши приложения изменяют и экономику, и бизнес, существенно увеличивая производительность труда. И это только некоторые примеры из длинного списка.
3 года назад, когда я закончил последний курс колледжа (после работы программистом на протяжении многих лет), я чуть не поступил в медицинский университет. В то время сочетание нескольких горьких опытов остудило моё желание работать с компьютерами. Я счастлив, что повременил с моим желанием. Я до сих пор интересуюсь биомедицинскими исследованиями, но если бы я теперь хотел участвовать в них, я бы скорее подошёл к ним с точки зрения программного обеспечения, потому что с этой стороны всё настолько веселее, что нельзя это пропустить. Моя мама думает, что я наборщик. Ну и пусть.
Если вы обнаружите, что застряли в месте, убивающей вашу врождённую страсть к технологиям, то всеми возможными способами бегите оттуда! Не оставайтесь неподвижным, глядя на то, как медленно тает ваш энтузиазм. Поскольку найти и нанять людей с мотивацией непросто, то вы становитесь обладателем ценного качества. Есть много работодателей и компаний, которые можно создать, и они подойдут вам в большей мере. У тех, кто думает, что им, возможно, нравится программировать, уровень энтузиазма разный, но я настоятельно рекомендую программирование в качестве карьеры. Не только потому, что перспективы на рынке труда постоянно растут, но и потому, что нас ждёт много захватывающих и благотворных изменений, привносимых технологиями, по мере того, как роль программного обеспечения растёт в обществе. Я рад, что присутствую при всём этом, и в своём ремесле я непрерывно пытаюсь достичь совершенства.
Gustavo Duarte , “Lucky to be a Programmer”, публичный перевод на русский с английского.
Add post to:


Comment form for «Хорошо быть программистом »