Всем привет.
Имею большое желание освоить веб-разработку на профессиональном уровне. Опыт программирования имею, в таких вещах как, например, ООП, программирование мультипоточных приложений, клиент-серверное взаимодействие, разбираюсь.
Проблема в том, что с вебом раньше не имел практически никакого дела. Использовал разок libcurl да в курсе азов HTML. В остальном опыт сводился к чисто десктопным/серверным вещам, по большей части на С++ и С.
В идеале хочется достичь такого уровня компетенции, который позволил бы грамотно создавать с нуля веб-сервисы любой степени сложности. То есть, как клиентскую, так и серверную части. Но готов несколько пожертвовать идеалом в плане клиентской части и ограничиться знаниями, которых было бы достаточно для осведомлённости обо всех современных трендах/техниках в данной области, общения с профильным специалистом, понимания плюсов и минусов предлагаемых им решений для конкретных задач и, при необходимости, возможности быстро добрать требуемые технические знания из интернета.
Собственно, вопрос на самом деле представляет из себя два вопроса, скрывающиеся в ключевых словах «как» и «эффективно»:
1.
Какие именно знания мне требуются для достижения заявленных целей?
Из очевидного, это как минимум HTML/CSS/JS по клиентской части, плюс хотя бы один скриптовый язык типа PHP/Python/Ruby и хотя бы одна СУБД типа Postgres для серверной части.
Однако даже я понимаю, что этого нынче мало. Клиентская разработка нынче редко обходится без всяких шаблонизаторов типа HAML/SASS и JS-библиотек типа jQuery, а для эффективной серверной разработки всё и того сложнее: фреймворки, ORM, continuous integration, очереди задач и прочая-прочая.
Но про все эти штуки я знаю лишь очень поверхностно, чисто благодаря собственному любопытству, общению с веб-разработчиками и, не в последнюю очередь, Хабру. Эти знания разрозненны и урывочны. Хочется обрести цельную картину того, чем сейчас живёт мир веб-программирования, и освоить всё мало-мальски важное на достойном уровне.
2.
Как именно и где именно черпать необходимые знания?
Пытаясь решить эту проблему с привычной для себя фундаментальностью, я начал с базовой и при этом казавшейся мне максимально независимой вещи — с HTML. И сразу же понял, какое тут непаханое поле. Ибо нужно начать с HTML4, чтобы понимать, чем индустрия жила последние десять лет, и тут выясняется что HTML — это не вещь в себе, а SGML-based язык, то есть здравствуй копание дальше к корням и здравствуйте новые подводные камни. К примеру, я до конца так и не смог разобраться во всех отличиях CDATA от PCDATA — просто в силу того, что не смог найти исчерпывающие определения той и другой сущности, лишь обрывки.
А ведь это лишь вершина айсберга. Спецификация HTML — всего лишь ориентир для разработчиков браузеров, и каждый реализует поддержку HTML с той или иной степенью вольности. Плюс есть уже и HTML5, который, ещё не став рекомендацией W3C, уже внедряется в браузеры, и опять в разной степени. К тому же, HTML5 ещё активно развивается, и что-то меняется прямо на ходу. А есть ещё и XHTML, который тоже имеет свои отличия…
В общем, решая эту задачу в лоб, читая спецификации, я рискую закопаться настолько глубоко, что информация будет устаревать и терять актуальность быстрее, чем я буду её усваивать.
В поисках онлайн-самоучителей по тому же HTML, я находил сайты типа w3schools.com или htmlbook.ru. «Неприглядные» низкоуровневые подробности там опускаются, что, конечно, позволяет сфокусироваться на более прикладных вещах. Но знания получаются несистемными, больше на уровне «этот элемент для этого, а этот для этого». Плюс, на StackOverflow часто пишут, что w3schools порой откровенно врёт в своих материалах, что даже привело к появлению сайтов типа
w3fools.com.
В многообразии ресурсов, сулящих тебе качественные знания, несложно запутаться. А не имея с самого начала хорошей базы, тяжело отличить качественный ресурс от ресурса, лишь притворяющегося таковым. Плюс, это всё теория, а теория и практика, как водится, весьма рознятся.
Я лично с радостью бы получал знания по вышеописанным вопросам в процессе трудовой деятельности. Проблема лишь в том, что мало кому нужен работник, которого нужно предварительно обучить, прежде чем он начнёт приносить пользу, даже если он согласен работать за смешные деньги.
Поэтому я хочу обратиться к тем из вас, кто считает себя профессиональным веб-разработчиком, с просьбой поделиться своим мнением относительно того, знание каких веб-технологий нынче максимально приоритетно, и каковы, по-вашему, эффективные методы их изучения.
Спасибо!