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

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

После разговора с @PrototypeAlex, где мы обсудили множество этапов, на которых мы видели разработчиков, я почувствовал вдохновение, чтобы их записать. За 30 лет программирования я прошел почти все стадии, описанные ниже, некоторые из которых были более болезненными, чем другие.

Можете ли вы узнать себя на любом из этих этапов? А что я упустил? Есть еще куча этапов, которые для меня невидимы; мы никогда не прекращаем учиться и открывать. Оставьте свои мысли ниже.

Копипастер

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

Что вы узнаете: вы понимаете, что единственный способ научиться программировать - это решать проблемы самостоятельно. Несмотря на то, что это замедлило вас, вы получаете доступ к Stack Overflow только пару раз в день. Ваши навыки программирования улучшились, и теперь вы работаете намного быстрее и меньше полагаетесь на чужой код.

Большой методист

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

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

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

Умный кодер

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

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

Комментатор

Для людей важно понимать ваш код, поэтому убедитесь, что он действительно хорошо прокомментирован. Каждые несколько строк вы объясняете, что происходит. Это так читаемо!

Что вы узнаете: вы понимаете, что часто комментарии неточно описывают, что делает код, и это на удивление затрудняет чтение. Вы решаете, что будете использовать комментарии, чтобы объяснить, почему код написан именно так, а не что делает код.

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

Рефакторинг кода

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

Что вы узнаете: прибыль, полученная от «устаревшего кода», - это то, на что выплачивается ваша зарплата. Сейчас вы поработали над несколькими базами кода и понимаете, что в мире не существует зрелой базы кода, которая местами не была бы ужасной; вы знаете, что всегда есть технический долг, а ретроспективно - 20/20.

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

100% приверженец

Ваш редактор настроен на автоматическую привязку кода к стандарту, и вы каждый раз запускаете метрики своей работы, прежде чем проверять ее, чтобы убедиться, что это «хороший код». Все, что вы пишете, делается на основе тестов, и ваши тесты имеют 100% покрытие. Вы чувствуете тепло и уют, зная, что вся ваша работа количественно великолепна.

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

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

Последняя горячность

Использование новейших технологий означает, что ваш код является передовым! Вам нравится пробовать все новое в своей производственной кодовой базе. У вас есть функциональный стиль программирования на Ruby, и вы впервые познакомились с NoSQL-сценой для своего приложения на основе форм. Эти новые технологии намного более производительны и элегантны. Это так увлекательно, и вы знаете, что приносите большую пользу своему работодателю; они не останутся позади в темных веках.

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

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

Пурист по образцам

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

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

Вы обнаруживаете, что теперь, усвоив эти шаблоны, вы можете перестать думать о «реализации X-шаблона» и просто кодировать, используя свою интуицию и опыт. Это позволяет писать много прагматичного кода. (И ваши коллеги тоже рады, что вы перестали говорить о шаблонах.)

Преждевременный оптимизатор

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

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

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

Оракул

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

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

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

Защитник

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

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

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