Как войти в IT?
Вначале немного моих рассуждений
Цель раздела — это попытка донести, что оценивать перспективы и возможности нужно трезво.
Обращение к тем, кто идет ради денег. Есть множество других способов их заработать. В IT есть потолок по зарплате, а достичь его не просто.
Важно понимать, что IT не для всех. Но как говорится, чужой двор всегда зеленее. Например, почему-то многие думают, что тестирование — легко и пытаются войти в IT через тестирование. Сидишь и что-то там нажимаешь, ну вроде работает, пытаешься ввести абракадабру в поле для номера телефона и смотришь, что все ок или не ок. Это далеко не так, глупо идти с такими мыслями. В программировании также не все просто, одного курса какой-нибудь онлайн платформы скорее всего будет недостаточно.
Знаю, что многие пытаются войти в IT через онлайн курсы, которые агресивно рекламируются. Там обещают высокую зарплату и перспективное будущее, и все что хочет услышать человек. Но все не так просто как кажется.
Если вы все же хотите войти в IT, не важно по каким причинам, то стоит осознать, что вам предстоит конкурировать:
С ежегодным потоком выпускников ВУЗов. Любой студент из IT направления как минимум на голову выше человека, который решил войти в IT. Я считаю с этим глупо спорить, но ниже я попытаюсь объяснить почему.
С такими же людьми, которые тоже решили сменить профессию.
Люди окончившие ВУЗ как минимум четыре года изучали компьютерные и смежные науки, программирование и множество дополнительных профильных предметов:
Фундаментальные вещи в компьютерных науках. Архитектуру ЭВМ, ассемблирование/дизассемблирование, операционные системы, компьютерные сети, базы данных, теорию информации, алгоритмы, структуры данных и т.д. и т.п.
Разные языки и парадигмы программирования, паттерны проектирования. Разные фреймворки, технологии.
Высшую математику (как минимум теорвер, мат. статистику, дискретную математику). Эта штука реально прокачивает мозги.
Системный анализ, проектирование и тестирование ПО.
Другие дисциплины и курсы, которые они проходили дополнительно.
Помимо программы ВУЗов есть тенденция к тому, что локальные IT-компании проводят курсы по разным дисциплинам у студентов. И все это начинается с первого курса. Летом преуспевающие студенты попадают на стажировки в эти самые компании. Лично в моей группе больше половины на четвертом курсе уже работало по профессии.
Также IT-компании и финтехи проводят хакатоны, CTF и разные мероприятия в ВУЗах, где студентов также берут себе на заметку, после приглашают на собеседования для дальнейшего трудоустройства.
Студенты, которые прошли всю эту программу выпускаются каждый год.
У работодателя есть выбор:
Взять выпускника ВУЗа, который четыре года трудился, чтобы получить диплом. Ему в среднем 22 года. Скорее всего нет семьи, финансовые запросы еще не выросли. Он еще не зарабатывал денег, у него нет психологического барьера пойти на менее оплачиваемую работу. Многие начинают с 30к-60к рублей. Я не видел, чтобы где-то платили больше начинающему спецу, а если и платят, то скорее всего и требования будут выше.
Взять выпускника курса, которому за 6–12 месяцев непонятно что давали изучать. Навряд ли за такой маленький период вы обгоните выпускников ВУЗов.
Я думаю, что выбор очевиден.
Помимо выпускников ВУЗов. Вам предстоит пройти стресс курсов и конкурировать с такими же людьми как вы. Придется совмещать текущую работу и обучение. Если повезет, и вас куда-нибудь возьмут, то коллеги будут обучать вас еще несколько лет, передавая вам свой опыт и давая вам направления для развития. Это конечно, если повезет с первой командой, что очень важно в начале карьеры.
Если у вас есть возможность пойти учиться в ВУЗ, то идите. В долгосрочной перспективе вы выиграете. Помимо учебной программы, и всего того о чем я написал выше, у вас будут связи т.к. ваши одногруппники будут работать в разных компаниях, и в будущем будет гораздо проще в случае чего.
Всегда есть исключения из правил, но не нужно считать, что именно вы тот самый человек. Не хотел задеть чьи либо чувства или порушить мечты.
Небольшой roadmap для разработчика
Цель раздела — это показать, что учиться можно бесплатно, помочь понять что IT ваше или нет тоже.
Если вы все еще настроены войти в IT, то надо сперва подготовиться, я составил небольшой список того, что считаю необходимо знать каждому разработчику. Мое мнение такое: «Если вы решили войти в IT, то входите качественно». Помните, что этот roadmap — верхушка айсберга. Учиться придется всегда, самостоятельно.
Постарался добавить в список бесплатные курсы, точнее их не обязательно оплачивать, чтобы проходить. Если хочется получить сертификат, то можно заплатить.
Первое, что нужно научиться делать — искать информацию. В интернете колоссальное количество данных, но информацией считаются исключительно полезные данные. Научитесь фильтровать данные, понимать как применить найденное. Следовательно, во время обучения поисковик — ваш лучший друг. Вопросы, которые появятся у вас — не уникальны, их уже задавали на разных форумах, соизвольте поискать и внимательно почитать. Чтобы получать ответы, нужно уметь задавать вопросы. Чем более развернуто задан вопрос, тем выше вероятность того, что вам на него ответят. Полезная ссылка How To Ask Questions The Smart Way. Уметь искать информацию, задавать правильные вопросы — это мета навыки, которые полезны более чем в одной сфере, прокачайте их.
Вся актуальная информация будет на английском языке. На русский язык просто не успевают переводить, либо вообще не переводят. Так что деньги, которые вы бы понесли в какую-нибудь платформу, лучше потратьте на репетитора по английскому языку. Даже если у вас в итоге не получится с IT, будет хоть что-то и возможно для вас откроются новые перспективы с изучением английского языка. Ну, а если у вас все-таки получится войти в IT, то у вас будет возможность релокации в другую страну, где в обиходе английский язык или же просто устройство на работу в иностранную компанию на удаленке. Знание английского языка — это мета навык, который будет полезен более чем в одной сфере деятельности, изучайте английский.
Стартовая точка будет курс This is CS50x. Его можно проходить бесплатно, есть автоматическая проверка практических и лабораторных работ. Лекции в открытом доступе, каждые пол года обновляются, материал всегда в актуальном состоянии. Эти лекции читаются первокурсникам в Гарварде. Будем считать этот курс порогом вхождения (но не в IT). Он поможет понять сможете ли вы дальше изучать все необходимое, чтобы войти в IT. Для начала рекомендую пройти только первые пять недель, где заканчивается работа с языком Си.
Есть версия с русской озвучкой, для тех кто не может проходить на английском. CS50 на русском (Гарвардский курс по основам программирования), но переведенный курс был записан в 2015 году и я не знаю как обстоят дела с практикой и лабораторными работами.
Первым языком программирования будет Си. Язык не обременен синтаксическим сахаром, динамической типизацией, лямбда выражениями и т.п. Это всё лишь навредит человеку, который только начинает изучать программирование. Си также достаточно нейтрален по отношению к другим языкам программирования, с него легче перейти на любой другой язык, а вот в обратную сторону бывает проблематично. И то, что вы будете изучать Си в качестве первого языка, не означает, что теперь вы будете только программировать на Си. Сперва необходимо научиться мыслить алгоритмически и излагать свои мысли с помошью языка программирования. Поэтому я считаю Си идеальным языком программирования для начала. Важно осознать, что язык программирования — всего лишь инструмент. Рекомендую книгу Язык программирования C. Лекции и упражнения | Прата Стивен. Очень важно отвечать на вопросы для самопроверки и выполнять упражнения в конце главы. Одна из техник, которая мне нравятся — перед прочтением главы попытаться ответить на вопросы и подумать над тем как вы бы выполняли упражнения. Это подготовит ваш мозг к поглощению информации, и когда вы будете читать книгу, то будете ловить флэшбеки из упражнений и вопросов, которые вы прочли до, что поспособствует более качественному усвоению материала. После этой книги вернитесь и закончите курс CS50.
Теперь изучим объектно-ориентированное программирование. ООП применяется почти везде, оно не привязано к конкретному языку программирования, изучив один раз, вам не придется переучиваться для другого языка программирования. Изучать будем на примере языка С++. В процессе прочтения книги, вы научитесь писать код на С++, применяя объектно-ориентированное программирование. Рекомендую кингу Объектно-ориентированное программирование в С++ | Лафоре Роберт. Принцип прочтения книги такой же как и в Си.
Умение программировать недостаточно, необходимо понимать, когда применять ту или иную структуру данных или алгоритм. Я изучал их по книге Структуры данных и алгоритмы в Java | Лафоре Роберт. Также рекомендуют Алгоритмы на Java | Джитер Кевин Уэйн, Седжвик Роберт. Язык Java очень похож по синтаксису на C++. Авторы книг уделяют одну главу для введения в язык Java для читателей, которые знакомы с С++. Также рекомендую смотреть вот эти лекции Базовые алгоритмы для школьников и «Продвинутые» алгоритмы для школьников. Большой курс по алгоритмам Data Structures and Algorithms Specialization, если захочется проникнуться по максимуму.
Каждый, кто разрабатывает программное обеспечение должен понимать устроство комьютера. Для начального изучения рекомендую книгу Код: тайный язык информатики. Это наверное самое простое объяснение фундаментальных принципов работы ЭВМ. Рекомендую конспектировать книгу, зарисовывать схемы, возможно даже пересказывать и объяснять другому человеку. Для тех кто хочет более углубленно изучить данную тему рекомендую курсы Build a Modern Computer from First Principles: From Nand to Tetris (Project-Centered Course) и продолжение Build a Modern Computer from First Principles: Nand to Tetris Part II (project-centered course)
На этом этапе у вас имеется фундаментальная база, ее необходимо укрепить практической частью. Идем вот сюда Информатикс, заходите в какую-нибудь тему, желательно по порядку — от простого к сложному, читаете теорию и после решаете задачи. Обычно это изучают 7 и 8 классы, так что проблем быть не должно.
Продолжайте практиковаться на Codeforces. Решение задач помогает научиться думать, излагать свои мысли с помощью написания программ. Спортивное программироване хорошо подходит для этих целей. Решайте хотя бы одну задачу в день. Можете отсортировать задачи по сложности и идти просто по списку.
Решение задач я считаю также мета навыком. Это прокачивает мозг, в будущем будет гораздо проще в нестандартной ситуации. К тому же в тестовых заданиях на вакансию иногда требуется реализовать какой-нибудь алгоритм. Также данная практика поможет вам во время прохождения техничского интервью.
Ни один коммерческий проект в наше время не может без системы контроля версий. Изучать можно по книге Pro Git. Тут достаточно прочесть 1, 2, 3 и 6 главы.
К этому моменты вы освоили необходимый минимум, чтобы выбрать направление в IT. Самое простое и популярное разделение: front end, back end и мобильная разработка. Вы уже должны уметь самостоятельно найти материал для изучения в интернете.
После выбора направления предлагаю сделать несколько pet проектов. Проект не должен быть уникальным, вы только учитесь. Начните с чего-нибудь простого, после наращивайте сложность, добавляйте новый функционал, технологии.
К прочтению рекомендую Совершенный код. Мастер-класс, Head First. Паттерны проектирования и Рефакторинг.Гуру. Но не сразу. Сделайте 2–3 проекта, и только потом потихоньку начинайте читать. Тут важно, чтобы был уже какой-то опыт, иначе вы не почувствуете пользу.
Иногда можно почитать что-нибудь для релаксации, например Джоэл о программировании | Спольски Джоэл.
Для тех, кто хочет погрузиться в изучение CS, есть вот такой ресурс Open Source Society University.
У каждого обучение займет разное время. Все зависит от того, сколько времени вы будете уделять учебе. После вы можете спокойно идти на собеседования. Запоминайте или делайте заметки себе во время собеседования. После делайте работу над ошибками. Если проходите онлайн, то можете записывать, чтобы потом спокойн посмотреть и поработать над собой.
В список к сожалению не вошли такие вещи как:
Работа с базами данных. Системы баз данных. Полный курс | Ульман Джеффри Д., Уидом Дженнифер. SQL Tutorial.
Параллельное и конкурентное программирование.
Работы с сетью.
Разные фреймворки.
Что-то еще.
Вам придется найти материал для изучения самостоятельно в процессе разработки своих PET проектов.
Непосредственно во время обучения у вас будут появляться вопросы, или ситуации, которые будут вводить вас в ступор. Так как вы обучаетесь самостоятельно, то у вас нет преподавателя или ментора, который помог бы вам. За ответами вы можете обращаться на разные тематические форумы, где люди помогут вам, если правильно задать вопрос, показать, что у вас имеется на руках и что не получается. Если поиск в интернете вам не помог, то можно спрашивать на [ENG] Stack Overflow, [RU] Киберфорум