вторник, 29 ноября 2011 г.

Кто такой “хороший программист”?

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

Что отличает хорошего программиста от посредственного? И как самому стать хорошим программистом и заслужить среди друзей и коллег «почет и уважение»?

Честно говоря, не знаю. Зачастую даже сложно сказать, что понимается под этой фразой «хороший программист». С одной стороны, мы привыкли думать, что «хороший» программист – это обязательно гик в очках и растянутом свитере, победитель олимпиады по программированию, который в уме может умножать шестизначные цифры и читать машинный код прямо в двоичном формате. С другой стороны, на собеседованиях мы тоже пытаемся найти «хороших» программистов и там у нас есть другие критерии отбора: поскольку победителей олимпиад не так и много, а вакансий «ведущих» и «главных» пруд пруди, то эта планка опускается до более приземленного уровня. Так на собеседованиях мы задаем (или нам задают) вопросы попроще: что-нибудь о конкретных языках или технологиях, в результате чего проверяется скорее память кандидата, а не его умение думать головой.

Думать головой? Ну что ж, это очень даже неплохая отличительная черта хорошего программиста. Как ни крути, но именно серое (или какое оно там) вещество, расположенное в нашей голове, привело нас в эту профессию; и именно «думанием» профессиональный программист зарабатывает себе на жизнь, занимаясь этим большую часть своего времени. А раз так, то почему бы не подумать о том, как стать, если не хорошим программистом в общепринятом понимании, то хотя бы немного лучше по сравнению с тем, кем был вчера.

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

Вот, например, как часто вы задаете себе подобные вопросы: «Чем отличается ваш код сегодня от вашего кода полугодичной давности? Становится ли он лучше или, быть может, он уже давно достиг совершенства? Как изменились ваши взгляды на разработку ПО за это время? Что нового вы узнали из этой безграничной области? Когда в последний раз вы написали что-либо ради интереса, а не ради «производственной необходимости»? Когда в последний раз вы помогли кому-то с техническим вопросом?»

Конечно, ответы на эти вопросы не скажут, хороший вы программист или нет. Смысл их в том, чтобы понять, становитесь вы «лучше» или топчетесь на месте. Хороший программист – это не гениальный подросток, а простой толковый парень или девушка, любящие свое дело. Человек, в котором сочетается прагматизм и стремление к совершенству, любовь к новому и глубокие знания настоящего, стремление к обучению и желание учить кого-то еще. Большинство хороших программистов прекрасно понимают, что они знают очень мало и находят в себе желание и стремление это исправлять. У каждого из нас свой путь к получению новых знаний и здесь, как и в программировании, тоже не стоит искать «серебряную пулю».

Так что, учите, читайте, узнавайте что-то новое, пишите и рассказывайте об этом. И вообще, не думайте о том, хороший вы программист или нет, глупости все это. Ведь самое интересное в этом деле – это путь, а не результат!

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

  1. Как говорится, хороший инженер(программист) не тот кто все знает, а тот кто сможет во всем разобраться.

    ОтветитьУдалить
  2. Хм... Я что-то не нашёл слова "Лень". А мне кажется - это очень важный консультант программиста.

    ОтветитьУдалить
  3. @Sup: ну, у меня идея несколько тоньше. ИМО, важно не просто близоруко решить некоторую проблему, важно учитывать "контекст", т.е. понимать, когда стоит вкладывать несколько больше, поскольку это потом окупится, а когда нет.

    @ony: "лень" в твоем понимании, как двигатель прогресса, попадает под категорию "думать". Если ты думаешь, а не кидаешься на баррикады с вагонеткой кода, то это ж оно и есть.

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

    ОтветитьУдалить
  4. Критерий "думать" слишком универсальный. Программисты тут особо не выделяются.
    А вот критерий "почаще отслеживать динамику" это да. Здесь всё меняется, как нигде ещё. И кто не успел, тот опоздал. Это важный критерий.

    ОтветитьУдалить
  5. в общем, да! ) вот тут вас откомментил: http://pesdes.ru/nastoyashhiy-programmist_35.html

    ОтветитьУдалить
  6. В принципе верный подход, но насчёт последнего не согласен. Путь очень интересен, но в наше время все работают на результат, ибо нет результата - нет монеты :) Так что всё, абсолютно всё что мы делаем - идём к результату. И делать это надо думая, с головой

    ОтветитьУдалить
  7. @Алексей: просто дело в том, что очень часто, как в работе, так и в жизни, результат бывает разный. Есть результат краткосрочный (вот сейчас бабла срубить или вот быстро проект выпустить), а есть и долгосрочный (ну, сейчас бабла много не срублю, но тенденции хорошие или проект сроки проекта отодвинуты на две недели, но зато с поддержкой никаких проблем не будет).

    Это конечно утрировано, но где-то так оно и есть. При этом чаша весов краткосрочных/долгосрочных взглядов может качаться из стороны в сторону в зависимости от обстоятельств.

    Да, и, кстати, у разных людей понятие результата разное:) (а когда я говорил о самом процессе, то я говорил о процессе познания, в котором результата нет по определению).

    ОтветитьУдалить
  8. Результат у "процесса познания" - есть и это NF (normal form). Когда все референсы на "знания" определенны.

    ОтветитьУдалить
  9. @Nikolay: очевидно, что чем больше человек "познает" тем больше будет площадь соприкосновения с теми областями, которые ему не знакомы. Так что "результатом процесса познания" может быть лишь познание некоторых областей и понимание "отсутствия познания" в множестве других.

    ОтветитьУдалить
  10. Хороший программист - который постоянно развивается. Полностью с вами согласен.

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