четверг, 17 октября 2013 г.

Увлеченный программист

DISCLAIMER: В некотором роде, это рецензия на книгу Чада Фаулера “Passionate Programmer”, но, как обычно, здесь будет много мыслей, основанных не только на этой книге.

В отличие от многих современных гиков, я не программирую с 13 лет, я не участвовал в областных школьных олимпиадах по математике или информатике, мой путь получился несколько иным. В универе я изучал системы управления и автоматики, а computer science закончилась на втором курсе курсовой работой на С++. Моя карьера программиста началась на пятом курсе, когда мой хороший знакомый позвал "попробовать себя" в качестве разработчика охранных систем. Я попробовал и понял, что я нашел себя, и что именно в этом направлении я хочу прикладывать усилия для развития себя, как специалиста.

Любопытный момент произошел где-то через полгода после начала моей работы. Как-то при встрече с друзьями-одногруппниками я стал увлеченно рассказывать о чем-то новом, что недавно открыл для себя в новом мире разработки ПО. Возможно делился впечатлениями от прочтения книги Гради Буча, а может речь шла о чем-то другом, уже не помню точно. Тогда один из моих друзей, который пошел работать на год или полтора раньше меня, сказал: "Серега, ничего, через годик  тебя попустит, и ты станешь относиться к своей работе попроще". С того момента прошло уже около десяти лет, а меня так и не попустило:)

Я немного затронул свою историю, поскольку мне всегда интересны истории других людей. Всегда интересно читать статьи или книги, в которых автор рассказывает о своем прошлом. Так, Джоэл Спольски в юности был пекарем, Джон "Bugslayer" Роббинс был военным, а автор сегодняшней книги, Чад Фаулер, начинал свою карьеру в качестве профессионального музыканта. Подобный список легко можно продолжить и если послушать своих коллег, то можно услышать еще более интересные и невероятные истории того, каким ветром людей занесло в область разработки ПО и каким был их путь.

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

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

Кризис синьер девелопера

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

Поэтому в первые несколько лет level up идет за level up-ом, и вот через 3-4 года с помощью нескольких прыжков по разным компаниям ты оседаешь где-то на заветной должности "синьер девелопера".

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

ЦИТАТА
Будь худшим в любом коллективе, в котором ты работаешь.

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

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

Как себя мотивировать в таких случаях? Я всегда старался смотреть по сторонам в поисках тех, за кем стоит тянуться. И если подходящего человека не было в коллективе, я открывал топ rsdn-а, смотрел избранные сообщения Gaperton-а, Кодт-а, remark-а или nikov-а и понимал, что передо мной безграничное поле для развития. Общаясь с такими людьми (пусть и в одностороннем порядке) я всегда уверялся в мысли, что для меня гораздо важнее быть экспертом и радоваться своей работе и жизни, а не стремиться к получению +500$ или новой лычки на аппрайзеле.

ЦИТАТА
Поколение назад, удовольствие от работы не было решающим фактором при выборе места работы. Работа не должна была приносить радость, она должна была приносить кусок хлеба. Радость должна быть по возвращению домой с работы по вечерам и на выходных. Но если работа не приносит удовольствия, то скоро ты начинаешь понимать, что не можешь фантастически на ней работать. Не сказал бы, что многое поменялось с тех пор, но как минимум стал заметен сдвиг в лучшую сторону. Многие из нас поняли, что страсть ведет к совершенству. А без удовольствия от работы нельзя говорить о страстном отношении к работе программиста. ... Если вы не получаете удовольствия от работы, вы никогда не добьетесь совершенства.

Учи

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

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

ЦИТАТА
Если вы хотите действительно что-то изучить, попробуйте научить этому кого-то другого. Нет лучшего способа кристаллизировать свое понимание темы, чем заставить себя рассказать о ней кому-то другому так, чтобы они это поняли.

Моей первой статьей была рецензия на книгу Скота Мейерса "Эффективное использование С++", опубликованная на rsdn.ru в 2008-м году и я до сих пор помню, как прыгал от радости, что кому-то показались интересными мои мысли.

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

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

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

Passionate Programmer

clip_image002

А какое отношение все вышесказанное имеет к книге Чада Фаулера "Passionate Programmer"? Самое прямое. Выше я рассказал о нескольких принципах, которыми я пользуюсь в своей профессиональной деятельности, а теперь представьте, что вместо пары слабосвязных советов у вас на столе окажется книга с четырьмя десятками советами такого рода. При этом в конце каждой главы будет набор действий, исполнение которых позволит продвинуться в определенном направлении для развития вашей карьеры.

Именно таким сборником советов является книга Чада Фаулера. Некоторые советы банальны, некоторые – сомнительны, но большая их часть представляет собой прагматичные советы, как получать бОльшее удовльствие от работы, как себя проявить, в каких направлениях развиваться, как оставаться на острие технического прогресса и просто быть лучше как человек и как профессионал.

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

clip_image002

Заключение

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

Так что, если бы у меня сейчас спросили о том, как стать успешным программистом, то я бы дал такой совет: найдите себя и научитесь получать удовольствие от работы, тогда успех не заставит себя ждать!

Дополнительные ссылки

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

  1. Эх, интересная статейка. Верно сказано, что работа должна нравиться, или, если иначе, то зачем нужна будет ? Правда, ещё добавлю, что страсть иметь - не гуд. Одно дело - интерес в изучении, но на уровне страсти это может повредить, ибо «желание затмевает разум» и начинает контролировать человеком, а не он им.

    Почему-то ещё нагнитают мысли, исходя из прочитанного, что рас уж человек может вот так достичь предела своих изучений и начать требовать уже написания статей или чего-то подобного, то, значит, он всегда будет нуждаться в очередной задаче, что определяет его жизнь, иначе начнётся бессмысленница. Ибо алгоритм его жизни должен иметь конечную цель, а не тупо while(1){....}

    В конце статьи мне понравилась фраза, что работа влияет на жизнь вне её. Действительно, есть такое... Я так однажды додумался сравнить код с окружающей действительностью и провести параллель с ним. Т.е. сравнил его со строением мира и сделал свои всяческие выводы. Правда это уже безумие... Хотя не знаю, может и нет. Ибо всё новое может показаться чем-то безумным, а на самом деле иметь своё место быть. Ведь реально: как посмотреть на мир, то смахивает всё вокруг на код: постоянные причинно-следствия, алгоритмы, сложные системы, состоящие из более простых элементов ( структурированное программирование как параллель ), а если сравнить с ООП, то вообще интересные вещи получаются: объекты, свойства, методы и всё в купе подчиняется событиям.

    ОтветитьУдалить
    Ответы
    1. Немного альтернативной точки зрения. :)

      Человек без страстного желания добиться чего-то - овощ. Профессионал без страстного желания стать бОльшим профессионалом - халтурщик.

      Желания и должны затмевать разум. Разум - это калькулятор. Будет довольно тупо если калькулятор станет управлять человеком.

      Удалить
  2. Насчет фразы "будь худшим..." - эта же идея описывается в книге Apprenticeship Patterns - Guidance for the Aspiring Software Craftsman, глава Be the Worst. http://shop.oreilly.com/product/9780596518387.do
    Один из моих любимых принципов.

    Спасибо за Статью Сергей. Как всегда приятно читать твои статьи.

    ОтветитьУдалить
  3. Неплохая музыка для программистов https://vk.com/MusicForProgrammers

    ОтветитьУдалить
  4. Этот комментарий был удален автором.

    ОтветитьУдалить
  5. А если ты на промежуточном звене, то-есть не можешь учить, ну при этом уже в состояние : "а интереснее есть задачи?" - работать с GitHub'ом тоже не реально, так как я пытаюсь все время написать идеальные решение(даже если в голове - это единственное идеальное решение), поэтому всю мою жизнь было решение задач на работе или в помощи, так как там я мог воспользоваться принципом - пусть криво, но стоит и вот вопрос, что дальше ? Изучать другие языки? Скриптовые и АСМ'ы что ли?

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