Как научиться программировать?

Подробное руководство на пути к становлению бэкенд разработчиком в 2018, которое поможет избежать подводных камней и научиться программировать

September 3, 2018 - 6 minute read -
it

Введение

Привет, возможно ты попал сюда поскольку только начинаешь или думаешь о том, как научиться программировать. Возможно ты уже активно погружаешься в этот мир, в любом случае прочти это руководство до конца, я уверен что ты найдёшь полезные для себя вещи.

Самое начало или чему следует учиться сейчас

Скорее всего для тебя не будет являться секретом момент, что одна из самых активных областей сейчас это веб-разработка, именно с этого пути относительно просто начать и довольно не трудно мигрировать в другие области.

Стоит различать, что называется конвеерную часть, когда “веб-разработка” происходит не квалифицированными людьми с использованием конструкторов, в чём собственно совершенно нет ничего плохого, от разработки проектов, которые несколько сложнее. Речь в данном руководстве пойдёт о втором варианте, который в принципе является неплохим прыжком в карьере программиста, так что дальше можно двигаться в любую область.

С чего начать?

Шаг 0 – Развивать алгоритмическое мышление

Так устроен мир, что кому-то изначально проще думать в рамках алгоритмов, если для вас это пока тяжело, рекомендую начать с чего-то попроще, например различных игр обучающих программированию, также есть очень большое количество литературы и обучающих курсов, видео, которые помогут развить алгоритмическое мышление.

Также вы можете пробовать решать различные логические задачи, это также поможет развить работу нужных отделов мозга для работы разработчиком.

Также очень неплохо, если ты понемногу начнёшь изучать, возможно не совсем любимую и понимаемую тобой математику, иногда она очень пригождается даже в веб-программировании, а особенно когда речь заходит об использовании алгоритмов, оптимизациях, структурах данных, и т.д, да и в целом она очень хорошо развивает мышление и некоторые вещи покажутся тебе намного проще.

Шаг 1 – Изучение языка

Для начала я рекомендую тебе начать с изучения языка (языков) программирования, которые ты будешь использовать в качестве своих основных инструментов:

  • Джентельменский набор фронтенда - JavaScript, CSS, HTML
  • Бэкенд (что больше нравится), я буду больше покрывать именно Бэкенд, поскольку в случае с фронтендом средств для изучения больше
    • PHP (дальше я буду приводить ресурсы по нему, но с остальными плюс минус всё идентично и перемещаться между ними при желании можно свободно)
    • Python
    • Ruby
    • Node
    • Другое

Единственный правильный путь, как мне кажется, это не зазубривать документацию и руководства, а что называется learn by doing, то есть постепенно погружаться в экосистему, разрабатывая что-либо полезное (для себя, open source и т.д.).

Собственно:

  • Мы выбираем язык (дальше предположим, что выбрали PHP)
  • Мы изучаем его параллельно с другими этапами, реализуя различные небольшие вещи

Неплохим достижением при изучении языка можно назвать знакомство и овладение с джентельменским набором любого языка - переменные, стандартные библиотеки, массивы, операторы, константы, функции, классы, методы, наследование, строки и работа с ними и т.д. Но не стоит считать владение и знание этого набора самоцелью, постепенно, при активном использовании эти вещи начнут запоминаться и ты научишься использовать их там где необходимо.

Практиковаться можно решая различные задачи, например на HackerRank или CodeForces, либо попытайтесь решить какую-либо свою задачу, например автоматизировать то что вы делаете каждый день.

Полезные ссылки:

Шаг 2 – HTTP. Веб-сервер

Поскольку мы работаем в веб среде, тебе нужно познакомиться с основными концепциями веба, а именно:

  • Механика работы HTTP: GET, POST и другие запросы, соединения, и т.д.
  • Веб-сервер, изучить то как происходит взаимодействие PHP с ним
  • Статика и динамика

В качестве практики, необходимо добиться вывода динамических данных в браузере, которые бы менялись в зависимости от запросов, например пользовательского ввода, либо поискать интересные задачи в интернете.

Полезные ссылки:

Шаг 3 – Стандарты и лучшие практики

Практически для любого языка присутствуют некоторые принятые стандарты и лучшие практики написания кода. В случае PHP это PSR, (на русском). По началу, некоторые вещи могут казаться контринтуитивными и не совсем удобными, но постепенно прийдёт понимание об удобстве работы в соответствии со стандартами и лучшими практиками.

Полезные ссылки:

Шаг 4 – Менеджер пакетов

В современных языках поголовно присутствуют собственныые менеджеры пакетов, позволяющие управлять зависимостями проекта. Для PHP это Composer.

Вкратце, что позволит и упростит Composer:

  • Получение зависимостей существующего проекта
  • Добавление новых зависимостей в проект
  • Lock на конкретных версиях зависимостей
  • Многое другое

Полезные ссылки:

Шаг 5 – Изучайте open source проекты

Один из хороших вариантов научиться, как работают практики, стандарты и соединяются между собой части кода, в том числе посредством шаблонов проектирования это изучать существующие open source проекты.

Также, как вариант, вносить свой вклад в эти проекты, например решая некоторые проблемы (просмотрев issues) и делать пулл реквесты (внимательно изучив гайд по contributing).

Шаг 6 – Безопасность

Сегодня существует огромное количество различных уязвимостей, присущих в том числе и веб-проектам, которых возможно избежать, если следовать некоторым стандартам.

Рекомендую изучить OWASP и знать, что означают следующие термины/атаки, как они происходят и как им противостоять:

  • XSS
  • CSRF
  • SQL Injection
  • Remote Code Execution
  • File Inclusion
  • и т.д.

Шаг 7 – Тестирование

Существует несколько разновидностей тестирования, рекомендую ознакомиться с ними и их предназначением. Также рекомендую научиться писать Юнит тесты и интеграционные тесты и быть знакомым с терминологией: mock, stub и т.д.

Помимо этого, нужно ознакомиться с понятием покрытие кода (code coverage) и уметь вычислять его для своего кода.

Шаг 8 – СУБД

На этом этапе тебе нужно понять, что значит SQL и NoSQL типы СУБД. Самое главное, ознакомиться с реляционными СУБД и познакомиться с основными понятиями этого мира, например, ключи, индексы, нормализация (основные формы) и т.д.

Также очень неплохо, если ты начнешь учиться писать запросы SQL. Неплохо будет начать с MySQL (лучше взять форк MariaDB), либо можешь взять PostgreSQL (он немного сложнее и мощнее).

Попробуй спроектировать разные структуры БД под приложения, например которыми ты пользуешься. Структура должна быть в одной из нормальных форм, активно используй связи, ключи, индесы и т.д. Попробуй написать запросы для получения данных (например фотографии с тэгом кошки, друзей пользователя и т.д.).

Шаг 9 – Фреймворк

Зачастую, совсем не нужно изобретать велосипед, именно поэтому на данном этапе тебе нужно изучить какой-либо фреймворк, рекомендую выбрать Laravel или Symfony, если проект очень маленький можно взять Lumen или Slim (микро версии предыдущих двух).

На данном этапе советую начать разработку своего приложения с использованием фреймворка, это поможет легче погрузиться в него.

Рекомендую придумать что-либо, что содержало бы:

  • Пользовательскую регистрацию, аутентификацию, авторизацию
  • Загрузку файлов
  • Блог
  • Админ панель
  • Комментарии
  • и т.д.

Шаг 10 – API

На данном этапе тебе необходимо понять, что значит API и как ты можешь его реализовать, в том числе с использованием изучаемого тобой фреймворка. Вслед за этим, изучи какие виды API существуют (достаточно основных SOAP, REST, Graph QL) и как их возможно реализовать.

Познакомься с основными форматами, которые активно используются во многих современных API: JSON (JSONP – изучи в чем разница), XML и т.д.

Попробуй добавить API в приложение, которое ты начал разрабатывать выше.

Шаг 11 – Аутентификация

Аутентификация это когда посетитель подтверждает, что он является зарегистрированным пользователем в системе, предоставив определённое подтверждение. Авторизация это когда происходит подтверждение, что у аутентифицированного пользователя есть права на совершаемое им действие.

Аутентификация очень важный момент в современных приложениях, поэтому удели пристальное внимание изучая основные её методы в современных приложениях. Рекомендую начать со следующих видов:

  • Токен
  • OAuth
  • Basic Auth
  • JWT и разновидности
  • и т.д.

Также будет очень полезным если ты изучишь методы авторизации (RBAC и т.Д.).

Шаг 12 – Docker

На данном шаге рекомендую начать изучать Docker. Docker позволит оптимизировать некоторые рутинные процессы при разработке, а также позволит эффективно работать в команде, советую также изучить какие ещё возможности и преимущества он предоставляет.

Шаг 13 – Дальнейшее изучение

Поздравляю если ты успешно достиг этого шага, в дальнейшем ты точно столкнешься с вещами, которые не покрыты в этом руководстве, продолжай изучать их и постоянно практиковаться. По началу всё это может казаться невероятно тяжелым и возможно иногда будут опускаться руки, но если ты найдешь силы идти дальше, я уверен ты не пожалеешь и заметишь как далеко ты продвинулся.

Если будут какие-либо вопросы или пожелания не стесняйся писать в комментарии или в один из моих контактов в шапке.

Также может оказаться полезным: