Послание будущему программисту

Итак, вы решили стать программистом.

Возможно, вам интересно создавать что-то новое.

Возможно, вас манят большие зарплаты.

Быть может, вы просто хотите сменить сферу деятельности.

Не суть.

Важно — вы решили стать программистом.

Что же теперь делать?

КДПВ

И тут есть несколько подходов.

Первый: пойти в вуз на IT-специальность и получить профильное образование. Самый банальный, относительно надежный, крайне долгий, максимально фундаментальный способ. Работает, если вы еще заканчиваете школу, либо у вас есть средства, чтобы обеспечивать себя следующие от полутора (в лучшем случае, если вы все схватываете на лету и сможете начать работать на 2 курсе) до четырех (если совмещение работы с учебой не ваш конек) лет.

Что тут важно знать?


  • Необходимо правильно выбрать вуз. Смотрите учебные программы, рейтинги. Неплохой показатель — олимпиадники от университета. Если сборные университета хотя бы периодически занимают места в десятке на относительно крупных олимпиадах по программированию, значит кодинг в универе не будет рудиментом (несмотря на то, что лично вам олимпиады могут быть вообще не интересны). Ну и в целом здравый смысл рулит: вряд ли в Братском филиале Байкальского государственного университета из вас сделают мощного фулл-стека.
    Примеры хороших вузов: МГУ/СПбГУ (очевидно), Бауманка (Москва), ИТМО (Питер), НГУ (Новосибирск). Несмотря на всю их именитость, в них вполне реально попасть на бюджет, если не метить на топовые кафедры.
  • Не универом единым. Несмотря на то, что вас будут комплексно обучать всяким штукам, этого недостаточно. В силу бюрократии программа обучения почти всегда будет отставать от современных трендов. В лучшем случае — на год-другой. В худшем — лет на 5–10. Разницу придется наверстывать вам самим. Ну и очевидное: если вы будете изучать материал наравне с остальными студентами, то каждый из них будет вашим равноправным конкурентом. Если же вы факультативно выйдете вперед — будете смотреться на рынке гораздо лучше.
  • Ищите работу как можно раньше. Я начал работать на втором курсе. К окончанию универа я был уже вполне себе middle developer, а не скромный джун без опыта. Думаю, очевидно, что после завершения вуза зарабатывать 100к приятнее, чем 30к. Как этого добиться? Во-первых, см. пункты А и Б. Во-вторых, ходить на митапы, фестивали, конференции, ярмарки вакансий. Мониторить рынок и пытаться устроиться джуном/стажером на полставки в любую фирму, куда хотя бы примерно подходишь. Не бойтесь платных конференций: там зачастую дают очень приятные скидки студентам.

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

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

Education & motivation

Главное — не то, что в вас пытаются запихать. Главное — то, что интересно и актуально

Далее, второй способ: курсы обучения программированию. Интернет прям кишит предложениями сделать из вас джуниора всего за 3 месяца занятий. Прям вот с портфолио, и даже работу помогут найти. Всего за 10к в месяц, ага.
Возможно, для кого-то это и сработает, но сугубо ИМХО: это полная херня. Не тратьте время и деньги. И вот почему:

Человек, далекий от IT, не сможет въехать в специфику профессии за 3 месяца. Вот вообще никак. Слишком много информации нужно усвоить, слишком много всего понять, и более того — набить руку.

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

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

Резюмируя: не верьте тем, кто обещает «вкатить» вас за короткий срок. Если бы это было возможно, все бы уже давно стали программистами.

Как нарисовать сову

Слева: чему вас научат. Справа: что от вас потребуют на работе

Третий путь — путь, избираемый большинством. Самостоятельное обучение.

Самый трудный, но, пожалуй, самый благородный способ. На нём остановимся поподробнее.

Вот вы решили стать программистом. С чего же начать?

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

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

Сразу же напишу первый совет, чтобы не забыть: учите английский. Английский нужен. Без английского никуда. Никак. Без английского нельзя стать нормальным программистом. That’s it.

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

Пример roadmap для backend программиста (не для любого, конечно, это просто один из возможных вариантов):


  1. Основы html/css.
  2. Python. Основы.
  3. Сетевое программирование. Взаимодействие python и web.
  4. Фреймворки для разработки. Django, flask. (ремарка: как раз для понимания, что это за «django» и «flask» нужно посмотреть вакансии и почитать, что там требуется)
  5. Углубленное изучение python.
  6. Основы js.

Это очень, я повторюсь, очень примерный план, каждый из пунктов которого огромен сам по себе, а многие темы не включены (например, тестирование кода). Но это уже хоть какая-то систематизация знаний, которая позволит вам не запутаться в том, что вы знаете, а что нет. В процессе изучения станет понятнее, чего не хватает, и этот roadmap будет дополнен.

Далее: найдите материалы, по которым вы будете учиться. Основные возможные варианты:


  • Онлайн-курсы. Не те курсы, которые «джун за 3 дня», а которые учат одной конкретной вещи. Зачастую подобные курсы бесплатны. Примеры сайтов с нормальными курсами: stepik, coursera.
  • Онлайн-учебники. Есть бесплатные, условно-бесплатные, платные. Где платить, а где — нет, разберетесь сами. Примеры: htmlacademy, learn.javascript.ru, django book.
  • Книги. Их много, очень много. Если не можете выбрать, три совета: старайтесь брать новые книги, т.к. информация очень быстро устаревает; у издательства O’Reilly довольно высокий уровень качества и нормальная подача; если есть возможность, читайте на английском.
  • Митапы/конференции/лекции. Не так полезно в плане информационной насыщенности, но крайне полезно в плане возможности пообщаться с коллегами по цеху, задать актуальные вопросы, завести знакомства. Возможно, даже найти вакансию.
  • Гугл. Многие недооценивают, но умение просто находить ответы на какие-то вопросы очень важно. Не стесняйтесь гуглить непонятные вещи. Этим занимаются даже матерые сеньоры. Умение быстро находить о чем-то информацию фактически равноценно тому, что вы это знаете.

Окей, с источниками информации определились. Как с ними работать?


  1. Читайте/слушайте внимательно. Не читайте уставшим. Вникайте в смысл, не проскакивайте моменты, кажущиеся очевидными. Зачастую переход от очевидного к непонятному случается довольно быстро. Не стесняйтесь возвращаться и перечитывать.
  2. Конспектируйте информацию. Во-первых, в своих конспектах вам будет легче разобраться, когда информации станет много. Во-вторых, так информация лучше усваивается.
  3. Делайте все задания, которые вам предлагает источник. Хотя нет, не так. Делайте ВСЕ задания, которые вам предлагает источник. Даже те, что кажутся простыми. Особенно те, что кажутся слишком сложными. Если застряли — просите помощи на stackoverflow, хотя бы и через google translate. Задания написаны не просто так, они нужны для корректного усваивания материала.
  4. Придумывайте задания сами и делайте их тоже. Практики, в идеале, должно быть больше, чем теории. Чем плотнее вы закрепите материал, тем больше вероятность, что через месяц вы его не забудете.
  5. Опционально: по мере прочтения составляйте себе квизы. Записывайте в отдельный источник каверзные вопросы, а спустя неделю или месяц — читайте и пытайтесь ответить. Не получается: штудируйте заново.

И эти 5 пунктов повторяем по каждой технологии, которая изучается. Только так (с тщательным изучением теории и плотным покрытием практикой) у вас сформируется качественный багаж знаний, с которым можно стать профессионалом.

И казалось бы, все просто: учим технологии одну за одной, постигаем дзен, идем работать. Так-то оно так, да не так.

Большинство людей, изучающих программирование, делают это примерно по вот такому сценарию:

Даннинг-Крюгер

картинка честно стырена отсюда

И тут нужно остановиться на каждом из шагов поподробнее:

Старт: у вас нулевые знания. Точка отправления. Пока что ничего не понятно, но, вероятно, крайне интересно. Начинается путь в гору, но налегке. Совсем скоро вы взберетесь на

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

Долина Отчаяния: Вот вы прошли основные курсы, прочитали какие-то книги и решаете начать писать что-то свое. И внезапно не получается. Вроде бы всё известно, но как это скомбинировать, чтобы оно работало — не понятно. «Я ничего не знаю», «у меня не получится». На этом этапе многие сдаются. На самом деле знания действительно есть, и они никуда не испарились. Просто пропали четкие требования, поддержка. Началось настоящее программирование. Когда приходится маневрировать в пространстве, где есть цель, но нет промежуточных этапов, многие впадают в ступор. Но на деле это лишь еще один этап обучения — пусть в первые десять раз все будет получаться кое-как, огромными усилиями, некрасиво. Главное — раз за разом доводить дело до завершения, хотя бы как-нибудь. В одиннадцатый раз дело пойдет проще. В пятидесятый появится решение, которое покажется вам красивым. В сотый уже будет не страшно. И тогда наступит

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

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

Пути программиста.

Удачи вам в этом!

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

© Habrahabr.ru