Любое веб приложение состоит из двух частей: бекенд и фронтэнд. Соответственно и программистов делят также, по сути это две несвязанные между собой касты разработчиков.
Бекэнд
Бекэнд — серверная часть приложения, которая не видна пользователям. Сюда относится: авторизация, хранение и обработка данных, email рассылки и тому подобное. Скажем так бекэнд это то, что под капотом.
Языков программирования тут множество, вот самые распространенные из них:
• Php
• Asp net
• Java
• Python
• Ruby
• Node js
Советую выбрать один единственный, потому что с текущими требованиями к программистам для достижения уровня middle пройдет не менее нескольких лет. При выборе можно ознакомиться с вакансиями в вашем городе, посмотреть какие больше подходят, где больше платят и смотря из того какой язык в них требуется его и выбрать.
Сервер во многом используется для работы с данными. Поэтому нужно будет выучить как минимум бы одну из реляционных баз данных:
• Oracle
• MSSQL
• MYSQL
• Postgres
По сложности это примерно тоже, что и освоить язык программирования. Во всех перечисленных БД есть часть, которая одинакова везде – так называемый sql (язык запросов), а так же процедурный язык который в каждой базе свой. Так как sql все-таки един, а он основа всему, что связано с обработкой данных, то переход на другую базу данных, не является такой уж и проблемой. Поэтому выбрать для начала можно любую, но и тут бы я пошел по принципу анализа вакансий.
Лично я ставлю плюс в сторону изучения бекенда, так как навыки тут более статичны и изучив, что-то единожды вы сможете проработать на этом длительное время.
Фронтэнд
Фронтэнд – часть, работающая в браузере с которой непосредственно взаимодействует пользователь. Это динамические интерфейсы, меню, события по действию пользователя обмен данными с серверной частью, в общем, то, что происходит на клиенте.
Язык программирования тут один javascript. С одной стороны это несомненный плюс, так как после его изучения вам будут открыты все компании в вашем городе, которые занимаются веб разработкой, а сейчас этим занимаются многие. С другой стороны есть нюансы.
JavaScript на текущий момент времени имеет два стандарта, которые широко используются: ECMAScript 5 и ECMAScript 6. Разница между ними состоит в том, что в ECMAScript 5 отсутствует полноценное ОПП. В ECMAScript 6 оно есть, но поскольку этот стандарт появился относительно недавно, уже большая часть приложений написана на ECMAScript 5, в результате чего нужно будет освоить оба стандарта и как следствие два разных подхода к разработке.
Еще один момент, который нужно учитывать это то что один и тот же код, написанный на javascript может по- разному отрабатывать в разных браузерах и на разных ОС. С текущими требованиями к приложениям как правильно нужно будет писать так называемый кроссбраузерный код, то есть код, результат выполнения которого будет давать везде один и тот же результат. Конкретного манула по написанию такого кода нет, в этом случае в помощь вам форумы и окей гугл.
Описанные мною проблемные моменты решены в современных js фреймворках (например в таких как ангуляр и реакт). Но в проектах, которые написаны без использования фреймворков эти моменты остаются.
Лично для меня еще большим минусом является то, что здесь идет очень быстрое развитие трендов. Постоянно обновляются версии фреймворков, выходят новые библиотеки, и все сразу хотят начать их использовать. В общем, за сообществом не угнаться.
Фулстек
Уже из названия должно быть понятно, что данный тип разработчиков занимается разработкой обоих частей. Пытаться стать таким разработчиком не советую, поскольку выучить все мозгов не хватит в любом случае, да и большинство компаний уже пошли по пути разделения труда. Однако фулстек это то с чего нужно начать, чтобы сделать шаг в сторону бекенда или фронэнда. Разработав пару небольших приложений, вы поймете между ними разницу (а она действительно есть) и сможете определиться, какая из сторон вам ближе.
Я в свое время, чтобы определиться прочитал книгу «Создаем динамические веб-сайты», автор «Робин Никсон». Книга небольшая всего 500 страниц, но благодаря ней у меня сложилось общее представление о веб-разработке и я смело сделал выбор в сторону бекенда о чем до сих пор не жалею. Эту книгу я привел в качестве примера, можно взять любую другую это не принципиально.
Вот в принципе и все чем я хотел поделиться, желаю всем пришедшим в веб удачи и скорейшего освоения.
Комментарии (14)
AndyPike
17.03.2018 20:11Первая стадия дзена.
Fullstack необходим, когда ты в начале изучения, с нуля делаешь себе и другу сайт, «чтобы самому поиграться и понять, что-ж там сложного?» особенно для C++ программера. Делаешь как можешь и, если работает — это хорошо. Хи-хи, что такое PHP относительно C++? Ощущения: похож на C++, но как Basic.
Вторая стадия дзена.
Ты хорошо разобрался в PHP, и худо-криво работающий backend сделал. Теперь пришло время заниматься фронтом. На тебя сейчас по-минимуму надо разобраться CSS3 / HTML5 / Bootstrap / Javascript / jQuery. На каждый из них тратишь для своего проекта по неделе. Заработало. О том, что это говнкод — сейчас не говорим. Главное чтобы работало на своём «сайте для души и друга».
Третья стадия дзена.
Ты хочешь на этом зарабатывать. Ищешь неприхотливых заказчиков и не дорого. Берёшь свой сайт как шаблон для ихнего, и начинаешь пилить. Обнаруживаешь, что там надо сделать авторизацию. Что они хотят верификацию форм и parallax.
Денег особо или вообще не получаешь, но радуешься. Потом переносишь с localhost на сервер, а оно там падает. Приходится постепенно обрастать бородой и свитером с оленями.
Четвёртая стадия дзена.
Уже сбрил бороду, надел удобную футболку и пиджак (примерно через 3...5 лет, не с теорией, а с практикой). Ты — fullstack.
Сервер можешь настроить, логи посмотреть, PHP 5 уже достаточно знаешь, и не лезешь в PHP 7 без необходимости. Между делом поизучал Python, поигрался — понравилось. По фронту между делом досконально разбираешься в jQuery, и полез изучать Vue.js.
Всё делаешь сам, и только сам всё под контролем, пока не наступает момент Х — тебя приглашают работать в команде. Но это не тема для комментария.AndyPike
17.03.2018 20:27То что я выше написал — то, через что я прошёл, и как делать не надо.
Да, я знаю ASM/C/C++ PHP / MySQL / JS, но в новой команде я взял на себя роль исключительно frontend. Выбрав изначально стратегию личного развития, проще определится в коллективе, не быть «как все», не распыляться между беком, фронтом и сисадминством. Работать в своей сфере и быть лучшим специалистом в из коллективе именно в своей сфере.
Мне такая стратегия очень помогает.JustDont
18.03.2018 00:35За 10+ лет работы на де-факто фуллстеке (хотя с формальной стороны я был нанят как фронтэндщик) и наблюдения за коллегами, я пришел к выводу, что вообще стремиться к освоению фуллстек-технологий — это вообще очень полезная штука. Я, например, не настраиваю СУБД и не лезу в её кишки, для этого есть отдельные люди, но вместо этого приходилось, например, работать переводчиком между разработчиками бекэнда и рисователями формочек, у которых терминология баз данных вызывала когнитивный диссонанс. Или в случаях, когда нужно взять и поправить вебсервер — ты просто берешь и его правишь, не растягивая это на несколько недель и совещаний. Или в тех случаях, когда что-то идёт не так — имея хорошие представления о том, как работает бекэнд, после легкого дебага ты можешь с большей уверенностью преполагать, где и что в бекэнде сломалось, а не просто «у вас оно не работает».
Но работать при этом надо на одну сторону, с этим я согласен. Когда «и чтец, и жнец» — это, как правило, приводит к тому, что и чтец ты посредственный, и жнец — неочень.Nekto_Habr
19.03.2018 04:07вообще стремиться к освоению фуллстек-технологий — это вообще очень полезная штука.
На многих айти-ресурсах очень не любят, когда пишут, что нужно знать как можно больше. Почему-то. Забывая вот про это, как правило:
Но работать при этом надо на одну сторону, с этим я согласен.
JSmitty
17.03.2018 22:03Небольшое уточнение про фронтенд — язык тут как бы один, Javascript. Но при этом их много — ES5, ES6+, TypeScript, JS+Flow, Dart, Coffescript, ClojureScript, Elm.
А еще традиционного ООП, такого как в C++/Java — в JS ни в ES5-, ни 6+ — нет и не будет.HappyLynx
18.03.2018 11:25Вы, как и автор статьи, заблуждаетесь.
Из того, с чем лично пришлось работать: GWT (tldr: фреймворк + компилятор Java в клиентский JS) — штука достаточно мощная, используем в крупном проекте на тысячи пользователей. Весь код на Java, и бекенд, и фронтенд. Учитывая наличие отладчика интегрированного с хромом, даже в дебаге фронтенда из Java в JS переключаться не приходится.JSmitty
18.03.2018 22:04Весь код на Java
Вопросов больше не имею. Подавляющее большинство JS программистов такой роскоши себе позволить не может. А как только вы сталкиваетесь с JS-зависимостями, весь ваш ООП из Java потенциально идет в топку. См. например печально известный манки-патчинг (про smoosh-гейт слышали из последнего?)
PS Не скажу за GWT, но скажем Vaadin то еще дерьмо.
kostus1974
17.03.2018 22:06Неплохая заметка. Такие заметки тоже нужны. Только я бы добавил, что после пары проектов для себя и для друга, после выбора, например, бэкэнда, ты сознательно идёшь работать за еду в реальную команду. И это, вероятно, обязательный шаг.
aram_pakhchanian
17.03.2018 22:20А мне представляется, что лучше вообще сходу начать с работы в реальной команде. Если хороший программист, то возьмут и помогут все выучить. Языки и фреймворки учить – это понятно как и очень предсказуемо. А научить программировать – долго, и может не получиться.
JustDont
18.03.2018 00:22Говорить, что на фронтэнде «только javascript» — как минимум лукавство. Во-первых, тут уже сказали, что яваскрипт он как бы один, но вместе с тем их много.
Во-вторых, если вы придете к людям и скажете им «знаю яваскрипт, дайте мне писать фронтэнд» — ну, люди посмеются конечно, но толку в этом особого не будет. Как минимум вам нужен базовый стек технологий браузерного представления — а это, вдобавок к яваскрипту, HTML (и DOM) и CSS. Декларативные языки — это тоже языки, а отношение программистов в духе «это ж просто, чё там разбираться» часто потом порождает монстров. Ну а как максимум, тут тоже всё «как бы одно, но на самом деле нет». Шаблоны ангуляра — это вроде как HTML, но не совсем, а фичи, скажем, LESS — это вроде как CSS но не вполне.
Во всех надстройках фронтэнда гуру быть не надо (и даже скорее вредно, сегодня одни надстройки популярны, завтра другие), но иметь хорошее представление — скорее всего придётся, если заниматься возней с фронтэндами профессионально. А вот в базовых технологиях — очень даже стоит разобраться серьезно.
dopusteam
18.03.2018 07:22Языков программирования тут множество, вот самые распространенные из них:
• Php
• Asp net
• Java
• Python
• Ruby
• Node js
Asp и nodejs — это не языки
godlikebasic
18.03.2018 16:37+1У меня одного чувство какое-то незавершенности после прочтения? Как будто автор всю статью готовился чихнуть, но так и не чихнул. Обидно.
muhaa
18.03.2018 19:57В самом деле, кто знает как стать настоящим веб-программистом, если ты программист, но не веб? Допустим, с языками понятно. JS программистом с опытом изучается легко. Можно немного задержаться на уровне промисов, замыканий, но все равно это пара книжек и пара недель практики.
Допустим, для сервера можно использовать уже знакомый c#/Java или снова JS (или обязательно нужен какой-то еще веб-язык?).
БД, вроде, они и в Африке БД, и сейчас везде ORM и Mongo (или нет и прям нужно детальное понимание работы одного-нескольких решений БД?).
Для сервера есть фреймворки и они все выглядят очень специфически, видимо потому, что каждый предполагает определенный шаблон разработки. Появляются довольно не четкие (для не веб-программиста) понятия контроллер, API, REST и так далее. Понятия явно очень простые по своей сути, но есть ли там что-то, чему надо научиться, чтобы говорить на одном языке с другими веб-программистами?
Что еще? Нужно ли знать множество секретов использования html и css? Обычная ситуация для не-веб программиста, когда вроде все просто, но когда начинаешь гуглить как поставить элемент по центру (условно говоря), понимаешь, что вариантов очень много и все плохие и явно все делают как-то по-другому.
Чтобы считаться веб-программистом это нужно преодолеть? Как?
Наконец, видимо требуется разобраться с React и чем-то из семейства Angular-подобных, судя по довольно впечатляющим идеям, заложенным в эти фреймворки.
После всего этого можно считаться веб-программистом? Или есть еще нечто существенное, какое-то знание, какой-то опыт?
artskep
А, может быть, этому «программисту С++» стоит все-таки освоить общие вопросы анализа и проектирования ПО?
А потом уже вопрос «на каком языке писать» станет не столь актуальным…
Тем более, что есть большой шанс, что, как в анекдоте про байкеров, «чего с вами знакомиться — вы каждый год разные»