Куда двигаться в веб-разработке?
==================================

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

У меня нет академического Computer Science образования, и чем больше я углубляюсь в дебри, тем больше чувствую нехватку базы- глубокое знание ООП, создание архитектуры, всякие методики, трюки и т.п.   
  

Вторая проблема, с которой я сталкиваюсь заключается в моем незнании Джаваскрипта. Я могу писать простейшие скрипты, конфигурировать jQ-плагины, но не более. А с каждым новым проектом требуется всё больше интерактива. Присутствует страх перед JS: книги, которые мне рекомендовали это 900-страничные труды, так если только описание языка занимает столько времени сколько же еще потребуется на изучение сопутствующих технологий (фреймворки, инструментарий)?  
  

Я прошу направить меня на путь истинный- что же нужно подтягивать в первую очередь, куда двигаться? Какие книги читать? Какие курсы смотреть?  
  

Важное замечание - я не имею никакой возможности устроится работать в офис, работаю на фрилансе, но зато мне 20 лет - есть энергия и мотивация к самообразованию!  
  

Буду благодарен любым советам! 

 Перво наперво определитесь, хотите ли вы стать профессионалом или просто хорошо делать сайты. Я бы предложил выбрать путь профессионала.   
  

Во вторых определитесь, каким именно профессионалом вы хотите стать:  
1. web - мастером
2. Front end
3. Back end
4. Desktop
5. Другого направления

  
  

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

Здесь вам советовали сменить язык, не слушайте этих советов. Да Ruby имеет некоторые преимущества перед php, но имеет и недостатки. Не думайте, что если вы выберите Ruby (python) ваша жизнь измениться, вы не получите ничего, что не может вам дать php и на оборот, эти увеличенные зп и прочее миф, язык не важен. Помните, ЯП это всего лишь инструмент, вы конечно должны иметь инструмент, и должны знать свой инструмент в совершенстве, но умение программировать заключается не в этом. Да, плотник алкоголик, который зарабатывает на жизнь забивая гвозди, может хвалить свой молоток и всем рассказать, что молоток его кормилец, но согласитесь настоящий строитель умеет не только гвозди мотком забивать, не говоря уже об архитекторе, который молоток и в руках мог вообще не держать.  
  

И так предположим, вы выбрали свой путь, вы выбрали направление и выбрали инструмент. Теперь вам нужно работать в этом направлении (как над собой, так и в буквальном смысле работать). Читайте статьи, читайте книги (я всегда рекомендую только одну книгу - "Совершенный код", ее без преувеличивания должен прочитать **каждый** программист), изучайте новые фреймворки, технологии, отрасль постоянно движется вперед, вам нужно двигаться вперед еще быстрее, что бы хотя бы не стоять на месте. В процессе работы над проектами вы будете чувствовать нехватку знаний (вы упоминали js, ООП), устраняйте эти пробелы книгами (не стоит бояться 900 страниц, книги вы ничем не замените, их необходимо читать), статьями и конечно практикой. Не переживайте по поводу отсутствия высшего образования, оно не дает глубокого знания, никто не расскажет вам ни каких трюков, если у вас не будет толкового преподавателя. Но толковый преподаватель, это не обязательно учитель в универе, это может быть автор книги (например Макконел), автор хорошего инструмента (например Taylor Otwell), большинство очень известных и авторитетных людей генерирует тонну информации, книги, статьи, записи в соц. сетях, код, все это можно читать и это даст вам куда больше чем ВО. И да, мы с вами живем в уникальное время, время интернета, где нет расстояний, и это дает намного больше возможностей, чем нагуглить очередной костыль для jquery от школьника, вы можете общаться лично например со Страуструпом или тем же Тейлором, ни в одном учебном заведении России у вас не будет возможности поговорить с такими людьми.  
  

Подведя итог:  
1. Определите путь (хотя бы примерно)
2. Определите специализацию (хотя бы примерно)
3. Выберите инструмент (один основной язык, один основной фреймоврк, одну основную cms и тд)
4. Изучите свой инструмент в совершенстве
5. Пробуйте другие инструменты (да я сказал один яп, один фреймворк, но один вы должны знать в совершенстве, остальные должны попробовать)
6. Расширяйте кругозор
7. Работайте над собой
8. Работайте
9. Выберите наставников и учитесь у них

  
  

Следуя этим советам вы увеличите свой скилл, сможете сами отвечать на вопрос заданный в заголовке и станете профессионалом. И помните путь профессионала, это постоянная работа (как буквально работа, так и работа над собой, если просто писать сайты 24/7 вы тоже профессионалом не станете), гораздо больше чем 8 часов в день, 5 дней в неделю. 

 Куда двигаться в веб-разработке? - Подальше от России 

  

Современный веб это HTML5 (CSS3, WebGL, Canvas2D, WebRTC) а также мощные клиентские фреймворки: bootstrap, angular итд. Книги по JS это полнейшая ерунда, они успевают устареть ещё до своей публикации. Всегда читайте на английском, сайт w3c в помощь. 

 Никакие книги не дадут столько, сколько практика. Просто пишите код.  

Почитайте, например, статью от создателя jquery: [Джон Резиг: Пишите код каждый день](http://habrahabr.ru/post/219209/) 

> У меня нет академического Computer Science образования, и чем больше я углубляюсь в дебри, тем больше чувствую нехватку базы- глубокое знание ООП, создание архитектуры, всякие методики, трюки и т.п. 

 <https://www.coursera.org/>  
  

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

 Для уровня джуниора надо всего 500-2000 часов. Слово "всего" не случайно тут.  
  

> Я прошу направить меня на путь истинный- что же нужно подтягивать в первую очередь, куда двигаться? Какие книги читать? Какие курсы смотреть?

Надо просто начать уделять время образованию. 

 1) по PHP - найти себе хорошую книгу , которая б именно для тебя была хорошая, но мой совет читай документацию, там вся инфа и без лишнего текста(если понимаешь, что совсем нуб можешь глянуть специалита)  

3) ну и паттерны проектирования "PHP. Объекты, шаблоны и методики программирования" 

 По PHP книга для понимания ООП: [www.ozon.ru/context/detail/id/5648968](http://www.ozon.ru/context/detail/id/5648968/)  

По JS сначала эту, для закрепления основ: [www.ozon.ru/context/detail/id/19677670](http://www.ozon.ru/context/detail/id/19677670/) очень советую,   

потом эту [www.ozon.ru/context/detail/id/6287517](http://www.ozon.ru/context/detail/id/6287517/)  

Ну и читать официальную документацию и спецификации, они в отличие от книг постоянно обновляются. 

 ajax прибавить тебя итерактивности. И вообще избавься от "мышление" привязного к одному языку и легче тебя станет дышать. 

 Могу предложить практику, есть интересный проект, предлагаю поработать в команде   

пишите в скайп: autor4n расскажу подробнее 

 Вот на эту тему образования коммикс:   

[imgs.xkcd.com/comics/11th\_grade.png](http://imgs.xkcd.com/comics/11th_grade.png)  
  

И манифест(немного из другой оперы, но вдохновляюще) :  

[macode.ru](http://macode.ru/)  
  

Что-бы чему-то научится --- **"Пиши код, бл#@ь"**.  
  

Хочешь подучить JS? Выбери задачу с кучей JS кода и пиши пиши пиши, можешь по примерам, статьям в интернете, переделывать чужое решение, это не важно, пиши пока руки в кровь не сотрутся. Это лучший способ.  
  

ООП и прочее, для начала разберись с базовыми понятиями. Прежде чем их применять, пойми как оно устроено. А потом, опять же : выбери задачу и вливай в нее столько ООП сколько сможешь.   
  

ООП я бы сразу вместе с Java(например, первые 10-20 страниц Thinking In Java(на русс. Философия Java), как я помню уже должны будут вправить тебе мозги), даже если Java тебе не попрет, как минимум учить удобнее будет.  
  

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

 Как писали выше: js, css и прочий хлам легко учится когда ты делаешь основную задачу и решаешь простенькие смежные задачи гуглением.  

На тему "разных фреймворков" и проблемы отсутствия "глубоких знаний" посоветую почитать про Erlang и [N2O](https://github.com/5HT/n2o). Глянь пример чата в 20 строк, графики производительности – и ты поймёшь, что похапэ и ява нинужны. 

**Alex, привет!**  

Скажи, а какие помимо программирования у тебя увлечения и цели?  

Вечно работать на фрилансе - это путь в тупик, надеюсь ты понимаешь.  
  

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

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

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

PHP менять на что-то другое, мне кажется не нужно.  

Стоит научиться очень хорошо и быстро верстать и изучить JS (желательно чистый JS, чтобы уметь работать без фреймворков). Для понимания архитектуры - опять же, тренируйся на своих проектах.