Ads
Comments 380
Под каждую технологию бы еще ссылку на курс coursearea или edX положить, было бы бесценно.
Второе — аргумент. А edX вполне себе бесплатен и курсы там бывают очень даже толковые. Самое то, чтобы нагнать 10 лет анабиоза.
различные извращённые варианты, когда, например, Ruby on Rails используется как роутер и шаблонизатор для итогового HTML (Slim, Haml, etc.)

Когда это роутинг и шаблонизация на бэкенде стали извращением?


Перед отдачей результата клиенту, специальные пакеты ноды собирают все используемые JS-библиотеки в один файл, проводят компиляцию SASS/LESS, делают ещё кучу полезных вещей (тестирование компонентов, например) и возвращают клиенту готовый HTML с всего двумя подключаемыми файлами (JS и CSS).

Бред. Это очень медленно и никто так не делает. Сборка и минификация скриптов и стилей делаются до выкатывания на прод. Дальше сервер отдаёт уже готовые ассеты.

Когда это роутинг и шаблонизация на бэкенде стали извращением?

Роутинг — нет. Но когда он на Ruby, да вместе с шаблонизацией — извращение натуральное.

Бред. Это очень медленно и никто так не делает.
У нас в компании именно так и делают для внутреннего использования.

Это медленно, если у вас сервер нагружен тысячами подключений. А если раз в час заходят пять сотрудников, всё весьма шустро. И отлаживать так гораздо удобнее.
Роутинг — нет. Но когда он на Ruby, да вместе с шаблонизацией — извращение натуральное.

В чём же извращение писать роутинг (правила роутинга) на Ruby по сравнению с другими языками? Правила роутинга пишутся и на Java, и на Kotlin, и на C#, и на Python, и на PHP, и на JS.


А вот шаблонизация на Ruby не пишется. Slim и HAML — это не Ruby и даже не подмножества.


У нас в компании именно так и делают для внутреннего использования.

То, что вы описали — натуральное извращение. Пускай именно так и делают в вашей компании (в чём я сильно сомневаюсь, потому что это медленно и нерационально; скорее всего вы спутали с SSR), но это крайне нестандартный подход, который вы выдаёте за общепринятый. Зато, видите ли, роутинг на Ruby — фу-фу-фу, извращение.

В чём же извращение писать роутинг (правила роутинга) на Ruby по сравнению с другими языками?
Я же написал, что нет — не извращение. Но только если роутинг. Это и будет классический бэкэнд.

А вот если делать ещё и шаблонизацию, тогда это будет изврат.

Slim и HAML — это не Ruby и даже не подмножества.

Ну да. Это шаблонизаторы для Ruby, а не надмножества. Цитата с оффициального репозитория на гитхабе проекта:
Slim is a fast, lightweight templating engine with support for Rails 3 and later. It has been heavily tested on all major ruby implementations.


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

Я правильно вас понимаю, что эти все V в MVC и такие шаблонизаторы, как Freemarker, Thymeleaf, Razor, Jinja, Blade, Twig, ERB, HAML — это не классический бэкенд, а новомодное хипстерское извращение?


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

Нет. Это PHP-way.

это не классический бэкенд, а новомодное хипстерское извращение

А они написаны на Ruby?

Freemarker, Thymeleaf — на Java. Razor — на C#. Jinja — на Python. Blade, Twig — на PHP. ERB, HAML — на Ruby.

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

image

Тоже не понял в чём проблема. Я вот на Python генерирую готовый html код — это быстро и надёжно.

Какая-то нелепая отмазка, вместо обоснования своего кунг-фу.
Подход в генерации html на сервере — оправдан скоростью и удобством.

Вопрос не в подходе, а в выборе инструмента. Можно и на ассемблере вывод шаблонов для HTML написать, при большом желании, вопрос лишь в том, что так никто не делает, потому что есть более удобные инструменты.

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

Скорость — это нативный HTML без всякого SSR в принципе, а удобство это всё про выбор инструмента и не более.

Мне кажется, что вы совершенно не понимаете и не представляете, о чём говорите.


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

Во всех популярных современных бэкендных фреймворках независимо от языка используется паттерн MVC, и в целом они концептуально плюс-минус похожи.

Во всех
Да что вы говорите? Почитайте про подход Pyramid в вашем питоне. Или расскажите мне где, например, MVC в Backbone.js…

Это только пара примеров. Похоже вы явно лучше понимаете о чём говорите, только почему-то не видите очевидного — инструментов реально столько, что даже один подход можно реализовать совершенно по разному и никакой там «концептуальной схожести» не будет даже близко.
Почитайте про подход Pyramid в вашем питоне

Ну вот я открыл документацию:


@view_config(route_name='user')
def user_view(request):
    user = request.matchdict['user']
    return Response(u'The user is {}.'.format(user))

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


Аналог в Sinatra (Ruby):


get '/users/:user' do
  "The user is #{params['user']}."
end

Аналог в Spring (Java):


@RequestMapping(value = "/users/{user}", method = GET)
public String getUser(@PathVariable("user") String user) {
    return String.format("The user is %s.", user);
}

Другие фреймворки расписывать не буду. В них то же самое. Похож и слой View — это те самые шаблонизаторы. Концептуально похожа и работа с моделями данных. Только где-то используется паттерн ActiveRecord, а где-то DataMapper. Промышленные фреймворки разделяют также слои сервисов и репозиториев.


Или расскажите мне где, например, MVC в Backbone.js

Начнём с того, что Backbone — это фронтендный фреймворк. И там, строго говоря, не MVC, а MVP. Тем не менее, концептуально всё очень похоже на бэкенд. Вот вам модели, вот вам представления, а роль контроллера выполняет механизм событий. Движка шаблонов не содержит, но можно использовать underscore.template, всё равно эта библиотека в зависимости.

Ну вот я открыл документацию:

Ну вы откройте заодно то, что говорят сами разработчики про наличие концепции MVC в их фреймворке.
Вот вам цитата, чтоб вы не утруждались.
Мы считаем, что есть только две вещи: ресурсы (resource) и виды (view). Дерево ресурсов представляет структуру сайта, а вид представляет ресурс. Шаблоны (template) в реальности лишь деталь реализации некоторого вида: строго говоря, они не обязательны, и вид может вернуть ответ (response) и без них. Нет никакого «контроллера» (controller): его просто не существует. «Модель» (model) же либо представлена деревом ресурсов, либо «доменной моделью» (domain model) (например, моделью SQLAlchemy), которая вообще не является частью каркаса. Нам кажется, что наша терминология более разумна при существующих ограничениях веб-технологий.


У меня нет большого желания пускаться с вами в споры о том, что чем является, потому что продуктивного смысла в этом никакого, но авторам фрейма, когда они говорят о собственном коде, я доверяю чуть больше чем вашим потугам натянуть сову на глобус.

Начнём с того, что Backbone — это фронтендный фреймворк. И там, строго говоря, не MVC, а MVP.
Ну да, про бэкэнд пропустил. И, тем не менее, это, опять же, лишь один из примеров, не вижу никакой проблемы бэкэндному фреймворку использовать MVP.

Ок, в Pyramid используется тот же подход, что и в других микрофреймворках (Sinatra, PHP Slim, Express, Spark и т.п.). Формально да, в них не выделяется отдельной сущности контроллера, а сами они как правило не реализуют функциональность шаблонов и моделей. Но как только вы напишете на таком фреймворке реальное приложение, у него будет фактически такая же архитектура, как в «больших» фреймворках. При этом коллекция «ресурсов» фактически будет контроллером. Можно спорить, но с точки зрения опытного разработчика принципиально ничего нового нет.


не вижу никакой проблемы бэкэндному фреймворку использовать MVP

Там разница в отношении сущностей. В MVP представление создаёт представителя. В контексте фронтенда это может означать, что страница создаёт обработчики на свои элементы, а те, в свою очередь, имеют некоторый интерфейс к странице. В контексте бэкенда это должно было бы означать, что шаблонизатор создаёт представителя. Возможно, некоторые фреймворки типа Vaadin или Meteor фактически так и работают, но это действительно другая ветвь фреймворков.

Ловкий и совсем незаметный переход от критики подхода к критике инструмента.
Причём тут SSR вообще?

Нет, ни про какой SSR речь не шла. Эта технология отличается от классических шаблонов, которые обычно используются в Rails. Slim и HAML — это именно что классические шаблонизаторы, просто для удобства в них вместо HTML используется более простой и чистый синтаксис.

Вероятно путаница произошла отчасти из нечёткости понятия SSR. Дело в том, что данная аббревиатура чаще подразумевает именно использование JS-фреймворков в качестве шаблонизаторов.

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

Slim и HAML — это именно что классические шаблонизаторы, просто для удобства в них вместо HTML используется более простой и чистый синтаксис.
И что, часто такая связка используется, на фоне подхода PHP+Blade, например?
И что, часто такая связка используется, на фоне подхода PHP+Blade, например?

Да, в контексте Rails почему бы и нет. Наряду с ERB.

Slim — 17 млн загрузок, HAML — 45 млн загрузок. У Rails 163 млн загрузок, т.е. эти шаблонизаторы составляют примерно 38%.

Ну и будьте последовательны, давайте аналогичную для Laravel, в котором из коробки Blade для этих целей встроен.
А в Rails из коробки ERB встроен
Так бы сказали сразу, вам самолюбие не позволяло излагать конкретику или просто характер вредный?

Я про встроенный шаблонизатор в Rails ничё не знал, собственно поэтому для меня всё это и выглядело странно изначально.
Я про встроенный шаблонизатор в Rails ничё не знал

Зачем писать о том, чего не знаешь?
Я не буду тут рассматривать различные извращённые варианты, когда, например, Ruby on Rails используется как роутер и шаблонизатор для итогового HTML (Slim, Haml, etc.), просто знайте, что такие изощрения тоже существуют.
Так тут написано, что «не буду тут рассматривать», и, собственно, оно нигде и не рассматривается, в чём проблема?

Вас до глубины души задело слово «извращение»?
Рассматривается, потому что подход Rails назван «извращением» и «изощрением», несмотря на то что сервер-сайд рендерингу в таком виде уже не один десяток лет и реализован он не только в Rails а и в вагоне других MVC фреймворков. Это утверждение вводит в заблуждение неофитов, не знакомых с Rails и другими фреймворками.

У меня бомбит от того что вы написали кучу дичи, не имея понятия о том, что вообще почем, да еще и имеете наглость спорить в камментах с людьми, непосредственно работающими с этими технологиями, и остаивать свои ошибочные утверждения.

Используете на проекте Angular? Писали на плюсах? Вот и пишите про Angular и про плюсы, а про все остальное не пишите, потому что не использовали и не знаете.
несмотря на то что сервер-сайд рендерингу в таком виде уже не один десяток лет и реализован он не только в Rails
Я уже отметил, что в данном контексте был не прав и эту часть перепишу.

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

да еще и имеете наглость спорить в камментах с людьми, непосредственно работающими с этими технологиями
Опять же, не моя вина, что «люди работающие с этими технологиями», в абсолютном большинстве случаев не пишут ничего конкретного кроме «вы пишите бред». В случаях, когда комментарий по сути и я не прав — я уточняю свои умозаключения, а статью обновляю, в чём вы можете убедиться, внимательно перечитав комментарии.

и остаивать свои ошибочные утверждения.
Опять же, ваше поведение примерно следующее: «Да ты написал херню, тут нечего обсуждать, иди пиши о том, что знаешь». Пока что вы ничего по сути, кроме оскорбления меня как автора не написали.

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

Я про встроенный шаблонизатор в Rails ничё не знал, собственно поэтому для меня всё это и выглядело странно изначально.

Извините, но как я должен был изначально догадаться, что вы не знаете ничего про шаблонизатор в Rails, если вы конкретно следующее:


различные извращённые варианты, когда, например, Ruby on Rails используется как роутер и шаблонизатор для итогового HTML (Slim, Haml, etc.)

когда он на Ruby, да вместе с шаблонизацией — извращение натуральное

А вот если делать ещё и шаблонизацию, тогда это будет изврат

Заметьте, что вы свою позицию никак не обосновали.


Затем в том же ключе вы раскритиковали такой же подход, но уже для Python:


Ну, можно и гвозди отвёрткой забивать, при желании.

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

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


Что касается подхода с дев-сервером на продакшене, то я считаю, что очень плохо сразу учить новичков плохим практикам.

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

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

Справедливости ради, у меня выше по треду была такая мысль: "Мне кажется, что вы совершенно не понимаете и не представляете, о чём говорите."


Я писал что вы лично бестолково холиварите.

Настолько бестолково, что мои комменты заплюсованы, а ваши наоборот? :) А если более серьёзно, то мы же вроде бы пришли к истине хотя бы в плане SSR и Rails. Вы даже статью поправили. Правда по части SSR можно покритиковать стиль этого абзаца — уж очень он тяжеловесно написан. Даже просто понять мысль сложно, не говоря уже о том, чтобы читать это новичку. На досуге попробуйте перечитать и отредактировать.

Термин SSR возник и имеет смысл в контексте рендеринга и "гидрации" SPA, а не просто обозначает сборку ХТМЛ из шаблонов. Изучение технологий по аббревиатурам — расхожая болезнь юных программистов.

Признаю что неправ, если вы мне приведёте хоть одно фундаментальное различие между сборкой HTML на стороне сервера с помощью JS-шаблонизатора и формированием этого HTML с помощью шаблонизатора, написанного на любом сервеном ЯП. Кроме, очевидно, того факта, что для запуска первого нужна нода.
Чем вы (или я) фундаментально отличаетесь от квантовых флуктуаций? (Это не оскорбление, это вопрос, показывающий парадоксальную суть вашего вопроса в более сжатой форме. Ответ на него точно такой же, как и на ваш.)
Скорость сборки может иметь значение. В этом случае JS не лучший вариант.

Следует различать просто серверный шаблонизатор на JS (Mustache, Handlebars, doT, EJS, Nunjucks, Pug и т.д.) и серверный рендеринг приложения.


В первом случае шаблонизатор действует подобно шаблонизатору на других платформах: берёт некий шаблонный файл и делает подстановку в него значений из БД. Далее готовый результат (обычно HTML-страница) передаётся на клиент и в целом с ней практически ничего не происходит (клиентские скрипты обычно действуют локально на каких-то участках страницы).


В случае серверного рендеринга SPA-приложения (SSR) непосредственно рендеринг страницы на сервере делает тот же самый код (включая некоторую бизнес-логику), который также размещён на клиенте и может там сформировать точно такую же страницу. После приёма страницы на клиенте, она обрабатывается клиентской частью приложения и прозрачно продолжает работу как будто изначально была полностью сформирована клиентом. Роутинг на сервере также повторяет роутинг на клиенте, то есть пользователь может гулять по страницам приложения (с сервера подгружаются только данные), затем нажать F5, и приложение обновится на той же самой странице без экрана загрузки. Делается это не только с целью оптимизации для поисковиков, но и для повышения удобства работы с приложением — загружается оно значительно быстрее, чем в случае обычного SPA.


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

В случае серверного рендеринга SPA-приложения (SSR) непосредственно рендеринг страницы на сервере делает тот же самый код (включая некоторую бизнес-логику), который также размещён на клиенте и может там сформировать точно такую же страницу
Я не могу понять, почему вы называете это обязательным условием.

Если мы рендерим страницу из компонентов, написанных на React с помощью JSX, на сервере, а клиенту отдаём только один раз ядро приложения и далее код нужной страницы в HTML, без кода компонентов — это, по вашему, не SSR?

Если на клиентской стороне не будет такого же кода на Реакте, то нет, это будет обычная шаблонизация, только необычным шаблонизатором.

Если я преобразую код компонента описанный силами JS в HTML-код, это именно рендеринг, потому что происходит выполнение JS-кода в его рантайме (Node) для получения HTML. Если же говорить, что это просто «необычный шаблонизатор», то ничего не мешает и любой «обычный» шаблонизатор называть рендерингом, поскольку чёткого различия не приведено.
Потому что эта аббревиатура возникла именно для обозначения такой технологии. Исторически. Обозначают ей именно это, а не то, что нафантазаировали вы в отрыве от проблематики, просто глядя на буквы аббревиатуры.
Потому что эта аббревиатура возникла именно для обозначения такой технологии. Исторически.
Хорошо, это более здравый аргумент.

а не то, что нафантазаировали вы в отрыве от проблематики, просто глядя на буквы аббревиатуры
Я не фантазирую, а пытаюсь разобраться в том, чем это принципиально отличается от классической шаблонизации.

Как видно из приведённых выше аргументов — ключевое отличе тупо только в том, что в качестве шаблонизатора выступает что-то на JS.
Я кстати в этом не уверен, потому что употребял термин серверный рендеринг еще до того как появились реакты именно в контексте «выдача готового html сервером» vs «загрузка данных по ресту и отрисовка на клиенте spa».

Может подкинете какой пруф по поводу историчности возникновения аббревиатуры?
Ну, вообще он прав. Я сейчас почитал что пишут на зарубежных ресурсах по этому поводу и сходу не нашёл употребления данного термина для «классических» (назовём это так) шаблонизаторах.
Например отличие в том, что в случае SSR на Javascript можно передать на клиент шаблон и перерендеривать страницу без обращения к серверу, а в случае шаблонов на других языках придется обязательно ходить на сервер и рендерить там.
Да, уже не будет. Поэтому можно еще использовать слово «изоморфный рендер», если оно кажется более точным.

Я имел ввиду в первую очередь точку зрения на то, что для того, чтобы назвать некий подход «SSR» не требуется строго, чтобы код на клиенте мог выполнить то же, что и код на сервере, потому что происходящее на клиенте уже в любом случае не является SSR.
Вопрос не в подходе, а в выборе инструмента. Можно и на ассемблере вывод шаблонов для HTML написать, при большом желании, вопрос лишь в том, что так никто не делает, потому что есть более удобные инструменты.

Вот именно, что в выборе инструмента. Современное веб-программирование сравнимо с использованием навороченного станка с ЧПУ. Но если вам просто надо просверлить отверстие, достаточно воспользоваться шуруповёртом.


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

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


Помню, был у меня студент, который решил доработать мой проект по обработке изображений на C++. Проект был маленький, не имел зависимостей, кроме системо-зависимых вызовов. Студент же решил сделать его кросс-платформенным, подключил несколько 3rd-party библиотек. Как итог: проект раздуло до нескольких гигабайт, компиляция с нуля стала занимать десятки минут, проект перестал быть переносимым (нужно скачивать тонну зависимостей, пусть и через cmake). Да, его подход более правильный с концептуальной точки зрения, но не с точки зрения решения конкретной задачи.

Можно сделать целую серию материалов.
Даже заголовок оставить тем же, только менять характеристику персонажа.

Как подступиться к fullstack-разработке сегодня, если ты:
— юный смузихлеб с подворотами хотящий вайти
— проджект манагер живущий по эджайлу
ну и так далее

Я думаю, дилетантский подход к его составлению.
Далеко ходить не нужно: секция про css неполная. Пик популярности LESS и SASS был где-то лет 5 назад, затем вышел PostCSS. Уже долгое время существую проекты вроде jss, styled-components, emotion и прочие.

Про это и остальное в комментариях довольно развернуто описали.
Когда речь заходит о том, в каком направлении проще всего найти работу, безусловными лидерами остаются три языка — PHP, Node.js и Python.

Пффф, где Java? Мой Круг — не такой большой, как hh, и я слышал что на нем сидят только ИТ компании. Андроид — это малая часть Java-разработки. Как мне кажется, Java все таки занимает большой кусок бэкенд разработки(старое тоже надо поддерживать так-то).
Вообще я согласен с тем, что Java как технология неплоха для бэка.

Но мониторинг предложений о работе явно говорит о том, что найти работу кодеру на яве сложнее, чем любому пишущему на указанной троице, вот и вся логика.

Но этот работа на Java будет в среднем намного более высокооплачиваема, чем на PHP.

UFO landed and left these words here
Ну не лукавьте, я рассматриваю в основном PHP, JS и Node.

В целом, я понимал, что конкретно этот вопрос в статье спорный изначально. Но во первых — я сам не большой знаток Java и .Net стека, а писать о том чего не знаешь дело неблагодарное. И времени для изучения конкретно сейчас нет.
Во вторых, мне хотелось как-то всё-таки сузить круг для человека, который выбирает путь дальнейшего развития. Чтобы это сделать — идеальный вариант это описать плюсы и минусы технологии, что без её знания затруднительно. Поэтому критерием и стали предложения о работе, что нельзя считать таким уж малозначимым фактором.

Разумеется, я мог где-то нерелевантную выборку составить по этим профессиям, но ведь и цель статьи — не показать рынок труда, а рассказать про основные.

Словом, тут я мог ошибиться, конечно же.
Вы извините, я считаю что до этого уровня в любой сфере дорастают всё-таки немногие кодеры, странно считать это ориентиром.

Снизьте планку — будет то же самое. Если, конечно, не снижать до нуля.


Опять же: моя реплика была о том, что вакансии более оплачиваемые. Теперь оказывается, что наличие высокооплачиваемых вакансий — не главное.


Если даже считать начальной мысль о том, что найти кодеру на Java работу сложнее, то это тоже спорно. Java-джуниоров успешно хантят крупные аутсорсеры типа Luxoft или EPAM, а также ИТ-подразделения банков и прочих корпораций. Они могут себе это позволить и даже готовы вложиться в их развитие, в отличие от мелких контор, требующих PHP, где предполагается, что сотрудник с первого дня работы начнёт приносить прибыль, ибо свободных денег у таких фирмочек немного.

Кодеры — наверное нет, разработчики вполне. Причем независимо от платформы. Под разработчиком понимаю человека, который нацелен не написание кода и придачи ценности коду как таковому, а на создание продукта со всеми вытекающими(проектирование фич, выяснение ограничений и подходящего инструментария и т.п)
Да причем тут буквоедство — нередко народ пишет код не понимая в конечном счете с чего именно идет инкам для компании и что код это всего лишь строчки текста, по сути ничего не стоящие. Но с позиции своего максимализма или отсутствия опыта или еще чего придают именно этим строчкам кода именно на его/ее любимой платформе очень много значения, даже не пытаясь мыслить продуктово. Обычно такие же люди готовы рефакторить все и вся, не приемлят каких то отступлений в сторону говнокода в угоду time-to-market и вот это все.
Кодер — просто человек, умеющий писать код, реализовывать алгоритм здесь и сейчас.
Кодер — просто человек, умеющий писать код, реализовывать алгоритм здесь и сейчас
Кодер — просто более удобное слово, вместо длинных и неудобных «программист» или «разработчик». Никаких других смыслов тут нет. То что вашему самолюбию оно претит — вопрос лично ваших взглядов, не более.
Самолюбие не при чем. Если для вас разработчик — любой человек пишущий код — пусть будет так. В моем понимания разработка больше про создание продукта со всеми вытекающими кроме написания кода. Поэтому останемся каждый при своем мнении.
Человек, который просто переводит написанный другим сотрудником алгоритм на язык программирования, формально пишет код, но при этом может совершенно не понимать бизнес-требований. Будет ли он при этом являться разработчиком?
Ну, с моей точки зрения, да, хотя и не полноценным. И вот почему — сможет ли он корректно перевести алгоритм с одного языка на другой, совсем ничего не зная про бизнес-модель и окружение?

Если речь про одну-две функции, понятно что это возможно. Только подобным даже не «кодер» занимается, а стажёр-студент какой-нить. К слову, студенты, когда язык учат, по факту ещё ни кодерами, ни разработчиками не являются. Если строго следовать данной терминологии, их только и остаётся что студентами называть.

Ну и в любом случае, это пустые придирки к словам идут, по моему мнению. Ситуации, когда человек просто пишет код, абстрактно, без привязки к какому-либо продукту или конкретной цели, как какая-нибудь Ада Лавлейс, бывают разве что в вакууме.

А навешивая ярлыки «кодер», «программист», «разработчик», и прочее, мы в какую-то палочно-армейскую систему себя загоняем, к чему это?
Человек, который просто переводит написанный другим сотрудником алгоритм на язык программирования, формально пишет код, но при этом может совершенно не понимать бизнес-требований. Будет ли он при этом являться разработчиком?

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

Собственно можно не изобретать свое значение терминов, а посмотреть оригинальные, англоязычные, где кодер от разработчика отличается именно тем, что кодер больше относится к программированию на языке программирования, а разработчик — о продукте вообще.

Считать, что разработчик это следующая эволюция кодера — некорректно. Квалификация пересекается частично.
Да речь не о таком уровне(и лид больше про управление командой) И контор, где пилят десятки тысяч людей не так много, по крайней мере в РФ — куда больше реальности, что человек будет работать в обычно средней конторе со своим набором продуктов-услуг.

Суть не в терминах, а в том есть или нет у кодера/разработчика понимание бизнес-ценностей, так называемого value, что зп ему прилетает от продукта для которого он пишет фичи и не за те строчки кода, который сами по себе ценности не имеют(привет любителям рефакторинга ради рефакторинга) И обычно такое понимание приходит после уровня миддла, а бывает и не приходит и человек вроде и имеет опыт 5-6 лет, а все так же др… ит на вылизанный код и без привязки к продукту и необходимости такой вылизанности. Утрирую, но думаю суть понятна.
Это зависит от менеджера проекта.
Если он хочет вовлести разработчиков в бизнес-процессы, он это делает.
Проводит регулярные таунхолы, где популярно на хай-левеле поясняет что и куда идет проект, кому он нужен, как он используется.
Это позволяет повысить вовлеченность людей.
В случае продуктовых компаний, даже джуниоры могут выдвинуть полезные идеи.

И да, разработчик может знать о бизнес-процессе, может не знать. Он от этого разработчиком быть не перестанет.
В моем предыдущем сообщении «кроме» имелось ввиду как «помимо».
Собственно, выше отлично выразили и дополнили мою мысль.
Я понимаю. Речь о том, что — много ли вы знаете ситуаций, в которых человек пишет код просто так, абстрактно, не привязываясь к какой-либо конкретной задаче или бизнес-процессу? Я вот только студентов вспомнить могу. И, как уже отвечал выше, не считаю их кодерами, так как это ещё обучение.
если вы не собираетесь этот код поддерживать то вы просто кодер
здесь ключевой момент именно в поддержке. мне много приходилось работать с чужим кодом, и я могу сказать что 50% развалившихся проектов развалились потому, что при проектировании системы не было учтена поддержка. тоесть люди писали код зная, что поддерживать его будут не они. в итоге в их коде никто не мог разобраться, или на нём не было возможности построить новые части системы, или он был сделан на неудобных фреймворках, или были использованы не те инструменты…
вот и получается разница между программистом и кодером очень большая — для начала, тестирование. кто из начинающих разработчиков в своём первом проекте использует тесты? кто правильно делит код на классы? использует паттерны/фреймворки? как правильно делать композицию? как построены абстракции?
когда код решает поставленную задачу это значит код ничего не решает, и цена ему — зарплата, которую выдали программисту. код начинает иметь экономический смысл, когда стоимость его поддержки снижается по сравнению с прибылью, которую он приносит. тоесть отличие кодера от инженера — в экономической плоскости а не в технической.
видите ли вы стратегию бизнеса в котором работаете? учитываете ли возможные изменения в архитектуре, закладываете ли вы основу для них в самом начале, чтобы когда они понадобятся вам не приходилось менять место работы/телефон/адрес?

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

когда я был начинающим кодером на PHP у меня была одна большая функция, которая генерировала сайт заново каждый раз при его изменении… тем не менее, клиент много на нём заработал, сайт висел год в топе яндекса именно потому что там было всё новое и сайт был статичным… мне до сих пор стыдно за этот код, хотя он работал.
сейчас, после 15 лет практики и завершённых крупных проектах, которые работают по нескольку лет — я могу сказать в чём разница. именно в эгоизме. мне жалко себя, жалко своё время, которое я потрачу на отладку плохо написанного кода без тестов. поэтому я мыслю так что поддерживать код буду я от начала и до конца проекта. это одна из причин по которой я работаю на стеке .Net/C#. этот стек провоцирует писать правильную архитектуру, провоцирует рециркулировать код, разделять проекты, переиспользовать проекты в других решениях, организовывать всё в git, писать в TDD стиле — потому что тестирование очень удобно встроено в VisualStudio. с выходом .net standard 2.1 появилась возможность рециркулировать код на сервере/десктопе/мобильных устройствах, а это огромный прорыв для сложных систем. у меня на рабочем проекте (ERP) работает сложный код вычисления рецептов для мороженого, работа с оборудованием — и я бы задолбался портировать это всё с серверного кода на десктоп. а на .net у меня отлично получилось. так что получается вы самый класный фреймворк и не рассмотрели. EF потрясающая тема опять же… советую обратить внимание на asp.net, после него вам не захочется писать ни на чём другом (если проект достаточно сложный и гибкий)
У вас какая-то травма психологическая просто, ущемление собственной важности, или я хз…

Эти слова — синонимы. А тот смысл который вы в каждое из них вкладываете это ваши личные филосовско-субъективные переживания и осмысления и не более.
когда я был начинающим кодером на PHP у меня была одна большая функция, которая генерировала сайт заново каждый раз при его изменении… тем не менее, клиент много на нём заработал, сайт висел год в топе яндекса именно потому что там было всё новое и сайт был статичным… мне до сих пор стыдно за этот код, хотя он работал.


Другими словами, вы написали говнокод, за который вам стыдно, но клиент при этом много заработал доволен, а значит, согласно ВАШИМ ЖЕ СЛОВАМ, а именно:
код начинает иметь экономический смысл, когда стоимость его поддержки снижается по сравнению с прибылью, которую он приносит.

говнокодить — норм, пока это экономически выгодно.

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

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

UFO landed and left these words here
Ну например, если брать Минск, то Java/Scala/Kotlin Senior от $3k до $5k, а С/С++ Senior от $4.5k (Это даже если не брать игрушки) хотя вакансий очень мало. Но могу сказать что и программистов мало, на вес золота почти.
Но мониторинг предложений о работе явно говорит о том, что найти работу кодеру на яве сложнее, чем любому пишущему на указанной троице, вот и вся логика.
А теперь снова сделайте запросы по ключевым словам этих стеков, но отфильтруйте по зарплате от 200тр (грубо говоря, отсекаем людей с небольшим опытом).
Spring в получившейся выборке уже встречается чаще, чем Symfony.
Легко ли найти работу на Java? Супер легко! Если есть хоть какие то вменяемые знания. Работы по Java очень много и людей HRы рвут на части. Но Java, в основном, это крупный Enterprise, ниша быдлокодеров тут индусами занята, в Россию, да и вообще СНГ, заказчики идут за качеством по ± приемлемой цене, так что уровень знаний требуется на порядок выше чем для языков с «низким порогом вхождения».
Где-то рядом со всей этой тусовкой топчется Microsoft со своим SharePoint

Вероятно, вы не совсем в ту сторону смотрели. Sharepoint — это очень специфичная вещь. У Microsoft есть ASP.Net (в разных ваканиях упоминают разные вариации web, mvc, webapi, core) — думаю более используемая штука, чем тот же Ruby on Rails.
Пожалуй вы правы. Sharepoint, это наверное что-то больше из разряда CMS…

Вечерком поправлю это дело, спасибо.
Если точнее, то «шарик» занимает нишу Enterprise Content Management и Business Process Management.

«Классическую» CMS из него тоже пытались сделать, но вышло ИМХО так себе: врождённая корявость HTML редактора и излишне замороченный подход к модификации внешнего вида сайта делают «шарик» совершенно неконкурентоспособным в этой нише.
Активно набирает обороты опенсоурсный .net core, многие в корпоративном секторе уже поглядывают на него, размышляя. а не перейти ли на него с Java
Ага, только они очень долго так размышлять будут. Переходы то обычно сложные и дорогие
Ну я знаю несколько компаний, который перешли с Java на net.core в новых проектах.
Я надеюсь, что когда вас возьмут на работу, то будут платить $10 000 в месяц. Без этого знать столько всего сразу несколько бессмысленно.
Это вполне реальная зарплата для системного артихектора, который всё это знает.
Поясню коммент выше:
Если под фулстеком подразумевается node.js на фронте и беке, то ок. Если node.js на фронте и приемлемый код на PHP на беке, то даже тут ок. Но если подразумеваевается node.js на фронте и хороший код на беке с хорошими архитектурными заделами, то я таких фронтендеров не встречал.
Все фулстек, которых я встречал, хорошо пишут фронтеэнд сторону и копипастят подходы в готовом продукте на беке. Потом это надо ревьювить и делать красивым.
Ну не знаю… Я вообще программировать учился на крестах изначально. Поэтому до сих пор не встречал ни одной сложной для понимания концепции в PHP. Писать самому поначалу непривычно, но с чужим кодом чаще вопросов куда больше возникает, поэтому в итоге всё равно приходишь к тому, что сам пишешь.

Думаю проблема основная в том, что многие люди идут в web, не имея изначально глубокого знания какого-либо серьёзного языка. Я, собственно, именно про ООП и упомянул в первом списке.
node.js на фронте

Это словосочетание конкретно рвёт мне шаблон. Node.js работает на сервере. Сервер — это бэкенд. Фронт — это в браузере. Или я где-то глубоко заблуждаюсь?

Однако это так и есть. Имеется ввиду что node.js используется просто как средство автоматизации самых различных задач во фронте. Большинство современных фронтовых тулов, которых тысячи, сделаны на ноде, но работают они как правило локально, без поднятия сервера, то есть это просто скрипты процессы которых чаще всего убиваются после завершения задачи.
UFO landed and left these words here
Такие люди бывают. Но на мой взгляд под фулстек обычно понимается возможность хорошо писать одну сторону и просто не ждать ответной реализации во второй стороне. По крайней мере обычно со стороны работодателя я видел такие запросы.
UFO landed and left these words here
UFO landed and left these words here
Ну C#/.Net — может ещё может потягаться с тем же руби. Но ява проигрывает явно по всем фронтам. Даже если вакансий больше в целом, значимая часть из них — это не именно бэкэнд, а например что-то специализированное внутри компании. Какие-нить клиенты для внутренних ERP-систем, например, частенько на C#/.Net и пишутся. Как долю оценивать я не знаю. В любом случае она меньше чем у популярных направлений. Ну а объять всё за раз невозможно, поэтому решил про это не писать вовсе.

ХХ по Москве:


"Java Spring" — 535 вакансий.
"Symfony OR Laravel OR Yii" — 434 вакансии.
"Ruby on Rails" — 270 вакансий.
"Django OR Flask" — 254 вакансии.

«Symfony OR Laravel OR Yii» — 434 вакансии.

У нас с вами какой-то разный ХХ



«Java Spring» — 535 вакансий. Из них минимум процентов 15 — никак не связанные именно с веб-бэкэнд.
Несколько примеров, которые по этому запросу находятся:
hh.ru/vacancy/29898913?query=Java%20Spring
hh.ru/vacancy/30416742?query=Java%20Spring
Очень показательный пример:
hh.ru/vacancy/30180699?query=Java%20Spring
Я просто знаком с продуктами этой компании. Это не Backend для web'а. Да, там используются практически те же технологии, например REST, но это всё же иная сфера.
И таких вакансий, на самом деле, явно больше 15%, я же не буду их все просматривать, ну. Это нерелевантная выборка.

У PHP и Node вакансий будет больше в итоге.
У нас с вами какой-то разный ХХ

О пересечениях множеств что-нибудь слышали?


hh.ru/vacancy/29898913?query=Java%20Spring

Согласен. Как вы думаете, в выборках по PHP не попадутся ли аналогичные совпадения? Всё же таких вакансий будет меньше, чем релевантных. Да, чтобы составить более точную статистику, нужно заморочиться, проанализировав каждую вакансию, но для общего представления должно быть достаточно.


hh.ru/vacancy/30416742?query=Java%20Spring

А вот в этой вакансии показательно: «Круто, если Вы умеете-практикуете Spring Boot».


Я просто знаком с продуктами этой компании. Это не Backend для web'а. Да, там используются практически те же технологии, например REST, но это всё же иная сфера.

Какая разница для чего бэкенд: для веба, для мобильников или десктопного приложения? Технологии будут одни и те же. PHP тоже можно использовать, это же не означает, что всю выборку нужно считать нерелевантной?


У PHP и Node вакансий будет больше в итоге.

Анализировать, конечно, мы их не будем? С упоминанием Node половина будет про фронтенд, я гарантирую это.


Вообще ради чего вы так упрямо пытаетесь принизить Java по количеству и качеству вакансий?

Какая разница для чего бэкенд: для веба, для мобильников или десктопного приложения?
Разница в том, что статья про web-разработку была, так-то…

Вообще ради чего вы так упрямо пытаетесь принизить Java по количеству
Не пытаюсь, что вы. Я лишь пытаюсь объяснить почему предпочтение для обзора отдано не этому языку, возможно я не до конца верно мысль излагаю.

и качеству вакансий?
Тут тем более нет, я вообще это даже не обсуждал, ибо сам считаю эту технологию, в целом, лучше чем многие другие интерпретируемые языки, несмотря даже на её давние проблемы, в виде дыр в безопасности её рантайма, например.
Ну, у меня такое ощущение, что вы оставили только те языки, про которые что-то знаете. Это как если бы я писал: PHP устарел, не учите его(это кстати разве не так?), учите Java, на ней держится мир бэкенда. Ну и Node.js можете учить. Про RoR ничего не напишу вообще, потому что я про него не знал(аналогия с C#).
Ага. Было бы гораздо лучше, если бы я написал про те языки, про которые вообще ничего не знаю, но они модные, например про Golang?
Ну серьезно, зачем писать статью которая освещает вопрос кусками?
И рекомендуя PHP вы оказываете медвежью услугу людям.
Дайте ему уже умереть
Разница в том, что статья про web-разработку была, так-то…

Напомню, что изначальная ваша позиция была такая: «Даже если вакансий больше в целом, значимая часть из них — это не именно бэкэнд, а например что-то специализированное внутри компании». То есть вы прямо сказали, что на Java вакансий по бэкенду мало. Однако для написания HTTP-сервера для обслуживания клиентов любого вида java-технологии и фреймворки те же самые, разве что шаблонизаторов не будет. И вакансий по бэкенду на самом деле как минимум не меньше, чем по другим стекам.

Напомню, что изначальная ваша позиция была такая: «Даже если вакансий больше в целом, значимая часть из них — это не именно бэкэнд, а например что-то специализированное внутри компании». То есть вы прямо сказали, что на Java вакансий по бэкенду мало.

Ну так мы и пришли к тому, что вакансий на web-бэкэнд на Java меньше, чем на остальные языки.

Ошибся я, по сути, только в том, что шарп не стал учитывать.
Да не меньше! Java уверенно занимает большой кусок backend`a.
Странные у нас у всех поиски, приведу свой(с hh, по России) по запросу яп backend:
Java — 1032
PHP — 908
Python — 748
Node.js — 435

А если просто по запросу яп, то вот:
Java — 6000
PHP — 4200
Python — 5100
JavaScript — 8000, из них Node.js — 1159
Ну C#/.Net — может ещё может потягаться с тем же руби. Но ява проигрывает явно по всем фронтам
Даже если вакансий больше в целом, значимая часть из них

В каком регионе, если не секрет? На headhunter по кейворду Java есть 1100 вакансий в Питере, 500 по C# и чуть больше 100 для Ruby.

Там сложно так сходу сказать, но запрос "c#" and (asp.net or javascript or typescript or web or веб or fullstack) выдаёт 2.3К вакансий(т.е. с явным требованием чего-то вебового) — больше половины от всех.


Аналогичный запрос для java — 3.2K.


Для руби, кстати, тоже не везде веб в вакансиях — разрыв сохраняется.

UFO landed and left these words here
Если хотите оценить именно позиции для веб-бэкенда, ищите по названию основного фреймворка, т.е. «ASP.net» или «Spring», как уже посоветовали выше.
Согласен, это было бы релевантнее. Но сопоставление и получение результатов было бы слишком затратным для использования в качестве примера. Это же всё-таки не исследование рынка, тут цель была другая.

А что до широты применения — так это наоборот плюс, т.к. даёт возможность потом при желании легко перейти из веба в мобильную или десктопную разработку, к примеру.
Опять же, нисколько не критикую широту применения, я сам за изучение базовых ООП-языков типа Си в начале практики любого программирования. Просто речь именно про web.
UFO landed and left these words here
Ну возможно. Дело в том, что ощущение того, что я понимаю чего ж там именно всё-таки происходит с кодом в интерпретаторе\компиляторе, когда я составляю те или иные языковые конструкции, пришло только после изучения нескольких ООП-языков.

Конечно, в моём случае, основной толчок к пониманию базовых концепций дал именно С++. Но, тем не менее, более чётко всё осознать удалось уже после него, уже чуть позже, когда возился с PHP и (параллельно с асмом для МК). Потому я считаю, что порядок не важен и любой язык может дать представление.

Опять же, до плотного изучения крестов в вузе нам преподавали Delphi\Pascal, думаю это тоже роль в понимании сыграло.
лайф-хак на будущее, если есть какой-то сайт интересной тематики, то стоит погуглить запрос «alternatives to X» и на сайте альтернатив можно найти много полезного.
Аналогично было, ушел (С++ бэкэнд винда, com-объекты) что называется в блудняк на ~10 лет (иногда баловался php, html/css). Возвращаться ой как тяжело, пробовал волнами (руки опускались от растерянности), непонятно куда ткнуться, полно технологий живущих на хайпе 1-2 года. Ошибался, веря IT-псевдоаналитикам, гадалкам и астрологам, переполняла смесь восхищения от стремительного развития отрасли и недоумение от нехватки профессионалов. Сначала с фронтэндом разобрался, для бэкэнда сейчас поглощаю asp.net core (c# понятен и понравился f#), архитектуры приложений, книжки по алгоритмам, нейросетям, в AI погружаюсь, купил для исследований RealSense-камеру, нейрогарнитуру. Мне 40+, боязно работу искать, что там в резюме показывать. Свой проект пилить буду. Благо идеи есть. Дорогу осилит идущий…
для бэкэнда сейчас поглощаю asp.net core (c# понятен и понравился f#)

Возможно я отстал от реалий рынка и меня поправят, но кажется вы опять промазали со стеком.
UFO landed and left these words here
.NET сейчас на взлёте, в отличие от Java (спасибо Kotlin), так что выбор как раз оправдан
Как Kotlin влияет на бэкенд яву? На взлете или нет, но и у Java дела совсем не плохи.
mkshma Это вы об этом?
.Net vs Java
image

Да, была такая дилемма ) Но уже есть .Net Core, перспективы его интересны. Почитайте статью на хабре Через год-два .NET Core потеснит Java на рынке enterprise решений...
Тут пришлось выбирать. Я не был привязан ни к одной платформе. Но мне показалось сейчас разумным, перспективным и универсальным (бэкэнд, мобильная разработка, фронтэнд пишем уже скоро в wasm) выбрать именно платформу. Кстати на C# ставку не делаю, изучаю F# (в AI, финансах активнее стали использовать).
p.s. Пробовал Kotlin — понравился, приятный язык.
Мне программировать на C# понравилось гораздо больше, чем на Java.
Основная причина: языковые возможности. Java по сравнению с C# слишком консервативна. Многие возможности в ней появились через пару-тройку лет после C#. А некоторые так и не появились: value types, поддержка дженериков со стороны JVM и т.д.
С первого взгляда есть несколько замечаний по фронтенду. Во-первых, с приходом ES6 язык сильно изменился в лучшую сторону. По крайней мере странно отказываться от применения новых возможностей и называть «чистым JS» устаревший стандарт. Будущее веб-компонентов наступает, наступает, а наступить никак не может. Стоит ли их использовать — большой вопрос. Зато переменные в CSS уже есть. Компиляция LESS на клиенте — это весьма проблемный подход, а в вашем примере вы рассчитываете значение 100vh. Зачем? XPath может быть полезен при тестировании сценариев взаимодействия, в остальном его обычно некуда применить. Собирать и тестировать все каждый раз перед отдачей клиенту? А как же производительность? Обычно это делают заранее и на продакшен-сервер заливают готовые скрипты и CSS. Стоит упомянуть PostCSS как хорошее подспорье при верстке (автопрефиксер, проверка совместимости с браузерами и.т.д.). То, что Webpack может заменить Bower — это глупость. Инструменты решают принципиально разные задачи. Gulp и Webpack могут работать вместе и успешно дополнять друг друга.
Во-первых, с приходом ES6 язык сильно изменился в лучшую сторону.
Ну я не говорил, что он стал хуже.

По крайней мере странно отказываться от применения новых возможностей и называть «чистым JS» устаревший стандарт.
Ну, скажем, я всё же обычно под «чистым JS» подразумеваю ES в сравнении с TypeScrpit или CoffeeScript.

Компиляция LESS на клиенте — это весьма проблемный подход, а в вашем примере вы рассчитываете значение 100vh. Зачем?
Очевидно, это всё только для примера. Я предпочитаю ни SASS, ни LESS вообще не использовать без крайней необходимости. Что касается переменных в CSS, то они до сих пор процентов у 40 пользователей в браузере не работают.

PostCSS
не слышал. Почитаю, спасибо.

То, что Webpack может заменить Bower — это глупость.
Не согласен. Очевидно что задачи изначально у них разные, но имеется ввиду, что для загрузки можно использовать NPM, который есть по умолчанию, а соберёт всё Webpack. Собственно, погуглите, так частенько делают.
При том, что его можно заменить, используя импорты с помощью в Webpack, что тут непонятного?
С помощью Webpack, например, можно легко заменить связку Bower и Gulp/Grunt.

Однако Gulp/Grunt тоже могут использовать NPM. В чём тут преимущество именно Webpack?

Можете спросить у разработчиков Bower, которые сами предлагают его менять на Webpack на первой же странице:
bower.io

Если вас интересует лично моё мнение — у всей этой мешанины с нодой, трасплейтерами и бандлерами, вообще перед обычной примитивной IDE (типа Atom'а) и написанием классического кода на JS вообще без всяких модулей — преимуществ в абсолютном большинстве случаев нет никаких. Преимущества появляются, когда проект дорастает до определённого размера.
Ну не знаю, очень странная статистика. Например, что у них единственная отмеченная версия Chrome for Android это 71, а Firefox for Android это 64. Как это понимать? С остальными чё?

Кроме того, у меня, на личном проекте с 1000+ посетителей в день, я вижу что до сих в статистике, например, одной оперы ниже указанной 35-й версии, всё ещё есть целых 1.5%. А у IE 5.5%, который даже не Edge. Это уже 7%, а я ещё не учёл старые мобильные версии, всякие Яндекс-браузеры и прочий хлам, которого вообще-то у посетителей очень много, а по ссылке выше нет вообще.

Пусть не 40, конечно, тут я погорячился, но 25% наверняка наберётся, что, опять же, всё ещё рановато.
Ну не знаю, очень странная статистика

Пусть не 40, конечно, тут я погорячился, но 25% наверняка наберётся

Зато у вас статистика шикарная.

300+ тысяч. уникальных посетителей в год. Для стран СНГ, как мне кажется, плюс-минус ничего такая статистика.

Не миллионы конечно, но это и не обычный хомяк уже.

Мой комментарий был относительно "тут я погорячился, наверняка наберётся". Располагая такой статистикой вы должны были намного более точно назвать цифру, не так ли?

Метрика не позволяет выбрать больше 30 или 40 версий за раз, а их гораздо больше. Я даже все версии хрома, которые переменные не поддерживают, не смог на одном графике выбрать, не то что остальные. Можно было бы отдельно посчитать, но мне тупо лень — вы абсолютно бестолковый холиварщик, который ничего не в состоянии сказать по сути, зато в собственных комментах путается, диалог с вами абсолютно бессмысленен, извините.
единственная отмеченная версия Chrome for Android это 71, а Firefox for Android это 64. Как это понимать? С остальными чё?

Остальные не используются. На вкладке "Usage relative" лучше видно.


В итоге, работает у 87.39% клиентов, не работает у 12.61%. Это всё же не 40% и не 25%, хотя и не 0%.


Остальные не используются.
Да? А куда они деваются? Я вот не обновлял полгода ничего из маркета на старом смартфоне, но использую его для тестов интерфейса на работе.

Один смарт отдал бабушке, думаете она там браузер обновляла? А она им пользуется, я вам гарантирую. Таких кейсов с десятки наберётся.

https://caniuse.com/usage-table


У них действительно нет версий мобильного Chrome и Firefox, кроме последних. Но на этой же станице они пишут:


Browser usage table, based on data from StatCounter GlobalStats
Information for mobile versions is extrapolated from other sources.

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


В пользу первого варианта говорит то, что другие мобильные браузеры всё же разбиты на версии.

У них действительно нет версий мобильного Chrome и Firefox, кроме последних.
Ну так это говорит лишь в пользу того, что их статистика — рафинированный булшит.

Либо эти браузеры обновляются своевременно и доля устаревших версий пренебрежительно мала
Ой лан, прекратите…

И это даже не половина списка, мне просто лень скринить остальное



Это всё только за полгода. Для мобильной лисы ситуация аналогичная.

На самом деле у них и половины того, что есть у пользователей, нету в списке.
Ну, скажем, я всё же обычно под «чистым JS» подразумеваю ES в сравнении с TypeScrpit или CoffeeScript.

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

Здесь как-то контекст теряется.

имеется ввиду, что для загрузки можно использовать NPM, который есть по умолчанию, а соберёт всё Webpack

Вижу теперь вы добавили в статье NPM, а то раньше звучало так, что вы заменяете Bower+Gulp на Webpack.
Здесь как-то контекст теряется.
Согласен, формулировка неудачная, надо поправить.

Вижу теперь вы добавили в статье NPM, а то раньше звучало так, что вы заменяете Bower+Gulp на Webpack.
Мне просто надоело отбиваться от буквоедов. NPM есть в ноде по умолчанию, я думал это очевидно и так.

Видать вы не сильно то и деградировали эти десять лет, просто тогда ещё perl в моде был

UFO landed and left these words here
Не просто по IDE, а как её использовать по максимуму, включая знание всех горячих клавиш, полезные плагины и написание макросов

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

Автор из эпохи vim-а и emacs-а судя по всему. Хотя даже там были всякие плагины для какого-никакого автодополнения, если не ошибаюсь…
Ну, кстати, vim мне лично никогда не нравился.

Сейчас пользуюсь Atom'ом и, иногда VSCode, для проектов на Node. Но предпочтение всё же отдаю Atom'у (и иногда Notepad2). До сих пор считаю, что чем проще инструмент, тем лучше.
В случае языков с динамической типизацией действительно можно обойтись редактором с подсветкой синтаксиса. Но если вы начнёте использовать языки со статической типизацией, вы поймёте, насколько же приятно использовать IDE в работе.
А как типизация на это влияет? Для C++ я писал в Builder и потом уже под RAD, оно, конечно удобнее, но по другим причинам — в первую очередь потому, что в С++ есть компиляция, а в этих IDE отладчик встроенный. Хотя пара фич у умных IDE действительно есть, которых лично мне, по большому счёту, не хватает в простых редакторах:

— Удобный всех мест в проекте где вызывается функция (как в Storm от JetBrains, хотя может у других есть такое же). Хотя в том же Atom это можно заменить «поиском по проекту».
— Вывод списка аргументов, которые принимает функция и их типов, по мере ввода.
— Статический анализ.

Но эти вещи никак с типизацией не связаны, вроде бы.
А как типизация на это влияет?

Статическая типизация позволяет более интеллектуально делать поиск по проекту, осуществлять рефакторинги.


Для C++ я писал в Builder и потом уже под RAD

В них очень слабый анализ кода. Не сильно лучше редактора с подстветкой синтаксиса. Зато есть отладчик — это большой плюс.


— Удобный всех мест в проекте где вызывается функция (как в Storm от JetBrains, хотя может у других есть такое же). Хотя в том же Atom это можно заменить «поиском по проекту».

Поиск по проекту выдаст много нерелевантных результатов. Например, у вас объявлен метод с одинаковым именем в нескольких классах. В случае динамической типизации вы в общем случае не знаете, с объектом какого типа работаете, поэтому придётся выдавать все возможные варианты.


— Вывод списка аргументов, которые принимает функция и их типов, по мере ввода.

Отлично. И как же вывести параметры метода при условии, что тип объекта неизвестен? Или предлагаете пользоваться только статическими функциями?

Отлично. И как же вывести параметры метода при условии, что тип объекта неизвестен?
Я имел ввиду в основном именно аргументы к функции, которые, очевидно IDE ищет всё-таки по имени функции, а не по типу. В случае объектов с не объявленным типом, список методов, очевидно, никак не вывести. Однако есть разные ситуации, например, если я нахожусь внутри функции, при объявлении которой указал, что принимаю в качестве аргумента массив, то можно показывать методы, доступные для массива, например, какие проблемы?
Объектно-ориентированный подход в программировании.
Системы контроля версий.
Концепция MVC
Методологии разработки Agile и Scrum

Это шутка? Этим вещам по 10-20 лет, если не больше.

Yii — считается одним из наиболее производительных и при этом простых фреймворков, хотя однозначных подтверждений этому нет.

Есть
Аналогов Gii нет ни в одном современном фреймворке (по крайней мере из коробки в большой четверке).
Это шутка? Этим вещам по 10-20 лет, если не больше.
Ну я не говорил что это всё вчера появилось, это глава про базовые понятия же.

Есть
Классный линк, спасибо.
Аналогов Gii нет ни в одном современном фреймворке

Попробуем сделать выводы?)
Это шутка? Этим вещам по 10-20 лет, если не больше.
Больше. Agile скоро 20, остальные старше. ООП — 52 года.

А системы контроля версий — это, как говорится, было бы смешно, если бы не было так грустно. Вы даже не представляете, сколько до сих пор существует айтишников, которые не умеют ими пользоваться.
Agile скоро 20

А скраму вообще за 30


Hirotaka Takeuchi and Ikujiro Nonaka introduced the term scrum in the context of product development in their 1986 Harvard Business Review article, "The New New Product Development Game". Takeuchi and Nonaka later argued in The Knowledge Creating Company that it is a form of "organizational knowledge creation, [...] especially good at bringing about innovation continuously, incrementally and spirally".
Это не столь важно. Даже в рамках PHP объектная парадигма доступна с начала 2000-х годов, MVC (в вебе) стартовал годом позже с подачи DHH и его рельсы. Другое дело, что пока у тебя сайт представляет собой 20 php скриптов, тебе этот MVC не особо-то и нужен. Дак и на C можно в объектном стиле писать, структы есть же? Значит можно. Я особо не интересовался, есть ли там инкапсуляция и прочие ништяки полноценного ОО подхода, но по крайней мере зачактки уже есть, а это 1972 год.

А вот переход от сервер сайд рендеринга к клайент сайд рендерингу — это реально революция в вебе, но автор этому посвятил одну строку в своей статье. Из этого делаю вывод: реальность современного веба автор не понимает, масштаб изменений не оценивает. Смысл тут дальше что-то обсуждать?
Системам контроля версий около 50-ти.
Я работал с SCCS, которая была предком CVS и родилась еще в недрах bell labs где-то в начале 70-х
Просто системы контроля версий реально решают проблемы тех проектов, где несколько программистов.
А где разработчик один — это больше вопрос привычки и удобства.
А системы контроля версий — это, как говорится, было бы смешно, если бы не было так грустно. Вы даже не представляете, сколько до сих пор существует айтишников, которые не умеют ими пользоваться.
This! Собственно, потому и упомянуто.
Ну я не говорил что это всё вчера появилось, это глава про базовые понятия же.


для претендента на вакансию web-разработчика сейчас недостаточно навыков десятилетней давности (какая неожиданность!)

Десять лет назад веб-разработчик, незнакомый с ООП, MVC и методологией Agile мог работать в лучшем случае каким-нибудь битриксоидом на екоммерсе. Как вы себе представляете веб разработку на PHP в процедурном стиле? Вы хоть откройте учебник Шлосснейгла (2004 год, если что) и ознакомьтесь с его содержимым, прежде чем статьи писать.
Десять лет назад веб-разработчик, незнакомый с ООП, MVC и методологией Agile мог работать в лучшем случае каким-нибудь битриксоидом на екоммерсе.
Крайне спорное заявление. Вы в целом что хотите сказать, что ООП знать не нужно или чего?

Как вы себе представляете веб разработку на PHP в процедурном стиле?
А где я писал про процедурный стиль? Речь о том, что многие сегодняшние модные «JS-кодеры», любящие рассуждать на тему что круче TypeScript или ES6+, не в состоянии при этом без гугла внятно ответить чем, например, объект в том же JS отличается от примитивного типа. Или, является ли функция объектом. Собственно, лишь для того чтобы у читателя эти понятия лучше закрепились в голове эта отсылка и сделана.

Вы хоть откройте учебник Шлосснейгла (2004 год, если что) и ознакомьтесь с его содержимым, прежде чем статьи писать.
Зачем?
Я говорю, что статья в целом не отвечает на вопрос, поставленный в заголовке: а именно познакомить человека с современной веб разработкой.

ООП, MVC — это все было и десять, и двадцать лет назад. Ну, правда, сложно представить себе человека, занятого в IT и не знакомого с этими концептами. PHP7, да равно как и RoR нынешний мало чем отличаются от самих себя в 10 летней ретроспективе. Так ли важны тайп хинты и декларация типа ретерна? Наверное, нет.

А вот самому важному, REST API, вы уделили одну строку (sic!). А ведь тем временем это самое важное изменение в вебе за всю его историю. Это смена парадигмы в целом: раньше мы имели сервер сайд рендеринг с js (который в принципе мог быть отключен) для второстепенных задач, то сейчас мы имеем клайент сайд рендеринг, т.е. js вышел на передний план, он значительно превысил в сложности программирование на бэк энде, которое по сути свелось к формированию и отдаче json'а из БД.

На фронте же теперь создаются сложнейшие приложения с полноценным рил тайм рендерингом, которые не уступают возможностям традиционных десктопных приложений. Разве могли бы быть реализованы хотя бы теже гугл документы, трелло или какой-нибудь google docs без современного js? Вот о чем должна была быть статья, что там на бэкенде, PHP или RoR — это вообще уже не важно.
А как соотносится REST с client-side rendering? Если там будет не REST, а XMLRPC, что-то поменяется в вопросе «client side rendering»?
Парадигма REST это классная идея, серьёзно. Но описывать это всё в статье про fullstack… Разбирать её проблемы и прочее? Это на главу отдельную потянет. И если каждый вопрос так разбирать, это будет уже не статья про фулстек, а книга «как стать разработчиком». А ещё, строго говоря вы не правы — до сих пор создаются приложения где никакого REST нет и быть не может, просто потому, что основные принципы не соблюдаются. То есть это API, но не следующее строгой концепции REST.
А как соотносится REST с client-side rendering? Если там будет не REST, а XMLRPC, что-то поменяется в вопросе «client side rendering»?


Вы себя нормально чувствуете? Я вам говорю, изобрели автомобиль. 10 лет назад ездили на лошадях, а сейчас ездим на автомобилях. А вы меня спрашиваете: «А причем здесь Форд?» Да не причем, протокол и формат обмена данными может быть вообще любой, хоть плэйн текстом. Это все несущественные мелочи.

Существенно то, что раньше веб страница формировалась на сервере и была абсолютно статичной, то сейчас это все происходит на клиент. Автор этому внимания не уделил, просто перечислив это как одну из «технологий». А меж тем это революция в вебе. Как я уже писал выше:

Из этого делаю вывод: реальность современного веба автор не понимает, масштаб изменений не оценивает. Смысл тут дальше что-то обсуждать?
Смысл тут дальше что-то обсуждать?

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

Существенно то, что раньше веб страница формировалась на сервере и была абсолютно статичной, то сейчас это все происходит на клиент. Автор этому внимания не уделил, просто перечислив это как одну из «технологий».
А REST-то тут при чём?
UFO landed and left these words here
UFO landed and left these words here
Интересно, что судя по графику 40% собираются не использовать SPA фреймвок, хотя реальность такова что все вакансии используют один из Angular/React/Vue, даже старичка backbone в них нету… странные данные опроса :) Вряд ли сейчас есть хоть одна вакансия клиентского js без этой тройки фреймворков.
На Angular вовсе не обязательно SPA делать. Как и на React, собственно, хотя он, конечно, больше на это заточен.
В чем выражается большая заточенность React на SPA относительно Angular?
Ну, перечислите, например, как можно применить чистый реакт на странице (пусть даже с Redux), если не считать рендеринг компонентов, описанных на JSX.

Если же, в случае ангуляра, не пользоваться компонентами и не писать свои директивы, всё равно, по сути, у нас всё ещё останется мощный инструмент с десятком возможностей, включая систему событий и привязку данных.
Если же, в случае ангуляра, не пользоваться компонентами и не писать свои директивы, всё равно, по сути, у нас всё ещё останется мощный инструмент с десятком возможностей, включая систему событий и привязку данных.
Можно подробнее?
Двусторонняя привязка данных между моделью и представлением, а также своя система событий есть в AngularJS «из коробки» (встроенные директивы ng-bind и ng-model, очень удобная ng-repeat, механизм $on/$emit/$broadcast). Всё это позволяет работать с любым интерфейсом, описанным в HTML, без всяких SPA, при этом не нужно ничего кроме самого ангуляра к проекту подключать.
AngularJS имеет фундаментальные/неустранимые проблемы с производительностью. Было бы очень недальновидно начинать использовать этот фреймворк в наши дни. А вот Angular 2+ это совсем другое дело.

Если нужен только реактивнй рендеринг HTML шаблонов и также например обработка onlick DOM-подобных событий, то существую гораздо более легковесные и тоже быстре решения чем AngularJS или React.

Механизмы $on/$emit/$broadcast лучше не использовать тк они завязаны на scope, понятие которе существуют только в AngularJS, потом задолбаетесь переезжать на другой фреймворк. Лучше уже тогда просто задействовать просто EventEmitter, но лучше работать без событий или хотя бы их типизировать что сделать не так просто. События вносят неявность во взаимодействие сущностей.
Второй ангуляр может и лучше, но его использовать без Node уже становится затруднительным, у них там минимум половина примеров даже в документации заточено на механизмы export/require. AngularJS для меня ценен именно возможностью писать хоть в блокноте.

Что касается производительности, это очень холиварная тема, я в целом с вами не согласен, потому что регулярно наблюдаю как тормозят и криво работают проекты моих коллег, написанные на React и новых версиях Angular (в частности во второй). При этом код на AngularJS по своему «монолитен», а проблемы с производительностью начинаются только если вам приходится работать с большими объёмами данных (1000+ объектов в выдаче API). Если у вас есть конкретные примеры, подтверждающие ваши слова, приведите их.
а проблемы с производительностью начинаются только если вам приходится работать с большими объёмами данных (1000+ объектов в выдаче API).
Это неверное суждение. Падение производительности там завист от количества вотчеров, если вотчеров немного, то не важно сколько данных было скачано.
регулярно наблюдаю как тормозят и криво работают проекты моих коллег, написанные на React и новых версиях Angular (в частности во второй).
Криворуких разработчиков всегда хватало. Дело в том что AngularJS не предоставляет нормальных возможностей управления change detection механизмом, а современные фреймворки предоставляют (хотя не уверен насчет Vue который в этом плане считается негибким).
Всем нужен SPA и только на 3-ке этих фреймворков, так что на практике обязательно выходит :)
Не нужны сейчас препроцессоры CSS. По десятилетней привычке тянут из проекта в проект целый зоопарк различного софта.
Альтернативой предлагается CSS-in-JS или просто старый добрый CSS?
Альтернативой чему? Можно как-то конкретнее? Может вы имеете в виду сакральный ритуал npm install -g sass?

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

Открываю я вот «Основы Sass» и вижу:

  • Переменные — реализовано
  • Вложенности — дичь!
  • Фрагментирование — ненужная фигня выделенная в отдельный пункт
  • Импорт — реализовано (ещё фиг знает когда)
  • Миксины — ну вот выглядит более-менее полезно (но конечно не для префиксов) но об этом чуть ниже
  • Наследование — снова не понятно, зачем практически дублировать «фичи»? чем это отличается от миксинов?
  • Операторы — реализовано

По факту преимуществ не так уж и много, как можно было бы ожидать. Взамен мы получаем возню с установкой и компилированием. Резко возрастающую сложность правки и необходимость крайне тщательно отслеживать весь набор стилевых правил (навесили пару миксинов на какой-то класс, потом в этом же классе переопределили какое-то свойство, потом заменили в одном из миксинов другое свойство и до кучи подключили отдельный файл css — а потом попробуйте с помощью веб-инспектора разобраться со специфичностью и местоположением правил и быстро всё разрулить).
Ну и самое главное почти все актуальные «основы Sass» вступают в конфликт (или дублируют) с другим талмудом модного веб-разработчика — БЭМом.
UFO landed and left these words here

Такое ощущение, что вся данная ветка — это провокация к данному посту. Вас кто-то заставляет писать на SASS/LESS или заставляет пропагандировать CSS? Моргните два раза.


Вложенности — дичь!

Всего лишь упрощённая форма записи каскадов CSS. Надеюсь, каскады вы не отрицаете? Даже в BEM они используются. Кроме того, вложенность как раз упрощает написание BEM-стилей.


Фрагментирование — ненужная фигня
Импорт — реализовано

Но зачем, ведь импорт фрагментов — это ненужная фигня? :)


Наследование… чем это отличается от миксинов?

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


Взамен мы получаем возню с установкой и компилированием.

Так или иначе, всё равно придётся подключать и настраивать препроцессинг для префиксов, объединения импортов и минификации кода. Так что можно или подключить sass (причём его даже настраивать не придётся), или добавить правил к PostCSS (вышеприведённый пример как раз им обрабатывается).


Резко возрастающую сложность правки и необходимость крайне тщательно отслеживать весь набор стилевых правил

На самом деле нет. Здесь всё решает методология (даже просто самоконтроль и разделение кода помогут) и кодревью. Кстати разбираться в каскадах и переопределениях стилей больших и запутанных CSS — не сильно легче. При наличии же сорсмапов в инспекторе прекрасно становится видно что и откуда используется.


почти все актуальные «основы Sass» вступают в конфликт (или дублируют) с другим талмудом модного веб-разработчика — БЭМом

БЭМ — это методологическое ограничение. Оно ровно такого же порядка, как избегание антипаттернов в коде вроде God object, необоснованного написания алгоритмов кубической сложности или кривого именования всех переменных. Всё это плохие практики, однако ни один язык не запрещает так делать.

То есть «просто старый добрый CSS», как предположил serf. Я не понимаю, что помешало сразу так и ответить. (Если что, я здесь не принимаю ничью сторону, я просто хочу разобраться)
Я отвечу со своей колокольни.

У одного из проектов, для которого я пишу, есть требование — покрытие 99% пользовательских устройств. Без SCSS в этом случае (7 .css файлов с 1000+ правил в каждом) реализовать и поддерживать это было бы тяжко.

На самом деле это больше «маркетинговый» термин для продвижения PostCSS. По факту же это тоже плагинный препроцессор.

Очевидно альтернативой препроцессорам которые вам «не нужны».
предлагаете писать все в одном файле а потом быстро ориентироваться в 4000 строк туда сюда? Вложенность, компиляция в один файл, минификация, автопрефиксер — попробуйте что-то выкинуть и сказать что это можно и ручками.
Каким образом вы сделали вывод что препроцессор != одному стилевому файлу. Как отсутствие препроцессора мешает мне разбить файл на сотню мелких?
разбивать вы можете и winrar-ом, спору нет. Вопрос в том почему вы не используете удобные инструменты, эмпирически созданные помогать. Где можно подключать файлы через @ include, где комментарии работают с // а не только /* */ где они же очищаются при сборке и т.п много мелких удобных вещей.
Для Python  - самый популярный менеджер это  Pip… Но вернёмся к PHP.
Вот там и оставайтесь.
UFO landed and left these words here
Сильный, профессиональный комментарий уровня «Школьник поржал над немодным пыхом»
Боюсь это вы Ирина, демонстрируете свои стереотипные представления относительного того или иного ЯП. Поясню речь шла об очевидном «галопом по Европам» про «pip для Python». Эту же мысль подкрепили ниже цитируя — «CoffeeScript, Gulp/Grunt, Bower».
Странно, что вам не очевидно, что если эту тему не «галопом» раскрывать, это будет уже не одна статья и даже не две.
кому-то пришло в голову, что без строгой типизации в JS жить ну никак нельзя, поэтому мы сейчас имеем то, что имеем
Матерого фуллстекера видно издалека.
CoffeeScript
Эту штуку уже не упоминают в приличном обществе. Также как и Gulp/Grunt, Bower и прочие анахромизмы.

PS Полистайте вакансии лидеров рынка и возьмите киворды оттуда.
Порог входа в статью очень высок, даже для ИТ. Понизьте этот порог, до уровня «бабушка с базара, продающая пирожки». Хоть я у кручусь в около-ИТ-шной среде, ближе к сисадминству, все равно смотрел на содержимое, как барашек на новые ворота. Можете даже каждый технолоджи-буллет отдельным топиком рассмотреть, только опять же, чтобы бабушке с базара было ясно. Я например, сколько не пытался усвоить что такое ООП в школе/универе, так остался нулём в этой теме — вывод — преподавали всё время не правильно. Сделайте статьи — и хайпанёте и аудитория спасибо скажет.
Ну, на эту статью она разве не в интернете наткнулась? Так пусть также поищет по запросу «объяснение ООП»
ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 даже на википедии высокий порог, для меня это набор слов. Можете дать конкретные статьи «для реальных совковых твердолобых бабушек»?
Сайт1

habr.com/en/post/148015

vertex-academy.com/tutorials/ru/chto-takoe-oop

jsehelper.blogspot.com/2016/01/blog-post_9.html

А вообще, хорошо бы просто какую нибудь книгу по определенному ООП языку прочитать, там все понятно будет. Потому что понять ООП без привязки к языку и без работы с языком и ООП наверное сложно.
Базовая идея ООП проста, как три копейки: это способ организации кода. В процедурном программировании вы просто сваливали в кучу глобальные переменные, функции и процедуры, а в ООП вы группируете переменные и процедуры для их обработки таким образом, чтобы они не мешали друг другу. А вот КАКИМ ИМЕННО ОБРАЗОМ все это друг с другом группировать — это то самое «высокое искусство», которое можно изучать бесконечно, о котором пишут книги и даже диссертации, и которое вам абсолютно бессмысленно знать, если вы лично не программируете. А вот как начнете программировать — рано или поздно разберетесь.
Да, быть сейчас программистом «на уровне» тяжело. Очень много технологий, от которых нельзя отмахнуться, под предлогом, что это «хайп» или «нафиг нужно». Смотришь вакансии, там не столько знание языков нужно, сколько опыт работы с фреймворками и IDE.

Раньше надо было иметь некоторую базовую подготовку по логике/алгоритмам, немного математики. И знать один-два базовых языка типа C++. И с этим багажом можно было не пропасть.

Не то, чтобы я жалуюсь — наоборот, стало даже еще интереснее, чем лет 20 назад. Но страшновато, честно.
Фундаментальные знания и опыт проектирования никуда не деваются, а современный инструментарий легко осваивается за месяц-два параллельно с поиском новой работы.
Да ладно, зачем так резко разрушать инцициативу начинающего фуллстекера.
Он работает с тем же типом пакетов и вроде бы использует те же сервера в качестве репозитория пакетов. У них один формат package.json.

Аргументируйте, чем принципиально это отличается от «обертки над npm».

Yarn был бы обёрткой, если бы для выполнения команд сам запускал бы внутри себя npm, тогда как это отдельная независимая утилита, работающая с файлами package.json.


Точно так же, как нельзя назвать OpenOffice обёрткой над MS Office только лишь потому, что он читает те же самые вордовские файлы. А вот, например, ndm можно назвать обёрткой над npm, потому что для работы с package.json и установки пакетов он использует именно его, а не делает эту работу самостоятельно.

Изложение получилось достаточно сумбурное, в основном из-за того что непонятно на кого все-таки рассчитана статья — на новоиспеченного джуна или мида/сеньора, который последние 10 лет застрял в легаси.

Многие подходы, технологии, библиотеки уже можно не упоминать в 2019. Либо они на закате, либо ушли из мейнстрима в свою нишу. Это как минимум Bower, CodeIgniter, AngularJS, Zend Framework, Grunt, Gulp, Kohana/Koseven, Browserify, CoffeeScript, LESS, XPath.

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

Чего бы еще хотелось добавить в такую статью (если все-таки ориентироваться на проспавших мидлов/сеньоров):
  • Больше внимания уделить контейнерам, тем более это далеко не только о деплое
  • Новые направления для fullstack: Electron, React Native (краткий обзор)
  • Mobile first, PWA
  • Express, Next.JS, Gatsby
  • Чуть больше о TypeScript. Ситуация складывается так, что поверхностные знания нужны даже если не использовать его непосредственно.
  • Повышение интереса к функциональному программированию
  • Подходы к управлению состоянием (Redux, MobX)
  • Просто упомянуть: GraphQL, WebAssembly, HTTP2/3
  • Изменения на рынке браузеров
  • Актуальные IDE
  • Как за 10 лет выросли облачные платформы


Что понравилось, это упоминание The State of JavaScript. Имхо это первое с чего следует начать обзор чтобы освежить знания. Особенную ценность представляет динамика показателей за 3 года, по ней можно делать выводы о росте/падении популярности.
А я считаю, что статья и комментарии, которые ее дополнили — в сумме отлично рассказывают о том, что сейчас творится в мире, куда кто-то хочет войти фуллстэком.
Нормально все у нас, просто автор настолько безграмотно все написал что у всех знающих людей моментально бомбануло и они рванулись доказывать автору что он не прав — особенности нашего менталитета.
Изложение получилось достаточно сумбурное

Вообще непонятно зачем автор взялся что-то писать, если сам не пользовался большинством из указанных технологий. Просто конспект из интернета? Тогда бы уж потрудился более систематично материал представить, а то набросал в одну кучу шопопало, кучу фреймворков для похапе, но ни одного для других языков, назвал контейнеры, но не упомянул об клаудах и IaaS/PaaS, про базы данных ваще ниче не написал, обозвал Rails извращением (что?) и так далее.
Смешал людей коней, да еще и добавил сюда несколько явно ошибочных/устаревших утверждений да еще и отстаивает эти утверждения в камментах. Дичь какая-то.
господи, ну это же ясно как белый день. Он структурировал инфу у себя в голове, потом вывалил на белый лист и все что ему надо для коррекции своих знаний — толпы несогласных говен в его сторону. Он и эксплуатирует этот менталитет и до сих пор не подает вида, очень грамотно, я считаю)
Ещё один стандарт который, вероятно, значительно изменит фронтэнд-разработку уже в ближайшем будущем — Web Components. Очень мощный инструмент и он вам определённо пригодится


Это весьма спорное утверждение, несмотря на внешнюю крутость и полезность данной технологии. Если бы веб компоненты появились во времена царствования jQuery, их преимущество было бы неоспоримо, но в текущей ситуации, я бы советовал сфокусироваться именно на изучении современных фреймворков/библиотек (и возможно только на React, спрос на рынке просто огромный, особенно для фулстеков).

Ситуации с Web Components напоминает мне ситуацию с Web Workers. Последние были введены в HTML5, привнеся вау-эффект схожий с тем, что имеет WebAssembly сейчас.
В результате: в них до сих пор нет поддержки es модулей, более менее удобный импорт возможен только в виде блоба, а дебажить всё это — неописуемое удовольствие занимающее несколько часов.
UFO landed and left these words here
… и только Java которую уже несколько раз «хоронили» живее всех живых.
для мелких проектов не критично что использовать, для больших тебе скажут что использовать
Зачем было просить в начале статьи советов от более опытных товарищей, чтобы потом вступать с ними в пустые споры в комментариях?
Вопрос риторический.
Советы по сути были учтены и будут добавлены в статью как только у меня освободится чуть времени. Почему мне не спорить с утверждениями вида «X ещё жив, ведь я и ещё 10000 человек же до сих пор используют!» — я не понимаю.

А конкретно кто так высказывался здесь и по поводу какой технологии? По поводу .NET, Java, Python или Ruby?

Не-не-не, я спросил: "Почему это извращение?" Вы ответили: "Потому что!" Это сложно назвать спором.

Пожалуйста, не становитесь фулстек. Мы очень устали собеседовать людей, которые знают все, но не могут посчитать биг О время/память быстрой сортировки, а многие и не знают что это такое.
Корпаратив и онлайн идет в сторону серверлесс, где язык становится не так важен как выразительность, скорость, память и надежность.
Один язык из топ 10 вместе с корменом, go4 — вы уже востребованы.
Знаете дядю Боба, Фаулера, REST API level 1-3 и техблоги ебей/нетфликс/амазон — вас хантят по 3-5 предложений в неделю.
DDD, CQRC, event-driven — и вы уже топ кодер, который левой пяткой деплоит в мультиклоуд пока ручками завариваете себе кофе.
>Мы очень устали собеседовать людей, которые знают все, но не могут посчитать биг О время/память быстрой сортировки, а многие и не знают что это такое.

Дык потому что все учат ларавель или че там модно

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

Какое-то противоречие. Если у вас облако, мощность которого можно расширить за 1 секунду, заплатив денег, проблемы скорости и памяти уходят на второй план.

> Один язык из топ 10 вместе с корменом, go4 — вы уже востребованы.
Во всех вакансиях пишут не Java, Java + REST/Spring. Я на java пишу с 1996 года, и «голая» она никому не нужна.

> CQRC

Council for Quality Respiratory Care? Community Quarantine Reform Coalition?
Не думаю, что тут противоречие. Речь больше о том, что сами языки теряют уникальность и в конечной оценке дева есть множество других факторов, которые важней.

> заплатив денег
если маржа невелика, а объемы процессинга огромны, то скалировать надо по делу.

> Java + REST/Spring
Это вторичные навыки, которые приобретаются за недели при должной базе.
Главный навык — это умение (и желание) самостоятельно и систематически учиться.
Если желания учиться нет, но человек обладает уже необходимыми навыками — почему бы и нет. В умелых руках лида может и желание учиться вернуться.

CQRS конечно.
Обычно это кстати называют GoF а не go4 (первый раз вижу такое сокращение).
Что бы оценить шанты найти работу, надо не только посмотртеть количество вакансий, но и выяснить количество кандитатов на эти места. Так что какой-нобудь редкий стек может оказаться более перспективным (и более денежным).
Например? Даже если нашёл, то высок шанс, что когда придётся менять работу, «редкий стек» станет «совсем редким» и работы просто не будет.
Scala, Haskell, Elixir, Rust
Спрос заметро превышает предложения, что отражается и в зарплатах.
UFO landed and left these words here
Автор, вы в посте несколько раз написали что будете рады если вас поправят, а в комментариях — вообще не рады. Вы уж определитесь, а то непонятно, поправлять или уже не стоит.
Я рад аргументированным правкам, а не выяснениям в духе «мой язык идеален, а ты про него не написал». Опять же, одно дело — конкретно написать что добавить\исправить, и совсем другое — заявить в духе «да ты явно нуб, написал такую-то чушь». Что тут и происходит в половине веток. Чувствуете разницу?

И да, правки я, разумеется внесу, а некоторые уже внёс. Просто на всё сразу не хватает времени, мне ещё бы поработать, знаете ли.
Хорошая статья, но в ней есть очень большая «ложка дёгтя», а именно фраза про то, что роутинг и шаблонизация на бэкенде это извращения. Я не знаю Ruby, может с ним действительно что-то не так (в чем я сомневаюсь), но очень хорошо знаю Python и активно использую в своих проектах шаблонизатор Jinja2. И, исходя из своего опыта, могу выделить три способа формирования HTML-кода страницы, применяемых в современной веб-разработке:

  1. Страница формируется с помощью шаблонизатора на сервере и уже готовый HTML-код отдается клиенту. У такого способа есть ряд преимуществ: клиенту не надо тратить ресурсы, на составление итогового кода самому; данный код может быть на сервере кэширован (частично или полностью) например, с помощью Redis; отдаваемая страница лучше индексируется поисковыми системами (но тут зависит от поисковой системы, по слухам, кто-то уже и JS-умеет обрабатывать).
  2. Страница формируется уже клиентом, используя фреймворк (например, Vue), а с сервера запрашиваются только данные через API (REST, JSON-RPC и т.д.). У данного подхода есть свои плюсы, например, уменьшение трафика при обмене данными с сервером.
  3. Третий способ это комбинирование первых двух, когда части HTML формируются на сервере и могут передаваться уже в процессе клиенту, либо когда первичная страница формируется на сервере, но итоговая «сборка» происходит на клиенте с помощью фреймворка.

Каждый способ имеет как свои плюсы, так и минусы, и выбирать надо исходя из поставленной задачи, а не потому что «так модно» или «так все делают».
Я не знаю Ruby, может с ним действительно что-то не так (в чем я сомневаюсь), но очень хорошо знаю Python и активно использую в своих проектах шаблонизатор Jinja2.

Я не знаю, может быть автору не понравился python-style синтаксис Slim/HAML или он посчитал шаблоны чем-то вроде SSR-рендеринга. Так и не смог добиться от него конкретики. Шаблонизаторов для Rails минимум три популярных (ERB из коробки, остальные прикручиваются). Есть некоторые нюансы в виде отсутствия наследования шаблонов как в jijna (что огорчает), но в целом всё ровно то же самое.

Переписал эту часть статьи. Вернее даже вынес это в отдельный блок в «базовые понятия».
UFO landed and left these words here
Проблема многих разработчиков — обязательно использовать всё новое, «ведь оно же новое! Оно не может быть хуже!». Отсюда появляется тонны всего этого хлама, который потом тормозит на сервере и в браузере.
Запомните — не всё новое=лучшее. Мозг тоже надо включать, у многих он отсутствует, или выглядит как у блондинки «ааа, новьё завезли! надо срочно использовать! даже если нафиг не нужно!».
UFO landed and left these words here
С точки зрения, озвученной в предыдущем комменте, все было бы хорошо — на ассемблере можно сделать все что угодно и любую задачу решить. И хайпа не было бы уже лет 50. И тратить время на изучения новья не надо — прошел курс в универе и всю жизнь используй, а освободившееся время и деньги, уходившие на самообразование можешь тратить на хобби и семью. Рай. А мы — в аду.
UFO landed and left these words here
Видимо надо было добавить тег «ирония». То что вы пишете — понятно подавляющему большинству, именно поэтому, за редким исключением, на ассемблере никто не пишет уже многие десятилетия.
UFO landed and left these words here
Да, можно. Можно и сегодня бэкенд на ассемблере писать.
Вопрос только в удобстве и в затратах временных и трудовых ресурсов на это.

Другими словами, нельзя.

Если задача — быстро-быстро в продакшен, а если проект взлетел и надо оптимизировать, потом уже перепишем на чем-нить получше. Вот с такой задачей ассемблер не справится, а именно в эту сторону идет подавляющее количество задач.
Какая-то очень поверхностная статья без общего понимания технологий, которые описываются.
Некоторые примеры некорректны, а некоторые вставлены вообще без понимания того, что они делают.
Если еще раз коснуться темы bower — разработчики предлагают заменить его не просто от скуки, а из-за серьезных проблем с безопасностью. Возраст этой информации относительно небольшой, но и не сказать, что свежий. С учетом заголовка статьи — не приведут ли указанные в статье рекомендации «сонного человека» в тупик?
Тестирование — отдельная большая тема. Чаще всего под этим подразумевается т.н. юнит-тестирование. Суть идеи легко понять на простом примере. Создавая тест вы пишете некую обёртку, которая выполнит одну из ваших функций и проверит ожидаемый результат. Затем, когда вы поменяете что-либо в другой функции, от которой зависит первая функция, чтобы проверить, что изменение ничего не сломало — вам достаточно запустить созданные ранее тесты. Надеюсь понятно, насколько это может быть полезно в большом проекте.

Кажется, здесь немного искажено понятие юнит-теста. Его суть в проверке одной конкретной функции, на которую пишется тест. Если у этой функции есть другие зависимости, то вместо них желательно «подсунуть» фэйковые реализации — мок или стаб.
Под описание в статье больше подпадает интеграционный тест.
По-вашему, какой антоним у «серьезный бекенд»? «смешной»?

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

Т.е. какой нибудь Facebook, написанный на php — это «несерьезный» бэкенд?


Не встречал стартапов на Java, скорее всего их очень мало.


Не стоит путать энтерпрайз с бэкендом.

У фейсбука сильно перепиленный PHP, насколько я знаю, ибо производительности обычного им не хватило.
Пожалуй именно «кровавый энтерпрайз» я вложил в понятие «серьезный бекенд».
Думаю справедливо считать энтерпрайз подвидом бекенда :)
Пожалуй именно «кровавый энтерпрайз» я вложил в понятие «серьезный бекенд».
Думаю справедливо считать энтерпрайз подвидом бекенда :)


Так вот. Кровавый энтерпрайз ВСЕГДА будет консервативным, поскольку в нем пишутся продукты, которые работают как минимум несколько лет, как в среднем лет 10, и как максимум десятилетиями.
Поэтому чтобы не написали, через некоторое время там будет легаси. Потому что энтерпрайз просто не успевает.
Поэтому в ентерпрайз нужно что-либо более-менее стабильное.

Сейчас в ентерпрайзе разрабатывается много вещей на ноде, котлине, тайпскрипте, питоне и так далее. Но подавляющее большинство вещей все еще работают на java, потому что java была на самом хайпе лет 5-8 назад.
Через 5-8 назад кровавым ентерпрайзом будет текущий хайп, а хайпом будет что-то другое.

Поэтому серьезный бэкенд меняется каждый год, но с запозданием в 5-10 лет.
Потому что Java все таки старая(не значит что плохая). А на сколько я понимаю, стартапы — это обычно что то новое, прорывное. И они в своих продуктах не будут использовать неновое и непрорывное.
Если писать код с нуля, то Java, возможно, не лучший выбор. Да, она действительно старая, а, точнее, консервативная. Нововведения в языке и JVM вводятся очень медленно. Философия «Write once, run everywhere» таки накладывает свои ограничения. Есть модный Kotlin, но от ограничений JVM он все равно не спасает.

По поводу PHP, хотя по комментам, его тут не любят
Полезный ресурс phptherightway, про современную (более-менее) разработку на PHP
Не упомянут PSR, а его знать обязательно, в частности codestyle, т.к. ему сейчас следуют все


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


  • HttpFoundation, обертка для работы с HTTP запросами
  • Console, библиотека для работы с CLI, тот же самый composer под капотом содержит именно ее
  • Process, для запуска процессов в системе
  • Yaml, работа с yaml, используется в phpunit например

Насчет популярности Laravel, вот тут есть описание, что из Symfony там используется: Console, CssSelector, Debug, DomCrawler, Filesystem, Finder, HttpFoundation, HttpKernel, Process, Routing, VarDumper. Это просто самый популярный фреймворк на базе компонентов symfony, как обычно пишут — "с более низким порогом вхождения" (хотя ИМХО, не соглашусь). Так что здесь надо понимать откуда ноги.

Автор попутал много чего из раздела про Laravel
Eloquent ORM для работы с БД и создания моделей (речь про модели из концепции MVC)

это реализация ActiveRecord, к «модели из концепции MVC» это не имеет отношения
механизм автоматической загрузки классов PHP без необходимости подключать файлы из определений в include

автозагрузка классов существует уже кучу времени
миграции (система управления версиями БД)

существует почти в любом фреймворке и в виде отдельных реализаций
могут использоваться компоненты Symfony

там и так используется куча компонентов Symfony, да и их отдельно в любом проекте можно использовать при желании
есть свой формат пакетов, которые позволяют создавать и подключать модули Composer к приложению на Laravel

такой формат есть вроде у всех современных фреймворков, да и вообще можно подключить любую библиотеку к любому проекту и сделать бридж чтоб ее использовать
CodeIgniter и kohana — скорее пациент мертв, чем жив
Да и вообще странный fullstack судя по статье — только backend и frontend делает. А как-же мобильные приложения? Добавить к этому списку Apache Cordova/PhoneGap и уже stack будет более full. Ну и простенькую СУБД спроектировать для такого специалиста не должно стать проблемой, про это как-то не рассказано
Eloquent ORM… это реализация ActiveRecord
Да, это очевидно, но также очевидно, что используется ORM, в основном, в моделях, о чём тут и написано.

существует почти в любом фреймворке и в виде отдельных реализаций
Речь про реализации «из коробки». У самых популярных фреймов, таки да. У какого-нить Slim — есть такое?

CodeIgniter… скорее пациент мертв, чем жив
Там есть линк на статистику прошлого года, которую составлял вовсе не я.
Немного некорректное сравнение выходит — Slim это микро-фреймворк, хотя в нем вполне можно использовать ту же самую Eloquent, как и в любом другом микро-фреймворке
Так как автор не стал писать про Python в виду недостаточности знаний, немного напишу про этот язык и используемые фреймворки, может для кого-нибудь будет полезным. Тем, кто по какой-либо причине еще его не знает, а возможно даже обходит его стороной, хочется посоветовать, все-таки, присмотреться к этому языку получше. Я сам очень долго не хотел его изучать, и причина была не как у многих: «фу, да там все через отступы», а в том, что приводя плюсы питона (да простят меня люди говорящие «пайтон») обычно называют лаконичность языка. Часто приводят фразу в духе: «что на си занимает 100 строчек кода, в притоне это займет 10». Вот эта «простота» отпугивала, особенно после C++ и любимого С#. Казалось, что язык больше для «домохозяек» и людей не умеющих программировать на нормальных языках с нормальной типизацией, да и вообще язык только для скриптов. Я никогда так не ошибался! :) Язык очень мощный, невероятно удобный, который можно применять во многих областях. Я не знаю ни одного человека, перешедшего с PHP на питон, и который после этого опять хотел бы вернуться к PHP. Это я все к чему веду: питон отличный язык для того чтобы создавать на нем бэкэнд. Ну а теперь непосредственно про фреймворки… Для начала надо определиться: какой сервер нам нужен блокирующий или неблокирующий. У каждого из них есть плюсы и минусы. Неблокирующий сервер чаще всего используют для веб-сокетов, но на нем можно писать и обычные сайты, способные одновременно обрабатывать большое количество подключений. Но при работе с такими серверами надо помнить, что все подключения крутятся в одном «общем цикле» и блокировка этого «цикла» приведет к полной блокировки всех подключений, в связи с этим все используемые библиотеки должны быть не блокирующими. Среди неблокирующих фреймворков на сегодняшний день я бы советовал использовать aiohttp, есть и другие достаточно популярные такие как Tornado, но все они уступают aiohttp. Что же касается блокирующего фреймворка, то тут выделяется Django. Он подходит для людей, которые любят чтобы все было в одном флаконе и желательно сразу. Django уже «из коробки» включает в себя и шаблонизатор, и ORM, и многие другие удобные библиотеки. Но если Вы, как и, я любите выбирать библиотеки для каждой задачи свою, то тогда советую использовать Flask, а все остальные библиотеки уже настраивать под себя. Шаблонизатор чаще всего используют Jinja2, это достаточно удобный и распространённый шаблонизатор, с которым если и возникнут вопросы, то ответ можно будет нагуглить очень быстро. Что касается ORM, то в мире питона правит sqlalchemy. Это как пишет создатель peewee (конкурента sqlalchemy): «SQLAlchemy is the gold standard for ORM in the Python world» — и я с ним полностью согласен. Это универсальный и мощный инструмент. Но за все надо платить, в данном случае приходится «платить» сложностью данного фреймворка. Хотя, начать с ним работать можно очень быстро, а вникать в сложности уже в процессе. Есть очень много и других полезных библиотек, полезных при работе с веб, таких как wtforms, beautifulsoup, Pillow и т.д, но тут все уже зависит от конкретного проекта и задач, которые стоят перед разработчиком. Что-то слишком много букв получилось, но, надеюсь, для кого-то будет полезна данная информация.
Много полезной информации, но без абзацев грустно.

Я бы еще добавил библиотеку requests (прямо очень мне понравилась). Для облачного serverless бэкенда стоит посмотреть на фреймворки Chalice и SAM. Ну и pipenv, black и flake8 наше все, конечно.
Я не успел насладиться работой с Django, как приятно на нём делать сайты, потому, что познакомился с ReactJS и стал использовать Django REST Framework. Кроме этих двух вещиц мне больше ничего не требуется. А не так давно вышла вторая версия django-channels и за веб-сокетами из Django далеко выходить стало ненужно.
кому-то пришло в голову, что без строгой типизации в JS жить ну никак нельзя, поэтому мы сейчас имеем то, что имеем


Уважаемый, а как вы представляете себе разработку без строгой типизации в проекте где JS кода на порядок больше чем у Вас? 40 тысяч строк к примеру?

Переход с JavaScript на TypeScript помог нашей фирме найти около 100 проблем, неиспользуемых функций, опечаток и прочего. Никакие процессы code review не помогут добиться того чего даёт строгая типизация.
Из опыта — до 100 тысяч JS нормально разрабатывается, если работает небольшая команда профи которые понимают что делают. Но к этому объему они просто выработают набор правил как все это писать, эдакую типизацию в голове.
Но после перехода на TypeScript я уже на JS ничего больше 100 строк «накидать по быстрому» не пишу вне зависимости от сложности проекта. Банально меньше кнопок надо нажимать.
У меня 150к+ строк. Никакого TypeScript, хотя признаю, бардак имеется, но это не результат используемого языка, это скорее из-за того что код в разное время писали разные люди, а раньше не было какого-то единого кодестайла. В результате некоторые функции дублируются, некоторые надо переписать.
Уважаемый автор. Попробуй перечитать спокойно все комментарии и свои ответы.
Сообщество, в общем-то спокойно пытается указать на какие-то неточности или ошибки. Это нормально. Минусы, как известно, ставят охотно. А плюсы — редко.
Так вот. Пробежался по статье. Ну ок, автор пытается объять необъятное. В этом ничего плохого нет. Но вот как только погрузился в комментарии, сразу обращается внимание, что автор практически не умеет воспринимать критику. Практически любое замечание следует оспорить, без (ну по взгляду со стороны) попытки понять другую сторону.

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

А тебе вторым же комментарием заявляют — «бред, так никто не делает». Скажите, это, по вашему нормальная критика?
UFO landed and left these words here
В основном претензия к форме критикования, а не сути. В нашем конкретном случае так реально удобнее, потому что сервером буквально человек пять пользуются.

Алсо, статью в этой части я переписал, думаю теперь ближе к истине.
Прекращу «откапывать», как только прекращу эту «стюардессу» в каждом четвёртом проекте встречать и в требованиях к фронтэнд-вакансиям.
Ну может об этом стоило упомянуть в статье? Что часто встречается в старых проектах, но в новых использовать не стоит? И что если попался такой проект, следует вежливо предложить миграцию? — Что, кстати, было бы профессионально.
Просто оставлю коммент чтобы иметь возможность написать чуть позже.

Но могу сказать что меня в том числе и как С/С++ разработчика новые тенденции пугают. Особенно что касается Node.js и того, как люди разленились и пихают его всюду.
В целях эксперимента вчера написал два кодпрува необходимого нам бэкэнда на POCO (!) и Crow (почти Node.js) буквально часов за восемь вечером.
Вообще я считаю как и британцы, что вечер начинается с 17:00 и заканчивается в 0:00.
Но так как я, бывает, работаю с полудня по Гонконгу до вечера в Калифорнии, как например сегодня, то вечер может начинаться в 20:00 и заканчиваться в 4:00 утра.
на следующих языках:
Python,
Java
.NET
Node.js (тут неоднозначно, но об этом дальше),
Ruby on Rails
И, конечно же PHP.


А на языках V8 и SpiderMonkey уже ничего не пишут? ;-)
Этот язык называется JavaScript, а не NodeJS. И никак иначе.
Ну автор написал NodeJS. Если бы он написал CommonJS, то я бы против него также протестовал, как вы понимаете.
Поправьте меня, пожалуйста, если я что-то не понимаю. Есть ECMAScript (На данный момент спецификации 262) и его расширения: JavaScipt и, например, JScript(Unity Script), Action Script. Так вот по сути Node.js поддерживает дополнительные keyword'ы для импорта и экспорта переменных и сохранения области видимости. Это все называется системой модулей CommonJS. Почему тогда это система модулей, а не расширение?
Насколько я понимаю, CommonJS это именно стандарт, описывающий механизм использования модулей, а не расширение самого языка.
Да, так наверно даже точнее сказать — это спецификация, которая дополнительно еще объявляет новый функционал (который логично бы было отправить в ECMAScript).
Вопрос не в том что написано в документации по JS, вопрос в том почему это там так определено. Ведь например тот же .Net C++ это не язык отдельный, не реализация, не расширение, не фреймворк и даже не LLVM (по сути) на которой выполняется Managed C++ Code, а как-то все вместе.
Боюсь, чтобы докопаться до сути в этом вопросе, надо быть лично знакомым с кем-то принимающим непосредственное участие в консорциуме, либо самому прочесть такую гору литературы, что будет просто не до кодинга…
Ну это ж JavaScript. Там законы ни для кого не писаны.
Был ECMAScript. На его базе сделали несколько разных «интерпретаторов» (обычно их называют движками, потому что они выполняют больше задач, чем просто интерпретатор кода).
Один из них — CommonJS. Взяли и расширили спецификацию своими доработками. Потом сделали NodeJS на его основе. Но, как это внезапно бывает, NodeJS решили не контрибьютить в CommonJS, а просто отошли от него [тут уместна шутка про лунапарк]. Ну а CommonJS сдохнул. Потому что, внезапно, отошли все.

А вообще я не JS-программист. Не очень разбираюсь в их кухне.
Знаю одно — название языка: JavaScript, а не NodeJS.
В том и вопрос был. Но таки да, Node.js это ни разу не язык.

Тоже ни разу не JS-программист, но таки Node.js + Swagger бывает юзаю как тестовый API для сквозного тестирования.

Хоть и не язык, но его подмножество. Вот про этот код можно однозначно сказать – это Node.js, в браузере такое не запустится:


const fs = require('fs');
fs.readFileSync('hello.txt');

а вот этот код будет сугубо браузерным


document.getElementById('button').addEventListener('click', () => {
  console.log('clicked!');
});

Получается, что Node и браузерный JS это разные подмножества Javascript.

Ну, так первое и есть тот самый CommonJS с помощью которого я сейчас пишу скрипты для mpv.io. И вообще, с точки зрения математики, правильнее будет говорить надмножество. В итоге Javascript будет пересечением множества CommonJS и JS.
document.getElementById('button').addEventListener('click', () => {
console.log('clicked!');
});


Это не конструкции языка, это api DOM и BOM, который браузер реализует для JS движка. JS ничего сам по себе не знает ни о document, ни о readFileSync это все внешнее API платформы, в среду которой он интегрирован. В Ioniс и Electron будут доступные другие API, но язык и движок тот самый.