Довольно часто на разных ресурсах вроде Stack Overflow я вижу вопросы в стиле: Как стать разработчиком?, Какой язык программирования лучше учить?, А не поздно ли в IT после 30. И хотя в интернете уже вероятно огромное количество подобных статей, я все же хочу поделиться своей историей и советами, которые как мне кажется, могут помочь ребятам которые хотят в своей жизни попробовать что-то новое, но по разным причинам боятся.
Вкратце расскажу о себе, 3 года назад я понятия не имел, что такое программирование и что это за черная магия за которую готовы создавать такие условия для разработчиков. Я был обычном рабочим в автомастерской. Мне повезло и я познакомился с парнишкой который предложил мне научиться. Я имел упаковку комплексов: Это не мое, Я уже слишком стар для того чтоб войти в IT (мне тогда было 28), Для этого надо было заканчивать универ и т.д. в том же духе. Сейчас я Android разработчик в Tinkoff, участвую в разработке основного приложения банка. В свободное время помогаю некоторым ребятам учиться и в целом доволен своим выбором.
Наверное в любой сфере есть куча страшных слов которыми пугают все вокруг: Сопромат в инженерном деле, Каллоидная Химия, Сольфеджо в музыке, Матанализ и т.д. Так же и в программировании есть Алгоритмы и структуры данных, какие-то Паттерны проектирования от которых человека незначащего бросает в пот, а еще в добавок все эти мифы о том, что для того чтоб программировать надо знать чуть ли не высшую математику. Короче все эти вещи дико отпугивают людей когда они начинают читать форумы. А еще есть целая гора людей которые это все приправят тем, что вот тебе надо прочесть вот эти 20 томов по 1000 листов нудной теории, рассказы про то что надо уметь писать код чуть ли не в блокноте. В общем большое количество страшных историй которые отбивают все желание начинать.
После такого может показаться что для того чтоб начать кодить вообще почти ничего не надо. Нет конечно, надо, и надо очень много. Да действительно хорошему программисту надо знать и паттерны и структуры данных и алгоритмы, а в некоторых сферах таких как Machine Learning еще и очень плотно дружить с математикой. Безусловно придется прочесть тысячи страниц, безусловно придется перечитать сотни статей и просмотреть не меньше всяких лекций и видео. Но для того чтоб начать программировать ничего этого не нужно знать, а то что нужно знать придет со временем, со временем придет и понимание. Если уж быть честным, чтоб найти свою первую работу достаточно знать о нескольких структурах данных и то общие знания, знать что есть такая штука как алгоритмы и где их подсмотреть, а из математики достаточно понимать что такое переменные и может быть функции. В остальном программирование это как конструктор. Когда у тебя есть некое заранее определенное количество деталей которые можно соединить с другими деталями, а если нужной тебе детали нет, то можно скомбинировать несколько уже существующих во что-то нужное тебе и создать программу. Никакой магии и седых волос.
Наверное самое сложное это начать. Это действительно так. Когда ты сидишь 3 дня пишешь программу которая только и делает то, что выводит на черном экране количество счастливых билетов в одной партии из 999999 штук, а потом показываешь друзьям, а тебе в ответ: И чо?, это конечно дизморалит. Но если этот шаг переступить, а он обычно длится несколько месяцев, в зависимости от того насколько интенсивно вы учитесь (мне понадобилось месяца 2 примерно по 2 часа в день). Но когда ты можешь впервые запустить свою программу на реальном устройстве и добавить в реальный интерфейс что-то, пощупать это, создать что-то хотя бы малость интерактивное, то в этот момент начинаешь получать некое удовольствие. И с каждым разом открываешь для себя все более и более интересные штуки. А в какой-то момент и вообще можешь создать свое, хоть и маленькое, но полноценное приложение, которое обращается в сеть за реальными данными. Вот тут и понимаешь, что это очень круто, а еще за это и платят неплохие деньги.
Я опишу несколько ключевых, по моему мнение, вещей которые помогут вам в обучении.
Какой язык программирования учить?
Это частый вопрос. И ответ тут прост. Язык это инструмент, не
больше не меньше. Учите тот язык который вам по душе, то чем хотите
заниматься. Интересно машинное обучение учите Python. Хотите писать
крутые мобильные приложения Swift, Java/Kotlin. Интересна Web
разработка JavaScript. И т.д. Определитесь, чем именно в принципе
вы хотите заниматься. Языки очень многим похожи друг на друга, да и
принципы программирования не меняются уже лет 60. Да есть языки с
более низким порогом вхождения, есть с более высоким, но разница
тут не велика если задуматься. Вы потратите на 2 месяца меньше на
изучения более простого языка, но потом поймете, что в целом хотели
бы заниматься другими вещами. Стоит ли оно того? Думаю нет. Учите
то, что вам ближе.
Ментор.
Ментор этот тот человек который тебе скажет, что действительно
важно, что можно отложить на потом. Я не раз видел ребят которые
покупали себе курсы за большие деньги учились там делать вещи
которые в реальной разработке мало где используются, а если и
используются, то это что-то специфическое и в целом в определенный
момент своего развития выучить не проблема. Ментор это тот человек
который тебе искренне скажет: Димон, ну что за говно ты написал?. И
объяснит почему так делать не надо. Я очень много времени сижу на
StackOverflow и очень часто вижу когда ребята городят такие костыли
и велосипеды просто по той причине, что никто не может им
подсказать. Ментор реально сокращает время. Мне повезло, я его
нашел изначально, но прекрасно понимаю, что не всем так везет. Но я
знаю и тех кто его находил. Вот тут есть несколько советов:
-
Ходите на митапы которые хоть как-то связаны с вашей отраслью. Просто на все, что есть у вас в городе и вы можете посетить. Если вы живете в Москве, то тут вообще бесплатно можно ходить по 2-4 раза в месяц. Знакомьтесь там со всеми. Задавайте вопросы. Не бойтесь показаться глупым, не бойтесь спрашивать. IT-шники в большинстве своем (а особенно те кто посещают подобные мероприятия) люди дружелюбные и очень любят делиться знаниями. Худший вопрос это незаданный вопрос. Так вы примелькаетесь там, вас запомнят, а может и кто-то что-то интересное предложит. Я вот так нашел одного своего ученика.
-
Ищите группы в соцсетях, телеграмм каналы, любые тематические движухи. Задавайте там ЛЮБЕ вопросы. Просите кого-то смотреть ваш код, но без фанатизма, люди часто готовы помочь, но смотреть 2000 строк кода и пытаться там разобраться мало кому захочется, даже вашему другу сенсею=) Не исключено, что там вы сможете с кем-то познакомиться, а если и не найдете персонального ментора, то просто всегда можно спросить что-то, чего не понимаешь. Это дико экономит время и мотивацию. А еще там можно узнать о всех событиях которые происходят в вашем городе. К примеру именно там я узнал об Android Academy MSK, которая мне дала мне очень большой буст знаний и полезные знакомства.
Пишите код.
Постоянно. Не надо себе ставить цель через 3 месяца обучения написать что-то большое и полноценное. У вас не получится. Почему? Да просто потому, что сегодня вы напишете какой-то код, а через 2 месяца, вам будет противно на него смотреть и не будет никакого желания к нему возвращаться. Это нормально. Говнокод пишут ВСЕ. Разница только в том, что кто-то говнокод пишет только в начале своего пути, а кто-то и спустя годы работы. Если вы открыли свой минипроект который написали 2 месяца назад и видите как там все ужасно радуйтесь, это значит, что вы стали лучше. Хуже когда вы смотрите на свой старый код и не видите разницы между ним и текущим. Второй момент который надо понимать, что почти все приложения в PlayMarket/AppStore (а так же любые другие сферы) пишет скорее всего не один, а порой и десятки разработчиков в течении многих месяцев. Так что пишите маленькие проекты. На примере мобильной разработки приложение в котором есть 3-5 экранов более чем достаточное. Пишите, бросайте, начинайте новый, изучайте новые инструменты, снова бросайте.
Что делать если долго не можешь что-то понять?
Это ситуации более чем нормальная. На реально работе очень часто
бывают ситуации когда не можешь решить какую-то проблему 8 часов.
Потом идешь домой, ложишься спать. Приходишь утром на работу и за
пол часа решаешь эту проблему. Программирование это не та сфера где
количество решенных задач пропорционально количеству часов
написания кода. Тут надо мыслить. И очень часто нужно просто
отдохнуть. Когда я учился моему сыну было меньше года. И вот часто
были ситуации когда ты сидишь, пробуешь понять как работает тот или
иной инструмент и у тебя ничего не получается, потом слышишь как
просыпается ребенок, идешь к нему. Проводишь с ним 10 минут пока он
уснет и в эти 10 минут внезапно понимаешь: Да вот же оно
решение!!!. Бывали вещи которые я не мог понять месяц или больше. В
таких ситуациях нужно уметь переключаться. Отвлекитесь на другую
тему, попробовать решить более простые проблемы или вообще пойти
посмотреть сериальчик. Я в процессе своего обучения (1.5 года) раза
3 делал перерывы на 1-2 недели когда я тупо смотрел сериалы. Это
нормально.
Как понять что уже готов идти на собеседования?
Открываете вакансии на HeadHunter или в любом другом месте.
Смотрите минимальный набор требований. Если вы имеет представления
о чем там написано (именно имеет представление, а не знаете) то
можно начинать слать резюме. Естественно вы получите отказ, а потом
еще, а потом еще 2 десятка. Но взамен вы получите несколько крайне
полезных штук:
-
Умение чувствовать себя уверенно на собеседовании. Когда я пришел на первый собес, у меня потели руки и я не мог ответить даже на те вопросы на которые уверенно знал ответ. Когда я шел на 20+ собес (примерно после 25ого я получил 2 оффера сразу), я вообще не парился в плане своего морального состояния.
-
Вы выучиваете самые частые вопросы. Штука в том, что информация лучше всего запоминается тогда когда тебя из-за ее незнания натычут в нее носом. Проверено много раз. К тому же есть много крутых ребят которые на собесе дают фидбек по своим вопросам и объясняют те вещи на которые ты не смог ответить, а некоторые еще и шлют в письме с отказом темы которые надо подтянуть. Единственное правило этого всего: Вышел с собеса, отошел на 10 метров от здания и сразу же записал все вопросы на которые не смог ответить. Потом нашел на них ответ. Почему сразу? Потому, что через 10 минут вы половины вопросов не вспомните. А как я уже писал выше, после того как в какие-то вещи натыкали носом они запоминаются на порядок лучше.
-
На собесах часто дают тестовые задания. Выполняйте их все, даже если не хотите туда идти на собес. Это очень крутой опыт. Последние пол года обучения я вообще не писал никаких своих проектов, только тестовые задания. В них всегда найдутся интересные кейсы.
-
Я уже писал отдельную статью: Почему нужно ходить на собеседования. Там еще много чего полезного.
Как искать работу? Несколько советов:
-
Отправляйте резюме на ВСЕ вакансии вашей области. Не важно какой там требуется опыт, не важно какие требования. Я к примеру слал свое резюме на все вакансии где было слово Android. Большинство приглашений на собеседования приходит с вакансий где требуются люди с опытом (по итогу я и получил свои 2 оффера по вакансиям с требованиями 1-3 года опыта). Во-первых люди часто готовы рассмотреть людей которые чего-то не умеют, но имеют большой потенциал. Во-вторых требуемый опыт это некий фильтр, чтоб отфильтровать неуверенных в себе ребят.
-
Заведите себе профиль LinkedIn. Заполните его полностью и попросите знакомых дать фидбек. Добавьте себе в контакты 500+ друзей из вашей сферы (HR-ы, разработчики и т.д.). LinkedIn реально работает, особенно когда вы будете уже крепким джуном. Я вот ничего не делаю сейчас и мне в среднем 2 предложения в неделю о работе прилетает. Хотя на старте он и не даст большого профита, но это очень мощный инструмент.
-
Постоянно перечитывайте свое резюме. Не нравится что-то меняйте. Пробуйте разные варианты. Пробуйте зацепить чем-то потенциального работодателя. Еще круче резюме подгонять под каждую вакансию, но по своему опыту скажу это обычно лень.
-
Научитесь говорит правду на собесах. Если чего-то не знаете скажите прямо: Я плохо в этой тебе разбираюсь, это намного более ценно чем пытаться выкрутиться там где вы профан. Если человек это спросил вероятно он разбирается в этой теме и поймет уровень ваших знаний. В резюме пишите только то, за что реально готовы ответить (но никто не мешает написать, что с каким-то инструментом ознакамливался). Потому, что по каждой строчке в вашем резюме вам могут задать вопрос, и вранье это очень большой минус вам. У меня был случай когда я пришел на собес и меня спросили: А вы знаете чем мы занимаемся?, а я отправлял резюме без разбору всем и смотрел более подробно только те вакансии по которым меня звали на собеседование. И вот тут вышло так, что я забыл глянуть, чем же эти ребята занимаются. Я пытался было как-то выкрутиться, но HR поняла и спросила: Лишь бы куда-то взяли?, на что я ответил: Ну да, я же джун и ищу первую работу. Мы посмеялись, а спустя несколько дней они мне прислали оффер. Так что все люди и все все понимают и совершенно нормально в чем-то не разбираться, а вот вранье не любит никто.
-
Неважно какая будет работа. Вот вообще не имеет значение. Конечно круто получить первый оффер от компании вроде Mail.ru или HeadHunter, но такого скорее всего не будет. Поэтому как только дают оффер берите. В IT есть некий порог, это 1 год. После этого ваши возможности вырастают в разы. Это конечно совершенно не означает, что год можно сидеть на попе ровно и ничего не делать. Но это тот самый порог на котором большинство кандидатов HR-ами отсеивается даже не читая резюме. Я пришел в первую компанию где кроме меня был 1 Android разработчик, который ко всему прочему вообще не хотел никак мне помогать в обучении. А спустя несколько месяцев я и вовсе понял, что и учиться то у него мне нечему. Но весь этот год нужно продолжать поглощать знания и получать опыт. Я поставил себе цель, что второй работой у меня будет серьезная IT компания. Так и случилось и во многом мне помогло то что я к тому времени прошел порядка 25+ собесов.
Хотел немного поделиться мыслями, но что-то длинная получилась статья. Какой вывод этого всего? Хотите начать программировать начинайте. Никому не интересен ваш возраст (хотя в 65 найти работу джуном наверное будет сложно, но в 30 точно нет). Никому не интересно ваще образование вы либо можете решать проблемы либо нет. В первом случае вас берут на работу хоть вы будете из села в драных штанах, во втором случае вас не возьмут даже если у вас будет 3 образования. Ставьте себе цель и идите к ней. Многие крутые компании готовы взять и научить человека с потенциалом.
Здесь я накидаю полезные по моему мнению ресурсы в сфере Android.
StartAndroid Парнишка выкладывает уроки по разработке Android. Первые уроки еще в Eclipse, но в большинстве своем они не теряют актуальности, ну и он постоянно добавляет новые актуальные уроки.
Android Academy MSK статья на тему того как прошла Android Academy в москве. В конце можно найти ссылки на все лекции которые были во время академии.
Google Codelabs Кодлабы от Google, в основном по Android. Очень полезная штука. Есть много очень интересных уроков и понятных уроков.
Mosdroid Telegramm Channel телеграм канал. Очень позитивный коллектив. Ребята постоянно проводят митапы в Москве, а иногда и Питер.
Материалы и книги для обучения Ответ на Stack Overflow созданные общими усилиями сообщества. Здесь не только Android но и другие языки программирования.
Так же стоит помнить что в Москве и других крупных городах ребята из Tinkoff и Sberbank пару раз в год запускают бесплатные курсы для тех кто хочет войти в IT.