Сегодня я бы хотел поговорить о том, кто же такой программист и как им стать.
Программист в широком смысле - творец. Человек, создающий какую-то магию в виде кода, по которому потом сложные системы работают, заводы строят машины, самолеты летают. Всем управляют программы, написанные людьми.
Для меня это очень интересная работа, даже, можно сказать, увлечение.
И как им стать?!
Вариантов, как стать программистом, очень много:
- Окончить ВУЗ и получить диплом будет круто. Еще круче, если это, например, МФТИ. Но есть одно “но”- пока вы учитесь, все идет вперед. Что вы изучили на 2 курсе, скорее всего, уже устареет на пятом. Несомненно, это будет хорошей базой и, если позволяет время и целесообразно в вашем случае, то можно рассмотреть и такой вариант. Если уже идти в ВУЗ, тогда брать по максимуму и параллельно изучать самостоятельно новые технологии, делать проекты, заявлять о себе, а не просто отсидеться.
- Окончить курсы, которых сейчас много и все разные. Ругать не буду, надо выбирать. Вполне возможно, для кого-то это будет подходящим вариантом.
- Самостоятельный вариант обучения. Это оказался мой вариант. В этом случае вы ничем не ограничены. Любые источники информации доступны, сами выбираете технологии, выстраиваете план обучения.
Какой бы вариант вы не выбрали, надо понимать, что залогом успеха будут понятная траектория, регулярность, много практики=проектов, сторонний опыт.
Моя базовая специальность радиотехника, изучал микропроцессоры. Во время учебы много программировал, но это был Ассемблер и С. В то время было мало интересной работы в этом направлении. Я решил, что нужно что - то современное и попробовал Java. Мне понравилось, все оказалось понятным. Ушло около года регулярного изучения,чтобы с нуля дойти до хорошего уровня Java. И это параллельно с основной на тот момент работой.
Самообучение или курсы
Что же выбрать? Все индивидуально. Универсального решения быть не может. За выбором часто стоят сомнение и страх. И это вполне понятно. Какие же могут быть вопросы в начале или в процессе обучения:
- как начать;
- не получится, будет сложно;
- как совмещать;
- не хватит времени;
- сложно структурировать информацию;
- теория понятна, а на практике сложно;
- по туториалам получается, а самостоятельно - нет;
- сложности с алгоритмами;
- что учить дальше и т. д. по списку.
Одним подходит удаленка, а другим - офис. С курсами и самообучением похожая ситуация. Оба варианта не исключают друг друга. Важно понимать свою цель.
Тогда останется выбрать способ достижения, ориентируясь на определенные критерии и свои вводные данные. И уже исходя из этого, можно простраивать свою траекторию. В случае курсов предполагается, что план есть, но это условно, и на определенном этапе может стать неплохим вариантом, чтобы сложился какой-то пазл. Неизменным условием эффективности в обоих случаях будет много практического опыта, максимально приближенного к реальному, большой объем самостоятельной работы.
Чтобы не перегореть и дойти до первых результатов, как раз важно подойти к этому максимально грамотно и осознанно. Причем, это работает и на этапе реализации как специалиста, чтобы понимать, куда двигаться.
В моем случае была смесь классического образования по радиоэлектронике и микропроцессорам и большого объема самообразования по JAVA. Мой бэкграунд позволил в свое время заявить о себе и попасть в IT компанию, дальше расти уже исключительно в этой области. У меня есть понимание, какой должен быть roadmap и как организовать работу.
Как успеть за технологиями
Чтобы было понимание, нужна практика. Для этого отлично подходит проект, т.е. любой законченный по функционалу код. Например, утилита, которая как-то преобразует файлы, сайт с резюме - это проекты. Можно придумать свой или взять идею уже существующего сервиса/приложения. Это может быть автоматизация рутинных дел для себя или отдела на работе. Вот уже опыт самостоятельной разработки и ощутимый результат. Если в итоге интерес не ушел, это хороший знак.
Реализация проекта осуществляется посредством технологий. Это инструменты, с помощью которых создаются системы. В мире IT все очень быстро меняется, поэтому не нужно пытаться изучить на будущее. Какие-то технологии становятся неинтересными (например, протокол Soap, системы main frame), появляются новые (нейронные сети, системы искусственного интеллекта, blockchain).
Возникает вопрос, какие технологии изучать? Нужно выстроить какой-то базовый уровень знаний. Например, хотите стать java-программистом. Считаем, что уже есть понимание, как устроен ПК, сами можете поставить ОС и настроить необходимое ПО. Если учесть, что сейчас большая часть разработки это клиент - серверные приложения, где клиент - это браузер пользователя, а сервер - это и есть код, то можно выделить базовые, необходимые технологии:
- Java core - это основы языка, языковые конструкции, типы данных и их устройство, управление исполнением программы, базовые функции ввода / вывода и т.д.
- Системы сборки и управления проектом - maven для начала, потом gradle.
- Системы контроля версий - берем самую известную сейчас - GIT.
- Протокол обмена - REST.
- Формат данных - Json.
- Ну и для упрощения добавляем сразу Spring Boot (Spring Framework).
Дальше можно выделить дополнительные технологии (для кругозора):
- Сервера приложений Apache Tomcat, Jetty и Netty, чтобы понимать, как настроить и какие ошибки выдает.
- Протокол http и как работают браузеры.
- Контейнеризация и облака - k8s и docker.
- SQL базы - PostgreSQL.
Остальное изучаем по необходимости и желанию. Например, на проектах также могут использоваться такие технологии,как JMS, docker, NOSQL. И не бегите за всеми технологиями, основа - это глубокие базовые знания.
Что дальше?
Планирую выложить источники, по которым можно обучаться, обзоры книг и примеры заданий под разные уровни подготовки.
