Обучение программированию никогда не было проще. Такие веб-сайты, как Codecademy, Code School и Khan Academy, нацелены на обучение навыкам программирования для всех уровней способностей. Также никогда не было так легко найти работу в сфере программирования, поскольку большинство предприятий переходят на цифровые технологии, чтобы лучше продвигать и продавать свои продукты в массы, создавая огромный рыночный спрос на квалифицированных разработчиков программного обеспечения. Если у вас когда-либо был профиль на LinkedIn и вы рекламировали себя как разработчика программного обеспечения/веб-сайтов/мобильных устройств, вы, возможно, испытали на собственном опыте силы рынка, когда кадровые агентства изо всех сил пытаются представить вас работодателям, которые предлагают щедрое вознаграждение, бесплатные обеды и пиво по пятницам, а также рабочее место, где разрешено проживание с домашними животными и многие другие потрясающие преимущества.

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

1. Хакеры предоставляют решения в кратчайшие сроки. Разработчики предоставляют решения в максимально возможном качестве.

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

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

Зачем нужна эта строка кода?

Нельзя ли эти две строчки кода написать в одну?

Не сломается ли этот код (функция XXX) (вставить какую-то другую часть кодовой базы, не затронутую изменением программиста)?

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

2. Хакеры в первую очередь кодеры. Разработчики в первую очередь планируют.

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

Было время, когда единственный и неповторимый Марк Цукерберг объявил Путь хакера де-факто подходом Facebook к разработке своих продуктов. Слоган Hacker Way — Двигайся быстро и ломай вещи — поощряет очень быстрый цикл разработки, при котором функция выпускается, как только она становится доступной, часто без особого тестирования. Я никогда не был сторонником их подхода, и мне кажется, что Facebook отказался от «Пути хакера в пользу более тщательного тестирования и более медленного развертывания продукта, которые типичны для более традиционного процесса разработки программного обеспечения. Возможно, выпуск обновлений с головокружительной скоростью мог догнать их в виде возросшего недовольства пользователей? Можно только догадываться.

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

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

3. Хакеры — реализаторы. Разработчики являются фасилитаторами.

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

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

Вывод

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

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

Итак, лучше быть хакером или разработчиком? Ответ на этот вопрос обычно зависит от обстоятельств, связанных с вашим проектом, но я призываю вас принять мышление разработчика в вашей повседневной работе, особенно если вы серьезно относитесь к своему ремеслу. Мое личное эмпирическое правило заключается в том, что если вы не можете четко представить, как вы собираетесь писать свой код от начала до конца, вам следует изучить и спланировать свое решение, прежде чем начинать писать какой-либо код. Как гласит старая поговорка: если не спланировать, значит спланировать неудачу. Это не менее верно в отношении разработки программного обеспечения.

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