[Перевод] Научиться программировать сложнее, чем кажется

03952f9b74474fa5837b758f5e9dabb1.JPG
Просто «El clasico»

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

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

Средства массовой информации не перестают освещать тему нехватки квалифицированных программистов («программистов», «кодировщиков», «разработчиков ПО», поскольку все термины означают одно и тоже, я буду использовать из как взаимозаменяемые). Постоянно ведутся споры по поводу низкого уровня квалификации программистов. По сути мы просто не в состоянии подготовить кадры, соответствующие «солидным запросам завтрашнего дня». Вот что пишет The Telegraph:

«Согласно данным Научного Совета, к 2030 году количество специалистов в сфере информационно-коммуникационных технологий вырастет на 39%, а в отчете О2 за 2013 год отмечалось, что для удовлетворения спроса на такого рода специалистов в период до 2017 года потребуется порядка 745 000 новых сотрудников.

Кроме того, по результатам исследований, проведенных в прошлом году City & Guilds, три четверти работодателей из сферы IT, компьютерных и информационных услуг отметили явную нехватку квалифицированных кадров, в то время как 47% опрошенных заявили о неспособности действующей системы образования подготовить хороших специалистов».
По мнению большинства респондентов, проблема возникла вследствие нехватки соответствующего обучения. Наши учебные заведения выпускают мало программистов. Например, Иветт Купер, представляющая интересы высшего эшелона лейбористской партии, в своем интервью для The Guardian прокомментировала сложившуюся ситуацию следующим образом:

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

Бытует мнение, будто начать изучать программирование из-за серьезного отбора на соответствующие курсы и факультеты не так-то просто. Вот что по этому поводу пишет the Guardian:

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

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

Как следствие, в настоящее время появилось несколько инициатив в поддержку программирования. Правительство Великобритании объявило 2014 «Годом программирования»:

image

Лозунг гласит: «займись программированием в этом году, это проще, чем ты думаешь». В своем интервью для Newsnight, исполнительный директор кампании, посвященной Году программирования, Лотти Декстер, уверяет, что можно «вникнуть за день». На сайте неправительственной организации Code.org, «посвященной вовлечению широкой общественности в процесс изучения информатики», находим следующую цитату: «Code.org ставит своей задачей развенчать мифы о сложности программирования».

image

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

А как же традиционное официальное образование? Можно ли почерпнуть полезную информацию о подготовке программистов в университетах?

С учетом дефицита квалифицированных кадров можно предположить, что выпускникам факультетов информатики не грозит безработица. Увы, похоже, не все так просто. Исследователи из Агентства статистики высшего образования выяснили, что молодые специалисты, изучавшие компьютерные технологии, имеют «дурную славу из-за самого низкого процента занятости по сравнению со студентами другого профиля». Почему же? Забавно, но на лицо несоответствие между реальными навыками аспирантов и квалификации, которой от них ожидают работодатели. Или, если говорить точнее, после трех лет обучения информатике они не умеют программировать. Интересную идею озвучил в своем комментарии к этой статье аноним, преподаватель университета:

«Каждый год одно и то же — хорошо, если у трети из них [студенты информатики] есть способности, необходимые будущим программистам. У трети из них знания настолько скудны, что они, несомненно, удивились бы, узнав, что прошли не просто курс в пару недель, изучая специфику профессии, но и наполовину не приблизились к возможной сертификации. Если вы решите протестировать их на наличие серьезных навыков программирования, гарантирую просто провальные результаты. У нас не принято заваливать студентов, поэтому приходится искать варианты для продолжения обучения, даже если у студентов, действительно, нет необходимой квалификации».

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

«В частности, большинство претендентов не может изучать программирование: 30–60% абитуриентов, желающих приобщиться к тайнам информатики на факультетах различных университетов, просто проваливают первый курс».

Помните, мы говорили об ускоренных компьютерных курсах. Только что мы увидели, как обстоят дела со студентами, поступившими в университет, чтобы изучать информатику. Здесь в некотором роде должны срабатывать механизмы естественного отбора. Если даже студенты демонстрируют, мягко говоря, низкие результаты, то что говорить о других желающих — кандидатах в «будущие программисты», внимание которых привлекают такие экспресс-курсы?

Рассмотрим проблему с другой стороны. Попробуем выяснить, как учились программированию успешные профессиональные разработчики ПО. Прочитав вышеупомянутые заявления, можно предположить, что все они учились в дорогих, эксклюзивных школах. Но нет. Проанализируем результаты опроса разработчиков ПО, проведенного Stack Overflow в 2015 году. Обратите внимание: это международное исследование, но, думаю, его результаты актуальны и для Великобритании:

image
41,8% — самообразование;
37,7% — бакалавр, информатика (или смежная сфера);
36,7% — курсы повышения квалификации на предприятии;
18,4% — магистр, информатика (или смежная сфера);
17,8% — онлайн курсы;
16,7% — проекты по информатике (или в смежной сфере) в рамках обучения в университете, нет диплома;
6,1% — сертификация на производстве;
4,3% — другое;
3,5% — интенсивный курс программирования или специализированные вечерние курсы;
2,2% — доктор философии, информатика (или смежная сфера);
1% — репетиторство.

Только треть респондентов получила диплом по информатике или смежным предметам и почти 42%, самая большая группа, — самоучки. Я провел собственный небольшой и не совсем научный эксперимент на эту тему: принял участие в ежемесячном съезде .NET разработчиков здесь в Брайтоне, где быстренько опросил присутствующих. Так мне удалось узнать, что самоучек среди отличных программистов даже больше, чем свидетельствуют результаты исследований. Забавы ради я заодно провел и небольшой опрос в Twitter:

image
Вы программист-самоучка?
76% — Да
24% — Нет
101 голос.

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

image
У меня диплом по информатике, но все равно я на 95% самоучка. По крайней мере, если мы говорим о прикладных знаниях.

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

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

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

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

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

• «Вы можете изучить математику за день».
• Займитесь хирургической практикой в этом году. Это проще, чем вы думаете!
• skyscraper.org ставит своей задачей развенчать мифы о сложности архитектурного дела.
• «Сыновья и дочери шахтеров должны учиться на юристов».

Мой друг Эндрю Черри озвучил блестящую мысль на эту тему:

image
Народ! Покажите мне сферу деятельности, в которой станут тратить свое свободное время на то, чтобы провести бесплатные семинары для желающих пополнить ряды специалистов этой области. Не абсурд ли?

Ответ один: это сфера разработки программного обеспечения. Хотите стать врачом? Учитесь семь лет в медуниверситете.

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

Разработка программного обеспечения — несомненно, очень привлекательная сфера для трудоустройства. Работа хорошо оплачивается, в том числе и услуги мобильной связи для специалиста, плюс сама профессия интересна и приносит море бонусов. Одновременно возникают проблемы с имиджем. Впервые я столкнулся с такой тенденцией в университете в 1990-х годах. Я как раз получал диплом по социологии (да, я тоже программист-самоучка). Что касается социального статуса, мы, студенты других специальностей, смотрели на однокурсников-информатиков со снисхождением. Это был самый «не-клевый» народ в общежитии — в основном, парни, которые ужасно одевались. Если кто-то и обращал на них внимание, это было из жалости и отвращения. Когда перед защитой диплома я сказал своей девушке, что, возможно, займусь программированием, она воскликнула: «О, нет, что за новости. Оно тебе надо?» Если бы вы провели опрос в любой компании, состоящей из представителей среднего класса Соединенного королевства, и попросили бы сравнить, скажем, медицину, право, архитектуру и что-то вроде бухгалтерского учета с разработкой программного обеспечения, уверяю, последняя оказалась бы в категории рода деятельности с самым низким социальным статусом. Даже в сфере бизнеса или, по крайней мере, традиционных предприятий, разработка программного обеспечения воспринимается, как относительно низкооплачиваемый вид занятости средней руки, подходящий для подростков или низкоквалифицированных специалистов. Ужасно и то, что все эти курсы с лозунгами «учитесь программировать, это легко» лишь усиливают впечатление, будто разработка программного обеспечения — дело несерьезное.

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

image
Google: как стать врачом
Источники: Бюро трудовой статистики США; раздел профессии (август 2015)
Шаг 1: Получите степень бакалавра;
Шаг 2: Сдайте тест на поступление в медицинский колледж;
Шаг 3: Поступите в медицинский университет;
Шаг 4: Пройдите медицинскую практику;
Шаг 5: Получите лицензию.

Существует целый перечень ступеней, которые необходимо пройти для получения признанной профессиональной квалификации. Выполнив необходимые условия, вы становитесь профессионалом в соответствующей области. Я не имел в виду, что легко стать врачом, но всем понятно, как это можно сделать. А теперь спросите Google «как стать разработчиком программного обеспечения». Ответы, вроде того, что использовал я, сводятся к туманным банальностям: «изучите язык программирования», «поучаствуйте в проекте создания продукта с открытым кодом», «вступите в сообщество местных программистов». Нет ни четкого плана относительно построения карьеры, ни гарантий по поводу того, когда и станете ли вы вообще профессионалом, ни слова о том, удастся ли получить высокооплачиваемую должность в будущем.

image
Google: как стать разработчиком программного обеспечения
Удачи!) Вы сами по себе.

А теперь представьте себе человека с необходимыми способностями, который в школе был отличником и для которого сложные интеллектуальные задачи не представляют труда. Предложите ему выбрать: с одной стороны, карьера, например, медицина, нужно пройти несколько этапов — да, будет непросто, но вы хорошо сдадите экзамены и в итоге получите высокий статус и хорошо оплачиваемую работу. Или как насчет такого варианта: верьте, изучите кое-что самостоятельно, причем непонятно, что именно; попробуйте стать помощником, пополните багаж знаний — в большей степени методом проб и ошибок — и продолжайте двигаться к намеченной цели. Нет гарантий, что в конце концов вы получите высокооплачиваемую работу. И, кстати, пока вы еще не определились, весь мир будет думать, что вы изгой. Что бы вы выбрали?

Так может ли разработка программного обеспечения пополнить список традиционных профессий и установить высокую планку для специалистов области? Попытки сделать это уже предпринимались. Британское компьютерное общество (BCS), окрестившее себя «чартерным институтом IT», задалось проблематикой профессиональной квалификации и стандартов в этой сфере деятельности. Только незадача: подобную инициативу всячески игнорируют представители индустрии программного обеспечения. Даже если бы они приняли оформившийся орган всерьез, как проверить квалификацию специалистов? Как проводить экзамен? Существует не так много наработок по данному вопросу, ведь, не успев появиться, любой механизм быстро приходит в негодность из-за стремительного развития интернет-технологий. Возьмем, к примеру, объектно-ориентированное программирование. В 2000-х годах, феномен, казалось, закрепился в качестве базового элемента программирования, но, спустя 20 лет, для меня, и многих других пользователей очевидно, что этого делать не стоило. Как быстро будут изменяться стандарты и квалификации в сфере программирования в современных условиях? Думаю, быстро.

Тем не менее, в своей статье я хотел, в первую очередь, подчеркнуть, что программирование — род деятельности, требующий наличия определенных способностей, профессия, в которой немногие могут достичь успеха. Если в целях повышения квалификации, необходимо отсеивать тех, кто не сумеет освоить программирование, имеет ли значение, если кандидатов проверяют посредством устаревших методов, не имеющих отношения к современной практике? Может быть, предварительный тест на знание предмета должен подразумевать освоение одной из весьма сложных программ LISP? Что-то вроде Glass Bead Game для программистов? Нужно же узнать, способен ли человек программировать. А современные трюки можно освоить и позже. Проблема по-прежнему заключается в том, чтобы квалификацию сотрудников признавали в рамках соответствующей индустрии.

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

41,8% — самообразование;
37,7% — бакалавр, информатика (или смежная сфера);
36,7% — курсы повышения квалификации на предприятии;
18,4% — магистр, информатика (или смежная сфера);
17,8% — онлайн курсы;
16,7% — проекты по информатике (или в смежной сфере) в рамках обучения в университете, нет диплома;
6,1% — сертификация на производстве;
4,3% — другое;
3,5% — интенсивный курс программирования или специализированные вечерние курсы;
2,2% — доктор философии, информатика (или смежная сфера);
1% — репетиторство.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

© Habrahabr.ru