Учимся писать веб-приложения

После того, как мы освоили язык PHP, пора научиться применять его на практике - писать веб-приложения (то есть интерактивные сайты). К сожалению, написание серии уроков 2-го уровня затягивается, потому пока у нас есть задачи (с комментариями), а вот теории и уроков маловато.

Итак, вот список тем, с которыми надо познакомиться, уроков, которые надо изучить, и, самое главное - задач, которые надо решить:

Изучаем веб-сервер и устанавливаем PHP

Для начала, надо научиться выводить результат выполнения программы на PHP в браузер в виде веб-страницы. Для этого придется изучить, как работает браузер и веб-сервера, познакомиться с протоколом HTTP. Надо будет прочесть:

Урок по веб-серверам, протоколу HTTP и использованию PHP для генерации страниц.

Возможно, придется также прочитать эти уроки:

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

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

Курс для изучения основ верстки и HTML/CSS

HTML/CSS можно изучать параллельно с написанием веб-приложений на PHP, чтобы не терять время.

Ах да, ты еще не начал изучать английский? Тогда начинай. Стать профессиональным разработчиком без английского будет сложно.

Пробуем писать более сложные приложения

Теперь можно переходить от написания отдельных страниц к интерактивным простым сайтам. Для начала надо решить первую и очень важную задачу под названием "Список абитуриентов":

https://github.com/codedokode/pasta/blob/master/student-list.md

В этой задаче требуется фактически сделать простой сайт с регистрацией и выводом списка пользователей, который хранится в базе данных. К этой задаче приложены комментарии, где подробно описано, как она решается. Задача поможет изучить архитектуру MVC, принцип Dependency Injection, способы взаимодействия с базой данных.

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

Решение задачи желательно выложить на Гитхаб (или аналогичный сайт), где его смогут увидеть все желающие. Github - это сайт, который позволяет создавать на нем git-репозитории (хранилища кода), и загружать туда свой код. Для этого надо изучить программу для работы с git-репозиториями под названием git. Она подробно описана на русском языке в Git Book: https://git-scm.com/book/ru/v2

В задаче используется база данных. У нас есть что-то вроде небольшого урока по базам данных и языку SQL: https://gist.github.com/codedokode/10539213

Для взаимодействия с базой данных я советую изучить расширение PDO.

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

Осваиваем фреймворки

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

Задача на создание файлообменника на микрофреймворке

Параллельно с решением задачи стоит продолжить изучать верстку. Кроме HTML и CSS, надо знать еще язык Javascript - он позволяет внедрять в страницы простые программки (скрипты, которые делают ее более интерактивной). У нас есть курс задач по языку javascript. Там же дана ссылка на учебник по JS (learn.javascript.ru) и автоматизированную проверялку для части задач.

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

Для установки библиотек и фреймворков стоит использовать composer.

Переходим к сложным приложениям

Далее пора познакомиться с большими фреймворками и попробовать написать что-то, что по сложности и объему соответствует реальным проектам. У нас есть задача и для этого:

Задача про сайт TestHub

Я рекомендую решать ее с использованием Symfony (или же с использованием отдельных компонент Симфони) и ORM Doctrine. Это непросто, но даст много полезных навыков и знаний.

Написанный код надо тестировать. Обычно мы это делали вручную, открывая страницы и нажимая кнопочки, но со временем эта рутина начинает надоедать. Значит, надо осваивать автоматизированное тестирование, и у нас есть урок на эту тему:

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

Дополнительное чтение

Вот еще список ссылок, которые стоит почитать:

Хочется поломать голову?

Пройдя все задачи выше, ты скорее всего станешь неплохим начинающим разработчиком. Однако, наверняка тебе захочется решить что-то посложнее, задачу, на которой споткнутся даже опытные программисты. Ну разумеется, у нас есть такая задача! Сейчас (в конце 2016 года) много внимания уделяется написанию клиентских ("одностраничных") приложений, на слуху названия вроде Angular или React, и у нас есть задачка по теме:

Сложная задача на написание SPA приложения

Она довольно сложная, и пока даже автор не представляет полностью, как ее лучше решить. Увы, не понаступав на грабли, и не попробовав разные подходы, это не понять. (Кстати, автор хочет похвастаться: он участвовал в написании одностраничных приложений когда это еще не было в тренде).

-----

Куда вводить код? Что надо скачать? Читай первый урок.

Есть вопросы? Задай гуглу или автору.

Нравится урок? Лайкай, репости, приглашай друзей, пости котов и Канако, шли добра, решай задачи, помогай новичкам! Кнопок для лайка нет, кто хочет зарепостить, всегда может сделать это ручками.

Как связаться с автором? Я хочу переодеть его в платье школьницы и жениться на нем. Ящик codedokode (кот) gmail.com ждет ваших писем. А вконтактик и фейсбучек ждут ваших лайков. Но ответ на банальные вопросы лучше искать в Гугле или на stackoverflow.

Я решил задачку!!! Молодец, делай следующий урок

Ideone не работает!11 Ну так открой Гугл и найди сайты вроде https://repl.it/languages/php , http://phptester.net/ , http://sandbox.onlinephpfunctions.com/ , http://codepad.org/ или http://www.runphponline.com/ . Не ленись.

Почему так много рекламы? Всю рекламу на сайте ставит юкоз (бесплатный хостинг же), а не я.

На сайте установлена система Google Analytics (и еще несколько аналогичных систем от юкоза). Данные о твоем IP-адресе, посещаемых страницах, времени посещения отправляются в Google Corporation, США. Хочу знать, кто и зачем сюда заходит. Поверь, другие сайты делают точно так же. Все сайты пишут логи.