IT Leaks. Как стать back-end программистом на PHP с нуля, план самостоятельного обучения

Публикую план удалённого разработчика back-end на PHP, которым пользовался сам и проверял со студентами при работе наставником. Дополнительный раздел касается удалённой работы.

Цель «удаленная работа backend PHP»

«Walk This Way» [Bobby Chiu]

 Начну с перспективы. В статье Как выбрать специальность будущему айтишнику? я подсказал, что есть довольно простой способ определения целей и планов на 5 лет вперёд. Один из принципов выбора — посмотреть вокруг, определить чужие потребности, определить свои интересы, найти пересечение их потребностей и твоих интересов (это я называю возможностями), определить цели начерно и двигаться к ним, уточняя детали по пути.

Один из вариантов определения целей — посмотреть на вакансии, специалисты в которых решают интересующие тебя проблемы. Через 5 лет могут появиться новые языки программирования, но они не смогут вытеснить все остальные языки. Кроме того, кто знает один язык программирования — легко освоит другой. Кто знает протокол HTTP, разберётся в других протоколах на его основе. Главное научиться учиться.

 Внимание! В конце статьи — интересное предложение: помощь в составлении твоего резюме или веб-портфолио.

Итак, смотрим на абстрактную вакансию, которая найдена по фразе «удаленная работа backend PHP». В ней есть такие требования:

  • знание PHP 7 и выше
  • понимание принципов ООП
  • понимание принципов MVC
  • умение верстать (HTML, CSS, jQuery, Bootstrap)
  • знание фреймворков
  • знание MySQL
  • умение разбираться в чужом коде
  • чистый и аккуратный код
  • опыт администрирования linux серверов достаточный для поддержания работы веб-проекта

Это довольно интересный список. Под спойлером я его кратко расшифрую.

Расшифровка требований этой вакансии

Это была цель. Теперь про путь, то есть про план достижения цели.

Личный план обучения

 Если кратко — если изучать с нуля, то устройство на такую вакансию возможно через 1-2 года. Это как если бы ты поступил на обучение в ПТУ и потом пошёл работать. Через год или два можно будет заниматься практикой по веб-разработке самостоятельно или в команде энтузиастов, или устроиться на работу в компанию. В целом мастерство приходит медленно. Есть правило 10 000 часов: в любой области человек становится специалистом через 10 000 часов практики. В статье Как выбрать специальность будущему айтишнику? я отметил, что на некоторые вакансии не удастся устроиться сразу, придётся идти к ним постепенно. Сначала устроиться на вакансию попроще, набрать опыта и либо получить повышение на текущем месте работы либо сменить работу.

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

Начальный этап — базовый сведения о web, HTML, CSS и JS (около 3-6 месяцев на изучение)

 Этап описан в плане Как самостоятельно переучиться на веб-разработчика?

Для серверной разработки не обязательно знать всё-всё-всё про HTML, CSS и JavaScript. Но надо понимать, что веб-проекты состоят из страниц HTML, данные передаются через HTTP туда и обратно, клиентская часть может обмениваться  с серверной через AJAX или веб-сокеты.

 

Базовая практика серверной разработки на PHP с использованием MySQL (1 год на изучение)

В качестве опорного плана я взял описание с курсов от Центра компьютерного обучения «Специалист» при МГТУ им. Н.Э.Баумана

PHP. Уровень 1. Основы создания сайтов

План курса (темы, задачи)

PHP. Уровень 2. Разработка web — сайтов и взаимодействие с MySQL

План курса (темы, задачи)

PHP. Уровень 3. Профессиональная разработка на PHP5

План курса (темы, задачи)

РНР. Уровень 4. Проектирование и разработка сложных веб — проектов на РНР 5

План курса (темы, задачи)

MySQL 5. Проектирование и создание баз данных для web

План курса (темы, задачи)

Система управления версиями Git

 Git – распределенная система управления версиями (VCS). Это универсальный, свободный и удобный инструмент для командной работы программистов над проектами любого уровня. Git позволяет нескольким разработчикам работать одновременно над своими подзадачами, создавая равноправные ветви. При этом каждое сохранение (коммит) в Git не перезаписывает предыдущее, и в любой момент Вы сможете вернуться к исходной версии кода.

План курса (темы, задачи)

Отличным пособием будет книга Pro Git

Насыщенный практикум по дискретной математики, логике и алгоритмам

 Все практические задачи по программированию подразумевают использование дискретной математики (в частности — булева алгебра, теория множеств, графы и другое) и  алгоритмов (сортировки, поиск элемента в множестве, поиск минимума/максимума и многое другое). Нужно научиться их понимать, комбинировать, придумывать новые, реализовывать на языке программирования. Не уверен что есть такие курсы. Тебе понадобится книга для практикума по алгоритмам.

Обзорные курсы:

Из книг порекомендую:

  • Новиков «Дискретная математика для программистов»
  • Красиков «Алгоритмы. Просто как 2×2»
  • Елена Андреева и другие. «Математические основы информатики. Элективный курс»

На странице Какие книги посоветуете начинающему программисту в блоке-врезке “Задачи для тренировки программирования” указаны несколько больших баз с заданиями по логике и алгоритмам, некоторые из них предполагают автоматическую проверку решений, что очень удобно.

Следующий этап — продвинутая практика по серверной разработке.

Продвинутая практика по серверной разработке на PHP (ещё 1 год на изучение)

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

  • Системы контроля версий git (см. выше), mercurial, subversion
    • думаю, к этому времени ты уже завёл учетную запись на github.com или bitbucket.org
    • прочитал Pro Git
    • прошёл курс по Git
    • надо научиться создавать и оформлять репозитории
    • настраивать доступ по ключам, изучить принципы работы хуков
    • поработать с ветками, желательно с кем-нибудь на пару с одним и тем же репозиторием
    • оформлять изменения
    • делать pull-request в чужой репозиторий, принимать pull-request в свой репозиторий
    • делать code review чужого кода
    • делать слияние кода через merge или rebase, и решать конфликты в коде
  • Пакетный менеджер Composer и сервис packagist.org
  • Протоколы SSH, FTP, SFTP  и утилиты для обмена данными по этим протоколам
  • Установка и настройка сервера на базе операционной системы Ubuntu/Debian CentOS/RedHat
    • ищи информацию на тему виртуальных машин VirtiaBox / VMWare
    • ищи информацию на тему управления виртуальной средой Vagrant / Docker
    • ищи информацию о Virtual Private Server (VPS) / Virtual Dedicated Server (VDS) / Dedicated Server, возможно понадобится хостинг — вот купон на $10 от Digital Ocean — этого хватит на два месяца аренды VDS сервера
    • менеджеры пакетов
    • права доступа к файлам и папкам
    • сервисы (демоны)
  • Установка и настройка веб-сервера (apache, nginx, .htaccess, rewrite)
  • Работа с кэшем (файловый, memcached, RedisIO и другие)
  • Работа с базами SQL (MySQL, PostrgeSQL)
  • Работа с базами NoSQL (RedisIO, MongoDB)
  • Работа с файлами (windows / linux)
  • Работа с HTTP запросами (обмен данными между серверами по HTTP серверными методами — это не про AJAX, а про php-curl и SOAP)
  • Моделирование данных в SQL базах, на примере MySQL и PostgreSQL на практических задачах, цель — способность спроектировать базу из 10-15 сущностей
  • Полнотекстовый поиск через Sphinx и Elastic Search
  • Очереди событий Beanstalk, RabbitMQ, ApacheMQ
  • Работа с crontab
  • Работа с электронной почтой по протоколам SMTP, POP3, IMAP
  • Навые поиска и устранения SQL injection
  • Навые поиска и устранения XSS injection
  • Практическая работа с файлами в форматах JSON, XML, CSV
  • Реализация сервиса с API на базе JSON и XML
  • Работа с GEOIP
  • Практическая работа с изображениями

Необходимо на учебных примерах или в иной практической работе отработать все перечисленные пункты.

Примеры учебных задач:

Примеры учебных задач

Современная практика бакенд-разработки (1 год)

 Понятие “современная” через два-три года может измениться. Я дам ссылку на OpeSource проект, который систематизирует сведения про современную разработку на PHP:  PHP. The Right Way. Индексная страница не велика, просканируй сверху вниз и читай постепенно все ссылки.

Также порекомендую рассылки про backend-разработку на PHP

И тематические группы в соц сетях

Следи на новинками, изучай как они работают, проверяй, применяй на деле — НО СИЛЬНО НЕ УВЛЕКАЙСЯ, потому что технологий слишком много, но на практике достаточно иметь одну-две в портфолио, а потом уже на работе разберёшься с неизвестными тебе технологиями, если потребуется. Изучить всё сразу не получится. Оптимальнее всего создать учебные приложения на основе некоторой частной комбинации технологий, про которые узнал.

Работка под CMS и фреймворки (1 год)

 Крупные приложения редко пишутся на “чистом” PHP, обычно используют CMS или фреймворк.

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

Мои первые работы были «самописами», без фреймфорков. Когда я познакомился с Zend Framework, я понял, что потратил кучу времени зря — из решение лучше моего. Когда я познакомился с Yii, я понял, что Zend — просто монстр. А затем были Laravel и Phalcon. Знание устройства этих фреймворков позволяет мне легко ориентироваться в чужом коде и быстро решать тестовые задачи при трудоустройстве.

Для закрепления знаний по фреймоворкам, надо реализовать заново одно или несколько учебных приложений из списка выше на базе одного или нескольких фреймворков. Как вариант — сделать плагин (виджет, компоненту, надстройку, расширение) для CMS, который получает курс валюты из чужого источника, серверными методами. А затем реализовать вывод данных в блоках CMS через AJAX.

 

Технология разработки программного обеспечения (frontend и backend)

 Тема сложная и большая, разделы условно перечислены в wikipedia: Разработка программного обеспечения. Изучается в некоторых ВУЗах, на некоторых специальностях.

Большинство сталкивается с некоторыми из перечисленных задач на практике и таким образом усваивает. Специальной литературы не читают, но она есть и знание её значительно расширяет кругозор и помогает в получении правильных навыков (Soft Skills).

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

Обрати внимание из каких подзадач может состоять разработка и эксплуатация веб-проекта: Как строится современное веб-приложение

Основные навыки, которые надо выработать (каждый из них не сложный, но их большое разнообразие):

  • спецификация задач: составления исходных требований (requirements), составление шагов последовательности действий (use-case), критерии завершённости задачи (acceptance criteria), тестовые наборы данных, декомпозиция задач, определение зависимостей, а также системы ведения задач (task manager)
  • описание задач в условных понятиях, абстрациях, блок-схемы алгоритмов, диаграммы последовательностей, временные диаграммы, модели данных
  • прототипирование интерфейса
  • интернационализация — поддержка нескольких языков и языковых стандартов
  • тестирование программного обеспечения — модульное, функциональное, интеграционное и прочие
  • конфигурирование приложений
  • сопровождение — работа с ошибками, системы учёта учёта ошибок (bug tracker)
  • стратегии разработки (водопад, Agile, Scrum, Kanban, XP)
  • жизненные циклы задач (постановка, уточнение, оценка трудоёмкости, реализация, тестирование, релиз)
  • управление процессом разработки ПО, жизненные циклы разработки ПО
  • оптимизация под поисковые системы, интернет-аналитика, интернет-маркетинг

Пригодятся книги и статьи про

  • UML
  • SCRUM
  • Kanban
  • Agile
  • средства визуального прототипирования RationalRose, Enterprise Architect

Курсы на coursera.org:

Часто в группах вКонтакте анонсируются видео-лекции по проектированию, по построению приложений, по разработке программного обеспечения

Удалённая работа и Soft Skills

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

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

Рекомендую прочитать книги Rework и Remote (есть переводы на русский), чтобы понимать, что именно ценится в удалённой работе. Это не знание языков и технологий (!), а навыки общения.

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

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

Для этого следует

  • правильно излагать задачу к встрече, чтобы все участники могли подготовиться — рекомендую DropBox для файлов, которые нужно просто скачать, и Google Docs для документов, которые нужно совместно изменить
  • согласовать время и регламент встречи, повестку — рекомендую Google Calendar
  • выбирать подходящее ПО для встречи (возможно потребуется совместно видеть один экран, комментировать, ставить пометки к коду, или даже удалённо управлять компьютером)
  • вести протокол, чтобы не переспрашивать по несколько раз о том, что обсуждали и что решили (я все конференции пишу в видео, пересматриваю при необходимости — рекомендую программу HyperCam)
  • не отвлекаться от повестки и регламента
  • статья Записывай всё

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

Мне помогли книги:

Статистика: 60% кандидатов на вакансии не проходят по причине того, что они не умеют общаться — опаздывают, уклоняются от контакта, врут (ведь это так просто через Интернет). Ещё 60% не проходят испытательный срок, потому что за 2-4 месяца не осваивают навыки управления личным временем, планированием работы и взаимодействием с коллегами.

Отнесись к этому серьёзно.

Портфолио или как получить работу, если для работы нужен опыт, а без опыта нет работы

Для успешного трудоустройства требуется составить хорошее портфолио. Хорошее оно должно быть не тем, сколько в нём работ, а тем, как работодатель сможет оценить тебя. И начинать его надо не тогда, когда у тебя есть готовые классные интересные популярные проекты, а когда ты ещё начал учиться. Даже если ещё нет каких-то серьёзных работ, его нужно составить. Работы появятся. Если у тебя в планах стоит сделать свой блог с портфолио, но ты откладываешь до появления настоящих стоящих классных работ, то это может тянуться бесконечно, так как без портфолио у тебя не появятся настоящие работы. Замкнутый круг.

Как разорвать этот круг? Простой практический способ описан в статье Веб-портфолио.

Наставничество или как учась учиться

Движение вперёд будет значительно более интенсивным, если начать помогать другим. Работа с менее опытными имеет свои плюсы

  • Рост навыка быстро разбираться в чужом коде
  • Рост навыка начального проектирования, проектирования «с чистого листа», «с нуля»
  • Рост навыка принимать архитектурные решения для роста модели
  • Практика эффективно обсуждать задачи

Свой опыт я описал в своей статье Почему я занимаюсь наставничеством. Также рекомендую статью Путь наставника.

 

Про CMS. Сам я до недавних пор игнорировал CMS. Ну то есть я ими пользовался (эта статья опубликована на сайте, работающим под управлением CMS WordPress), но исходный код не изучал, не менял и не делал каких-либо надстроек. Однако недавно появилась необходимость сделать плагин под WordPress. Пришлось познакомиться с WordPress Codex, разобраться в системе плагинов, системе администрирования, системе редактировании и хранения статей, а также с процедурой публикации плагина в каталоге плагинов.

Я работаю в команде Icons8 — мы бесплатно рисуем иконки в стиле Flat по заявкам обычных пользователей и уже нарисовали 43 000 иконок. Также мы делаем много полезных бесплатных утилит для работы с иконками. Наш личный новый проект — плагин Icons Enricher для WordPress, который позволяет иллюстрировать записи вот такими аккуратными иконками:

  

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

Но пока у плагина низкие показатели статистики по установкам и нет отзывов, он не показываются в каталоге плагинов  wordpress.org

Прошу твоей помощи:

  • установи себе сайт на базе  WordPress и включи в него плагин icons-enricher
  • или поставь оценку  плагину на wordpress.org (я помогу перевести твой отзыв на английский язык)

Предлагаю ответную помощь за это: помогу тебе составить веб-портфолио, создать или настроить свой сайт на WordPress и разместить портфолио на нём

Изображение «Walk This Way» было позаимствовано у Bobby Chiu (imaginism)

Павел Волынцев

Уже более 15 лет занимаюсь разработкой веб-проектов. Fullstack Senior Developer. IT евангелист — доношу свет знаний об информационных технологиях. Профессиональные цели: Дать людям возможность дать людям больше.

Читайте также: