Недавно на сайте stack overflow увидел вопрос, в котором программист C++ спрашивал, что нужно начать изучать для того чтобы впоследствии стать веб-разработчиком. С его слов он начал с изучения php, но по совету знакомых переключился на яву, в какой-то момент открыл для себя ангуляр, в итоге в голове у него образовалась каша, и понимания в какую сторону двигаться не было. Именно для людей, которые только что пришли в веб я и решил поделиться это статьей, чтобы у них было примерное понимание, что тут есть.

Любое веб приложение состоит из двух частей: бекенд и фронтэнд. Соответственно и программистов делят также, по сути это две несвязанные между собой касты разработчиков.

Бекэнд


Бекэнд — серверная часть приложения, которая не видна пользователям. Сюда относится: авторизация, хранение и обработка данных, 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)


  1. artskep
    17.03.2018 18:52

    А, может быть, этому «программисту С++» стоит все-таки освоить общие вопросы анализа и проектирования ПО?
    А потом уже вопрос «на каком языке писать» станет не столь актуальным…

    Тем более, что есть большой шанс, что, как в анекдоте про байкеров, «чего с вами знакомиться — вы каждый год разные»


  1. 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.

    Всё делаешь сам, и только сам всё под контролем, пока не наступает момент Х — тебя приглашают работать в команде. Но это не тема для комментария.


    1. AndyPike
      17.03.2018 20:27

      То что я выше написал — то, через что я прошёл, и как делать не надо.

      Да, я знаю ASM/C/C++ PHP / MySQL / JS, но в новой команде я взял на себя роль исключительно frontend. Выбрав изначально стратегию личного развития, проще определится в коллективе, не быть «как все», не распыляться между беком, фронтом и сисадминством. Работать в своей сфере и быть лучшим специалистом в из коллективе именно в своей сфере.

      Мне такая стратегия очень помогает.


      1. JustDont
        18.03.2018 00:35

        За 10+ лет работы на де-факто фуллстеке (хотя с формальной стороны я был нанят как фронтэндщик) и наблюдения за коллегами, я пришел к выводу, что вообще стремиться к освоению фуллстек-технологий — это вообще очень полезная штука. Я, например, не настраиваю СУБД и не лезу в её кишки, для этого есть отдельные люди, но вместо этого приходилось, например, работать переводчиком между разработчиками бекэнда и рисователями формочек, у которых терминология баз данных вызывала когнитивный диссонанс. Или в случаях, когда нужно взять и поправить вебсервер — ты просто берешь и его правишь, не растягивая это на несколько недель и совещаний. Или в тех случаях, когда что-то идёт не так — имея хорошие представления о том, как работает бекэнд, после легкого дебага ты можешь с большей уверенностью преполагать, где и что в бекэнде сломалось, а не просто «у вас оно не работает».

        Но работать при этом надо на одну сторону, с этим я согласен. Когда «и чтец, и жнец» — это, как правило, приводит к тому, что и чтец ты посредственный, и жнец — неочень.


        1. Nekto_Habr
          19.03.2018 04:07

          вообще стремиться к освоению фуллстек-технологий — это вообще очень полезная штука.


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

          Но работать при этом надо на одну сторону, с этим я согласен.


  1. JSmitty
    17.03.2018 22:03

    Небольшое уточнение про фронтенд — язык тут как бы один, Javascript. Но при этом их много — ES5, ES6+, TypeScript, JS+Flow, Dart, Coffescript, ClojureScript, Elm.
    А еще традиционного ООП, такого как в C++/Java — в JS ни в ES5-, ни 6+ — нет и не будет.


    1. HappyLynx
      18.03.2018 11:25

      Вы, как и автор статьи, заблуждаетесь.
      Из того, с чем лично пришлось работать: GWT (tldr: фреймворк + компилятор Java в клиентский JS) — штука достаточно мощная, используем в крупном проекте на тысячи пользователей. Весь код на Java, и бекенд, и фронтенд. Учитывая наличие отладчика интегрированного с хромом, даже в дебаге фронтенда из Java в JS переключаться не приходится.


      1. JSmitty
        18.03.2018 22:04

        Весь код на Java

        Вопросов больше не имею. Подавляющее большинство JS программистов такой роскоши себе позволить не может. А как только вы сталкиваетесь с JS-зависимостями, весь ваш ООП из Java потенциально идет в топку. См. например печально известный манки-патчинг (про smoosh-гейт слышали из последнего?)

        PS Не скажу за GWT, но скажем Vaadin то еще дерьмо.


  1. kostus1974
    17.03.2018 22:06

    Неплохая заметка. Такие заметки тоже нужны. Только я бы добавил, что после пары проектов для себя и для друга, после выбора, например, бэкэнда, ты сознательно идёшь работать за еду в реальную команду. И это, вероятно, обязательный шаг.


  1. aram_pakhchanian
    17.03.2018 22:20

    А мне представляется, что лучше вообще сходу начать с работы в реальной команде. Если хороший программист, то возьмут и помогут все выучить. Языки и фреймворки учить – это понятно как и очень предсказуемо. А научить программировать – долго, и может не получиться.


  1. JustDont
    18.03.2018 00:22

    Говорить, что на фронтэнде «только javascript» — как минимум лукавство. Во-первых, тут уже сказали, что яваскрипт он как бы один, но вместе с тем их много.
    Во-вторых, если вы придете к людям и скажете им «знаю яваскрипт, дайте мне писать фронтэнд» — ну, люди посмеются конечно, но толку в этом особого не будет. Как минимум вам нужен базовый стек технологий браузерного представления — а это, вдобавок к яваскрипту, HTML (и DOM) и CSS. Декларативные языки — это тоже языки, а отношение программистов в духе «это ж просто, чё там разбираться» часто потом порождает монстров. Ну а как максимум, тут тоже всё «как бы одно, но на самом деле нет». Шаблоны ангуляра — это вроде как HTML, но не совсем, а фичи, скажем, LESS — это вроде как CSS но не вполне.

    Во всех надстройках фронтэнда гуру быть не надо (и даже скорее вредно, сегодня одни надстройки популярны, завтра другие), но иметь хорошее представление — скорее всего придётся, если заниматься возней с фронтэндами профессионально. А вот в базовых технологиях — очень даже стоит разобраться серьезно.


  1. dopusteam
    18.03.2018 07:22

    Языков программирования тут множество, вот самые распространенные из них:

    • Php
    • Asp net
    • Java
    • Python
    • Ruby
    • Node js


    Asp и nodejs — это не языки


  1. godlikebasic
    18.03.2018 16:37
    +1

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


  1. muhaa
    18.03.2018 19:57

    В самом деле, кто знает как стать настоящим веб-программистом, если ты программист, но не веб? Допустим, с языками понятно. JS программистом с опытом изучается легко. Можно немного задержаться на уровне промисов, замыканий, но все равно это пара книжек и пара недель практики.
    Допустим, для сервера можно использовать уже знакомый c#/Java или снова JS (или обязательно нужен какой-то еще веб-язык?).
    БД, вроде, они и в Африке БД, и сейчас везде ORM и Mongo (или нет и прям нужно детальное понимание работы одного-нескольких решений БД?).
    Для сервера есть фреймворки и они все выглядят очень специфически, видимо потому, что каждый предполагает определенный шаблон разработки. Появляются довольно не четкие (для не веб-программиста) понятия контроллер, API, REST и так далее. Понятия явно очень простые по своей сути, но есть ли там что-то, чему надо научиться, чтобы говорить на одном языке с другими веб-программистами?
    Что еще? Нужно ли знать множество секретов использования html и css? Обычная ситуация для не-веб программиста, когда вроде все просто, но когда начинаешь гуглить как поставить элемент по центру (условно говоря), понимаешь, что вариантов очень много и все плохие и явно все делают как-то по-другому.
    Чтобы считаться веб-программистом это нужно преодолеть? Как?
    Наконец, видимо требуется разобраться с React и чем-то из семейства Angular-подобных, судя по довольно впечатляющим идеям, заложенным в эти фреймворки.
    После всего этого можно считаться веб-программистом? Или есть еще нечто существенное, какое-то знание, какой-то опыт?