19 июля, 2011

Программист ?= Воин


  С кем уже только не сравнивали программистов: и со строителями (моё любимое сравнение), и с садовниками, и еще бог с знает с кем. И каждый раз выносили умный вывод. Например, сравнение со строителями показывало то, что строительство большого здания без планов и архитектуры практически 100% обречено на провал. А сравнение с садовниками учит тому, что нужно делать программу так, чтобы она саморазвивалась, а программист только вносил небольшие изменения и позволял ей расти дальше. По моему мнению, второй вариант больше подходит админам и модераторам - как раз у них растет база данных, они за ней ухаживают, защищают от болезней и вирусов и удаляют лишние "побеги", но разговор сейчас не о том. Я хочу сравнить программиста с воином на поле боя. Почему с воином? А почему бы и нет, всё лучше садовника. =)

  Представим себе некую фэнтэзийную вселенную, похожую на нашу, чтобы особенно придирчивые читатели не смогли меня закидать какашками за то, что я не все виды оружий учел или за то, что у меня история останавливается на средневековом периоде.
  Началось все с оружия ближнего боя. Сначала бравые воины решали конфликты вручную, используя руки, ноги, зубы, ногти и т.п. (всё, что было на заре программирования - переключатели, прямое программирование схем, машинные языки программирования), потом, те кто сообразительнее, взяли в руки камни (assembler) - с ними стало гораздо сподручнее. Потом вояки догадались взять палку покрепче (Fortran) и понеслось. Много различных палок использовали воины: и прямые, и с утолщениями на конце, и упругие, в общем, всех не перечесть (Lisp, Algol, Smalltalk и т.п.). Даже были облегченные палки для тренировки молодых воинов (Basic). Затем появились некоторые стандарты дубинок - универсальные, удобные (С, Pascal). Это не значит, что остальные палки отмерли - они тоже развивались, меняли форму, с появлением железа стали обрастать шипами, прикрепляться к длинным палкам или веревкам, но всё равно считались специализированными оружейными школами боя. Некоторые из них даже послужили основой оружия следующего поколения (Smalltalk).
  А потом появился прямой меч (C++). Универсальное оружие, с которым можно сразиться против любого врага, но требующее немалых умений для того, чтобы достигнуть достойного уровня использования этого оружия. Много приемов и трюков использования меча было придумано и придумывается до сих пор, много грандиозных битв выиграно с помощью мечников. В общем, меч потеснил стандарт дубины. Разновидностей меча было очень много – например, в некоторых странах, из-за специфики климата и ведения боя, появились изогнутые мечи - ятаганы (Objective C). И вообще мечи пошли короткие и длинные, двуручные и легкие, изогнутые и прямые - много разновидностей появилось, но не все прижились. Про другие орудия тоже забывать не стоит - они никуда не делись и продолжили развиваться и превратились в молоты, булавы, кистени, шестоперы, моргенштерны. В последствии, появились и достойные конкуренты на звание стандарта - секиры (Java) - простые в использовании, требующее не так много концентрации и точности для их использования, но не менее смертоносные, ставшие популярными во многих странах.
  Отдельной вехой стало оружие дального боя (клиентское web программирование). Сначала просто бросались камнями (HTML), но вскоре основу дальнего боя составил лук (HTML + CSS + JavaScript). Более мощные варианты, такие как арбалеты (Flash, Silverlight) давали большое преимущество по ударной мощи, но гибкость и скорость лука им было не превзойти, несмотря на то, что во многом они более удобны. Да и лук продолжает развиваться (HTML5, CSS3) и грозит скоро в мощности догнать арбалеты. Правда у воинов дальнего боя есть недостаток - в ближнем бою они слабы и, почти всегда, их поддерживают воины защитной линии, основу которого составляет копейщик (PHP). Пускай копье не самое удобное оружие, но им легко научить обращаться и потому многие новобранцы выходят на свой первый бой именно копейщиками. В копье много скрытых приемов, познав которые, копейщик становиться чрезвычайно мощным воином, но только единицы добрались до такого уровня мастерства и, поэтому, копье до сих пор многие считают простым и непрофессиональным оружием. Более продвинутым оружием являются алебарда (Python) и глефа (Ruby) - многие более опытные воины защитной линии предпочитают эти виды оружия копью и их можно понять - они гораздо более универсальны и удобны.
  Ну и нельзя не упомянуть о магах (дизайнеры). Они стоят в тылу, делают непонятные вещи, за гранью понимания обычного воина, получают за это много денег, но эффект от работы профессиональных магов ласкает глаз, дарит вдохновение всей армии и, зачастую, служит основой победы. Некоторые воины пытаются осваивать магию, и у некоторых даже получается кастовать несложные лечебные и другие заклинания, а единицы так углубляются в колдовское искусство, что бросают призвание воина и становятся полноценными волшебниками.
  Что-то я увлекся. Пора вернуться из волшебной вселенной и попытаться извлечь из всего этого урок. Что главное для воина на поле боя? По моему, четыре вещи:
  • воинское умение;
  • острое, ухоженное оружие;
  • верные товарищи, которые не только не бросят в сложную минуту, но еще и компенсируют слабые места своих соратников своим оружием и приемами;
  • боевой дух;

  Собратьев по битве мы не всегда сами выбираем - для этого есть генералы, формирование боевого духа тоже непростая тема, зависящая от многих факторов, а вот умения и оружие - забота самого воина. Хороший воин всегда тренирует те умения, которые у него есть (программируй, старайся каждую свою работу сделать так хорошо, как ты можешь это сделать), учит новые приемы всех орудий, которыми владеет (изучай плагины, фрэймворки, читай тематические блоги и книги) и старается перенять умения врагов и соратников (изучай код коллег и код программ с открытым исходным кодом). Хороший воин всегда ухаживает за своим оружием, обмундированием и всегда готов в любой момент, по приказу, выдвинуться в битву. Его меч всегда наточен, тетива лука всегда прочна и плотно свита. Для программиста это значит держать порядок в файлах и голове:
  • вести список текущих задач и проектов;
  • убирать законченные и устаревшие проекты в архив – не засорять рабочую область;
  • держать в быстром доступе шпаргалки, рецепты, шаблоны кода;
  • использовать программы для быстрой сборки проектов, систему управления версиями кода и другие инструменты для ускорения разработки;
  • писать код так, чтобы вернувшись к нему, больше времени тратилось на доработку, а не на вспоминание того, что в нем понаписал;

  Ну и один момент, о котором никогда не стоит забывать программисту – тело это тоже оружие, требующее ухода и поддержки. Грамотное питание и спорт дадут невероятную отдачу в работоспособность.
  Вот такое вот сравнение. По-моему, неплохо вышло - и аналогии провел, и вывод сделал. Красота, одним словом. Что там дальше на очереди? Программисты-парикмахеры? =)
  PS: Фрилансеры, кстати, получили свое название тоже от воинов - так раньше называли наёмников - "freelancer" - "свободное копьё".