Когда я преподавал в вузе дисциплину "Разработка электронного портала", один из студентов на занятии мне задал вопрос - "А какими навыками должен обладать вебмастер? Сейчас столько всяких языков и технологий веб-программирования - неужели ими всеми надо владеть?" Признаюсь честно, я сам никогда до этого не задумывался над этим вопросом - просто делал свое дело, используя свои знания в области программирования и навыки работы с CMS, иногда спрашивая Яндекс или Гугл, как реализовать на сайте ту или иную функцию. Но что же все-таки главнее? Развернутый ответ я постараюсь дать в этой статье.
В творческом и профессиональном пути веб-мастера я бы условно выделил несколько уровней - опять же, оглядываясь на свой опыт.
"Нулевой уровень". Основы HTML
HTML - язык разметки гипертекста, использующий теги для выделения тех или иных объектов и конструкций. Именно благодаря этому языку на веб-страницах страницах появляются ссылки, картинки, таблицы, списки и т.д.
Владея базовыми сведениями о языке HTML, можно сделать свою первую простейшую веб-страничку - такие были популярны в конце 90-х, начале 2000-х годов. Вот главная страничка моего первого сайта:
По нынешним временам страница выглядит как динозавр, но она наглядно иллюстрирует, что такое Web 1.0 - концепция веб-дизайна конца девяностых-начала нулевых годов. Графические кнопки с "рукописными" объемными надписями, фон с незамысловатым зацикленным узором, текст прямо по фону подложки страницы. Еще в то время типичной была надпись - "данный сайт оптимизирован под Netscape Navigator" (сейчас многие, наверно, даже не знают, что это такое!) Правилами "хорошего тона" считалось прилепить сбоку какую-нибудь анимированную картинку, например вращающийся череп в 3D, информер погоды, ссылку на любимый сайт с анекдотами и прочую ерунду.
Для создания подобных страниц вполне можно обойтись обычным блокнотом. Некоторые "ленивые" пользователи используют для создания подобных веб-страниц специальные визуальные редакторы или даже Microsoft Word (на мой взгляд, это тупиковый путь!).
Второй уровень. Освоение "табличной" верстки
Благодаря табличной верстке появляется возможность делить страницу на несколько колонок - этот формат представления был, есть и будет "классикой жанра".
Колонки страницы вписаны в ячейки таблицы, границы этих ячеек, как правило, бесцветные. Вот одна из боле поздних версия моего сайта, выполненная с использованием табличной верстки:
Согласитесь, выглядит уже не так убого, как первый пример, хотя, дизайн по современным меркам явно устаревший - еще бы, это сайт 2002 года! Причем, по тем временам выглядел весьма неплохо для личной странички.
Третий уровень. Композиция, колористика
Когда мы уже научились худо-бедно верстать веб-страницы, нам следует посмотреть на проблему со стороны эстетики и восприятия. Неплохо бы знать, что далеко не все цвета сочетаются друг с другом и "ярко и цветасто" - далеко не всегда хорошо.
Наверняка, не каждый начинающий веб-дизайнер может на глаз подобрать сочетающиеся друг с другом цвета. В этом случае очень полезным может оказаться следующий сервис: http://colorscheme.ru
Какие бы смелые эксперименты с цветовой гаммой сайта не проводились, постепенно почти все приходят к выводу, что лушей является та схема, в которой основной текст страницы - черный на белом фоне.
Композиции веб-страницы - это взаимное расположение объектов и их визуальное взаимодействие. Когда на странице слишком много объектов, она выглядит перегруженной и начинает напрягать. Когда, наоборот, один монотонный текст - страница выглядит скучно.
Главная задача на данном этапе - научиться подбирать цветовую гамму сайта и расположение его ключевых элементов.
Четвертый уровень. Знакомство с CMS.
CMS - система управения содержимым, например, Wordpress или Joomla. Это "движок" сайта, который раз установил, настроил внешний вид и все что нужно дальше делать - наполнять сайт материалами. Делается это с помощью редактора, похожего на Microsoft Word, но работающего в окне браузера. По сравнению с ручной разметкой каждой страницы на HTML, система управления содержимиым - это огромный шаг вперед в плане продуктивности работы. Ваша задача - писать тексты, движок сам "облачит" их в нужное оформление в соответствии с выбранным шаблоном.
У CMS есть и недостаток, точнее особенность. Ее нельзя просто так скачать и запустить (как инсталлятор для Windows-приложения). По сути дела, это набор скриптов, написанных на языке PHP, для работы которых нужно определенное серверное программное обеспечение - веб-сервер, сервер базы данных MySQL, почтовый сервер. Это тот самый базовый минимум, на котором обеспечится более-менее полноценная работа CMS.
Если речь идет об установке CMS на коммерческий хостинг, как правило, это можно сделать за пару кликов мышки - в админке хостинга почти всегда есть раздел "Установка CMS", в котором предлагается много разных вариантов движков. Если же хостинга пока нет, то его можно создать на домашнем компьютере. Прпоще всего для этого воспользоваться бесплатной сборкой серверного софта, которая называется Denwer (джентльменский набор веб-разработчика). Скачать ее можно с официального сайта абсолютно бесплатно - укажите свой email и вам придет ссылка для скачивания (не забудьте снять галочку "получать новости").
На сайте Денвера есть видеоруководство по установке системы на домашний компьютер. Ничего там сложного нет - нужно ответить на несколько простых вопросов, после чего на нашем компьютере будет "поднят" практически полноценный веб-сервер.
После этого на Денвер устанавливается сама CMS. Не буду здесь расписывать, как это делается. Введите в Яндекс запрос "установка Joomla на Denwer" и получите огромное количество инструкций, в том числе и видео. Я рекомендую продукт моего брата Дмитрия Кашканова - Создание сайта на Joomla 3 день за днем. Курс платный, но в расписано все в подробностях и, что ценно, доступным языком, буквально на пальцах!
Пятый уровень. Изучение CSS, "ковыряние" шаблона
Как бы ни хороша была Joomla или Wordpress, но штатные шаблоны не отличаются красотой и изысканнстью. Сайты, сделанные на стандартных шаблонах чем-то похожи на дома-хрущовки - вроде функцию свою выполняют, но все на одно лицо. Почти всегда возникает задача раскрасить цвета в "фирменные" цвета, поменять шрифты, изменить цвет ссылок, сделать картинкам закругленные уголки и так далее. Все это делается при помощи правки файла стиля - как правило, он называется style.css или template.css.
С первого этапа мы помним, за что какие теги отвечают - как вставить ссылку, картинку, табличку и т.д. В CSS-файле прописывается стиль этих элементов - цвет, фон, прозрачность, размеры и отступы, выравнивание, реакция на наведение мышки. При помощи CSS можно до неузнаваемости изменить "штатный" шаблон и сделать дизайн сайта уникальным и красивым. Лично я пошел именно по этому пути - взял за основу стандартный Jooml-овский шаблон Protostar и правлю его как мне нужно. При помощи него было сделано множество уникальных сайтов, совершенно не похожих друг на друга.
Шестой уровень. Блочная верстка, основы адаптивности.
Блочная верстка при помощи тегов <div> - современный подход к созданию структуры веб-страницы, который почти полностью вытеснил верстку табличную. Вероятно, вы обращали внимание, что на многих сайтах при просмотре на большом мониторе информация представлена в несколько колонок, как правило в три. При уменьшении разрешения экрана количество колонок также уменьшается - их становится две, при дальнейшем уменьшении - одна. При этом все блоки остаются на странице - они только перестраиваются друг относительно друга. Таким образом мы получаем возможность комфортного просмотра сайта как на больших экранах ПК, так и на маленьких экранах смартфонов. В этом и есть суть адаптивности.
С табличной версткой такие фокусы не проходят - при уменьшении ширины экрана колонки будут сжиматься по ширине и расти в высоту, количество колонок останется прежним. Сайт при этом на мобильных устройствах будет выглядеть некрасиво и пользоваться им будет неудобно.
Практически все современные шаблоны для CMS построены с использованием блочной верстки и почти всегда адаптивные. Чтобы как-то уникализировать дизайн сайта нужно хотя бы немного разбираться, как эта блочная верстка работает.
Освоение блочной верстки подразумевает углубленное изучение CSS - нужно уверенно оперировать с такими свойствами как позиционирование, обтекание, отступы, размеры блока, а также предусмматривать, что он может отображаться по-другому, если сайт смотрят на смартфоне. В общем, чем дальше, тем интереснее!
Можно пойти и другим путем - использовать готовое решение. Например, фреймворк Bootstrap - набор CSS + Javascript, которые подключаются парой строк кода и работают практически "из коробки" - нужно только изучить названия основных стилей. При помощи Bootstrap легко реализовать на сайте многоколоночную адаптивную верстку, всплывающие формы, выпадающие меню, слайдеры, табы и много чего еще.
Недостаток Bootstrap - его "типовой" внешний вид, без изюминки, но его вполне можно разбавить своими CSS-элементами. Bootstrap очень удобен для построения "бэкэнда", простым языком - для создания админки сайта. Не нужно придумывать внешний вид элементов, все уже есть готовое. А дизайнерские фишки для бэкэнда вовсе не обязательны.
Седьмой уровень. Javascript и jQuery.
На этом уровне вебмастер начинает потихоньку переквалифицироваться в веб-программиста. Как правило, знакомство с веб-программированием начинается с языка Javascript.
Javascript - это язык программирования, на котором пишутся сценарии на странице. Эти сценарии выполняются на стороне клиента, то есть, в пределах браузера. Большинство интерактивных элементов на страницах создаются с использованием Javascript. Простейший пример такого сценария - смена картинки при наведении на нее мышки. При помощи Javascript делаются всплывающие окна на полупрозрачном фоне, всякие слайд-шоу, кнопка плавной прокрутки в начало страницы и многое другое.
С точки зрения Javascript веб-страница представляет собой набор объектов (DOM - "объектная модель документа"), у каждого из которых есть свой набор свойств и функций. Объектом является любой блок, любая ссылка или картинка на странице. У объекта есть свой уникальный ID, который прописывается в параметрах тега - примерно <div id="block1">. Для управления этими объектами создаются функции, которые вызываются при тех или иных событиях, например, наведение мышки на объект, клик, уход мышки с объекта и т.д.
Как правило, Javascript тесно взаимодействует с CSS-стилем элементов страницы, меняя их свойства - положение, угол поворота, прозрачность и так далее. На основе этого взаимодействия строится анимация на страницах (не Flash!). Для облегчения работы веб-программистов существуют уже готовые библиотеки функций, среди которых наиболее известен фреймворк jQuery. Благодаря ему веб-программист освобождается от большого количества рутинной работы по ручному написанию Javascript-кода для решения типовых задач по созданию интерактивных элементов на странице. Синтаксис скриптов на jQuery выглядит несколько иначе, чем традиционный код Javascript, но к этому синтаксису легко привыкнуть.
Как показала практика, научиться работать с JQuery может даже тот, кто никогда не писал на "чистом" Javascript.
Главное ограничение Javascript и jQuery - сценарии выполняются только в браузере. Javascript не может создавать файлов на сервере, он не может напрямую общаться с базой данных. Более того, он не может даже создать файл на вашем компьютере, а может просто скачать его с сервера по ссылке.
Кстати говоря, JQuery - не единственная полезная вещь, основанная на Javascript. Есть и другие JS-фреймворки - Angular, Backbone, Ember и многое другое. Они активно используются профессиональными фронтэнд-разработчиками.
Восьмой уровень. PHP и MySQL.
PHP - язык веб-программирования, на котором написаны большинство CMS, в том числе Joomla. В противоположность Javascript, сценарии PHP выполняются на стороне сервера, то есть при помощи них можно создавать файлы (на сервере), вносить изменения в базу данных, если таковая существует. Благодаря взаимодействию сценариев PHP и СУБД MySQL работают все, что имеет отношение к обратной связи с пользователем - формы обратной связи, фотогалереи с возможностью загрузки фотографий через браузер, движки сайтов и все остальное.
MySQL - система управления базой данных. У большинства систем управления содержимым вся полезная информация содержится не в файлах на сервере, а в базе данных. Это учетные записи пользователей, структура разделов сайта, навигация, полезный контент, и большое количество служебной информации. Обращение к базе данных происходит при помощи специальных функций языка PHP (mysql_query(...), mysql_fetch_object(...) и т.п.), база данных возвращает результаты запроса в виде массива или объекта. Обработчик PHP формирует из полученных данных HTML-код, который отправляется в браузер.
В отличие от Javascript PHP-сценарий не может непосредственно управлять браузером, так как он выполняется на стороне сервера. Однако, можно организовать взаимодействие между скриптами Javascript и PHP при помощи технологии AJAX.
Девятый уровень. AJAX.
AJAX - это подход к построению веб-приложений, основанный на взаимодействии серверных (PHP) и клиентских (Javascript) сценариев. На практике примером применения AJAX может служить интерактивная форма ввода вашего почтового адреса. Сначала на странице выпадающий список со странами. Выбираем "Россия", появляется второй выпадающий список с городами. Выбираем свой город, после чего появляется третий список с улицами конкретно этого города, потом - список домов. И все это происходит без перезагрузки страницы.
AJAX имеет массу преимуществ перед построением форм на "обычном" PHP, поскольку, во-первых, экономит трафик (не нужно каждый раз перезагружать страницу, новая информация подгружается по мере надобности), во-вторых это удобно для пользователя.
Основная сложность AJAX - достаточно большое количество программной "писанины" для создания обработчика событий. Однако, в Интернет полно готовых решений, которые можно использовать "как есть" или немного "доработав напильником".
И тут нам опять приходит на помощь фреймворк jQuery - при помощи него наладить работу скриптов через Ajax намного проще, чем делать это на "чистом" Javascript.
Десятый уровень. PHP и JS фреймворки.
Не стоит тешить себя надеждой, что пройдя перечисленные вышу уровни, вы достигнете "просветления". Технологии веб-программирования развиваются, и то что было актуально сейчас, через год уже может оказаться устаревшим.
Особенно интересная ситуация возникает, когда требуется создать какой-то нетипичный проект, для которого нет готовых решений ни для одной CMS. Тогда возникает прямая потребность в создании проекта "с нуля" на PHP (либо на каком-то другом языке). Для облегчения этой задачи существуют "фреймворки" - конструкторы для создания приложений, избавляющих программиста от большинства типовых и рутинных задач.
Я сейчас наиболее активно в своей работе использую PHP-фреймворк Laravel - это связано с решаемыми задачами - создание автоматизированных информационных систем с веб-интерфейсом, преимущественно для внутреннего использования. Laravel мне в свое время посоветовал мой знакомый, который перепробовал очень многое, с тех пор я на этом фреймворке "сижу" очень крепко.
Если вам говорят - "Laravel (либо что-то другое) это просто", не надо этому верить безоговорочно. Программировать на Laravel действительно легко и приятно, но только тогда, когда вы хорошо знакомы с ООП и MVC, а также сам код на Laravel "примелькался" и простейшие и типичные строки типа:
$user = \App\User::select('id', 'name')->where('role_id', 1)->get() ;
... не вызывают паники и вы легко пишете подобный код по памяти, не прибегая помощи Гугла и буфера обмена. Тогда да, действительно легко. Но до этого надо дорасти.
Я начал изучение Laravel года три назад, было несколько длительных перерывов (во время которых занимался другими вещами), пришлось потратить немало времени на освоение (да и сейчас регулярно открываю для себя что-то новое), но если сравнивать трудоемкость программирования на "голом" PHP и программирования на Laravel — это небо и земля. Взять ту же систему регистрации/авторизации/восстановления пароля - на голом PHP она пишется и отлаживается часа два как минимум, в Laravel она идет "из коробки" и устанавливается за 1 минуту.
Пример моего проекта на Laravel - Фотоклуб, сайт для фотолюбителей, где есть возможность зарегистрироваться, размещать и обсуждать фотографии. Конечно, он не такой продвинутый и посещаемый как, например, Photosight.ru, но это вопрос времени и желания его развития и раскрутки.
Для программирования фронтэнда также используются CSS и JS фреймворки. Наверно самый простой и популярный из них - Bootstrap. Это набор стилей и готовых джаваскриптов для адаптивной блочной верстки. Именно Bootstrap использован для верстки "Фотоклуба" (он идет в комплекте с Laravel).
Есть более продвинутые решения для фронтэнда, в основе которых лежит JS - Node, React, Vue и т.п. Я с ними работал крайне мало, поэтому ничего сказать не могу. Почитать о JS фреймворках можно, к примеру, на Хабре - https://habr.com/ru/company/plarium/blog/433926/
В общем и целом можно сказать, что после того как вы поработаете с фреймворками, желания возвращаться к программированию "по-старинке" у вас уже не возникнет никогда. Ну разве что, при работе с небольшими и несложными проектами без перспектив развития можно использовать "обычный" html, php и js :)
И что интересно, чем больше я погружаюсь в веб-программирование, тем яснее понимаю насколько мало я пока знаю! До пресловутого "80 level'а" еще ой как далеко...
Что дальше?
Тут уже сложно выделить основные направления дальнейшего развития, все зависит от решаемых прикладных задач. Наверно уместно будет акцентировать внимание на технологиях и протоколах межсерверного взаимодействия. На этом этапе приходит осознание, что веб-программирование не ограничивается разработкой какого-то одного сервиса, пусть даже сложного и многофункционального.
Рано или поздно возникает задача по работе с различными API, интеграция с теми или иными сервисами - социальными сетями, поисковыми системами, почтовыми серверами, SMS-шлюзами, сервисами онлайн-оплаты, банковскими серверами.
Еще одно интересное и востребованное направление - разработка мобильных приложений, работающих с веб-сервисами. Это еще одна огромная область, в которой простора для творчества непочатый край!
Почти всегда эти задачи подразумевают глубокое изучение протоколов межсетевого взаимодействия (http, smtp, soap и т.п.), с чем раньше мы работали на уровне пользователей и даже не задумывались о том, какая информация действительно передается между клиентским приложением и сервером, чтобы отобразить на экране фразу "Hello, World". До этого я пока не дошел... Когда дойду, обязательно поделюсь впечатлениями :)
Выводы
Те 10 уровней перечисленые выше - это путь к веб-программированию, по которому идут далеко не все. Многие вебмастера выбирают другую тропу - оптимизация, продвижение, маркетинг, продажи. Это не менее востребованные и интересные направления! Замечательно, если над проектом одновременно работают программист, контент-менеджер и "продвиженец", при этом каждый выполняет свои задачи - в этом случае шанс того, что проект "выстрелит" весьма высоки.
Если же вы "болеете" именно программированием, веб - это одна из самых благодатных сред, чтобы развивать свои навыки. Причем быть веб-разработчиком весьма выгодно - на сайтах вакансий эта профессия одна из самых высокооплачиваемых в категории IT. Если хотите пойти по этой тропе, я думаю, вам будет интересна эта статья - Один месяц работы бэкэнд-разработчиком PHP - отзыв и впечатления
К чему я пришел в итоге?
Сейчас я уже несколько лет как отошел от создания сайтов. Я занимаюсь разработкой и поддержкой автоматизированной информационной системы в образовательном учреждении. Система охватывает полный практически спектр задач института - организационных, учебных, имеет модуль дистанционного обучения, формирует огромную кучи отчетности. Система сильно облегчила жизнь практически всем, кто связан с учебным процессом. Это достаточно узко специализированный интранет-ресурс, созданный специально под задачи организации, поэтому афишировать его не вижу никакого смысла.