Я работал со многими программистами на протяжении долгих лет — некоторые из них были очень яркими, а некоторые — определенно «никакими». Недавно я имел удовольствие работать с несколькими высококвалифицированными специалистами, так что я потратил немного времени в размышлениях, чем же я восхищаюсь в них. Что делает хорошего программиста таким хорошим, а плохого — таким плохим? Или, немного коверкая русский язык, что делает хорошего программиста хорошим?
Исходя из своего опыта могу сказать, что «великолепие» программиста никак не связано с возрастом, образованием или финансовым состоянием. Это связано с тем, как вы действуете и, более детальнее, как вы думаете. Я заметил стойкий набор привычек у программистов, которыми я восхищаюсь. Более чем хорошее знание выбранного языка программирования, глубокое понимание структур данных и алгоритмов, более чем годы опыта работы, то, как они общаются, как они управляют собой и как они подходят к разработке — все это говорит об удивительном уровне их мастерства.
Конечно, быть хорошим программистом — это намного больше, и я не стану оценивать любого программиста исключительно по наличию (или отсутствию) этих практик. Но я опознаю мудрость, когда я вижу ее, и когда я вижу программиста, обладающего этими чертами, я думаю: «Этот человек действительно знает, что он делает.»
Они проводят собственные исследования
Или «семь раз отмерь, один раз отрежь». Или «погугли это».
Что ни говори, но большинство программистских проблем, с которыми вы сталкиваетесь, уже были решены в том или ином виде — Экклесиаст был прав, когда заявил, что ничто не ново под солнцем. В виде библиотек на гитхабе, записях в блогах, или всего лишь в контактах с опытными людьми. Хорошие программисты знают, что надо сначала поискать, прежде чем пытаться решить проблему.
Я видел даже великих программистов, спешащих за решением: но худшие программисты, с которыми я работал, никогда не консультируются с остальными, и как результат — проделывают огромное количество лишней работы или же решают задачи абсолютно неверным способом. И, к сожалению, позже они платят за свои ошибки.
Они читают сообщения об ошибках (и реагируют на них)
Это включает работу со стеком вызовов. Да, это сложно и некрасиво — но если вы не готовы сделать это, то как вы планируете понять, в чем проблема? Наиболее эффективные программисты, которых я знаю, не боятся докапываться до сути проблемы.
Наименее эффективные видят, что была ошибка, но даже не трудятся читать сообщение об ошибке. (Это звучит смешно, но вы удивитесь, как часто мне приходится сталкиваться с этим.)
Делая шаг дальше, можно сказать, что великолепные программисты видят проблему и чувствуют потребность ее решить. Чтение сообщений об ошибке для них всего лишь начало: они стремятся глубоко погрузиться в проблему, чтобы выяснить, что она из себя представляет и что пошло не так. Они не заинтересованы в перекладывании ответственности, они хотят найти решение. Они действительно несут ответственность.
Они обращаются к исходникам
Документация, тесты, люди: все эти вещи врут. Не преднамеренно, конечно. Но если вы хотите точно знать, как что-то работает, тогда вам надо посмотреть код.
Не бойтесь, если это не тот язык программирования, с которым вы на “ты” — если вы в первую очередь пишете на Ruby и предполагаете, что ошибка в одной из библиотек на Си, то открывайте эту библиотеку и изучайте ее. Да, вы можете не получить ничего. Но кто знает? Сделать хоть что-то — лучше, чем не пробовать ничего!
Если у вас нет доступа к исходникам, то, к сожалению, это становится тяжелее, но принцип остается в силе. Плохие программисты мало заинтересованы в изучении исходников, и в результате проблемы осложняют им жизнь гораздо сильнее чем тем, кто готов сделать некоторые исследования.
Они просто делают это
Хорошие программисты готовы действовать. У них есть особенность, которую бывает сложно контролировать: они реализуют решение как только выявляют проблему или видят новый feature request, иногда слишком рано и иногда слишком агрессивно. Но их инстинктивная реакция на проблему — решить ее сразу же.
Иногда это может быть хлопотно, но их энтузиазм является важной частью высокого качества их работы. Пока некоторые спорят или ждут, когда проблема исчезнет сама, хорошие программисты начинают решать ее.
Говоря проще (и, возможно, слишком очевидные вещи): если вы видите, как кто-то взволнованно уцепился за проблемы и начал работать над ней, то, скорее всего, у вас уже есть хороший программист.
Они избегают кризисов
У плохих программистов есть общая особенность: они склонны перепрыгивать от одного искусственного кризиса к другому, никогда по-настоящему не разбираясь в причинах первого. Они перекладывают вину на сторонние части своих программ, проводя часы в отладке того, что работает отлично. Они дают эмоциям взять верх над собой, доверяя интуиции, а не тщательному, детальному анализу.
Если вы в спешке проноситесь сквозь проблемы (или даже рассматриваете каждую проблему как катастрофу мирового масштаба), то вы наверняка делаете ошибки или не решаете основные вопросы. Великие программисты находят время, чтобы понять, что пошло не так, даже если столкнулись с настоящей катастрофой. Более того, они рассматривают регулярные проблемы как задачи, которые должны быть решены. Таким образом, они решают большинство проблем более аккуратно, и делают это, не накаляя атмосферу внутри организации.
Они хорошо общаются
В конце концов, программирование — это одна из форм коммуникации. Способность кратко и выразительно выражать свои мысли так же важна в написании кода, как и в написании прозы — я всегда считал, что тот, кто сможет написать содержательное письмо, элегантный статус-отчет или даже просто эффективную записку будет лучшим программистом чем тот, кто этого сделать не может.
Это применимо и к коду. Конечно, можно написать одну строчку из круглых и фигурных скобок, однобуквенных функций, но зачем? Если это никто не понимает, то в чем смысл так поступать? Хорошие программисты находят время, чтобы правильно донести свои идеи в любой среде, в которой они оказываются.
Они увлечены
Я думаю, что это должно быть наиболее важным аспектом хорошего программиста (и, возможно, эта часть применима не только к компьютерным наукам).
Если вы по-настоящему заботитесь о том, что вы делаете, если это не только работа, но и хобби, интерес и даже восхищение, то у вас есть большое преимущество перед кем-либо еще в своей области. Великие программисты всегда программируют. Их коллеги будут работать по 8 часов в день — не только на работе, но и в области программирования вообще. У них нет проектов по программирования на стороне или большого интереса во вкладе в сообщество. Они не пробуют новые хитрые методы и безумные языки программирования просто чтобы увидеть, как они работают.
Когда я вижу программиста, который делает свой собственный проект-хобби на выходных, который вовлечен в создание утилит, которыми он пользуется каждый день, который очарован новым и интересным, то тогда я точно знаю, что вижу удивительного человека. В конечном итоге, великие программисты выбирают свою профессию не только как способ зарабатывания денег, но и как возможность сделать жизнь лучше. Я думаю, что это и делает хороших программистов теми, кто они есть. Для них кодинг — это способ к изменению мира. И это я считаю достойным уважения и восхищения.
Автор: vovochkin