#ЗаметкиРазработчика Часть 2. Эффективная подготовка.
Итак, в первой части (https://vk.com/wall15192_8502) я рассказал, почему я пошёл в программисты, почему вообще стоит идти в программисты, и как это в целом делается.
Рассказал по свежим впечатлениям, т.к. меня взяли на работу меньше месяца назад, а переквалификацию в программиста я начал в марте.
Теперь поделюсь: как я готовился. Что я делал правильно, и что, вероятно, не совсем правильно.
Итак, за один шаг до контракта кандидата обычно собеседуют. Это может быть несколько этапов, всё вживую или какой-то этап может быть автоматизированный.
На моём первом собеседовании первый этап был милой беседой с HR на английском.
А на второй части пришёл серьёзный дядя и стал спрашивать: какие я делал проекты, стал писать код на листочке и спрашивать: как он работает.
Итак, мой личный (совершенно нерепрезентативный) топ требуемых скиллов выглядит так:
1) Английский. 100% необходим если это иностранная компания. Также нужен и в российских компаниях, но они всё равно релоцируются. Кроме того, много документации на английском. Так что, не сомневайтесь.
2) Язык программирования.
Здесь очень много мнений на этот счёт. Если вы не знаете никакой язык – то смотрите в youtube: с чего лучше начать. Если какой-то знаете – проверьте есть ли по нему вакансии в нормальном количестве.
Языки обычно связаны с какой-то областью, например, Javascript – с фронтендом сайтов, Python с машинным обучением, Swift, Objective C, Kotlin с мобильной разработкой, C++, C# c GameDev и т.д. Но при этом какие-то языки более универсальны (Python), а какие-то менее – типа Swift.
3) Знание алгоритмов.
Относится к базе, и о таком любят спрашивать на собеседованиях. Хотя в целом, очень многие программисты не будут писать подобные алгоритмы на работе, потому что они уже зашиты в фреймворк, но лучше в них хотя бы немного разбираться.
Прикольные сайты для тренировки: CodeWars, LeetCode. – Там есть автоматизированные системы, которые проверят ваш код.
4) ООП.
Все очень любят спрашивать про ООП, потому что без этого подхода программировать в команде практически нереально. Это связано и с тем насколько ваш код легко поддерживать, и с тем, насколько он устойчив. Так что, с ООП стоит разобраться. Почему-то я не встретил ни одного нормального объяснения ООП))) Но и книг я прочитал по программированию немного. Рекомендую Code Complete МакКоннела. Она определённо наводит на правильные мысли.
5) Паттерны проектирования.
Паттерны проектирования – это следующий шаг в обучении ООП. И о них лучше иметь представление.
6) Технологии кроме языка.
Можно легко посмотреть в вакансиях, на которые вы ориентируетесь. Мне (я смотрел в сторону C#) часто попадались SQL, ASP.NET, Unity, реже WPF и Xamarin.
А теперь самая важная и уникальная часть (авторская).
Представьте себе треугольник. А одном углу – мотивация. Это насколько вам хочется что-то делать. В данном случае, обучаться. Другой угол – польза. Третий – ресурс (деньги, время на занятия, и наличие времени в целом на обучение, например - полгода).
Теперь рассмотрим разные подходы к подготовке именно с этой точки зрения.
Способ 1) Читать учебник.
Напишите, как у вас с мотивацией, когда вы себе это представляете. Подсказка – когда мотивация закончится, начнётся фрустрация. Т.е. желание обучаться ещё будет оставаться, но вы почувствуете, что «так вы не доплывёте». Я считаю, что это естественный и нормальный механизм – значит вам нужно учиться иначе. Но в школе часто формируют обратную привычку.
Итак, читать учебник в теории полезно. На самом деле, это не учит вас программировать. Читать стоит очень дозированно и сразу применять.
Способ 2) Проходить курсы.
Я частично пробовал это несколько лет назад, и естественно, не закончил. Потому что обычно курсы тоже очень скучные. Программирование – для меня интересно, а то как его преподают – ужасно.
С точки зрения ресурса – курсы стоят денег, но есть и бесплатные курсы. Я советую для начала посмотреть бесплатные короткие (!!!) курсы, чтобы немного ощутить вкус. Их легче пройти, т.к. они короткие и терпения хватит.
Способ 3) Обучение с наставником.
Всё зависит от наставника. Если с ним повезло – он сделает из вас программиста и вам будет интересно в процессе. Но.... бывают и другие варианты, например, он может рассказывать очень скучно или слишком нетерпелив.
Но наличие обратной связи – это уже существенный плюс.
Способ 4) Самообучение при помощи автоматизированных сайтов.
Как часть обучения – вполне себе круто. На CodeWars, после того, как вы решили задачу – можете посмотреть другие решения. Это мне сильно помогло.
Способ 5) Свой проект.
Вот здесь мотивация обычно высокая, польза большая, а ресурса может и не хватить. Я реализовал 2 собственных проекта с нуля используя сторонние библиотеки. При таком подходе почти нереально избежать наслоения сложностей. Т.е. что-то интересненькое часто оказывается сложным в реализации. Если к этому моменту вы ещё и программируете неуверенно ( как я в тот момент), то мозг будет уставать быстрее чем нужно. Я вывез свои проекты, но это было тяжело.
Способ 6) Стажировка.
Когда вы что-то уже знаете, можно попробовать устроиться стажёром. Если ресурс есть – это один из идеальных вариантов.
Способ 7) BootCamp.
Это такой групповой интенсив с наставником, когда вы много программируете (иногда полный рабочий день 5 дней в неделю, иногда меньше) в течении 3-4 месяцев. Обычно платный, но мне встречались варианты, когда плату за обучения вычитают из зарплаты после трудоустройства.
Если ресурс позволяет – вариант хороший.
Способ 8) Немного охренеть и устроиться на работу.
Бывает и такой сценарий – осваивать всё находу. Так бывает. Может быть в вашей компании вы занимались одним, а вдруг в соседний отдел потребовался программист, и вам предложили переобучиться внутри компании.
Или у компании есть программистская задача и кроме вас её некому решить. Это звучит забавно, но так тоже бывает. Программистами часто становятся те люди, которые не учились на них в универе.
Если решили обучаться - советую комбинировать эти способы, следить за своей мотивацией и ресурсом. Вначале всё кажется сложным, но это сначала. Потом вы узнаёте больше - и теперь вам кажется, что сложного стало ещё больше)
Так что, привыкайте) Остались вопросы? - welcome!
Благодарю, если осилили мой лонгрид. Надеюсь, мой опыт кому-то будет полезен! Удачи!