Что делает хорошего программиста хорошим?

http://joshsymonds.com/blog/2013/11/03/what-makes-a-good-programmer-good/
  • Перевод
Я работал со многими программистами на протяжении долгих лет — некоторые из них были очень яркими, а некоторые — определенно «никакими». Недавно я имел удовольствие работать с несколькими высококвалифицированными специалистами, так что я потратил немного времени в размышлениях, чем же я восхищаюсь в них. Что делает хорошего программиста таким хорошим, а плохого — таким плохим? Или, немного коверкая русский язык, что делает хорошего программиста хорошим?
Исходя из своего опыта могу сказать, что «великолепие» программиста никак не связано с возрастом, образованием или финансовым состоянием. Это связано с тем, как вы действуете и, более детальнее, как вы думаете. Я заметил стойкий набор привычек у программистов, которыми я восхищаюсь. Более чем хорошее знание выбранного языка программирования, глубокое понимание структур данных и алгоритмов, более чем годы опыта работы, то, как они общаются, как они управляют собой и как они подходят к разработке — все это говорит об удивительном уровне их мастерства.
Конечно, быть хорошим программистом — это намного больше, и я не стану оценивать любого программиста исключительно по наличию (или отсутствию) этих практик. Но я опознаю мудрость, когда я вижу ее, и когда я вижу программиста, обладающего этими чертами, я думаю: «Этот человек действительно знает, что он делает.»

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

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

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

Они просто делают это
Хорошие программисты готовы действовать. У них есть особенность, которую бывает сложно контролировать: они реализуют решение как только выявляют проблему или видят новый feature request, иногда слишком рано и иногда слишком агрессивно. Но их инстинктивная реакция на проблему — решить ее сразу же.
Иногда это может быть хлопотно, но их энтузиазм является важной частью высокого качества их работы. Пока некоторые спорят или ждут, когда проблема исчезнет сама, хорошие программисты начинают решать ее.
Говоря проще (и, возможно, слишком очевидные вещи): если вы видите, как кто-то взволнованно уцепился за проблемы и начал работать над ней, то, скорее всего, у вас уже есть хороший программист.

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

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

Они увлечены
Я думаю, что это должно быть наиболее важным аспектом хорошего программиста (и, возможно, эта часть применима не только к компьютерным наукам).
Если вы по-настоящему заботитесь о том, что вы делаете, если это не только работа, но и хобби, интерес и даже восхищение, то у вас есть большое преимущество перед кем-либо еще в своей области. Великие программисты всегда программируют. Их коллеги будут работать по 8 часов в день — не только на работе, но и в области программирования вообще. У них нет проектов по программирования на стороне или большого интереса во вкладе в сообщество. Они не пробуют новые хитрые методы и безумные языки программирования просто чтобы увидеть, как они работают.
Когда я вижу программиста, который делает свой собственный проект-хобби на выходных, который вовлечен в создание утилит, которыми он пользуется каждый день, который очарован новым и интересным, то тогда я точно знаю, что вижу удивительного человека. В конечном итоге, великие программисты выбирают свою профессию не только как способ зарабатывания денег, но и как возможность сделать жизнь лучше. Я думаю, что это и делает хороших программистов теми, кто они есть. Для них кодинг — это способ к изменению мира. И это я считаю достойным уважения и восхищения.
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 56
  • +35
    Хорошего специалиста делает хорошим его хорошесть.
    А плохому специалисту его плохость мешает.
    • +63
      [капитан Очевидность]
      • НЛО прилетело и опубликовало эту надпись здесь
      • +5
        Позитивная и мягкая статья. Лично мне сейчас как бальзам на душу. Дает ощущение, что выдающимся программистом можно стать и при не очень благоприятных начальных условиях, а оно, в свою очередь, согревает.
        • –4
          Можно обобщить одним словом — опыт.
          • +2
            Хороший программист может работать не ради вознаграждения, тем не менее зная, что вознаграждение будет по-любому.
            • +12
              Наверное у хороших программистов не бывает жен, детей и ипотеки…
              • –5
                у меня вот нету :) хотя об ипотеке приходится задумываться
                • 0
                  так не скромно :)
                  • +1
                    Сам не похвалишь — никто не похвалит :)
                • +1
                  Несовсем. У хороших программистов может быть и жена и ребенок и какие-то обязательства перед кредиторами. Просто кто-то бежит от проблем и не ищет путей их решения, а кто-то пытается решать проблемы пусть даже через одно место, иногда и так достаточно. Пример из жизни: Раньше много программировал, а после рождения дочурки думал, что все застопорюсь в профессиональном развитии. Оказалось нет. Пока вожусь с дочуркой и ее игрушками, то в голове возникает множество мыслей по поводу решения очередной программерской траблы и казалось бы хватай и делай, но нет надо водиться. Зато время пока вожусь может пронестись десяток вариантов, но когда появляется время по программировать, то либо ни одной мысли в голове нет, либо есть одна, но она достойна того чтобы ее попробовать. Очень часто оказывается так, что эта самая «достойная» и есть то необходимое и по настоящему решающую проблему!

                  У меня после появления дочурки наоборот только улучшились программерские навыки. Это связано с тем, что времени на программирование мало и мозг отчетливо это понимает, следовательно более рационально расходует то что у него есть.
                  • +1
                    Пока разрабатывал MMO — писал код непрерывно, закрываешь глаза и видишь экраны кода, который написал за день.

                    Однажды с семьей выбрались посмотреть кино. Когда погас свет — я увидел Код, и в нем была Ошибка.

                    Это был самый ужасно-долгий киносеанс в моей жизни. :(
            • +40
              Когда я вижу программиста, который делает свой собственный проект-хобби на выходных, который вовлечен в создание утилит, которыми он пользуется каждый день, который очарован новым и интересным, то тогда я точно знаю, что вижу удивительного человека.

              А еще автор скорее всего видит холостого программиста :)
              • +1
                Если программист делает свой проект на выходных — это может означать, что ему не интересна его текущая работа.
                Ну или менее интересна, чем могла бы быть.
                • +9
                  Cвое детище всегда ближе. Ну и если речь не о стартапе в вакууме, то работа программиста за деньги не всегда веселая и интересная.

                  ps: И да, хобби у семеных людей, это что табу теперь?
                  • +3
                    У семейных людей обычно главное хобби — это дети. Потом идет хобби детей. А уже потом, в свободное время…
                    • 0
                      Одно другому не мешает.
                      • +7
                        Я рад, что вы все успеваете :)
                        • +1
                          Если мешает — надо что-то менять. Иначе кризис неизбежен, вопрос в сроке и последствиях.
                          PS у самого растёт сын (2 года) и понимаю, что это сложно… но надо!
                          • 0
                            И как?
                            • 0
                              А хреновастенько… но это связано ещё и с тем, что с женой есть некоторые проблемы и мы активно раздумываем о разводе… надо сказать — печальный вариант, т.к. это не слабо уменьшит время, которое я смогу проводить с сыном, вот и задумываюсь о том, чтобы это время стало весьма продуктивным и интересным нам обоим.
                      • +1
                        Семья не обязательно сразу с детьми. Жена — тоже семья, даже без детей. Поэтому своё хобби, в таком положении дел, это нормально.
                    • 0
                      Мне интересна моя текущая работа. Так сложилось, что самые веселые проекты в компании у меня :)
                      А на выходных пилю какие то тулзы для себя. Конечно не от зари до зари. А в охотку.
                      PS. Женат, сыну 11. Кучу всяких дел с ним творим :)
                  • –2
                    Не согласен со значительной частью тезисов.

                    «Они проводят собственные исследования»
                    Тут логическая неувязка. Заголовок говорит, что хорошие программисты проводя собственные исследования. Текст тезиса утверждает, что не надо ничего исследовать, надо спросить того кто уже исследовал. Имхо, у хорошего программиста развита «чуйка» на оптимальный путь решения проблемы. Он в нужных пропорциях уделит времени самостоятельному ковырянию, гуглению, стэковерфловыванию и опросу коллег.

                    «Они просто делают это»
                    Я бы сказал что «просто делают это» — джуниоры, которым неймется. Хороший программист сначала подумает, потом сделает. Хороший и опытный программист сначала подождет, потому что feature request может быть ошибкой того кто ставит задачи, и может быть отменен, потом подумает действительно ли это «фича», нельзя ли ее улучшить, предложит это к обсуждению. Потом подумает как лучше реализовать, что потребуется и какие существующие куски приложения будут затронуты. А потом сделает так, чтоб при рефакторинге не было стыдно.

                    «Они хорошо общаются»
                    Вообще не обязательно. Я бы скорее поверил, что способность к общению на любые темы, тем более с не_программистами, имеет скорее обратную корреляцию с «хорошестью». Зато хороший программист поймет другого хорошего программиста с полуслова, если они говорят о работе.
                    • 0
                      Не знаю за что вам поставили минусы. Полностью согласен с тем что вы пишете, т.к. перед глазами есть несколько примеров таких «программистов»
                      1) Да, они проводят «собственные исследования», тратят на это дни и часы, вместо того чтобы просто спросить коллег или тимлида. Или поискать готовое решение. В итоге это приводит к нерациональной трате времени, затягиванию сроков
                      2) Да, они бросаются что то фиксить или делать новую задачу, даже не получив подтверждения от тимлида. «Зачем, ведь всё равно нужно будет это делать?» Не обязательно. Но время уже потеряно
                      3) Они хорошо общаются. Но зачастую они общаются слишком много. Обсуждение занимает 1/2 рабочего времени. И зачастую это обсуждение, без которого можно было бы и обойтись. В итоге — опять практически бесцельно потраченное время.
                      • 0
                        Думаю, это вопрос крайностей.

                        Как там говорится, наши недостатки — это продолжение наших достоинств?
                    • +3
                      читая очередную статью подобного типа мне хочется попросить автора назвать хотя бы пару тех самых «великих программистов» :) чтобы хотя бы просто знать на что «равняться» и просто удостовериться в серьезности суждений этого автора.
                      за перевод спасибо, в любом случае было интересно почитать :)
                      • +28
                        Хороший программист он как плохой, только хороший.
                        • 0
                          — Ты закат видел?
                          — Видел…
                          — Вот точно такой же, только зеленый.
                          (с)
                        • +13
                          Я работал со многими программистами на протяжении долгих лет

                          Господи, да судя по его резюме он начал серьезно работать только с 2008. Где долгие года то?
                          • +18
                            Может при работе с выдающимися программистами год идет за два?
                            • +3
                              Тогда с плохими год за три, приходится ведь делать многое за них.
                            • 0
                              Видимо, эти 5 лет показались ему очень долгими…
                              • +1
                                О, да я тоже, оказывается, «долгие годы» программирую? Классно :)
                                • 0
                                  Могу ошибаться, но чтобы взаимодействовать с программистами, не обязательно работать. Например, в том же университете, обычно, есть преподаватели, сокурсники и т.п.
                                  Кроме того, есть ещё и фриланс, о котором, не знаю, есть ли смысл писать в резюме?
                                • +3
                                  Хороший программист — это как хороший инструмент: надёжен, предсказуем, поддаётся заточке.
                                  Всё остальное — не так важно.
                                  • –1
                                    Тогда нож — программист.
                                  • –4
                                    Я в шоке от первых двух комментариев. Один лучше другого.
                                    • +7
                                      Даже не знаю что сказать тогда про ваш комментарий — ну просто кладезь полезной информации.
                                      • –11
                                        image
                                        • –1
                                          И не говорите
                                          • –1
                                            Это что за формула?
                                            • +1
                                              Полный лагранжиан Стандартной модели, кладезь полезной информации.
                                              • 0
                                                Если знать, что за значки. Что это за формула, например, я знаю. А вот как расшифровать многие коэффициенты и индексы — не очень.
                                      • 0
                                        Вы так пишите, как будто плохие программисты это что-то плохое.
                                        • –2
                                          Опытный программист = хороший программист.
                                          • +4
                                            Параллельные понятия. Между ними есть корреляция, но не единичная.
                                            • 0
                                              Совершенно верно. Помнится приходил на собеседование человек лет эдак 38 с 15летним опытом программирования.
                                              Так вот его код был чем-то вроде плохих бородатых анекдотов из еженедельных бесплатных газет.
                                              • 0
                                                В моем понимании опыт в программировании не измеряется годами, но именно опыт определяет хорошесть
                                                • +1
                                                  Поясните, пожалуйста, в чём в вашем понимании измеряется опыт?
                                                  • –1
                                                    Меня как-то угораздило поработать в банке, с пол года выдержал и уволился хотя по деньгами перспективы были неплохие. Там было много специалистов с «опытом» в годах 10+ лет, однако этот опыт ограничивался насколько я понимаю поддержкой нескольких древних систем, разработки минимум и желания разрабатывать тоже. Так вот я не могу назвать таких людей опытными разработчиками. Допускаю что лет в 40 в банк пойти возможно и неплохо, но раньше как-то скучно совсем.

                                                    То есть в моем понимании опыт определяется тем какими задачами/проектами ты занимался, а не просто годами. Можно иметь 3-4 года опыта, при этом сменив несколько мест работы и поработав с разными задачами, а можно 15+ унылого ковыряния в легаси коде.
                                                    • +1
                                                      Т.е. я правильно понял, что в вашем понимании опыт измеряется количеством различных решённых задач?
                                          • –1
                                            Как совмещается это:
                                            Они проводят собственные исследования

                                            и это:
                                            Хорошие программисты знают, что надо сначала поискать, прежде чем пытаться решить проблему.

                                            ?
                                            Обычно такие «хорошие» программисты потом не могут ответить что и как работает, потому что взяли все готовенькое.
                                            Как там говорил Эйнштейн? Все знают, что это сделать невозможно, но потом появляется какой-то невежа, который этого не знает и делает. Вот именно так и поступают хорошие программисты
                                            • 0
                                              Хороший программист это тот кто умеет быстро учиться и коммуницировать, приятен в общении а так же не перекладывает ответственность на коллег, не устраивает истерик, склок и грызни. Современные инструменты разработки меняются слишком быстро, поэтому хорошие знания на каком то этапе их развития не гарантируют успехов в будущем. Мне слишком хорошо знакомы «гении» научившиеся чему то когда то но напрочь отказывающиеся от нового, которые пользуясь своим авторитетом тянут всю команду назад не позволяя внедрять что то новое, высмеивают новичков с интересными идеями (не дай бог кто подумает что он умнее меня), сидят и чахнут над кучей своего авторитета. Не сотвори себе кумира в команде, часто молодой, начинающий программист (который никак не подходит под критерий хорошего по определению автора) высказывает идеи дающие 100 очков вперёд корифеям. И задача тимлида не дать таким «корифеям» править бал в команде. Иначе продукт будет просто погублен. В команде есть понятие коллективного разума, если кто то чего то не знает или недопонимает то при правильно настроенной коммуникации этот недостаток будет устранён/исправлен. Поэтому для меня гораздо важнее понятие хорошей команды нежели отдельных личностей в ней. Хорошие знания отдельного программиста важны но не являются решающими, решающим является коллективный разум который базируется на способности к общению и обучению членов команды.
                                              • 0
                                                У меня создалось ощущение, что вы пытаетесь противоречить автору, а по сути всего лишь дополнили описание с точки зрения команды. Хорошие идеи не делают хорошего программиста хорошим. Речь шла о подходе хорошего программиста к воплощению этих идей. Я ещё не видел ни одного хорошего программиста. Все хороши по своему, а хорошая команда скрывает недостатки отдельного.

                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.