Что все-таки должен уметь делать frond-end-разработчик?
=========================================================

 Я работаю в одной компании front end разработчиком всего лишь пол года, даже меньше. Опыта до этого не было особого. Но вот, передо мной встал вопрос. Чем все-таки должен заниматься frond-end-разработчик. Понятное дело это css+html адаптивность, крассбраузерность, семантика, оптимизация, сжатие и прочие нюансы. Понятное дело это знание js. В принципе js уже довольно-таки неплохо знаю. Мне нравится именно frond end. Я получаю огромное видимое удовольствие от проделанной работы. Я не хочу подступать даже краешком ступни к back-end. Хотя имел опыт, и могу свободно разбираться в коде и понимать как что устроено. В данный момент я не использую никаких дополнительных библиотек, фреймворков и прочего. То есть все делаю с нуля. Есть только собственноручные заготовки. Конечно же я хочу продвигаться в своей профессии, так как делаю сайты как для себя. Изучил уже давно все внутренние тонкости браузеров, чтобы эффективнее заниматься оптимизацией скриптов и графики. Но часто слышу, что front end разработчик должен знать framework'и всякие (angular, node, backbone и прочие). Или там должен владеть технологией ajax в совершенстве. Но это же back-end не так ли? Все, что связано с обработкой данных с сервера это же back-end? Мне вообще это не по душе. Хочется заниматься только своим делом, чтобы в стать в нем лучшим. Как же стать профессионалом, если будешь делать все подряд?( Просто насколько я понимаю с помощью js можно выполнить весь back-end на сайте. Также с дизайном. Часто вижу frond-end дизайнеров. Это же называется full-stack - не так ли? Опытные люди, скажите, что "действительно" должен знать хороший frond-end-разработчик. 

 Все то что запускается в браузере - ваша зона ответственности. Ajax (ajax это просто возможность делать http запросы из js), все эти фреймворки и библиотеки, все все все. От бэкэнда вас целиком и полностью отделяет весьма жирная сетевая прослойка. Причем эту прослойку вы так же должны знать как слой интеграции между фронтэндом и бэкэндом (на поверхносном уровне хотя бы).  
  

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

Если фронтэнд - это отдельное приложение, то и знать вы должны все что нужно для его построения. Это и архитектурные штуки (MVC/MVA/MVVM/MVP/Flux/паттерны всякие/функциональное программирование) и тесты писать уметь должны и т.д. Все как у бэкэндщиков по объемам знаний. Просто у бэкэндщиков геморой обычно в конкурентных запросах, локах, базах данных и другими веселыми штуками. а у фронтэндщиков - зоопарк браузеров, различия в окружениях и т.д.  
  

nodejs - это уже опционально. В любом случае если вы хорошо знаете JS то посмотреть как там чего в API ноды проблемы не составит (например что бы быстренько поднять expressjs сервачек для разработки с мидлвэрами, часто нужно для всяких webpack-ов и browsersync). Ну и опять же билд стэк у фронтэндщиков в принципе весь на ноде написан. Но это не бэкэнд. 

 Ajax(xmlHttpRequest), Web Sockets, Web Workers, Drag&Drop API, Shadow DOM, Web Components, Canvas, SVG  

это тоже должен знать/уметь frond-end-разработчик. 

 frond-end-разработчик отвечает за то что происходит на в браузере, back-end-разработчика который отвечает за то что происходит на сервере. При этом ключевое слово здесь **разработчик**, т.е. разработчик на js, вёрстка может и не входить в его обязанности, а может входить. Если frond-end-разработчик не умеет js, но умеет css/html то его называют верстальщик.   
  

full-stack разработчик это тот кто может тянуть проект/задачи в одно лицо т.е. для закрытия задачи не нужна помощь других спецов. В данном случае чаще понимается, что разработчик владеет всем используется в конкретном проекте. Т.е. это может быть как photoshop+js+html+css, а может быть python+android/java+ios/objC 

> Я работаю в одной компании front end разработчиком

  

нужно поменять "front end разработчиком" на "верстальщиком" 

> всего лишь пол года, даже меньше

  

> В принципе js уже довольно-таки неплохо знаю

  

Junior, что ты делаешь? ахаха, прекрати 

 Бекендер предоставляет api для манипулирования данными, а ваша задача эти данные отобразить конечному пользователю. Взаимодействие с сервером ваша задача. Вы делаете полностью клиент. На каком фреймворке или без, вам решать. Но в подавляющем большинстве случаев пишут classic websites, где клиентская часть генерится на сервере и клиент соответственно писать не нужно, поэтому весь сайт делает бекендер, отдать можно только верстку верстальщику, а фронтендер в таком проекте не нужен.  
  

Фронтендер такой же программист. Скажем у фейсбука есть API, вас просят написать веб клиент к этому api. И вы должны это сделать. На выходе должен быть готовый продукт, которым уже может пользоваться конечный потребитель. Это фронтендер. Это его отличает от верстальщика, задача которого картинку напилить в html. 

 То, что пишут в конкретной вакансии. 

 Ранее front-end dev нужно было знать css и html. И звали его верстальщиком. В довесок шло требование умения работать в Photoshop, чтобы верстать макеты от дизайнера.  

Затем JS активно вошел в жизнь, и фронтенд дев должен был владеть html, css, js (уметь работать с какой-нибудь из либ а-ля jQuery).  

Сейчас же в довесок ко всему, фронтендщик должен уметь работать с каким-нибудь из популярных фреймворков, например AngularJS, а задачи верстки могут делигироваться на кодеров (если в штате компании таковые имеются). А также такие инструменты как Grunt, Gulp, Bower. Препроцессоры CSS: sass, less. И прочие технологии.  
  

Все конечно индивидуально, и зависит от требований каждой компании в отдельности. Но рынок меняется, а вместе с ним и требования.   
  

> Я не хочу подступать даже краешком ступни к back-end. Хотя имел опыт, и могу свободно разбираться в коде и понимать как что устроено.

  

Что-то мне подсказывает, исходя из вашего опыта, Вы даже не представляете, как там может быть все устроено (не берем в счет hello world).  
  

> Все, что связано с обработкой данных с сервера это же back-end?

  

С сервера? Если это не опечатка, то нет. Обработать данные полученных посредством, скажем, AJAX - полностью Ваша задача. 

 Хорошая критика в адрес full-stack понятия на этой неделе вышла.  

<https://habrahabr.ru/company/Voximplant/blog/275229/>