Сегодня быть программистом модно. Это почти так же сексуально, как быть спортсменом с идеальным рельефом или рок-звездой с гитарой наперевес. Еще 10-15 лет назад гиков гнобили и высмеивали, а сегодня все хотят быть, как они… Однако с тех пор поменялось не только восприятие – технологии сильно шагнули вперед. Оглядываясь назад, опытный разработчик Кен Мазаика признает, что быть новичком, который только учится писать код, теперь намного сложнее. А еще он выделил 6 препятствий на пути начинающего программиста, которые очень мешают жить.

“Если вы, так же, как и я, стали программистом еще до того, как интернет стал мейнстримом, в те старые-добрые времена, когда AOL спамил наши физические почтовые ящики CD-дисками, вы, наверняка, не заметили, как сильно изменился путь в программирование. И хотя интернет существенно облегчил нашу жизнь, обучение программированию сегодня – это процесс, совершенно отличный от того, через который я прошел в начале 2000-х.

Когда, черт возьми, стало круто быть программистом?

Когда я учился программировать в старшей школе, одноклассники говорили: “Он делает это, потому что плохо играет в футбол”. А сейчас подростков-программистов воспринимают чуть ли не как гламурных рок-звезд. С повсеместным распространением социальных сетей вроде Instagram и появлением технологических селебрити вроде Цукерберга, быть разработчиком сегодня стало чрезвычайно модно.

Как программистов представляли себе в 90-х Vs. Как их представляют сегодня

Как программистов представляли себе в 90-х Vs. Как их представляют сегодня

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

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

Проблема #1: Вы должны изучить HTML9 Responsive BoilerStrap JS (или любой другой JS-фреймворк, который сегодня в трендах на HackerNews)

HTML9 Responsive BoilerStrap JS – остроумная пародия на фреймворки, шаблоны и т.п.

Сегодня в коммьюнити то и дело возникает хайп вокруг очередной “величайшей и новейшей” технологии, которая на деле оказывается обыкновенной программистской причудой. Конечно, со времен Большого Взрыва программирование как сфера деятельности очень сильно шагнуло вперед, но до сих пор не существует единственной технологии – эдакой “серебряной пули” – которая разом решит все ваши проблемы.

Новичкам часто предлагают зарыться в решения проблем, которых они еще даже не понимают. Хайп может привести к тому, что кто-то начинает изучать вещи вроде Virtual DOM или Shadow DOM, не разобравшись, что такое обычный DOM. Когда новичок приступает к обучению, никто не говорит ему: “Научись ползать, прежде чем учиться ходить”. Вместо этого все твердят про следующую “величайшую и новейшую” технологию.

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

В общем и целом изучение последних новинок – не так важно. Но в комьюнити о таких истинах не принято говорить.

Проблема #2: Основы не очень секси

Есть набор вещей, которые вы никогда не увидите в трендах на HackerNews и очень редко – в вакансиях:

  • Структуры данных;
  • Связанные списки;
  • Деревья;
  • Поиск в глубину;
  • Алгоритм Флойда обнаружения циклов.

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

Глядя на “UnderbackJS” и прочие страшные вещи, перечисленные в вакансии, новички уверяются, что для получения работы они должны ориентироваться в последних трендах, а не разбираться в фундаментальных вещах, которые, на самом деле, важны в первую очередь.

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

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

Проблема #3: Сегодня люди (вроде бы) знают, что они делают

На своей первой работе в роли веб-девелопера я написал несколько отвратительнейших кодов. Фреймворки тогда только начали появляться, и все писали либо на PHP, либо на CGI. Фреймворки были нам всем относительно в новинку, так что я начинал примерно с того же уровня знаний, что и остальные.

Я допустил все возможные ошибки, и на моей следующей работе меня спросили: “Что, черт побери, вообще такое это твое модульное тестирование?”. Век живи – век учись. Разработчик внутри меня очень боится однажды узнать, что что-то из того, что я написал на заре своей карьеры, до сих пор живет где-то в дикой природе.

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

У членов этого комьюнити имеется багаж знаний объемом 10+ лет, который они всюду таскают за собой. Для них он подъемный, потому что они видели мир таким, каким он был в прошлом. И я очень надеюсь, что сегодняшним новичкам не придется прогрызать себе путь сквозь большой дерьмовый монолит, как это пришлось делать мне в 2008 году.

Проблема #4: Люди до сих пор понятия не имеют, что делают (и это нормально)

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

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

Я понятия не имею, что я делаю

Я понятия не имею, что я делаю

Когда я смотрю обсуждения с Аароном Паттерсоном, в которых он углубляется в исходный код на Ruby C или применяет RubyVM::InstructionSequence, чтобы выяснить, что происходит под капотом, или как реализуется маршрутизация на Rails с конечным автоматом вместо регулярных выражений, у меня плавится лицо. До сих пор. Просмотр таких обсуждений напоминает мне о том, насколько мало я знаю о внутренних процессах того, что делаю.

Проблема #5: Самые важные уроки в программировании постигаются в беспорядке

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

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

Проблема #6: В последнее время все как-то сильно усложнилось

Вот вам пример того, как все немного усложнилось на Ruby on Rails:

Как это было в 2008-м: Чтобы разместить свой сайт в интернете, нужно самостоятельно раскрутить сервер и настроить все компоненты: apache и mongrel.

Как это делают сегодня: git push heroku master.
Готово. Поехали.

Звучит так, как-будто процесс, наоборот, стал проще некуда. Но есть побочные эффекты в виде абстрактности системы, которые всплывают на ходу.

Или вот еще пример:

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

Как это делают сегодня: Нужна только одна строка кода в модели, после интеграции с чем-то вроде carrierwave/paperclip, которая делает за вас всю работу как по мановению волшебной палочки.

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

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

А, и еще, скорей всего, ваше приложение есть на GitHub в виде общедоступного репозитория. И там есть все API ключи, которые вы не хотите регистрировать. И вы должны оформить figaro gem. Это реально крутой способ хранить данные в переменных среды на вашем компьютере. Что такое переменные среды? Позвольте, я вам расскажу…

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

Итог

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

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