В данной статье я постараюсь рассказать как начать работать в IT без навыков и умений, образования и особого математического таланта. Я приведу примерный план, как можно развиваться, реализовать себя и начать работать в IT.
Большинство людей не связанных с IT, смотрят на специалистов данной области, так сказать достаточно специфично. Кто-то осуждает, кто-то восхищается, но все зачастую сходятся во мнении, что для IT нужен особый склад ума, навыки и образование.
И в этом есть правда, но скажите, в какой профессии нет базиса, на котором все выстраивается? Даже грузчик на складе, должен обдать квалификацией и знаниями, чтобы загрузить стеклянный шкаф так, чтобы при перевозке заказчик получил шкаф целиком, а не увлекательную мозаику из тысячи осколков.
Часто представление о программировании у обычных людей гипертрофированно, где реальная картина от тех навыков и умений, которые действительно нужны, отличается как чёрное и белое. Другими словами, программирование сильно мистифицировано, и большинство просто услышав про IT или программирование, сразу выносят вердикт - "Это не моё".
С такой же вероятностью можно брать любую профессию и подбрасывать монетку, и по выбранному орлу или решке решать, сможете ли вы работать в данной области или нет.
Также не стоит забывать, что в IT много разных областей, которые сами не являются прикладными, но являются важными его частями — Маркетинг, Бизнес Анализ, Менеджмент, HR и многие другие, для которых знание программирование не является обязательным.
Я как разработчик ПО, буду хвалить своё болото, и рассказывать о преимуществах и недостатках — Разработки ПО, так как в остальных областях я не компетентен.
Стоит отметить, что приведённые выше специальности являются очень востребованными на рынке, и порой зарплаты в данных областях могут превосходить зарплаты самих программистов.
Создаём первую HTML страничку
Для того, чтобы понять подойдёт ли вам программирование, стоит попробовать его. Если разработка и реализация алгоритмов не приносит вам удовольствие, тогда нет смысла тратить на это время.
Для того, чтобы определить сможете вы стать программистом или нет, проведём небольшой тест, который не потребует особых знаний, кроме тех, как пользоваться персональным компьютером (создавать и открывать файлы).
Если вы никогда не сталкивались с программированием, то веб-разработка, в частности вёрстка, будет лучшим выбором.
И для этого у вас уже все есть, вам всего нужно сделать 2 вещи:
- Создать файл и назвать его index.html, самое главное указать расширение файла ".html". Если вы используете Windows и у вас скрыты расширения файлов, то вам нужно открыть параметры папок, выбрать вид и там в списке свойств, будет флажок "Скрывать расширения для зарегистрированных типов файлов". Нужно снять галочку и нажать ок. (Если возникли проблемы, просто прочитайте вот эту статью)
- Затем, откройте созданный файл index.html в блокноте и вставьте следующий текст:
Откройте файл с помощью любого браузера, таких как Google Chrome, Yandex Browser или Firefox.
Открыв страницу, вы должны увидеть:
Поздравляю, вы написали свой первый сайт!
Было очень тяжело. Я прям сознаю, что мне потребовалось не один год, чтобы сделать это. Годы практик и медитаций, сотни прочитанных книг и я смог разработать свой первый сайт.
Самое главное: Если вы смогли сделать то, что описано выше - открыть файл и увидеть результат, то Вы можете стать программистом!
Если у вас не получилось, вы должны попробовать ещё раз, потом ещё раз. Как только у вас получиться, вы автоматически становитесь - программистом. Так как большая часть работы программиста искать и исправлять ошибки, которые он допустил в процессе работы.
Конечно, вряд ли в первые года, вы сможете похвастаться первоклассными познаниями в устройстве и принципах работы, но за пару лет и никто не сможет предположить, что вы научились всему сами. Опыт возьмёт своё, как и везде в принципе.
Как прейти к программированию
С тем кто Вы, мы разобрались, теперь осталось понять, как стать хорошим, даже отличным, высокооплачиваемым специалистом.
Для этого, нужно набраться опыта и получить недостающие знания.
Где брать знания?
В 2020 году, весь интернет наполнен онлайн курсами по программированию, как платными, так и бесплатными. Так как предполагается, что у читателя не большой опыт с IT и программированием, то есть один важный совет, который сможет сэкономить много денег и времени:
Большинство платных курсов по программированию - бесполезная трата денег. Они сделаны для людей не знакомых с программированием. Скорее всего там будут рассказываться основы, которые Вы сами можете изучить, прочитав одну из миллиона книг. По окончанию курсов, вы вряд ли почувствуете себя программистом и сразу устроитесь на работу. В моей практике, я не встречал такого человека, который без знаний закончил курс и сразу устроился на работу.
Платить за курсы можно, но только тогда, когда вы понимаете чему вас научат и нужны ли вам эти знания. На мой субъективный взгляд, на первых порах, это бесполезная трата ваших денег.
Есть исключения это буткемпы, которые стали появляться в некоторых городах России, например в Москве. Бутекемпы -это программы интенсивного обучения, где вас на 3 месяца погружают в такую атмосферу, где вы учитесь у очень компетентных преподавателей, программируете 24x7, и после окончания курса, вы действительно становитесь хорошим начинающим специалистом, который может уже устраиваться на работу. Подробнее о принципах буткемпа можно посмотреть в видео - Всё о БУТКЕМПАХ / КРЕПКИЙ программист за три месяца / Основатель javascript-буткэмпа Elbrus
Что искать?
Как было сказано ранее, нужно представлять,чему учиться. В программировании с 60-х годов двадцатого века, есть один нерушимый базис, на котором строится каждый язык программирования.
Всегда будут следующая пятёрка:
- Константы и переменные, и работа с переменными
- Массивы и работа с массивами
- Функции и работа с функциями
- Циклы, условные операторы
- Структуры данных и работа со структурами данными
Даже дадим наглости волю и расскажем, что это.
Переменные и константы можно представить как карточки, на которые можно записать значение. Константу можно описать как писание ручкой на карточке - написали один раз и нельзя изменить (стереть значение). Переменные - это записывание значения карандашом, то есть значение можно стереть и записать новое.
Массивы можно представить как ящички, в которые вы можете хранить карточки. Есть разные виды массивов (ящичков), которые могут хранить только одно значение в ячейке, а могут быть и такие, где элементами массива могут быть другие массивы (ящик внутри ящика).
Функции, это специальные операторы, которыми может пользоваться программист для составления программ, которые могут использовать переменные и как-то их изменять. Например, можно написать функцию, которая будет возводить число в квадрат. Например, если в функцию передать 2, то она вернёт 4, если передать 4, она вернёт 16.
Для того, чтобы далеко не ходить, откройте ранее созданный файл в блокноте - index.html.
Добавим немного кода на JavaScript и получим следующее:
Сохраним файл и откроем его в браузере.
Никаких изменений мы не увидим, так как все что было добавлено, будет выведено в консоли. Для того, чтобы открыть консоль, нажмите F12 или, если вы используете Mac, Cmd+Opt+J, и выберите на открывшейся панели вкладку Console.
В результате, вы должны увидеть:
Отлично, переменная variable, была создана и выведена дважды.
Теперь создадим массив и выведем его значения, добавив конец код, перед тегом "</script>":
Вновь сохраним и обновим страницу.
И в конце, добавим функцию, которая возводит число в квадрат:
Сохраним и обновим страницу:
Мы только что, создали свою функцию, которая возводит число в квадрат. На этом, пока остановимся :)
Большинство книг будут рассказывать об этом на 200-300 страницах, с множеством дополнений. Если вы поняли хотя бы половину, что было описано выше, вы с лёгкостью научитесь всему сами!
Какие онлайн курсы и ресурсы выбрать?
Для веб разработки, существует множество бесплатных ресурсов для начинающих web-работчиков на русском языке.
Из самого популярного и доступного:
- HTML академия - https://htmlacademy.ru/courses/basic-html-css
- Learn javascript - https://learn.javascript.ru
- MDN web docs - https://developer.mozilla.org/ru/docs/Learn/JavaScript
Если вы любите смотреть, есть огромное множество видеоуроков на Youtube: https://www.youtube.com/results?search_query=html+%D1%83%D1%80%D0%BE%D0%BA%D0%B8
Выбирайте того, кто больше нравиться :) Я бы рекомендовал пару каналов, такие как: Loftblog, АйТиБорода, Senior Software Vlogger, CodeDojo, Академия яндекса, Web Developer Blog.
Книги, дело хорошее, правда для начинающего программиста их немного, но я согласен с автором подборки статьи - Вёрстка и дизайн: подборка книг для начинающих веб-разработчиков.
Из ресурсов для расширения кругозора, на русском на первое время достаточно трёх: Habr.com, Top proger и Medium.com
Как и сколько учиться?
Малкольм Гладуэлл, автор потрясающей книги - Гении и аутсайдеры, пытается доказать утверждение, что со стороны статистики для освоения профессии нужно 10 тысяч часов.
Это справедливо и для Web-разработки. То есть, если вы будете тратить по 4 часа на программирование, каждый день - 4 x 365 = 1460 часов. Другими словами за 7 лет, вы станете одним из лучших программистов, как и в любой другой профессии, если будете ей заниматься.
На первых парах, занимайтесь столько, сколько можете и насколько это интересно. В идеале не меньше 1 часа в день, но не более 4-х, если вы работаете на основной работе и программирование не является основным источником дохода.
Помните, перегореть очень легко, а мы говорим о том, как найти призвание и работу мечты, и если у вас не будет сил, то зачем всё это?
Но что делать без опыта работы?
Основной задачей разработчика и программиста сформировать портфолио, то необходимо его сделать. Наиболее успешным, будет сделать свой собственный сайт - блог или сайт визитку. Как только вы закончите, расскажите своим друзьям. Я почти уверен, что через неделю вам позвонит друг, и попросит сделать ему сайт.
Я так 5 лет получал заказы от своих друзей и знакомых, и только после 5 лет, начал отказывать, ссылаясь на отсутствие времени :) Хотя друзья обращаются и сейчас.
Как только у вас будет около 5 сайтов, то уже можно попробовать поискать работу. Это может быть как стажировка в компании, так и любые онлайн площадки в виде freelance, upwork'а.
На что смотрят работадатели?
Все IT компании смотрят на ваш опыт. Эта одна из тех областей, где ваш диплом, может подпирать диван, и всем будет без разницы, что вы 6 лет не спали, чтобы получить красный диплом. Единственный вопрос, который из этого последует - А это стоило того?
Каждая IT компания ищет людей определённого склада, которые чаще всего вытекают в следующий список:
- Определённый склад ума
Умение решать задачи простым путём, без чрезмерного усложнения. - Саморазвитие и самообразование
Разработчик должен хотеть развиваться и развивается сам. Чем больше знает разработчик, тем больше зарабатывает компания. - Нацеленность на результат, а не на процесс
Цель любого бизнеса - зарабатывать, и если программист разрабатывает продукт, который не может зарабатывать, то такой программист никому не нужен. - Умение оценивать трудозатраты
Разработчик должен уметь прогнозировать время разработки задач, которые он никогда не решал, но смог бы их решить. Почти как в угадай мелодию, только вместо нот, количество дней или недель. - Умение работать в команде
Любой программный продукт это результат работы команды. Чем более продуктивно идёт коммуницирование в команде, тем быстрее и качественнее развивается продукт. - Владение или желание овладеть определенным стеком технологий
Наверное, это ключевые навыки со стороны программиста. Возможно HR будет не согласен со мной, но в моей компании, где я работаю его нет, и это хорошо :)
Как видно из списка, там нет ни диплома, ни стажа, ни опыта работы на предыдущих местах и всей остальной чуши, что присутствует в любой государственной конторе - Бюрократии.
Поработав несколько лет, если вы будете стараться и на каждой работе выкладываться на 110%, то непременно устроитесь в одну из бирюзовых IT компаний, в которой нет начальников, планов, менеджеров, а есть только очень интересная и увлекательная работа с очень высокой зарплатой. Про бирюзовые компании можно почитать в статье - Бирюзовые организации все о тренде и что почитать.
План - Web
Что такое программирование, мы поговорили, где почитать, тоже сказали, на что смотрят работодатели поговорили, осталось самое главное - план.
Так как план это сугубо личное дело, и у каждого он будет свой, я постараюсь сделать несколько набросков, чтобы вы, после прочтения могли составить свой план, исходя из своих потребностей и возможностей.
Каждый программист работает с определенным набором (стеком) технологий. Для каждой области разработки есть свои наборы, но благодаря глобализации и информатизации, все современные решения так или иначе копируют и реализуют лучшие идеи. На пороге 2020 года, все самое новое и вкусное, в течении небольшого времени появляется в каждой из подобластей программирования.
Например, в придумали лямбда функции, и раз они есть во всех языках программирования. Стал популярен IoC, и для каждого языка есть своё решение. Вышла библиотека для управления реактивностью Rx, так сразу выпустили RxJava, RxJS, RxC# и т.д.
Web-разработка
Веб-разработка строиться на 3 столпах:
- HTML
HTML - это не язык программирования, а набор правил для оформления и расположения элементов на странице. - CSS
CSS - это система каскадных стилей, которые позволяют HTML задавать определённые стили (цвет, размер, положение на странице, фон, шрифт и много других свойств). - JavaScript - язык программирования, которой является ядром всех современных сайтов.
Также очень важно знать некоторые аспекты сетевых технологий:
- протокол HTTP
- принципы работы web серверов, таких как nginx
Основная задача веб-разработчика - попробовать весь набор современных технологий, и понимать зачем и почему они нужны. В идеале идти историческим путём от самых старых технологий к новым, чтобы не возникало ощущение - "А зачем это? А это?".
Первой целью будет изучение основ HTML и CSS, для того чтобы ознакомиться с основами разметки (вёрстки) и создания прототипов страниц, в которые можно будет добавлять различную логику.
Второй целью будет изучение основ JavaScript, чтобы для разработанных ранее страниц, добавить динамику, анимацию, обновление данных и т.д.
Так как JavaScript сейчас проникает во все области программирования, не стоит распыляться на огромное количество решений. Лучше всего учить нативный JS, то есть не использовать фреймворки или библиотеки.
Фреймворки сами придут в вашу жизнь, когда вы будете готовы. Но знайте с большой силой приходит и большая ответственность.
Третьей целью будет изучение основ серверной настройки. Другими словами вы должны научиться размещать свои наработки в сети интернет. Без этих знаний, вы не сможете в дальнейшем понять, почему та или иная библиотека, фреймворк работает не правильно, но что ещё более важно, как писать безопасный код. В данной области вы познакомитесь с Linux, консолью, изучите ряд базовых утилит.
Четвёртой целью будет изучение любого серверного языка и знакомство с базами данных. В данной области, вы должны научиться работать с серверной (бизнес) логикой, такой как создание, редактирование, удаление данных, обработка событий, работа с API. Без понимания работы серверной логики, вы не сможете писать эффективный и высокопроизводительный код.
Пятой целью будет изучение современных средств сборки проектов (создание докер образов) и их размещение на сервере (например, деплой с помощью kubernetes).
Разобравшись с этими пяти целями, вы уже сможете выбрать свою область разработки и остаться в ней.
Отмечу, что все это будет приходить в вашу жизнь постепенно, а не одним большим комом, так что не пугайтесь.
Шаги по изучению веб-разработки
Шаги можно описать так:
Шаг 1. Вы решили разрабатывать свой первый сайт. Выбрали уроки (онлайн, офлайн, книги или персональный коуч в виде вашего друга или соседа).
Шаг 2. Вы начинаете изучать основы HTML и CSS. В результате вы получаете возможность создавать статичные странички, которые уже можно выкладывать в интернет, но им не хватает динамики и вы переходите к изучению JavaScript.
Шаг 3. В погоне за динамичностью и функциональностью, перед вами во всей красе раскрывается программирование в виде JS. Погрузившись в JavaScript, вы сознаете, что это бездонное море, и доделав первичные вещи для своего сайта, понимаете, что его пора размешать в интернете.
Шаг 4. Для размещения сайта вам приходиться понять принципы сетевых технологий и начать изучать работу веб-серверов. Получив необходимый пласт знаний, вы выкладываете сайт в интернет.
Шаг 5. Как только вы выложили сайт, вы понимаете, что обновлять и поддерживать его без бекенда и базы данных очень тяжело, и решаете изучить какой-нибудь серверный язык программирования.
Вы переходите на тёмную сторону силы, и меняете профиль с фронтенд разработки, на бекенд разработку.
Шаг 1. Вы ищите информацию о том, что же выбрать и учить в качестве серверного языка. Если вам повезёт, ты найдёте хорошие туториалы по NodeJS и останетесь в JavaScript, иначе вас снесёт в PHP.
Шаг 2. Вы учите основы работы с серверным языком, и по аналогии с HTML и CSS, создаёте свои первые динамические странички
Шаг 3. Осознаете, что вам нужна база данных, начинаете изучать SQL и пишите свои первые sql-запросы.
Шаг 4. Вы интегрируете sql в свои динамические странички, и вы уже почти готовы залить их на свой сервер, где храниться ваш сайт, но вам говорят, что так делать нельзя, и нужно все переделывать, желательно на каком-нибудь фреймворке.
Шаг 5. Вы выбираете фреймворк и начинаете учить его. Спустя некоторое время вы узнаете про ООП, ORM, GIT, Package manager'ы, и все, что тащит за собой фреймворк.
Шаг 6. Наконец, прочитав основную документацию, вы начинаете переписывать свой сайт, согласно всем канонам нового фреймворка.
Шаг 7. Закончив перенос проекта, вы решаете залить на сервер. Но вы не можете этого сделать, так все время, что-то падает, ломается и отваливается. Вы начинаете злиться и вообще решаете, что веб-разработка это кусок говна. Но рядом проходит DevOps, и говорит, что вы не можете просто так всегда настраивать сервер руками, при чем ещё из под рута, и начинает балладу о docker и kubernetes.
Теперь вы переходите из тёмной стороны силы на сторону магии.
Шаг 1. Вы начинаете читать туториалы по сборке докер образов.
Шаг 2. Забив все свободное место на компе, у вас получается собрать образ, который можно задеплоить, однако вы не выучили ничего про деплой.
Шаг 3. Вы учите документацию по kubernetes. Создаёте свои ноды и т.д.
Шаг 4. Наконец, вы смогли прокинуть докер образ в кибернейтс, и теперь спустя пару месяцев заливаете свой сайт на сервер, где все автоматизировано.
Шаг 5. Вам становится лень наживать кнопку деплоя, и вы пишете автоматизированную систему, где после коммита, происходит автоматическая сборка проекта, и при завершении в чат телеграм бот пишет сообщение о успешном деплое.
Прошел год
Итак, прошёл год с момента написания первой HTML страницы, заканчивая сборкой докер образа. Вы начинаете думать, почему так, и уже решаете, что из приведённого выше вам больше понравилось.
Кто-то остаётся DevOps'ом, кто-то возвращается в back-end, а кто-то вспоминает то удовольствие, которое им приносило создание страничек, и возвращается к основам и становиться Front end разработчиком, но не на светлую сторону силы - после полученных знаний, данный разработчик является чернокнижником, потому что он знает слишком много, для того чтобы просто довольствоваться светлой стороной.
Резюмируя выше сказанное. Если вы пройдёте все эти шаги, и будете знать и понимать как это все работает, то любая IT компания схантит вас и предложит зарплату от 100к, по крайней мере в не глухой Сибири - Новосибирске это точно. Но не стоит забывать о огромном мире и удалённых компаний. Вы успешно можете работать в любом городе удалённо на Москву, где уровень зарплаты ещё выше.
Есть ещё один лайвхак - если вы выучите английский и у вас не будет разговорного барьера, то IT откроет вам двери в любую страну мира и зарплату в 1 миллион в месяц. Так что подумайте! Хорошо подумайте :)
Резюме
В данной статье мы поговорили об основных заблуждениях о необходимых навыках в программировании. Выполнили небольшое задание, чтобы доказать утверждение о простате программирования. Поговорили о том, где, что и как учить для веб-разработки, а также рассмотрели требования на которые смотрят современные IT компании при найме новых сотрудников. Рассмотрели основные пункты при изучении веб-разработки и определили 5 целей, которые должен достичь начинающий разработчик.
В конце посмотрели на полушутливые, на половину жизненные шаги по изучению веб-разработки, на который уходит один год интенсивного обучения, но с собой приносит огромные возможности для творческой реализации в области программирования.
Спасибо за внимание.!
Подписывайтесь на канал! На медиуме у меня есть статьи по программированию, но правда они в основном для бывалых разработчиков :)