Курсы программирования - выключите свет, они на свет лезут!

В давние времена, когда деревья были зелеными, а ЭВМ - большими, бородатые чуваки придумали писать софт не сразу в кодах, а на чем-то более удобоваримом для среднестатистического человека - ассемблере. После такого прорыва - количество людей, занятых в индустрии, несколько подросло - но еще не вышло за лаборатории и прочие университеты. Придумали язык Си, написали стандартную библиотеку под него, появились всякие BASIC и прочие Pascal, Java, PHP вот это все. Продвигалась идея простоты синтаксиса, автоматического управления памятью - в общем, все то, что принято определять максимой “Каждая кухарка должна научиться управлять государством”. Случившийся в конце 90-х пузырь доткомов, и плавно перехвативший эстафету пузырь стартапов, вебдваноль и рестсервисов породил огромный спрос на программистов, тестировщиков, дизайнеров ui-интерфейсов и прочих околоайтишных специальностей. А спрос, как известно, рождает предложение. Поскольку для того, чтобы стать программистом - кроме компьютера и знаний - ничего особо не надо, это практически профессия с околонулевыми финансовыми вложениями - в нее поперло множество странных людей. Вопросом стало лишь получение необходимых знаний и умений.

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

  • численные методы вычисления
  • дискретная математика
  • теория вычислительных систем
  • математическое моделирование сложных систем
  • операционные системы и среды

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

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

Ввиду разнообразия (которое часто путают с ненужностью) областей знаний, с которыми приходится иметь дело в ВУЗе (религиоведение, история, философия, деловой украинский язык) - развитие студента происходит относительно гармонично, без перекосов - то есть ситуация, когда человек например знает про теорему Коши - но понятия не имеет про эпоху правления династии Мин - маловероятна. Ну если вы не айсед конечно. ВУЗ дает то, что принято обозначать как “интеллигентность”.

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

  • знание делового английского языка будет полезно для того же написания резюме или общения с менеджментом заказчиков
  • философия может подойти в беседе с умным и образованным человеком, который может заинтересоваться в заключении контракта с вами - и вы получите этот контракт за неспешным обсуждением Канта или Геделя.
  • знание определенных разделов математики, как-то теории чисел - позволит быстро и качественно порешать 200+ задач на Project Euler и пройти интервью в Google или JetBrains.
  • понимание принципов функционирования ЭВМ позволит на ровном месте получить прирост производительности, всего лишь вынеся операции с временными файлами в tmpfs.

Следует понять, что программирование само по себе - как и математика - бесполезно. Практическое применение оно находит в решении практических же задач, которые связаны с разного рода деятельностью - например, знание размеров стихосложения помогают в написании алгоритмов data mining для нахождения похожих текстов песен. А знание лингвистики и базовой грамматики естественных языков позволяет писать эффективные алгоритмы для natural language processing. Есть еще вариант разработки продукта на стыке наук - например, те же самые генетические алгоритмы. Да и вообще, широкий кругозор позволяет под другим углом взглянуть на какую-то проблему, и вместо решения “в лоб” - применить изящное и элегантное решение. К примеру, количество разложений числа на слагаемые намного удобнее считать через перемножение простых множителей числа, чем “в лоб”. А NP-полную проблему решить кроме как “в лоб” вообще невозможно, равно как проверить регулярными выражениями парность скобок в строке.

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

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

Теперь, когда обрисована общая модель получения необходимого образования - можно перейти к курсам. Еще в конце нулевых я тихо и громко охуевал от того, что приходит на интервью после окончания компьютерных курсов. Назвать эти тела программистами нельзя было ни с какой стороны. Если выпускники местечковых ВУЗ-ов могли написать какие-то простые вещи - свежеозавылупленые товарищи из той самой академии не могли связат два и два. Ну то есть в принципе - за 5 лет и более 50 собеседований тех, кто вообще прошел отбраковку резюме - 0 кандидатов в сухом остатке. Причем самым сложным вопросом на интервью было “напишите пожалуйста функцию, выполняющую реверс массива целых чисел без копирования во второй массив, in-place”. А уж какие перлы можно было выслушать на вопрос “А как по-вашему, что лучше - инкапсуляция или полиморфизм?”. Сравнивали, на полном серьезе.

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

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

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

Резюмируя

Программирование - это тяжелая, обременительная - но очень крутая и доставляющая массу удовольствия профессия. Для того, чтобы быть хорошим программистом - недостаточно компьютерных курсов, в которых вам продадут воздух за ваши деньги - нужно знать дофига смежных дисциплин, а иногда - и вовсе не смежных. И не стОит презрительно плевать сквозь зубы в сторону ВУЗ-ов - учебные программы там составляли далеко не дураки (в большинстве случаев), недостающие вещи можно и должно изучать самостоятельно. Любая концепция и технология в программировании устаревает в течение нескольких лет, и тут надо именно что бежать, чтобы остаться на одном месте. Соответственно никто и нигде вам не даст самые распоследние крутые штуки в Spring/Hibernate/MongoDB или там Haskell - только самостоятельно, только хардкор.

А курсы - ну, такое. Сравнительно честный отъем денег у населения, особенно под лозунгами “любого научим программировать за полгода”.