[Перевод] Программирование — занятие не для каждого
В последнее время в сообществе технарей набирает силу идея, согласно которой все должны учиться программированию. Но тут есть одна проблема: программирование — это не новая грамотность.
Если вы периодически уделяете внимание культурологическим аферам Кремниевой Долины, то несомненно слышали о движении «Учись программировать» («Learn to Code»). Политики, некоммерческие организации вроде Code.org, и даже бывший мэр Нью-Йорка Майкл Блумберг занимаются пропагандированием того, что они рассматривают в качестве навыка, который скоро будет необходим всему трудоспособному населению.
Возможно, отчасти это и так.
Но реальная картина получается несколько сложнее.
Мы живём в сверхконкурентном мире, в котором люди прибегают к любым средствам, лишь бы свести концы с концами. И совершенно нечестно продавать программирование как билет на экономическое спасение для масс.
Возьмём буткемпы для программистов. Успех программных инженеров из Кремниевой Долины превратился в пример для подражания, в мейнстрим, и сегодня многие мечтают создать стартап или стать инженером. Телеканал HBO показывает нам программистов, не достигших тридцати, которые по ночам набивают код, при этом зарабатывая миллионы долларов. Американская общественность очарована такими персонажами, как Элон Маск и Марк Цукерберг, которые, казалось бы, в одночасье зарабатывают целые состояния. Лихорадка программирования проникла даже в Белый Дом, и президента Обаму подталкивают к тому, чтобы включить информатику в общеобразовательную программу.
И по необъяснимой причине не только буткемпы и политики поощряют людей учиться программировать.
Мощный хор голосов вторит этой идее из всех слоёв общества, от Голливуда до светил науки и технологий. Но несмотря на эту растущую эйфорию, я с большим скептицизмом отношусь ко всем этим буткемпам. Хотя в нашей культуре и сформировался крайне привлекательный образ Кремниевой Долины, а глянцевые брошюрки буткемпов обещают хорошо оплачиваемую работу, многие из этих организаций не аккредитованы, они не публикуют статистику вакансий и не заботятся о трудоустройстве своих выпускников. Да, есть немало буткемпов, заключающих соглашения с компаниями-работодателями, но куда больше таких, которые управляются продавцами чудесной панацеи, наживающимися на отчаянии среднестатистических американцев.
Не поймите меня неправильно: я уверен в том, что навыки программирования и разработки действительно важны. Но только в соответствующем контексте, и только для тех людей, кто готов потом и кровью добиваться успеха в этом деле. То же самое можно сказать и о многих других навыках. Так что я призываю всех учиться не программировать, а глубоко погружаться в предмет.
Если всё внимание сосредоточено на коде, то задача выбора «правильного» метода решения проблемы заслоняет собой важность понимания самой проблемы.
Прежде чем начать работу над программным решением какой-либо проблемы, мы должны решить, что же она собой представляет — и вообще проблема ли это. Если мы позволим себе зациклиться на её решении с помощью кода, вне зависимости от того, относится эта проблема к программированию или нет, и упустим из виду причину, то мы ничего не выиграем. У меня есть близкий друг из Стэнфорда, который когда-то стал победителем международного чемпионата по программированию Ассоциации вычислительной техники. И он говорит, что самое важное, чему он научился за время проведения чемпионата, это необходимость глубокого понимания проблемы, которую ты пытаешься решить.
Вы должны спросить себя «Существует ли проблема?» и «Можно ли применить принцип Фейнмана-Тафта для объяснения этой проблемы, чтобы вас могли понять другие?».
Мой друг говорил мне, что даже в элитных школах ученики лишь один раз читают задание с описанием проблемы, а затем сразу же принимаются писать код. В тот год, когда мой друг выиграл чемпионат, он узнал, что даже эти элитные ученики кидаются решать сложные задачи, используя единственный инструмент — программирование. А он написал код лишь после того, как тщательно обдумал поставленную задачу. Почти всё время, выделенное на решение задачи, он потратил на обдумывание. И принялся писать код лишь за несколько минут до окончания.
Он стал чемпионом.
Он знал, что торопливым набором кода задачу не решить, нужно подойти к решению хладнокровно и собранно.
Чрезмерное внимание, уделяемое набору кода, не учитывает трудное положение, в котором оказались современные разработчики.
В этой отрасли технологии сменяются быстро.
Всего несколько лет назад я использовал Objective-C, а теперь пишу исключительно на Swift. Сегодня работу ищут разработчики, которые не написали ни строчки на Objective-C. Swift легче в изучении, безопаснее, он использует современные парадигмы разработки, и он гораздо элегантнее Objective-C. Это замечательно, что новым разработчикам не приходилось иметь дела с недостатками Objective-C, но здесь не берутся в расчёт суровые реалии профессии.
Разработчики должны обучаться быстро, при минимальном контроле и с чуть большей мотивацией, чем грохот гильотины увольнения. Кто-то скажет, что это лишь одна из издержек профессии. Но если современные разработчики разочаровываются и начинают отставать —, а есть достаточно признаков, что так и есть — то зачем вдохновлять людей ввязываться во всю эту неопределённость? Что произойдёт с человеком, который днями и ночами изучал Objective-C только для того, чтобы ужаснуться анонсированию Swift на WWDC 2014? Будут ли они продолжать программировать на том, что быстро превращается в маловостребованный язык, или начнут всё заново? Если вам нет тридцати, то вряд ли столкнётесь с большими затруднениями. Но если вам нужно кормить семью и оплачивать счета, то это превращается в титаническую задачу.
В подобных ситуациях люди сталкиваются со всеми этими трудностями, не обладая глубокими знаниями в программировании или проектировании.
Если вы изучаете программирование, то вам будет нелегко начать зарабатывать этим деньги.
Серьёзно.
Я потратил на самообучение больше года, прежде чем смог стать фрилансером. И заработок был невысокий. Я провалил бессчётное количество собеседований, потому что у меня не было диплома программиста.
Бывали времена, когда мне негде было жить, и приходилось полагаться на доброту друзей. Было много ночей, когда я хотел всё это бросить. Но я нашёл в себе силы продолжать.
Это была — и есть — настойчивость, именно она позволила мне удержаться в этой сфере.
Правда в том, что нельзя просто так взять и заняться разработкой, даже в качестве стажёра. Вам понадобятся связи, люди, которые за вас поручатся, нужно будет поддерживать аккаунт на GitHub, и многое другое. Несмотря на улучшение ситуации с равенством возможностей, если вы относитесь к недостаточно представленному меньшинству, то вам нужно изначально быть вдвое лучше, чем все остальные. И это лишь для того, что выдержать конкуренцию.
Блюстители и привратники есть везде. Это и «выпускники Лиги Плюща», которые верят, что вопросами вроде «Как вы инвертируете бинарное дерево» можно оценить чью-то техническую подкованность. Это и менеджеры проектов, обожающие устраивать тесты с помощью маркерной доски (признаюсь: у меня есть несколько досок), и бесконечные HR-менеджеры, составляющие требования по вакансии наподобие »5 лет опыта программирования на Swift» (подсказка: Swift появился в 2014). Все эти люди так или иначе будут стоять у вас на пути к приличной работе.
Насколько мне известно, обойти их не получится, придётся играть по их правилам, даже если эти правила нечестные.
Если вы действительно хотите стать программным инженером, то не позволяйте мне — или кому бы то ни было — становиться на пути к вашей цели. И не позволяйте мешать вам всяким традиционным ограничениям, вроде системы образования. Не существует правильных и неправильных способов достижения ваших целей.
Но при этом не теряйте связь с реальностью и не подпадайте под очарование романтики Кремниевой Долины. Это не чудесное средство, которая избавит вас от долгов. Вам придётся привыкнуть к мысли, что вы тот, кто решает проблемы, а не просто разработчик «заполните-от-сих-до-сих». Так же вы должны смириться с тем, что в любой момент может понадобиться изучить новый фреймворк или язык программирования, и если у вас нет формальных дипломов, то вам придётся сражаться за получение работы.
Разработка ПО — дело прибыльное, но будет очень непросто трансфирмироваться из «кодера» в «инженера».
Если проявите упорство, то сможете изменить не только свою жизнь, и весь образ мышления.