Как стать разработчиком с нуля: необходимые знания, советы для начинающих
Допустим, ваша специальность далека от IT. Неважно, по какой причине, вы решили построить карьеру разработчика. Повлиять на это может исключительно ваша мотивация и цели.
Большинство проблем может быть решено при наличии времени и средств. Перед осознанием данного тезиса, в интернете придётся потратить довольно много времени. Нужно будет пройти через множество попыток что-то сделать, попробовать, понять.
В этой статье рассмотрено, как стать разработчиком, не имея опыта в айти. Будет дана информация о главных сферах в программировании и важных знаниях и навыках.
Востребованность программистов
Разработчик это сложная, однако, популярная на рынке профессия. С каждым годом технологии усложняются, а вакансия становится популярнее. Это происходит по причине роста конкуренции. Айти-отделы большинства компаний. Из-за возможности работать удалённо, конкуренция айтишников из одного города перерастает в конкуренцию айтишников из одной страны.
На сайте HeahHunter число вакансий разработчиков почти на 10 тысяч превысило число водителей. При этом рост их востребованности с каждым годом растёт.
Разработчики получают большие средства, а город проживания не влияет на зарплату. На московскую, европейскую или американскую компанию можно без проблем работать, проживая, например, в небольшой деревне.
Необходимые разработчику знания
В зависимости от сферы разработки меняется набор знаний и навыков, необходимых для работы. Мы рассмотрим базовые знания и технологии, необходимые для каждой отдельной сферы.
Создание приложения
Практически все системы работают по единому принципу. Вначале разрабатывают серверную часть. Она выполняет основной функционал.
Для пользователей создают приложения, через которые они пользуются системой.
- Составляющие серверной части (Backend'a), это приложения, хранилище со всеми данными и дающий доступ к функционалу системы API. У системы может быть разная архитектура, она влияет на взаимосвязь и количество программ.
- API возможно построить на разных технологиях, например, на REST, API, RPC, gRPC, GraphQL и т.д. Первые проекты могут быть созданы с использованием REST API, построенного на протоколе HTTP. Далее технологии выбираются в зависимости от функционала отдельно взятой системы.
- Backend-приложения могут быть разработаны на разных языках программирования: C++, Python, Golang, Java, NodeJS, Ruby, PHP и другие. Выбрать стоит Java или Python, ведь по ним можно найти множество обучающих курсов и книг.
- Система имеет смысл, только если в ней хранятся данные. Бывают разные типы хранилищ, они могут быть графовыми, ориентированными под документы, распределёнными, а также SQL и NoSQL хранилищами. Разработчику нужно уметь самостоятельно проектировать схему данных хранилища.
- Для создания бэкенда нужен не только код. Важно уметь работать с серверными операционными системами Linux. Созданное приложение должно быть развёрнуто и запущено на сервере. Следует также разобраться в веб-серверах. Это поможет не дать обычным пользователям через приложение получить доступ к серверам. К примеру, полезным может оказаться навык работы с популярным NGINX.
- Ubuntu и Debian - наиболее популярные ОС. До 2021 года была известна ОС CentOS, однако данная система перестала поддерживаться. Выбирать стоит между Debian и Ubuntu. В Ubuntu больше пользователей и много информации, поэтому рекомендуем выбрать её.
- Обязательно должен присутствовать доступ к API через интернет. Таким образом пользователи приложений смогут к нему обращаться. Необходимо разбираться в работе интернета. Полезно разобраться и в технологиях DNS, протоколах TCP/IP, HTTP, WebSocket. Необходимо также понимание работы браузера.
Backend-разработчик - программист, занимающийся разработкой сервера. Обычно выбирается разработчик, работающий с используемым в конкретной фирме языком программирования. К примеру, могут искать Python Backend-разработчика.
Необходимо создать программу, чтобы позволить пользователям взаимодействовать с системой. На каждой платформе требуется отдельная разработка, чтобы на любом телефоне, компьютере и браузере оно работало исправно.
- Версии для десктопа - операционные системы Windows, Linux, macOS. При создании программ для Windows чаще всего используются C# и C++, иногда - Java или Python. При программировании для Linux - C или C++, для macOS - OmjectiveC, Swift. Создание программы для десткопа требует понимания устройства операционной системы, ведь будет использоваться её API. Можно также встретить кроссплатформенные фреймворки. Они позволяют писать приложение одновременно под несколько операционных систем. Программа в таком случае будет выглядеть одинаково на каждой ОС.
- Для мобильной разработки существует свой язык и экосистема. Приложения для Android используют C++, Java, Kotlin. iOS требует ObjectiveC и Swift. Также нужна установленная macOS и XCode - специальная среда разработки. Эти компоненты обязательны для разработки под macOS. Бэкенд не обязателен для создания приложений под десктоп и мобильные устройства, однако в таком случае для вычислений используется само устройство, что приводит к ограничению функционала такого приложения.
- React.js, Vue.js и Angular чаще всего применяют в веб-разработке. Именно эти три фреймворка интересуют рынок больше всего. Основа этих технологий - JavaScript, позволяющий производить манипуляции со страницами в интернете, взаимодействовать с пользователем, работать с веб-сервером. К тому же следует разобраться в DOM и VirtualDOM, изучить HTML и CSS. Эти знания необходимы для создания приятных глазу и комфортных в использовании ресурсов.
Frontend делает запросы в Backend, так что разработчик должен иметь навыки работы с организацией API, разбираться в сетевых технологиях. Frontend-разработчик - специалист, занимающийся веб-приложениями. Fullstack-разработчик - специалист, умеющий создавать как Backend, так и Frontend.
Читайте материал по теме! Frontend или backend: чем отличаются и какой вид разработки выбрать https://sky.pro/media/frontend-ili-backend/.
Machine Learning (ML), Data Science
Разработка приложений, конечно, активно развивается. Однако популярность набирают и другие сферы - обучение искусственного интеллекта и обработка данных.
Чтобы работать с массивами, можно использовать разные языки. Наиболее популярные - Python и R. Среди специалистов Big Data в 2013 году был проведён опрос. Наиболее распространённым языком стал R, набрав 61%. Python был на втором. Недавно появился эффективный и удобный язык Julia. К нему сложно найти нужные библиотеки или инструменты, ведь Julia довольно молодой язык.
ML-разработчику необходимо использовать алгоритмы для принятия решений, что в свою очередь нужно создания моделей данных. К примеру, отличие кошки от собаки. Некоторые модели создаются при помощи учителя. Это человек, специально отмечающий правильные ответы, чтобы в будущем компьютер мог самостоятельно решать поставленную перед ним задачу. Учиться модель может и без учителя. ML-разработчик должен иметь хорошее знание математики.
С каждым годом растёт популярность анализа массивов данных и специалистов в Big Data. К примеру, Яндекс стал набирать аналитиков. Специалист должен писать скрипты на Python, делать выборки и обрабатывать терабайты данных. Благодаря выборкам удаётся создать аналитику. Её компании используют для принятия важных, выгодных решений.
Инфраструктура
Каждое приложение нуждается в серверах, которые можно настроить. Очереди, хранилища для хэша, мониторинги и другая дополнительная инфраструктура встречается в более сложных программах. Эти продукты должны быть развёрнуты и настроены.
Занимается этим специальный разработчик - Software Engineer. Это название в России не прижилось, поэтому чаще данных специалистов называют DevOps, системными администраторами или разработчиками инфраструктуры.
Software Engineer - специалист, обладающий достаточными навыками, которых достаточно чтобы создать скрипт, который помогает решать задачи и конфигурировать продукты и ОС. Чаще всего Software Engineer использует bash, Python или Perl.
Он обладает навыками использования Ansible, Chef, Puppet, может развернуть систему оркестрации - Noman, Apache, Mesos, Docker Swarm, Kubernetes и другие. В лучшем случае он должен иметь небольшое представление о каждом продукте и комплексной системе различных применений. К примеру, мониторинга, сбора метрик и логов, обработки очередей и т.д.
План развития разработчика с нуля
Лучшим решением сначала будет создать домашний проект. Во время обучения нужно одновременно изучать теорию и практиковаться. Домашний проект поможет сразу использовать изученную теорию и закреплять её на практике. Простое чтение книг и просмотр видеороликов и курсов не дадут значительный эффект без практики.
К примеру, если ваша цель - построить карьеру Python Backend-разработчика. У вас есть отличная идея - создать сервис с заметками. При этом храниться данные будут непосредственно у вас, а не у сторонней компании. Вы выбрали REST API и MongoDB для базы своего бэкенда. Далее вы открываете уроки по Python, перепечатываете код для поднятия веб-сервера и создания эндпоинта вашего REST API и вывода текста Hello World. Далее открываете туториал по работе с MongoDB и изучаете работу Python с данными.
Далее вы постоянно редактируете код, изучаете результат, анализируйте его и делайте выводы. Со временем у вас получаются endpoint'ы, записывающие данные в БД. Вместе с этим вы понимаете устройство HTTP-запроса. Со временем вы реализуете весь функционал своей программы. Во время работы, нужно постоянно анализировать каждую ошибку и учиться на неудачах. Полезно попутно читать специальную литературу и статьи, чтобы получать новые навыки и получать больше полезных знаний.
Разобравшись в языке, его возможностях, сильных сторонах, синтаксисе, начинайте задумываться об использовании паттернов проектирования в вашей программе. В этот момент можно изучать литературу по этой теме или смотреть обучающий курс. Со временем вы разберётесь в любых сложных темах и начнёте думать об их использовании в собственной программе.
В какой-то момент ваша программа будет создана. После развёртки и запуска оно будет работать. В один момент из-за технических работ оно перезагружается. И вот приложение уже не работает и требует повторного запуска. Вы ставите перед собой задачу заставить программу стартовать вместе с запуском сервера.
В этом вам помогут утилиты supervisord и systemd. Изучив эти утилиты, прочитав описание и туториалы, исправив кучу ошибок, вы буквально получите опыт и решённый кейс. Чуть позже вы хотите запускать приложение в Docker-контейнере или сделать асинхронный API, Вы точно также получаете новый опыт и знаете, как это делать.
Советы для начинающих
- В самом начале устанавливайте наилучший IDE для используемого вами языка. Правильное использование IDE, сделает так, что код будет создаваться в разы быстрее благодаря использованию горячих клавиш. Не убирая руки от клавиатуры, можно работать намного быстрее. Многие языки программирования имеют IDE от JetBrains. Почти все они имеют бесплатную версию с урезанными функциями.
- Рекомендуется завести блокнот для всех идей и проблем.
- Все инструменты, которые вы используете в работе, изучайте на 100%.
- Первый домашний проект должен быть довольно прост, чтобы его реализовать. Выполненная задача повысит мотивацию и учиться дальше будет легче.
- В телеграмме или в социальных сетях стоит найти профильные чаты. Общение с единомышленниками и хорошими программистами помогает развиваться.