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 серверов достаточный для поддержания работы веб-проекта

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

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

Знание PHP 7 и выше

Седьмая версия PHP — это одна из самых свежих. И это хорошо, потому что если бы в вакансии было PHP5+, то это очень большое разнообразие версий. Начиная с PHP 5.0 введено объектно-ориентированное программирование и в седьмой версии оно достигло такого уровня, что не использовать объекты — моветон для PHP. Даже серверные скрипты используют сторонние модули, написанные в объктном стиле.

Но независимо от версии

  • знание семантики языка
  • знание принципов функционального программирования
  • опыт использования стандартных библиотек и базовых функций языка
  • опыт реализации алгоритмов для работы с массивами, строками, объектами, системами исчисления, дискретной математики (в частности — булева алгебра)
  • и понимание принципов ООП
  • и если ты начинаешь с нуля, то статья Какие книги посоветуете начинающему программисту

Понимание принципов ООП

  • парадигмы объектно-ориентированного программирования (наследование, инкапсуляция, полиморфизм)
  • умение выделить сущности и связи между ними
  • умение не разбивать сущности больше чем требуется для задачи
  • моделирование (умение описывать объектную модель без написания кода и читать такое описание)
  • Шпаргалка по ООП
  • Подборка Курс ‘Объектно-ориентированное программирование’

Понимание принципов MVC

Умение верстать (HTML, CSS, jQuery, Bootstrap)

Знание фреймворков

  • принципы организации кода популярных фреймворков (Yii, Laravel, Phalcon, Zend Framework)
  • умение создать скелет нового приложения на базе фреймворка
  • конфигурация, отладка приложения на базе фреймворка
  • умение дополнять приложение новыми компонентами, модулями, плагинами
  • смотри выше про MVC и ООП
  • смотри ниже про умение разбираться в чужом коде
  • статья Какие задачи возникают в результате отказа от использования веб-фреймворков?

Знание MySQL

  • реляционная алгебра, нормальные формы
  • системы управления базами данных
  • установка, настройка MySQL
  • операции с базами, архивирование и восстановление баз данных
  • управление пользователями и правами (UDL), управление таблицами (DDL), операции с данными (SQL)
  • работа с иерархическими данными в SQL (деревья)
  • статья Построение реляционной модели
  • подборка про реляционные базы данных: статьи, видео, книги, лекции, онлайн-курсы
  • несколько статей про SQL: вопросы с собеседований, обзоры

Умение разбираться в чужом коде

  • опыт применения чужого программного кода в своих проектах (работа с менеджерами зависимостей composer, npm, bower)
  • опыт поиска и устранения ошибок в своём и чужом коде
  • опыт совместной разработки программного обеспечения
  • опыт работы в команде программистов
  • опыт работы с OpenSource проектами, вклад в чужие проекты с несколькими участниками (контрибуторами). Например, наличие принятых изменений в код популярных фреймворков PHP или библиотек JavaScript.
  • опыт сопровождения проектов с открытым кодом, то есть доработка проекта и устранение проблем по просьбе других пользователей
  • статья Где взять идею для веб-проекта

Чистый и аккуратный код

  • умение найти сбойный, неаккуратный, непонятный фрагмент кода и переписать его без потери работоспособности
  • выделение кода в дополнительные сущности, объекты, фунции
  • обратная задача — объединение кода
  • тестирование кода
  • оптимизация алгоритмов
  • именование классов, переменных, функций
  • статья Умные книги по программированию и проектированию информационных систем

Опыт администрирования linux серверов достаточный для поддержания работы веб-проекта

  • установка операционных систем Ubuntu/Debian или CentOS/RedHat
  • менеджеры пакетов
  • установка и настройка веб-сервера Apache, nginx
  • установка и настройка MySQL
  • установка и настройка PHP и его модулей
  • управление пользователями, правами доступа
  • управление файлами, директориями, симлинки
  • монтирование устройств, монтирование удалённых файловых систем

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

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

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

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

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

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

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

 

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

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

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

План курса (темы, задачи)
Центр компьютерного обучения «Специалист» при МГТУ им.Н.Э.Баумана.
Программа курса PHP. Уровень 1. Основы создания сайтов

Модуль 1. Установка/настройка веб-сервера и PHP
Вопросы, на которые надо ответить
Как это работает?
Установка веб-сервера
Настройка веб-сервера
Установка PHP
Настройка PHP
Первый скрипт на PHP

Модуль 2. Основы PHP
Синтаксис
Операторы
Переменные
Константы
Типы
Управляющие конструкции

Модуль 3. Управляющие конструкции: циклы
Операторы инкремента/декремента
Цикл for
Цикл while
Цикл do-while
Итерирование массива
Цикл foreach

Модуль 4. Пользовательские функции
Описание функции
Вызов функции
Аргументы функции
Аргументы функции по умолчанию
Область видимости переменных
Статические переменные
Возврат значений
Уточнение типа

Модуль 5. Что внутри PHP?
Документация PHP
Обзор встроенных функций
Встроенные константы и псевдоконстанты
Суперглобальные переменные
Функции подключения файлов

Модуль 6. Изучаем HTTP: формы
Стандарт HTTP/1.1
Заголовки запроса и ответа
Статус сервера
Доступ к заголовкам запроса – переменные окружения сервера
Работа с веб-формами
HTTP-методы запросов
Проверка передаваемых значений

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

План курса (темы, задачи)
Центр компьютерного обучения «Специалист» при МГТУ им.Н.Э.Баумана.
Программа курса PHP. Уровень 2. Разработка web - сайтов и взаимодействие с MySQL

Модуль 1. Cookie
Что такое Cookie?
Параметры cookie
Типы cookie
Временные
Постоянные
Создание cookie
Чтение cookie
Удаление cookie
Сохранение массивов в cookie

Модуль 2. HTTP-заголовки ответа сервера
Метод HEAD
Заголовки ответа сервера
Переадресация (Location)
Перезапрос ресурса (Refresh)
Установка типа содержимого (Content-Type)
Управление кэшированием (Cache-Control, Expires)
Буферизация

Модуль 3. Сессии
Что такое сессия?
Создание сессии
Чтение сессии
Удаление сессии
Параметры сессии

Модуль 4. Работа с файловой системой
Функции для работы с файлами
Режимы работы
Чтение и запись
Работа с курсором
Прямая работа с файлами
Запирание файлов
Функции для работы с директориями
Загрузка файлов на сервер по HTTP

Модуль 5. Основы работы с базами данных
Общие сведения о базах данных
Требования к структуре базы данных
Реляционная СУБД
Нормализация
Общие сведения о SQL
Выборка записей
Вставка записи
Удаление записи
Изменение записи
Создание базы данных и таблицы

Модуль 6. Сервер баз данных MySQL
Общие сведения о сервере баз данных MySQL
Установка сервера баз данных MySQL
Конфигурация сервера баз данных MySQL
Программы для работы с сервером баз данных MySQL
Использование утилит командной строки
Экспорт и импорт баз данных

Модуль 7. Использование сервера баз данных MySQL в приложениях PHP
Расширение MySQLi
Соединение с сервером баз данных MySQL
Выбор базы данных
Исполнение запроса
Получение результата запроса
Полезные функции
Опасность SQL-иньекций
Подготовленные запросы

Модуль 8. Практическая работа: создание интернет-магазина
Создание базы данных
Создание каталога товаров
Выборка товаров из каталога
Создание корзины пользователя
Выборка товаров из корзины пользователя
Удаление товаров из корзины пользователя
Формирование заказа
Выборка заказов
Безопасность интернет-магазина

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

План курса (темы, задачи)
Центр компьютерного обучения «Специалист» при МГТУ им.Н.Э.Баумана.
Программа курса PHP. Уровень 3. Профессиональная разработка на PHP 7

Модуль 1. Объектно-ориентированное программирование на PHP
Классы
Свойства и методы
Конструкторы и деструкторы
Клонирование объектов
Наследование
Перегрузка методов
Методы доступа к свойствам и методам
Обработка исключений
Константы класса
Абстрактные классы и методы
Интерфейсы
Финальные классы и методы
Статические свойства и методы класса
"Магические методы"
Уточнение типа (type-hint)
Типажи (traits)

Модуль 2. Практическое использование ООП с базой данных SQLite
Введение в SQLite
Преимущества и ограничения SQLite
Особенности SQLite
Выполнение основных операций работы с SQLite
Создание базы и таблиц
Вставка, обновление, удаление записей
Выборка данных

Модуль 3. PHP и XML
Введение в XML
Обзор возможностей по работе PHP с технологией XML
SAX
DOM
SimpleXML
Обзор XSL/T
Преобразование данных на сервере

Модуль 4. PHP и XML Web-services
Введение в XML Web-services
Обзор RPC
Обзор SOAP
Использование расширения SOAP
Использование WSDL
Обзор XML-RPC
Использование расширения XML-RPC
Использование контекста потока

Модуль 5. Сокеты и сетевые функции
Соединение с удаленными узлами через сокеты
Сетевые функции

Модуль 6. Работа с графикой
Введение в графические форматы
Вопросы генерации графики на PHP
Использование расширения GD2
Базовые функции для работы с графикой

P.S. (copist) Я бы добавил ещё практику по работе с пакетом Image Magic

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

План курса (темы, задачи)
Центр компьютерного обучения «Специалист» при МГТУ им.Н.Э.Баумана.
Программа курса РНР. Уровень 4. Проектирование и разработка сложных веб - проектов на РНР 7

Модуль 1. Шаблоны проектирования
Обзор UML
Диаграмма классов
Введение в шаблоны проектирования
Шаблоны проектирования
Singleton Pattern
Factory Pattern
Strategy Pattern
Decorator Pattern
Adapter Pattern

Модуль 2. Standard PHP Library (SPL)
Встроенные интерфейсы и классы
Замыкания
Генераторы
SPL – Standard PHP Library
Общие принципы
Интерфейсы
Итераторы
Классы
Структуры данных
Функции

Модуль 3. PHP Data Objects (PDO)
Введение
Поддерживаемые базы данных
Соединения
Запросы
Фильтрация значений
Транзакции
Подготовленные запросы
Обработка ошибок

Модуль 4. Reflection
Введение
Отражения
Использование отражений
Создание документации

Модуль 5. cURL
Введение
Основные функции
Основные опции
Опции для заголовков
Получение информации
Модуль 6. Регулярные выражения
Введение
Метасимволы
Специальные последовательности символов
Модификаторы
Функции

Модуль 7. Пространства имен
Введение
Объявление пространства имен
Иерархия
Правила доступа
Unqualified name
Qualified name
Fully qualified name
Глобальный доступ
Импорт и псевдонимы

Модуль 8. Модульное тестирование
Тестирование кода
Модульное тестирование
PhpUnit
Утверждения
Зависимости
Источники данных
Тестирование наборов

Модуль 9. Шаблон проектирования MVC
Введение в MVC
MVC и ООП
Обзор PHP Фреймворков

Модуль 10. Создание REST-сервиса
Введение в REST
Фреймворк Slim
Библиотека NotORM
Базовые операции сервера
Базовые операции клиента

P.S. (copist) Я бы добавил ещё обзор библиотек типа Guzzle вместо curl и обзор других видов тестирования веб-приложений

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

План курса (темы, задачи)
Центр компьютерного обучения «Специалист» при МГТУ им.Н.Э.Баумана.
Программа курса MySQL 5. Проектирование и создание баз данных для web

Модуль 1. Установка и запуск сервера MySQL 5.x в качестве службы
Описание особенностей и преимуществ MySQL
Установка сервера MySQL 5.x
Описание архитектуры MySQL
Программы и утилиты для работы с сервером (включая графический интерфейс пользователя (GUI) для выполнения запросов и получения результатов)
Установка пакета Workbench 5.2.x для моделирования БД, разработки и администрирования сервера MySQL
Команды консоли сервера, операторы SHOW, USE
Использование базы данных INFORMATION_SCHEMA для получения информации о метаданных
Работа с консолью сервера MySQL 5.x

Модуль 2. Проектирование реляционной базы данных
Проектирование базы данных
Основные типы данных в MySQL 5.x и оптимальный выбор типа для хранения своих данных
Практическая работа: выбор типа данных для хранения информации
Нормализация базы данных, ключи, ключевые атрибуты
Зависимости и отношения между сущностями в БД
Использование пакета Workbench 5.2.x при проектировании БД
Моделирование и нормализация простой БД (включая физическое проектирование)

Модуль 3. Синтаксис выражений SQL для определения структуры данных
Выражения SQL, операторы определения структуры данных
Создание БД на сервере MySQL 5.x
Индексов и ограничений. Добавление и удаление индексов из таблицы
Создание отношений между таблицами БД
Выражения (операторы) манипулирования данными
Наполнение БД из внешних файлов

Модуль 4. Выражения SQL: манипулирование данными
Оператор SELECT и выборка данных
Предикаты (клаузулы) WHERE, ORDER
Агрегирующие функции (агрегаты)
Ограничение выборки (WHERE)
Выборка данных с агрегацией значений
Группировка данных (GROUP BY)
Предикат HAVING
Выборка данных с группировкой
Объединение таблиц (INNER/OUTER/FULL JOIN)
Внутреннее объединение таблиц

Модуль 5. Объединение запросов и манипулирование данными
Объединение запросов (UNION)
Использование подзапросов и множеств значений
Временные таблицы и просмотры
Обновление и удаление данных

Модуль 6. Хранимые процедуры и триггеры
Назначение и создание хранимых процедур
Использование хранимых процедур
Триггеры
Обеспечение ссылочной целостности

Модуль 7. Транзакции и типы хранилищ MySQL
Блокировки и их типы
Понятие транзакции, свойства ACID
Выбор оптимального хранилища

Модуль 8. Оптимизация и обслуживание сервера MySQL 5
Резервное копирование и аварийное восстановление информации
Проверки и восстановление таблиц
Разделение прав пользователей
Оптимизация запросов
Оптимизация баз данных
Оптимизация конфигурации сервера
P.S. (copist) Я бы добавил ещё обзор MariaDB как альтернативе MySQL

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

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

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

Модуль 1. Работа с репозиториями
Какие бывают системы управления версиями. Их место в наборе инструментов разработчика
Основы Git
Создание и модификация репозитория
Удаленные репозитории

Модуль 2. Ветвление
Ветвление, слияние, конфликты
Протоколы Git
Установка и настройка Git на сервере

Модуль 3. Распределенная работа
Практика распределенной работы
Рекомендации по созданию коммитов
Инструменты Git

P.S. (copist) Я бы добавил ещё практику по работе с GitHub и BitBucket.

Отличным пособием будет книга 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. создание статьи блога
  2. изменение статьи блога
  3. вывод списка статей в хронологическом порядке
  4. комментарии к записям блога

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

  1. добавление куска кода, создание короткой ссылки и секретной ссылки
  2. вывод куска кода по заданной ссылке
  3. изменение куска кода по заданной секретной ссылке

Пример учебного приложения: каталог файлов

  1. создание создание директорий
  2. заливка файлов на сервер в директорию
  3. вывод файлов в директории
  4. переименование файлов
  5. перенос файлов в другую папку
  6. удаление файлов

Усложнение перечисленных задач для реализации технологий

  1. Авторизация и привязка сущностей к авторам/владельцам, проверка прав доступа на изменение чужих записей — пример приложения проект diglot.ru — статьи и книги на двух языках
  2. Полнотекстовый поиск записей блога, блокнота, файлов
  3. Работа с базами данных через универсальный порт PDO
  4. Хранение данных в нескольких базах SQL (первая запись тут, вторая там) — шардинг, горизонтальное и вертикальное масштабирование
  5. Хранение данных в нескольких базах SQL и NoSQL (записи блога в MySQL, а комментариев — в NoSQL)
  6. Хранение и передача данных в файлах формата XML
  7. Хранение и передача данных в файлах формата JSON
  8. Реализация JSON API + AJAX + JSON/XML для того, чтобы учебные приложения работали без перегрузки страницы (+ исправление интерфейса, чтобы данные запрашивались через AJAX) — пример приложения опросник по стеку веб-технологий
  9. Передача данных между серверами (например, импорт ленты новостей RSS или курс валюты; передача файлов на удалённый сервер)
  10. Отправка сообщений по электронной почте (уведомлений автору о новых комментариях)
  11. Реализация обработки данных через очереди событий (например, отправка почты по заданию в очереди)
  12. Создание картинок-превью для загруженных больших картинок

Современная практика бакенд-разработки (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, разобраться в системе плагинов, системе администрирования, системе редактировании и хранения статей, а также с процедурой публикации плагина в каталоге плагинов. История об этом на SmartProgress

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

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

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

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

  • Николай Варзанов

    Нет ли такого плана для front?

    • Такого подробного нет. Можно составить.
      Есть условный вот тут https://github.com/kamranahmedse/developer-roadmap и https://skillcrush.com/2016/02/11/skills-to-become-a-front-end-developer/

    • Но на составление этого плана ушло два года. Он писался как черновик на GoogleDocs, уточнялся несколько раз и наконец я его опубликовал. Думаю, писать план по front-end да года будет неразумно. А вот черновик сделать можно. Может быть составим вместе? Ещё кого-нибудь позовём?