Итак, для начала, я отсею всех, кто хочет войти в IT (войти в ойти, кек) и стать программистом/разработчиком/другим специалистом отрасли из-за "больших зарплат" или "высоких прибылей".
Большие деньги зарабатывает тот, чьи знания и опыт уникальнее, совершеннее и востребованы на рынке. Уникальные знания и опыт не вычитать ни в каких книгах/статьях, не высмотреть в туториалах и не получить на вебинарах всяких. Уникальные решения приходят в голову как озарение, когда в этой голове накоплено уже достаточно общих знаний по основной специальности и смежным областям. Теории тут однозначно недостаточно, а практика должна занимать столько времени, что иногда можно забыть про личную жизнь напрочь. Совершенствование знаний требует исключительно практики. Постоянной и цикличной практики.
Всё это - ВРЕМЯ!
НЕТ магического языка программирования, фреймворка, технологии, которые можно изучить за несколько месяцев и пойти работать за 100-200-999 тысяч рублей/долларов/евро/биткоинов. Работодатели ищут на большие зарплаты либо узкоспециализированных профессионалов с соответствующим многолетним опытом, либо эффективных специалистов, решающих задачи быстро и оптимально. В остальных случаях чаще выгоднее аутсорс, чем взять в штат не особо квалифицированного работника на зарплату.
Есть, конечно, блат. И если у вас есть блат, то вам всё, что написано дальше, наверное, не нужно! Если у вас нет блата, а хочется быстренько устроиться на тёпленькое место с высокой ЗП - мечтать не вредно! Как минимум, это тёпленькое место занято квалифицированным спецом уже много лет. Как максимум, его отдадут не в ваши неопытные руки, а в неопытные руки по блату. В худшем случае, это место отдадут в неопытные руки по блату, даже если у вас эти самые руки уже достаточно опытные. Но это уже на совести работодателя. А тут не об этом.
Изучать программирование, принципы проектирования IT-проектов, создания/поддержания/масштабирования сетевых архитектур и кластерных массивов, разработки/оптимизации систем баз данных и другие области IT сферы нужно исключительно с целью саморазвития как мыслящего и действующего субъекта, а не как вариант заработка. Если отрасль вам действительно интересна и увлекает вас, то у вас еще до начала чтения этого текста должно быть меньше вопросов.
Я не тим лид, я точно не умею управлять командой, я умею управлять собой и строить свой тайм-менеджмент. Мне приходится работать с базами данных. Чаще всего применяю PostgreSQL(от настройки кластеров до написания функций и запросов). Я работаю с несколькими языками: Python, Go, C, JavaScript, HTML(написаны в порядке убывания объемов написанного кода). Я не увлекаюсь дизайном, т.к. любого рода интерфейсы и веб-страницы создаю исключительно для реализации удобного управления и мониторинга своих проектов. Свою деятельность наиболее точно могу описать как: создание сложных узкоспециализированных аналитических алгоритмов и обеспечение их взаимодействия с интернет-площадками, позволяющими извлечь прибыль за счет спекуляций различными активами. Модный трейдинг, короче говоря. Только я этим занимаюсь тихонько сам для себя, а не ору по округе, что у меня самые точные прогнозы и алгоритмы.
Я не имею специального IT-образования(имею экономическое, считаю его малополезным для себя). Учился всему сам. Но есть одна особенность! Как я считаю, ОЧЕНЬ ВАЖНАЯ! Меня лет с 7 тянуло ко всякой технике и электронике, всегда обволакивало любопытство именно в этом направлении. Несмотря на то, что непосредственно компьютерных дел в части анализа и разработки чего-либо я коснулся лет в 14, первый язык программирования я осознанно начал учить в 23 года. До этого были не очень осознанные(в период 14-18 лет) подходы ко всякому паскалю, делфи и C#. То есть ни одной программы, отходящей от примеров в туториалах, до 23 лет я не написал и не практиковался.
Теперь, отталкиваясь исключительно от своего бэкграунда, я ответу на несколько очень популярных вопросов у людей, пытающихся начать учиться:
1) Куда пойти учиться?
Если есть способности к качественному самостоятельному обучению и безграничный интерес к чему-либо в отрасли IT, то нужно сначала попробовать самостоятельно изучить что-то в векторе этого интереса.
Ваш главный помощник - поисковик(гугл, яндекс, что угодно и удобно). Поисковик за спрос денег не берет(если конечно вы не сидите в интернете через лимитное подключение, но тогда тут не только поисковик обчищает вашу казну).
Ваш главный учитель - множество ресурсов, свободно предоставляющих туториалы по интересующим темам, если они не слишком узконаправлены.
Ваш главный источник ответов на нетипичные вопросы и решение проблем - Stack Overflow. Гигантское количество сложностей, проблем, узкоспециализированных решений и оптимизаций там уже обсуждено и оценено рейтингами. Если не удастся найти решение, то всегда можно свободно обозначить обитателям площадки свои проблемы. Главное делать это грамотно и при полной уверенности, что ни в английском сообществе площадки, ни в русском решения похожей проблемы нет.
Если вы хотите(а лучше если вам необходимо) научиться работать с кластерами, сетями или железным оборудованием(сборка серверов, работа с хабами, маршрутизаторами и вообще любыми железками), а также созданием и поддержкой высоконагруженных систем и проектов, то лучше поискать наставника в этом деле. В процессе изучения таких многогранных и многоуровневых специальностей гарантировано появится огромное количество мелких, но очень важных вопросов, без ответов на которые будет сложно закрепить знания и связать их со смежными знаниями и опытом. И лучше, чтобы на эти вопросы отвечали действительно квалифицированные люди. Выбирая всякие курсы на сайтах типа Скиллбокса(не важно даже в каких направлениях), обязательно ищите и изучайте регалии того, кто заявлен преподом. Тут вы потратите не только время, но и деньги, поэтому подойдите к поиску источника знаний крайне тщательно.
2) Если программирование, то с какого языка или фреймворка начать изучение?
Для начала нужно задать самому себе вопрос "Нахрена?", т.е. для чего эти знания вам нужны.
Если вам нужно сделать обработчик API для взаимодействия с каким-либо сайтом, либо парсер данных с одного или нескольких сайтов, чтобы потом с этими данными что-либо сделать(проанализировать, собрать большую информационную базу, продать исторически накопленные данные), то в большинстве случаев вам будет достаточно изучить Python(версия 3 и выше) и SQL(для работы с БД). Для наиболее оптимального взаимодействия с базами данных и создания архитектур БД под свои нужды желательно еще изучить какую-нибудь из СУБД(PostgreSQL, MySQL, где-то даже SQLite сойдет вполне).
Если нужно работать(обрабатывать) с большими объемами данных, а тем более если нужно это делать быстро, то дорога лежит к Go(более простой) или C/C++(наиболее сложный, но за счёт скорости и гибкости в некоторых задачах безальтернативен). И если Python я достаточно изучил и понял за 2 месяца, то C я изучаю до сих пор(6 лет) и ни чуть не стесняюсь этого.
Если же хочется идти в сторону веб-разработки, то для бэкэнда(серверной части) пригодятся NodeJS, Python для разработки с нуля и/или изучить программные пакеты Apache, Nginx или какие-то другие комплексы, которые имеют "всё в одном". Дополнительно к этому крайне желательно изучать информационную безопасность и SQL(в случае применения БД в проектах). Для фронтэнда(пользовательских интерфейсов, дизайна) вообще много всего существует. Но лучше в этом деле начать с изучения чистого JavaScript, а потом переходить к изучению фреймворков. Я для своих задач выбрал Vue. Мне его достаточно. В зависимости от вида проекта, лучше может подойти другой фреймворк. Ну и язык стилей CSS лишним не будет.
3) Какие знания и образование нужны, чтобы не потратить время впустую, изучая то, что совершенно не понятно?
Образование - вообще без разницы! Вы изучаете ровно то, что хотите, требований к человеку, который сам желает что-то изучить и тем более имеет возможность(доступ в интернет и желание писать запросы в поисковик), предлагаться не может. Из конкретных знаний очень не лишними будут:
а) Математика. И элементарная, и высшая. Я всё это постигал в процессе изучения языков программирования, поэтому это не является обязательным для начала работы с языками.
б) Дискретная математика. Выделяю эту часть математики специально, т.к. она несет для программиста, наверное, наибольшую пользу. Если изучить и понять дискретку, то мышление очень хорошо адаптируется на аналитический лад и постигать многие вещи уже внутри программирования и алгоритмики будет намного проще.
в) Линейная алгебра. Тоже очень полезная для программиста.
г) Алгоритмика. Не выделяется как отдельная наука или подраздел математики, потому что в процессе изучения языков программирования так или иначе изучаешь и алгоритмику. Сам я не изучал отдельно, но вроде есть даже книги, которые достаточного сжато преподносят логику и позволяют выстроить/перестроить свой образ и процесс мышления при работе с кодом. Может помочь в будущем быстрее искать решения для нетипичных задач(потому что для типичных решения вы уже будете знать).
Если действительно многое в процессе изучения математики, смежных наук и, в особенности, языков программирования и алгоритмов будет не понятно и постоянно вызывать большие сложности даже с параллельным практическим применением штудируемых знаний, то возможно(я не могу утверждать на 100%) это просто не ваше. Не для вашего стиля мышления, не для вашего имеющегося багажа знаний. Я встречал и таких людей. Желания действительно через край, любопытства бездонная бочка, но на практике знания не усваиваются и не закрепляются в голове. При этом человек вполне себе легко ориентируется в гуманитарных направлениях деятельности. В таком случае, когда мозг уже адаптирован больше к словам в документах, нежели к цифрам в программном коде, может эффективнее будет совершенствоваться в том, что лучше заходит и понимается?
4) Сколько времени уйдет на изучение языков/математики/алгоритмов/мануалов по настройке серверов, программных пакетов?
Лично у меня на самый простой для моего понимая язык Python ушло 2 месяца чистого изучения с нуля и еще где-то 1 год в процессе практики работы с ним я изучал некоторые специфические, присущие только этому языку, нюансы. На язык Go я потратил где-то 1-1.5 года и только потому, что изучал и практиковался параллельно основной занятости Питоном и SQL. Кстати, SQL тоже дался за пару-тройку месяцев, но только запросная часть. А вот на часть, относящуюся к созданию и управлению структурой БД, а также ее оптимизации - потратил где-то год. Опять же, потому что не было жесткой потребности в этом. Когда мне срочно понадобился C/C++, то что-то базовое и необходимое мне в тот момент я изучил и собрал за неделю. Но чтобы в дальнейшем этом оптимизировать, мне пришлось потратить 3-4 года, постепенно изучая язык и его нюансы. И как я уже отмечал, я до сих пор учу C и это нормально в моем случае.
И я встречал человека, который в течение 1.5 лет медленно изучал Python и практиковался в нём просто потому, что род его деятельности был совершенно иным, а программирование для него было не больше чем просто хобби.
Поэтому всё зависит в первую очередь от потребностей. Если оно нужно или очень-очень хочется как можно быстрее реализовать какой-то проект - получится изучить всё необходимое намного быстрее, чем если подходить к этому только в свободное время по вечерам или выходным на пару часов.
5) Как дополнительно мотивировать себя изучать языки, технологии, а также практиковаться их применять?
Тут всё зависит от текущей занятости. Если желания через край, обучаемость на уровне и уже хоть что-то, что можно применить на практике, изучено и понятно, то при наличии достаточного свободного времени можно попытаться поискать работу, связанную конкретно с изучаемым языком/технологией, но только стажерскую и желательно на полставки. Я соглашусь, что это не самый лучший вариант по причине малого(или крайне малого) количества предложений подобного рода. Но это, например, мой путь. У меня так сложилось, что после универа, в 23 года, я искал работу эникейщиком каким-нибудь(человек-никто или подай-принеси, в общем-то), но найденное оказалось не совсем тем, что ожидалось. Как обычно - объем фактических требований несколько иной, нежели написано в вакансии. Тогда я просто соврал, что знаю Python. Я представлял, что это не очень сложный язык и просто одномоментно поставил себе цель его выучить. За 2 месяца испытательного срока, с помощью полной изоляции себя от общества(8-9 дорога до работы, 9-18 работа, 18-19 дорога домой, 19-02 изучение и практика) в течение рабочей недели и на 90% изоляция по выходным(10-20 изучение и практика, 20-00 отдых ото всего) позволили получить и закрепить все необходимые на тот момент в работе знания. Далее в течение года я изучал всё остальное, что мне было нужно. Потом сменил должность на программиста, чтобы перестать бегать в организации и так проработал 3 года. Начальство было весьма креативно мыслящим, поэтому там же мне пришлось коснуться машинного обучения с нейронными сетками, что в итоге радикально повернуло мою жизнь и развитие в отрасли в ту сторону, в которую двигаюсь до сих пор.
Также неплохой мотивацией будет собственный, хорошо продуманный проект, желание к реализации которого будет чуть ли не выше, чем желание изучить языки, технологии и т.д.
В любом деле главное начать. А потом понять к чему стремишься. Без мишуры, фантазий, догадок. Нельзя идти к какой-то одной цели. То есть на начальных этапах можно, но достаточно скоро необходимо будет определить четкий набор целей, где одна от другой будут не далеко, но они все разные. Так меньше вероятности потерять интерес к изучению и больше возможных побед, которые будут приносить дополнительное вдохновение и мотивацию к дальнейшему прогрессу.
Дорогу осилит идущий!