Войти в айти — советы от программиста по призванию

3d1038ddd806378d0886cd03c266aad9.png

Дисклеймер. Сначала хочу выразить свое личное отношение к тем, кого в индустрии порой презрительно называют «вайтишниками». В середине 80-х мой отец из инженера переквалифицировался в рабочего-наладчика на заводе. Причина проста — платили банально больше (особенности тарифных ставок на советских предприятиях, ага). Поэтому, с таким семейным анамнезом, я крайне далек от мысли кидаться камнями в людей, решивших в 35–40 лет пойти в айтишники, потому что там «платят много». Наоборот, я им симпатизирую. Данная статья как раз попытка облегчить такого рода переход и снизить риски.

Для начала определимся с терминами. Что такое «программист по призванию»? Нет, я не имею в виду здесь каких-то легендарных гениев программирования и не собираюсь уподоблять программистов Моцарту. Под программистом по призванию подразумевается человек примерно следующего пути:

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

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

  • Естественно, по окончании вуза он угодил в айти-отдел какой-нибудь фирмы и там разрабатывает программные системы.

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

Вайтишники же — это люди, как правило, за 30 лет, которым надоела их профессия, или же она нравится, но денег на ней платят не слишком много, и они решили податься в айти. Почему именно в айти? Так-то нейрохирургам и кардиохирургам платят (по крайней мере в США) больше, чем рядовом айтишнику. Но там надо 8 лет в вузе отпахать, и потом интернатура и прочие прелести.

Таким образом, ключевых отличий два — возраст и мотивация. Возраст является не таким серьезным препятствием в плане когнитивных способностей и энергии, в свое время я даже написал по этому поводу заметку насчет программистов после 35. Более важное отличие в мотивации. Именно отсюда проистекает прискорбное презрительное отношение людей, которые пришли в индустрию молодыми, потому что было интересно, к людям, которые подались в индустрию в среднем возрасте, потому что «денег надо».

На самом деле ключевых отличий три — еще одно заключается в том, что у взрослого, в отличие от подростка, проводящего дни за компьютером, не так много свободного времени, чтобы что-то освоить. Есть семья, которая что-то там требует, есть внеурочные и т.д.

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

Онлайн-курсы — оно стоит того?

К онлайн-курсам стоит подходить крайне осторожно. И я говорю это, как человек а) сам проходящий онлайн-курсы на той же Coursera; б) причастный к созданию парочки онлайн-курсов. На это есть ряд причин:

  • Отсутствие экспертизы. Не у создателей курса, а у Вас. Поскольку Вы не программист, Вы не сможете, во-первых, сходу понять, учат ли толком на этом курсе, во-вторых, воспользоваться полностью всем, что этот курс дает, если он толковый.

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

  • Отсутствие мотивации и скрытый саботаж. Одно дело, когда курс создан профессорами MIT или Гарварда или наших топовых вузов. Совсем другое дело, когда он создан программистами из какой-нибудь маститой корпорации. Учитывая тренд на массовые увольнения в IT-отрасли в последние годы, как Вы думаете, сильно склонен такой преподаватель подготовить себе замену? Я не говорю, что этим страдают все онлайн-курсы, но я видел примеры того, как преподаватели курсов вполне сознательно саботировали созданный курс, неимоверно облегчая получение сертификата и т.д.

  • Повышение входного уровня. Это заявление может показаться странным в контексте того, как плодятся нынче онлайн-курсы, обещающие научить любого с нуля за шесть месяцев. Но на самом деле не очень. Смотрите, я выучился подростком программировать на основе 3–4 вузовских учебников и справочников по программированию. Причина того, что я это сумел, заключалась в отсутствии интернета в широком смысле слова. Поэтому учебники приходилось писать достаточно исчерпывающе, чтобы по ним действительно можно было научиться. Это примерно как с врачом — оперировать втихаря на дому подросток не может, поэтому медвузы обучают студентов с нуля. Курсы же неявно исходят из того, что ученик уже должен много всего сам уметь, и упоминают это очень расплывчато.

Собственно, большая часть этих проблем описана в статье на Хабре «Что не так с онлайн-курсами». Рекомендую прочесть ее, а также комментарии к ней, включая мой собственный.

Я бы сказал так — перед тем, как переть на платные курсы по «войти в айти», стоит для начала опробовать бесплатные, особенно те, где можно не только видосики посмотреть.

https://ocw.mit.edu/courses/6–0001-introduction-to-computer-science-and-programming-in-python-fall-2016/pages/syllabus/ — ну это классика классик от MIT, и есть еще задачи, которые можно выполнить. Диплом и обратную связь с преподавателями вам на халяву не дадут, конечно. Сейчас он на питоне, но можете почитать каноничный курс на диалекте лиспа! И попробовать сделать курсовой проект.

https://www.youtube.com/playlist? list=PLawfWYMUziZqyUL5QDLVbe3j5BKWj42E5 — CS50 от Гарварда на русском. Огромное спасибо тем, кто перевел. Отдельно рекомендую вариант на Питоне, где еще и problem set есть.

Мне кажется, этого будет вполне достаточно, чтобы понять, во-первых, по душе ли вам это айти. Во-вторых, после прохождения этих халявных курсов платные от Яндекс и прочих будут проходить куда эффективнее.

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

Чего ждать от работы?

Еще один момент, который расхолаживает людей — они ожидают, что работа в IT не только лучше оплачивается, но и куда более интересная. Это не так. На 80 процентов она состоит из рутины (и 80 процентов — это еще очень оптимистичная оценка).

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

На чем практиковаться?

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

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

Хороший способ — попробовать сделать игру. Вот хороший пост на реддите на эту тему. Я дополню:

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

  • Попробуйте сделать какие-то простые игры прям на реально олдскульных элементах. Например, тот же тетрис с использованием старых графических библиотек под DOS (т.е. пишем сами в память, оперируем на C), c запуском на dos-эмуляторе. Почему так? Потому что современные языки типа Питона или Явы дают очень хороший буст для программиста благодаря сборщикам мусора и стандартным коллекциям типа множеств и словарей. Попробуйте сами разок спуститься на уровень ниже хотя бы на месяц, половить segfault и т.д. Подробнее о том, почему не стоит вкатываться в айти, поизучав именно Яву — в отличной статье The perils of Java schools. Или прочтите письмо Дейкстры по поводу того, как надо учить.

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

  • Вы офисный работник? Автоматизируйте свой процесс насколько можете. С помощью питона и иже с ними попробуйте классифицировать свои письма (при этом натаскать на классификацию самостоятельно, а не с sci-kit), автоматизируйте разборы своих файлов Excel и отправку писем куда-либо, или попробуйте распарсить какой-нибудь интересующий Вас сайт.

  • Сделайте нормальный набор курсовых проектов. Например, курс CS 323 от Йеля, описанный здесь — тут задания не в стиле «сделаем сайт», а в стиле «давайте сделаем свою усеченную командную оболочку Unix или сжатие ZLW». Такие задачи хороши тем, что их можно сделать за пару-тройку недель (т.е. цель не так далека, чтобы Ваш мозг впал в депрессию), и они дают очень хорошее представление о том, что лежит под капотом всех UI-инструментов разработчика. При вкатывании в IT в процессы сборки, CI/CD и т.д. эти знания незаменимы.

© Habrahabr.ru