Я веб-разработчик и уже 10 дней не могу написать простейшее приложение

Предлагаю вашему вниманию перевод статьи "I’m a web developer and I’ve been stuck with the simplest app for the last 10 days".

От переводчика: мнение автора местами частично, или полностью, не совпадает с моим, но вопрос поднимается, как мне кажется, правильный. Рекомендую почитать комментарии в блоге автора.

В основном я занимаюсь full-stack web-разработкой. Периодически пишу бэкенд на Python или Ruby, иногда работаю с C#. Еще я пишу консольные утилиты на C++ и Node.js. Мне нравится Closure, я познакомился с web много лет назад, когда писал на Perl и PHP, а первые годы профессиональной разработки посвятил программированию на Java.

Когда я впервые встретился с Javascript, он в основном использовался для того, чтобы добавить на страничку "Текущее время". Это были девяностые, когда все хотели приправить свои странички так, чтобы пользователи могли оценить, как это клево: текущий день недели выводится динамически. А спустя какое-то время оказывалось, что Javascript может гораздо больше, и мы получаем полностью динамический HTML — DHTML!

Последнее время я разрабатывал довольно большие SPA с использованием разных фреймворков, а, когда торопился, то и с кучей грязного кода из которого то тут, то там торчала jQuery-лапша.

Десять дней назад я решил сделать небольшое SPA для себя — маленькая утилита, потенциальный pet-project. Работы дня на два-три. А последние полгода я работал над десктопным проектом на C#. Это была довольно скучная программулина для управления рабочими процессами: webservice-бэкенд и winforms на фронте.

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

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



Я начинал и бросал уже раз пять. Проблема была в выборе и удручающем обилии инструментов из которых надо было выбирать.

Кто захочет писать

MyNotReallyClass.prototype.getCarrots = function () {}

когда ES6 уже почти здесь, со своими почти классами, которые уже вот-вот будут поддерживаться?
Кто захочет вставлять десять

<script src=”library-12.js”></script>

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

$('.carrots').innerHTML(myJson.some.property[3]) 

когда вокруг так много фреймворков, которые помогают структурировать код? Кто хочет игнорировать тот факт, что теперь клиентский код компилируется с помощью утилит, написанных на Node.js?

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

Напомню, это был простой проект "для себя", я вообще-то в основном собирался получить удовольствие, так что настроился на "zero-tolerance mode" (прим. переводчика: рука не поднялась переводить такую чудесную фразу). Как только что-то начинало раздражать, я бросал это и искал другое, лишь бы ничего не мешало.



Вот пара примеров того, с чем мне пришлось столкнуться, пока я пробовал все эти новые штуки из современного Javascript.

Для начала, я захотел попробовать Typescript. Поскольку последнее время я работал в основном с C#, я помнил, как это клево, когда язык статически типизирован: это дает больше уверенности в своем коде, рефакторинг становится проще, а IDE с хорошим автокомплитом пишут за тебя половину кода, и не важно, как ты намудрил с классами.

Мне были нужны две библиотеки, для основного функционала. Они не были написаны на Typescript, так что я потратил пол-дня на изучение .d.ts файлов и написание оберток к тем библиотекам. Не самое продуктивное занятие, но ладно.

Для начала, я захотел написать немного тестов с Mocha. Добро пожаловать в ад. Я поискал способ, как завести несколько .tsconfig.json файлов в проекте, но WebStorm не поддерживал такое, так что компилятор продолжал смешивать тесты с кодом. Я начал читать маны, примеры кода, StackOverflow. Используйте вот этот Gulp конфиг. Вам нужно скомпилировать код перед тем как тестировать, но подождите, вы же пишете тесты на Typescript? Тогда используйте вот этот Gulp плагин, правда он не очень хорошо работает с watchify. На следующий день у меня была каша из скомпилированных и склеенных файлов, папки src, dest и test, которые триггерили непонятные таски. Я перестал понимать, что происходит в фоне. Что где скомпилировалось, где лежат зависимости, должен ли я написать require или import или reference чтобы использовать вон тот файл? Да пошло оно все.



У меня было короткое, но приятное знакомство с React на одном очень маленьком проекте, и сейчас я решил попробовать его. Даже наскреб каких-то Gulp конфигов для быстрого старта. Но тут проблема оказалась с самим React. Я всегда стараюсь делать чистые модели, а React любит смешивать модели с state и properties, так что мне пришлось переосмысливать свои подходы. Мое приложение довольно простое, но использует много форм, а теперь угадайте, что я прочитал в официальной документации:

Если вы впервые изучаете фреймворк, обратите внимание, что ReactLink не нужен в большинстве приложений, и должен использоваться осторожно.
В React реализован однонаправленный поток данных: от родительского к дочернему элементу. Это следует из модели фон Неймана. Вы можете себе это представить как "однонаправленное связывание данных"

Отлично, но формам, особенно сложным, вообще-то очень нужен two-way binding. А React без плагинов и миксинов не очень хорошо работает, когда ты пытаешься использовать его для ввода большого количества данных. Тебе нужно написать декораторы для всех своих инпутов, чтобы все работало нормально. Очень скоро это начинает раздражать. Кстати, о миксинах, я использую классы из ES6, но React не поддерживает их. Да пошло оно все.

Так что же, мне нужен two-way binding, правильно? Knockout для этого подходит как нельзя лучше, и я имел с ним раньше дело. И снова, я пытаюсь использовать классы ES6, но связывание контекстов запутывает код. А без классов код запутывается еще быстрее. Javascript мешается с HTML и все это выглядит ужасно после React. Вот у вас верстка в Javascript, но это хотя бы имеет смысл, пока помогает структурировать код и держать логические элементы изолированно друг от друга.

(Немного о боли. Похоже, вне зависимости от того, что вы выберете, вам придется держать в фоне какие-то watch таски для компиляции, линтовки, тестирования. Я что-то написал в редакторе, Cmd+S сохранил, Cmd+Tab перешел в браузер, Cmd+R обновил страничку, и не вижу изменений. Угадайте что произошло? Я сделал все эти манипуляции быстрее, чем компилятор отработал, или watch таск не заметил моих изменений, или выкинул какую-нибудь ошибку.)



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

Javascript с каким вкусом желаете? Хотите транспайлер? А из какого языка? Grunt? Gulp? Bower? Yeoman? Browserify? Webpack? Babel? Common.js? Amd? Angular? Ember? Linting? О чем я сейчас вообще? Я что-то напутал? Да пошло оно все? Да, пошло оно все.

Если вы еще тут, похоже, что сделать web-приложение сегодня, это как игра в очень сложный интерактивный квест (ориг. Interactive Fiction) (а-ля Zork). Давайте вернемся в недалекое прошлое и напишем программу:

Вы в комнате с программами. Вы можете сделать только консольную программу. Вы видите язык C и язык Ассемблер
> get C language
Молодец, можешь писать свою программу

А теперь, вернемся обратно в 2016:

Вы в комнате с web-приложениями
> make web app
Вы делаете игру? Попробуйте "Unity" или "GameMaker", или еще похожий софт для web
> make web app
А вы не думали сделать десктопное приложение на web-технологиях? Попробуйте "NW.js" или, вот, "Electron"
> make web app
Появляется несколько языков. Вы видете "Javascript", "Coffescript", "Typescript", "Clojurescript", "Dart", "asm.js".
Показать остальные 127 вариантов?
> get javascript
Появляется несколько языков: "ES5" и "ES6"
> get ES6
Вы в комнате с транспайлерами. Вы видите "Babel", "Traceur" и можете только надеяться, что браузеры уже поддерживают фичи, которые вы собираетесь использовать.
Показать весь список транспайлеров? Не забудьте также прочитать книгу "Транспайлеры aka Некрономикон"
> get Babel
Вы попадаете в коридор Таск раннеров. Вы видете "Grunt" в углу, "Gulp" в другом. "Babelify" атакует вас, "Webpack" повсюду. В соседней комнате вы слышите как "Browserify" вопит и дерется с "Require.js". В вашем рюкзаке есть "транспайлинг по сохранению"
> бежим отсюда
"Yeoman" отсвечивает в соседней нише, у вас в руке есть "npm", но "project.json" сломан, на полу вы видите "Gruntfile", ".jshintrc", ".babelrc" и "tsconfig.json". Вы слышите завывания "Broccoli" и "Jasmine" вдалеке.
> Да пошло оно
Вы не можете просто "послать все", потому что семь комнат назад вы выбрали "npm install node-jsx" и это несовместимо с вашей конфигурацией "да пошло оно"
> выход.

update


Этот пост вызвал интерес на Hacker News. Некоторые комментарии мне кажутся немного ироничными:

Я всегда стараюсь делать чистые модели, а React любит смешивает модели с state и properties, так что мне пришлось переосмысливать свои подходы...

Redux

Gulp конфиг...

Webpack


В общем, разговор с комьюнити о моем "исследовательском ступоре", вызванном количеством доступных инструментов, вылился в советы попробовать и потратить время на еще парочку технологий, которые я упустил в начале своих поисков. Хорошая работа, Javascript!


Поделиться публикацией

Похожие публикации

Комментарии 148
    +3
    На самом деле так оно и есть, просто надо выбрать инструмент для себя и использовать только его, а не смешивать Gulp и Webpack, например.

    P.S. React ES6 классы отлично поддерживают миксины, просто они определяются вне класса. Не слишком удобно, но не особо мешает: https://github.com/brigand/react-mixin
      0
      мы (нормально) уживаемся с gulp и webpack
        0
        А для чего конкретно у вас gulp используется, что вебпак не умеет?
          0
          На самом деле не знаю как наши ребята дошли до жизни такой. Они, вроде, наоборот с gulp начинали и потом webpack подключили.
            0
            Я тоже так делал. Правда потом понял, что гулп используется только для запуска вебпака и убрал его :)
            0
            например concat js файлов. не модули подключить — а тупо слить два файла в один.
        +16
        Любая сложная хрень со стороны выглядит… ну, сложной хренью. Это касается любого развитого стека. Положим, хочу я сделать под вин8-10 простое приложение, которое раз в 15 минут тянет данные по http и показывает их в живой плитке. И начинается: нужно ли мне UWP или как раз наоборот, поможет ли WinJS, а может XAML, что такое assembly, чем отличается солюшен от проекта, WTF WPF? Не сомневаюсь, автору оригинала это покажется столь же смешно, как и мне его проблемы.

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

        Данная беда фронтенда (а их вообще много) в том, что люди еще пять лет назад думали, что любой дурак может наговнячить скриптик на страницу, а вот ты попробуй добейся 15 телят от одной, понимаешь, свиноматки!.. 100500k RPS от %lang_name%-приложения. Времена изменились, а люди еще нет.
          +21
          Автор имел опыт во фронт-энде, так что пример про Win8 для новичка не катит. Я вспоминаю 2007-й год. Из всего фронт-энда у нас был только PrototypeJS. А теперь десятки фреймворков, сотни инструментов. Легко потерять голову, если ты выпал из фронт-энда на 1-2 года.
            +4
            У меня тоже был опыт в десктопе, так что не катит. Но я согласен, что фронтенд развивается бурно, и зоопарк на данный момент довольно обширный.
              +5
              Лучше обширный зоопарк, чем один один единственный язык(фреймворк) от которого ни влево, ни вправо(как было раньше на мобильных платформах, да и вебе тоже).
                +1
                Хуже вендор-лока ничего нет, согласен.
              +5
              Я вспоминаю 2007-й год. Из всего фронт-энда у нас был только PrototypeJS.
              Справедливости ради, уже был выбор как минимум из PrototypeJS, MooTools, jQuery и YUI.
              Хотя мне ещё тогда казалось, что это перебор. А сейчас этот буриданов выбор расплодился в геометрической прогрессии.
                +1
                Легко потерять голову, если ты выпал из фронт-энда на 1-2 года.

                1-2 года?! После такого можно смело возвращаться обратно в школу :) Достаточно выпасть на месяц — и приветос.

                Ну на самом деле надо прямо мега-активно крутиться в теме фронтенда, отслеживать основные тренды и технологии, тогда более-менее все (почти) укладывается в голове. Но выбор слишком огромен — факт.
                  +2
                  У меня есть традиция, каждый год, в декабре я переписываю свои ERP-boilerplate`ы на свежий стек. И каждый раз надеюсь что это проживёт дольше чем год. Например в этом декабре, к своему удивлению выкинул из стека Redux и заменил на Baobab.js. Хотя ещё в ноябре думал что Redux это лучшее что может быть для организации архитектуры React приложений.
                  +1
                  Именно.

                  9 лет опыта веб-разработчиком, но три года назад полностью ушел в 3д-графику — сделал из хобби работу.
                  Все читаю хабр и постепенно понимаю, что вышло столько нового всего, что черт ногу сломит и мне уже назад не вернуться — я капитально устарел в области веба.
                  И даже разбираться во всех этих велосипедах совсем не хочется — я хочу фырфырфыр и jquery/php/mysql.

                  А если брать новые технологии из администрования — systemd, докеры, ансиблы, то вообще пристрелите.
                    +2
                    Не хочется и не надо. Взять какой-нибудь нокаут и всё делать с ним под мышкой.
                    Если только заказанный вам продукт не требует принципиального использования новомодных технологий, потому что невыполним без них.
                      0
                      Фреймворки-всего лишь инструмент. И то что вы выпали из нового потока инструментов не закрывает вам дорогу в веб. Нужно выбрать какой-либо фреймворк из доступных и начать копать в нем.
                      П.С. взгляд со сторы не веб разработчика.
                        0
                        Действительно ли использование всех этих велосипедов является необходимым требованием для разработки?
                      +11
                      Вот я тоже веб-разработчик. Где-то года три-четыре назад мне понадобилось для сайтика клиента сделать простенький виндовый нотификатор, чтобы висел в трее, опрашивал сервис по хттп и сигнализировал в случае чего. И ничего, что вы там сверху написали, не произошло, несмотря на то, что весь мой опыт программирования приложений под винду остался в 90-х, в школьных временах.
                      Я решил что сделаю всё на Visual Basic, поставил студию или что там, и следовал простым мануалам и примерам. Наверняка задача решается специалистом за час, мне понадобился рабочий день, но всё работало.
                      Это и значит, что инфраструктура и стек технологий — хорошие. Когда ты берёшь простой инструмент (знаете, для простых задач как правило удобно использовать простой инструмент) и делаешь простые вещи без магии и плясок с бубном.
                        0
                        Года 3-4 назад у меня тоже не было бы такой проблемы. И у автора поста такой проблемы не было 3-4 года назад.

                        Это и значит, что инфраструктура и стек технологий — хорошие. Когда ты берёшь простой инструмент (знаете, для простых задач как правило удобно использовать простой инструмент) и делаешь простые вещи без магии и плясок с бубном.
                        Вашими бы устами…
                          +14
                          Я решил что сделаю всё на Visual Basic, поставил студию или что там, и следовал простым мануалам и примерам. Наверняка задача решается специалистом за час, мне понадобился рабочий день, но всё работало.
                          С веб-программированием аналогично, выбираешь какой-нибудь приглянувшийся внешне фрэймворк и следуешь простым манулам и примерам.
                          Автор отморозился настроился на «zero-tolerance mode» и скакал с одного на другое, как только что-нибудь не понравится.
                          В вашем примере через два дня разработки ему надоел бы синтаксис Visual Basic и он прыгнул бы на C-Sharp, через день он захотел бы делать кроссфлатформенное приложение и перешел на Qt, через неделю ему надоел был C++, и он перешёл бы на Java, там попрыгал бы по GUI-фрэймворкам и перескочил бы на Lazarus и там бы повесился :)
                          +7
                          Положим, хочу я сделать под вин простое приложение
                          Пуск — Borland — Delphi7
                            +7
                            Вы так говорите, будто это что-то плохое.
                            • НЛО прилетело и опубликовало эту надпись здесь
                                +2
                                Надо отметить, что Object Pascal сильно проще C++.
                                А еще есть C#, который тоже сильно проще С++, а .NET есть на каждой винде.
                                • НЛО прилетело и опубликовало эту надпись здесь
                                    +2
                                    > под ВИН
                                    > ПРОСТОЕ

                                    Из этих двух критериев можно сделать вывод — не заморачиваться с кроссплатформенностью и идти путем наименьшего сопротивления.
                                    Если дело будет идти к кроссплатформенности, конечно, переписать на Qt — главное выбрать правильный момент.
                                    • НЛО прилетело и опубликовало эту надпись здесь
                                        0
                                        Затем что задача поставлена именно так:

                                        Положим, хочу я сделать под вин простое приложение
                                        • НЛО прилетело и опубликовало эту надпись здесь
                                            +2
                                            Ничего. На D7 еще проще.
                                    0
                                    А еще есть C#, который тоже сильно проще С++

                                    Ага, а документация по нему в 3 раза больше страниц. Не уверен, что C++ проще к тому же сейчас в С++ то же много приятных и простых плюшек для начинающих. :)
                                      0
                                      Ага, а документация по нему в 3 раза больше страниц

                                      И это замечательно. Больше стандартных возможностей — больше документации.
                                        +1
                                        К документации по C++ сразу добавляйте документацию по boost и Qt (дабы покрыть библиеотками тот же функционал, что.NET). Где больше теперь?
                                          0
                                          Я все же сомневаюсь, что этого достаточно, чтобы сказать «С++ сложнее С#».
                                          По своему опыту я могу сказать, что на С# можно сесть что-то писать по делу, не имев с ним дела до этого. С С++ у меня так не получилось.

                                          Не уверен, однако, что этого достаточно, чтобы утверждать обратное.
                                  +15
                                  Бро, ты — это я. Тоже недавно как зарылся, так и не смог закончить свой pet-project.
                                    +12
                                    Что с вами не так? Берите инструменты которые вы знаете. Разобраться во всём нереально.

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

                                    На собеседованиях я люблю спрашивать простую задачку: вам надо сделать аналог bit.ly, у вас есть три ЦОДа в трех странах. С чего вы начнете?
                                    После пары минут страданий люди начинают выбирать базу данных и почти никогда это не бывает чертов простой MySQL, постоянно пытаются туда засунуть любое говно которое они хотят попробовать лишь вы выпендриться.

                                    А проблемы начинаются когда ты их спрашиваешь, окей, вот твоя MongoDB которую ты выбрал. Как ты будешь реплицировать данные на три ЦОДа? Мало кто знает что у неё есть replica-set. Еще меньше людей смогут ответить на вопрос «Окей, что делать если реплика развалилась и одна из нод встала в позу»?

                                    Хватит ныть. Берите те инструменты которые вы знаете.
                                      +8
                                      Как ты будешь реплицировать данные на три ЦОДа? Мало кто знает что у неё есть replica-set. Еще меньше людей смогут ответить на вопрос «Окей, что делать если реплика развалилась и одна из нод встала в позу»?


                                      Это задача dev-ops, а не разработчика. Задача разработчика — правильно сформулировать вопрос для dev-ops: эй, мы сможем реплицировать монгу в три региона? Да? Ну ок, спасибо!
                                        +11
                                        Плохо, когда человек сходу отметает задачу потому что «она для dev-ops». Ну вот, на собеседовании у тебя под рукой нет девопса, как его может не быть в реальной жизни, а надо принять решение используя собственные знания и опыт.
                                        Чем глубже ты погружаешься в специализацию и заостряешь её, тем да, ты более крутой специалист, но тем меньше ты востребован на рынке, потому что тебя надо загружать узконаправленными специальными задачами и всё.
                                          +2
                                          misato — всё правильно сказал.

                                          Yeah, дорогой, смотри, вот ты пишешь код и не решаешь задачи dev-ops. А тут раз херакс три цода нарисовались. А как теперь нужно писать код что бы это нормально взаимодействовало через океан? Блокировочки, дата-чекинг, вот это всё? Девопс? :)

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

                                            • Какую нагрузку вы планируете держать? (нужны тесты производительности в реальных условиях, возможно из прошлого опыта)
                                            • Будет много записей? Если да, то есть ли место для них? Может нужен движок с компрессией? (нужно иметь представление о существующих движках различных БД и как они работают)
                                            • У вас 1 или несколько ДЦ? Нужна БД с репликацией «из коробки» или можно настроить с помощью костылей? (нужно иметь представление о методах репликации в различных БД)
                                            • У вас критичные для записи данные? Нужны транзакции?
                                            • Вы готовы платить за поддержку БД или надо только из opensource выбирать? (вообще вопрос на уровне начальства)
                                            • Как эта база вообще работает внутри? Много памяти она жрёт? У вас вообще есть много памяти?
                                            • У вас HDD или SSD диски?
                                            • Какая скорость ответа приемлема для вас?
                                            • Какие запросы вы будете использовать? Можно ли спроектировать эту БД так, что бы они были возможны и эффективны?
                                            • И ещё 100 вопросов

                                            Команды создаются для того, что бы специалисты из различных областей сотрудничали вместе и принимали более взвешенные решения. Если вам надо принять такого рода решения, то надо пообщаться хотя бы с сис. админом, предъявив ему список требований, возможно с начальством после него. И когда вы примите решение, вы придёте и скажите программисту: используем Mongo, документация у них на сайте. Хорошему программисту этого будет достаточно.

                                            Я бы на месте вашего программиста использовал то, что мне интересно, что бы получить необходимый опыт за ваш счёт (если бы вы мне дали возможность принимать такие решение). И дорогая память, которую будет жрать БД, меня бы вообще не беспокоила, это же деньги компании, а не мои.
                                              +1
                                              Да, простите, оговориться надо было сразу — последние 1.5 года я работаю в стартапах. Несмотря на сильные команды, людей мало и все решают всё. Обычно у нас нет тикетов которыми можно кидаться в админов и лоад-тесты крайняя редкость, обычно всё подчиняется парадигме "bug driven development" и это нормально в условиях стартапа когда бежать надо максимально быстро.

                                              И деньги в стартапах, в общем то, общие.
                                              Отсюда и мировоззрение которое коробит анусы и поджигает лица… Или как то так.

                                              Но по факту это дает реальный контроль над системой и позволяет профессионально расти каждый день, достигая серьезных левелапов.
                                          +7
                                          Dev-ops означает development & operations, так что это не отдельная специальность, а одно из направлений для развития разработчика
                                            +5
                                            К программисту претензий нет, запрограммировано намертво...

                                            +27
                                            Это пет проекты. На них обычно пробуют что-то новое.
                                            И проблема в том, что выбрать что-то новое из этой кучи безумно сложно.
                                              –9
                                              Я вас понял, вы говорите о программировании ради программирования — это нормально, никаких проблем. Я же имел немного другой посыл: пет-проект может делаться не только ради программирования, но в т.ч. как и средство заработать денег более или менее пассивным способом. Например раньше было популярно заводить СДЛ и зарабатывать на SEO-траффе. Чем не пет-прожект? :)
                                              +13
                                              На собеседованиях я люблю спрашивать простую задачку: вам надо сделать аналог bit.ly, у вас есть три ЦОДа в трех странах. С чего вы начнете?
                                              После пары минут страданий люди начинают выбирать базу данных и почти никогда это не бывает чертов простой MySQL, постоянно пытаются туда засунуть любое говно которое они хотят попробовать лишь вы выпендриться.
                                              Простое решение такой задачи — взять постгрес с рельсами и запустить на двух серверах в одном цоде. Вы ведь не сказали, что нужно обязательно использовать все три цода.
                                                –1
                                                Офигительно :D
                                                Да, можно.
                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                    –3
                                                    Потому что выебоны. Это же собеседование — надо показать какой ты крутой.
                                                    Обычно я беру людей которые отвечают простыми технологиями с прогнозируемым поведением и людей которые могут внятно ответить что они будут делать если с технологиями которые они взяли будут реальные проблемы.

                                                    Если вы мне на собеседовании ответите PHP + MySQL на такой задаче — я вас в сосочки расцелую за адекватность.
                                                      +6
                                                      Так пишете, будто PHP + MySQL — это единственный набор инструментов, на котором можно сделать быстро и на коленке. И если человек ответил PHP + MySQL, то можно не спрашивать его что делать если ваш механизм репликации дал сбой или один из серваков накрылся? И не надо спрашивать как можно будет распределить нагрузку между странами?

                                                      Может для кого-то быстрее и качественнее будет сделать на NodeJS + MongoDB + AngularJS, а вы сразу его выпендрежником посчитайте и собеседование для него усложнится или станет непроходимым вовсе. А все почему? Потому, что вы ищите PHP разработчика и хотите использовать везде в своих проектах MySQL, но в вакансии нигде не написали об этом? А может ваш кандидат плохо знает эти инструменты, но в совершенстве овладел стеком RoR + PostgreSQL?

                                                      И почему вы считаете, что MySQL прост? Наверняка есть люди, которые никогда с ним не работали и для них простым будет тот инструмент, с которым они всю жизнь работали, возможно это будет даже Oracle или Firebird. Они, на ваш взгляд, сложнее или проще чем MySQL?

                                                      Модный инструмент — это не всегда только модный инструмент, который люди используют только ради того, чтобы использовать.
                                                      Я бы, например, использовал для упомянутой вами выше задачи именно MongoDB в качестве СУБД, т.к. довольно хорошо знаю как с ней работать и она умеет реплицироваться и шардиться из коробки (чем не может похвастаться MySQL). Если реплика сдохнет, то это вообще не проблема. А для надежного шардинга можно использовать схему с shard + replica set. Если сдохнет реплика в шарде, то это опять же не проблема, а вероятность выхода из строя целого шарда, например, с тремя репликами — уже маловероятна.

                                                      Какое-то предвзятое у вас отношение к тем кто умеет или хотя бы знает, что можно использовать какой-то не стандартный на ваш взгляд (PHP + MySQL) набор инструментов, который по мнению кандидата будет подходить лучше для решения этой задачи. Не всегда же кандидаты глупее вас. Тем более, что это тестовое задание же, в реальности человек придет в проект с уже подобранным стеком технологий и будет решать задачи на нем (если вы, конечно, не ищите первого человека в проект, который еще не начат).
                                                        –4
                                                        Не единственный. Не перегибайте, можно любой стэк взять если ты действительно его знаешь, но речь в основном о PHP-разработчиках, поэтому такой перекос в эту сторону.

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

                                                        Предвзято судить о человеке не нужно, согласен. Но опять же, хороших разработчиков на nodejs + mongodb крайне мало, особенно среди собеседуемых на позицию «PHP middle», например. Про это говорится в вакансии естественно, описывается, и проект, и стэк текущий, и стэк планируемый, и задачи которые нужно будет решать. У человека который приходит на собеседование есть исчерпывающая информация о том с чем ему прийдется работать.

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

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

                                                        Речь не о том что не надо брать Mongo, Redis, Node, etc — речь о том что люди пытаются использовать, даже в теоретических вопросах, то о чем имеют слабое представление. Были ребята которые идеально отвечали и на таких архитектурах, это не нонсенс, просто их реально мало. И обычно такие технологии всплывают в контексте «я чуть-чуть знаю что-то отличное от PHP+MySQL посмотрите что я крутой».

                                                        Вы снова перегибаете. Если человек на Go с Redis всё построит так что будет работать — это будет круто. Задача не для того что бы «вальнуть» кандидата, а на то что бы понять какой стэк он привык использовать и насколько глубоко он его знает. Повторюсь что я привел пример распространенного поведения на такой задаче: взять технологию которая покажет крутость кандидата, но завалить все вопросы которые уходят в углубленное понимание проблем.
                                                          +4
                                                          речь в основном о PHP-разработчиках
                                                          А те, с кем вы общаетесь, об этом знают?
                                                            –2
                                                            Вы ваще читаете что я пишу?)
                                                              0
                                                              Ну если они читали описание вакансии — то знают
                                                          +5
                                                          "Потому что выебоны. Все эти новомодные автомобили — это только показать какой ты крутой. Я вот тоже беру на работу только водителей на конную упряжь. Или людей которые могут внятно ответить что они будут делать если на их автомобиль упадет метеорит. "

                                                          Вот где-то так это выглядит. Но надо понимать, что технологии не стоят на месте. И описанные вами проблемы большинство людей в жизни не встречали, не важно на mysql или на mongodb.
                                                          +2
                                                          Потому что "просто" — крайте субъективное понятие, оценивающее не абсолютную сложность информации в битах, а скорее сложность относительно знаний и умений определенного человека. К PHP и MySQL я последний раз притрагивался лет 5 назад. Изучать его по-новой ради сокращалки ссылок — да я с таким же успехом на каком-нибудь C# это напишу, его я тоже уже нифига не помню.

                                                          Кстати, по поводу абсолютной сложности:
                                                          Nginx + PHP + MySQL + Apache
                                                          Nginx + RoR + Postgresql

                                                          Мой способ использует на 25% меньше технологий :)
                                                            0
                                                            По задаче реализовать url shortener сервис можно извратиться и написать на Nginx + MongoDB, ещё -33% технологий от вашего способа. Будет мега быстро и надёжно, но очень сложно поддерживать :)
                                                              +1
                                                              По сути, нам даже простой словарь подойдет для хранения, "короткая ссылка" -> "длинная ссылка". Redis так и просится.
                                                                0
                                                                Если обновления такого словаря не нужны, то можно только nginx. Мы делали такую штуку для редиректов нескольких миллионов урлов, после нескольких часов работы nginx стал запускаться за вменяемые 5-7 минут и отвечать за <10мс.
                                                        0
                                                        пытаются туда засунуть любое говно
                                                        окей, вот твоя MongoDB которую ты выбрал.

                                                        Надо признать, что mongoDB не такое уж и говно)
                                                          +1
                                                          Задача реплицирования данных в MongoDB довольно таки не сложная. Намного сложнее хорошо настроить шардинг, чтобы потом не было больно. Но, как мне кажется, такая же по боли проблема будет и в реляционных СУБД.
                                                          Возможно вы опечатались и имели ввиду sharding, а не replica set.
                                                            +1
                                                            А как вы переключаете мастера у MySQL? Если галера, то как боретесь с блокировками при большом количестве записей?
                                                              0
                                                              Так можно архитектуру сделать: https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-replication-multi-master.html

                                                              а так разобраться с коллизиями: http://scale-out-blog.blogspot.md/2012/04/if-you-must-deploy-multi-master.html

                                                              Но для аналога bit.ly никакие блокировки не нужны, там только INSERT/SELECT же.
                                                                0
                                                                Ненене, такой кольцевой «мультимастер» — это путь в ад. Так не нужно делать примерно никогда, а если нужно — то лучше уж галера.

                                                                А вот если галера — то сразу возникают те самые блокировки. Это не блокировки, которые делает пользовательский код, это блокировки, которые возникают в самой галере в переходные моменты, когда такая-то упячка с сетью происходит.
                                                                  0
                                                                  Если вы про репликацию между кластерами, то её можно асинхронной сделать.
                                                                    +1
                                                                    Можно конечно. Тогда встаёт вопрос, как переключать мастера/выбирать нового после падения старого. Чувствуете, мы замкнули круг комментариев? :)
                                                              +11
                                                              Я фуллстак веб-разработчик и лид в течении последних трех лет с резюме из двух листов А4 со списком технологий прочитав которые люди не верят что я это всё умею

                                                              • Microsoft word
                                                              • Microsoft excel
                                                              • Microsoft powerpoint
                                                              • Microsoft paint
                                                              • Microsoft outlook
                                                              • Уверенный пользователь ПК
                                                              • ???
                                                              • PROFIT
                                                                +3
                                                                веб-разработчик

                                                                Microsoft FrontPage забыли
                                                                  –2
                                                                  Именно так, еще немного умею в Paint рисовать.
                                                                    +2
                                                                    Он там есть. Знаю я вас, тимлидов 20-ти летних :)
                                                                      –2
                                                                      Ну я же говорил — никто не верит :)
                                                                      Хотя зря, чекается элементарненько.
                                                                        0
                                                                        А я и проверил и убедился :)
                                                                –4
                                                                Можно похоливарить на тему SPA is wrong way.
                                                                Если не делать SPA, то как-то легче становиться жить, меньше кода на JS, меньше тестов на JS, шаблонизатор за счёт бэкэнда, бандлы и минификация тоже на любимом бэкэнде, и не надо никаких Grunt, Gulp и т.п.
                                                                В итоге на фронтэнде нужен наипростейший two-way model databinding, да всякие разные компоненты календарей, селектов и т.п.
                                                                  +1
                                                                  Мне кажется что зло не в модели spa, она является естественным продолжением сайтов пологающихся на новые возможности браузеров. Проблема в простоте среды, в которой создать новый фреймворк проще чем написать регулярку для email ;) Но, что не менее важно, в этом же и плюс. Все лишнее можно не использовать и остаться один на один с нодой и браузером.
                                                                    0
                                                                    http://roca-style.org/ тут описан такой подход
                                                                    0
                                                                    я вообще-то в основном собирался получить удовольствие, так что настроился на «zero-tolerance mode» (прим. переводчика: рука не поднялась переводить такую чудесную фразу). Как только что-то начинало раздражать, я бросал это и искал другое, лишь бы ничего не мешало.
                                                                    Собственно вот и вся проблема.
                                                                    И это еще неплохо, что автора не раздражало набирать текст на стандартной клавиатуре, а то до сих пор бы и статью свою не написал. Ведь столько возможностей — сенсорная, механическая одного вида, механическая другого, виртуальная, оптическо-лазерная… методы набора опять же — свайп, т9… способы подключения — вайфай, блютуф, провод. И во всех вариантах что-то раздражает, не так ли? Всюду надо прилагать усилия:)

                                                                    Надо что-то сделать — надо брать первый попавшийся распространенный инструмент и делать, по пути соглашаясь на неудобства и компромиссы, т.к. «миллион леммингов не может ошибаться, по крайней мере сильно». А искать идеальный вариант — это никогда не закончить проект. Мы знаем. Мы так уже 10 лет не можем закончить свой pet-project, но при этом назаканчивали навалом огромных проектов для заказчиков.
                                                                      +9
                                                                      "zero-tolerance mode" (прим. переводчика: рука не поднялась переводить такую чудесную фразу)

                                                                      Режим нулевой терпимости, довольно распространенный термин.
                                                                        +1
                                                                        Чувак просто еще не дорос до Тех Лида (что довольно странно с учётом заявленного опыта).
                                                                        Тех Лид понимает, что зачем, он не обращает внимания на шелуху, он умеет говорить 'нет'. Потому как он уже все эти мучения прошел не по разу и звоночки в технологиях видит. Это я к тому, что учиться надо не ноя а стиснув зубы и думая головой.

                                                                        П.С. В TS упаковка в один файл это удобство для редких случаев, когда именно что надо упаковать все или ничего. Это не его задача, в первую очередь он выдает файлы .ts => .js один к одному, потому и настройки упаковки там особой не будет.
                                                                        П.П.С. Ну и еще автор оригинала просто и привык к C# где экосистема слаженная и 90% боилерплейта за тебя уже написано. JS к этому тоже идет, но понадобится пару лет пока все индастри стандарты и конвенции утрясутся.
                                                                          +3
                                                                          C# где экосистема слаженная и 90% боилерплейта за тебя уже написано. JS к этому тоже идет, но понадобится пару лет

                                                                          Какой Вы оптимист!
                                                                          Подозреваю, через пару лет у нас будет зоопарк зоопаркович, а JS будет в спецификации ES7 и тоже будем ждать стандартов-конвенций.
                                                                            +1
                                                                            В первую очередь, нужен тулинг, который мягко но настойчиво приведет большинство к конвенциям взяв на себя создание бойлерплейта. В этом плане у меня большие надежды на VS Code, как среду которую сами же JS разработчики смогут расширять с использованием всех привычных им инструментов. Несколько лет назад большой скачок в инструментах разработки JS и фронт-энда вообще произошел когда JS разработчики получили одну платформу для инструментов в лице NodeJS. Теперь дело за общим IDE (если быть точным, за IDE который закрепит стандарт для расширений на базе NodeJS).
                                                                              0
                                                                              А как таким тулингом может стать редактор? Больше надежды на то, что Yeoman очухается, либо появится альтернатива.
                                                                                0
                                                                                А как таким тулингом может быть что-то еще? Большинство разработчиков консоль не особо любит. Даже когда такой проблемы нет, нажать F5 быстрее и проще чем вбивать «npm install --dev http-server», «node bin/http-server». Быстрее даже чем «http-server», если машина ваша и он уже стоит. В более сложных примерах UI будет еще удобней (IMHO). И это только верхушка айсберга. Можно ведь сразу открывать роут контроллера в редактируемом файле, если плагин под Express установлен. Yeoman это как раз первый шаг, он вполне может занять место кнопки «new project», а после и «new controller», «new directive», «new component» и т.д.
                                                                                  0
                                                                                  Ну, насчет нелюбви к консоли — очень спорно. Могу привести пример наоборот: ввести

                                                                                  ./configure && sudo make install

                                                                                  и пойти пить смузи, гораздо быстрее чем тыкать кнопочки в gui.
                                                                                  Возможности консоли (зависит, разумеется от шелла, но я пользуюсь zsh и говорю за себя) огромны и ограничиваются только фантазией. Надоело вводить таски того же gulp вручную

                                                                                  npm i --save gulp.plugin.zsh && source ~/.zshrc

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

                                                                                  ps.
                                                                                  насчет ./node_modules/.bin/some_bin, добавьте себе в PATH ./node_modules/.bin относительным путем :)
                                                                                    +1
                                                                                    Окей, но речь ведь не только о нас с вами? Я сейчас оглянулся вокруг себя и вижу около 50 разработчиков на Java / C#. Захотят ли они после Visual Studio / IDEA работать через консоль? По опыту — нет, вообще никак. Привычка к этому есть только у самых матерых JS разработчиков, но даже в этих командах их зачастую 1-2 из 5.
                                                                                      0
                                                                                      Согласен, что это более характерно для фронтенда, но причины как мне кажется те же, что и у появления термина "fullstack", у нас вроде специальность одна, а знать надо много разного, и это разное диктует какие-то процессы, инструменты, поэтому пользуемся самым универсальным ui — консолью.
                                                                                        0
                                                                                        Я большую часть времени провожу в SublimeText+консоль и каждый раз сталкиваясь с VS думаю, какая же она неудобная.
                                                                                          0
                                                                                          Java-код пишу в Idea, но мне вот лично неудобно писать фронтенд в ней (пишу всё в Atom'е).
                                                                                          Основные причины: медленная скорость и низкая отзывчивость интерфейса и
                                                                                          не всегда можно настроить проект и всякие пути в нём так, чтобы не было предупреждений или ошибок. Например, я поставил ангуляр через npm. Подключаю его через es6 import: import angular from 'angular'; Ещё я использую webpack и хочу подключить бутстраповский less в свой: @import "~bootstrap/less/bootstrap"; Вот что в итоге:

                                                                                          картинки
                                                                                          image
                                                                                          image

                                                                                          Мелочь, но неприятно.

                                                                                          В итоге, так или иначе приходится работать в консольке. Например, мне удобнее набрать npm i -S some-module нежели делать это через GUI Идеи.
                                                                                          Для запуска/сборки/тестов достаточно настроить секцию scripts в package.json и запускать нужное командой npm run %имя_задачи%.

                                                                                          Компиляция (в том числе в live-режиме) less/sass/ts/coffee/es2015 и т.д. настраивается в сборщиках/бандлерах, что заменяет file watchers в идее.

                                                                                          В итоге, я просто настраиваю webpack на разные окружения. В dev-режиме у меня запущен dev-server, который при изменении файлов пересобирает проект (вернее, только необходимые кусочки, вебпак круто отслеживает зависимости) и перегружает страницу (или её кусок) в браузере. Для prod добавляются всякие минимизаторы, префиксеры и т.д.
                                                                                          Сборка/запуск тестов запускается одной командой.

                                                                                          Ну а всякие плюшки, типа stylecheck, linters и др. есть и в атоме. Да, нет такого же автодополнения, как в идее. Но и без него нормально живётся.
                                                                                    +1
                                                                                    ну уж нет, лучше оригинал (Atom) пускай допилят.
                                                                                      0
                                                                                      Ну уж нет почему? И кто допилит? На VS Code потому и надежда что его уже сейчас двигают разработчики из Гугла и Микрософта. Вот что называется «опенсорс объединил непримиримых».
                                                                                      Кроме того, суть не в самом IDE, главное — стандарт плагинов. С учетом того, что и VSC и Atom базируются на Electron, есть все предпосылки для совместимости.
                                                                                        +1
                                                                                        MS к сожалению не любит слово совместимость. Добавят какие то дополнительные "плюшки" к плагинам VS Code которых в Atom нет и прощай совместимость. Все перепрыгивают на VS Code, M$ делают его закрытым. Вуаля, типичный microsoft. Это в случае если продукт станет популярным.
                                                                                          0
                                                                                          «Все перепрыгивают на VS Code, M$ делают его закрытым.»

                                                                                          И в руках у сообщества остается форк, как было с IO.js

                                                                                          По вашей логике выходит, что никакой опенсорс нельзя использовать.
                                                                                            0
                                                                                            Что толку использовать форк если M$ продолжает добавлять крутые фичи в свой проект, благодаря чему все разработчики продолжают сидеть на версии от MS?
                                                                                +1
                                                                                Вы в комнате с web приложениями

                                                                                Yeoman как он есть.
                                                                                  0
                                                                                  Yeoman тоже та ещё помойка. Начнёшь искать генератор под нужный стек — в одном тесты не запускаются, в другом структура файлов не такая, в третьем не хватает зависимостей, надо вручную добавлять… и т.д. Приходится или смириться и допиливать или самому с нуля собирать.
                                                                                  +17
                                                                                  Напомнило:
                                                                                  <_valexey_> jezzarax: там порог вхождения выше
                                                                                  <_valexey_> тебе на asp.net'е hello world настрогать за 10 минут научиться можно (8 минут на запуск студии, 2 на кодинг)
                                                                                  <_valexey_> на java такое не прокатит
                                                                                  <_valexey_> пока скачаешь одну библиотеку, пока другую, пока их xml конфигом на полметра склеишь, пока маппинг для hibernate настроишь, пока базу нарисуешь, пока веб-сервисы поднимешь
                                                                                  <_valexey_> вроде и hello world пишешь, а уже две недели прошло и всем кажется, что это учетная система для малого бизнеса
                                                                                    +1
                                                                                    Vaadin надо было еще упомянуть, отдельно.
                                                                                      0
                                                                                      Вы когда в последний раз проект на asp vNext после очередного обновления студии поднять пытались?)
                                                                                        0
                                                                                        лично — уже давно. Но маты иногда слышу)
                                                                                      –5
                                                                                      "Я web разработчик и я уже 10 дней не могу залить фундамент для дома"
                                                                                      "Я web разработчик и я уже 10 минут не могу приготовить тесто для хлеба"
                                                                                      "Я web разработчик и я уже 10 дней не могу связать шарф"

                                                                                      Так бывает, когда выходишь за рамки своей специализации.
                                                                                        +2
                                                                                        А где вы здесь увидели выход за рамки специализации? Автор просто выпал на пару лет из контекста.
                                                                                          0
                                                                                          Это ведь одно и то же, просто иными словами.

                                                                                          Автор сам пишет, что занимался бекендом, но внезапно полез во фронтенд.
                                                                                        +6
                                                                                        Я вот то же в последние пару недель столкнулся, решил выбрать для проекта хорошую библиотку для рендеринга UI(Мочи больше нет рендерить все руками на JS). Это просто зоопарк. Я попробывал React.js, React +TS, Angular.js, Angular 2, emder.js. knockout.js и прочитал еще о такой куче всего что голова кругом. И все они не совместимы и выбрать что-то одно это как хождение по миному полю.
                                                                                          0
                                                                                          deleted
                                                                                            +1
                                                                                            Подолью масла в огонь, посмотрите ещё на riot.js.
                                                                                              +1
                                                                                              Тогда уж и на ractive.js!
                                                                                                0
                                                                                                Я в целом плюсую, попробовал riot.js + typescript на одном проекте. Очень многое понравилось (даже хочется написать отдельный пост про эту связку и про отношение к разработке без магии), но разражающие косяки тоже встречаются. Самой большой бедой лично для меня была невозможность йелдить строки внутри таблиц.
                                                                                                  0
                                                                                                  Всем спасибо, вы облегчили мой выбор :)
                                                                                                  Просто проект большой, существуещего JS кода уже 700 000 строк, вот хочется взять что-то удобное хотя бы для рендеринга.
                                                                                            +1
                                                                                            Так тут вопрос в постановке задачи.

                                                                                            Если цель автора написать приложение, то нужно писать на более-менее подходящем/знакомом наборе технологий
                                                                                            Если цель — найти ИДЕАЛЬНЫЙ набор технологий, то очевидно, что сложность будет именно в многообразии технологий.

                                                                                            Получается что автор поставил себе одну задачу и удивляется что не выполнил другую.
                                                                                              +9
                                                                                              обновить свой инструментарий, а еще просто немного развлечься. Вроде ничего сложного.

                                                                                              Используйте вот этот Gulp конфиг.

                                                                                              Даже наскреб каких-то Gulp конифгов для быстрого старта.

                                                                                              Блин, да выучи ты уже галп и напиши свои конфиги. "Я шеф повар и я уже 10 дней не могу приготовить простейший обед. В мусорке я нашел несколько рецептов, смешал их и у меня ничего не получилось."

                                                                                              Такое ощущение, что чувак хочет написать приложение с модными фичами, но разбираться в них не хочет, хочет чтобы "новые модные фичи" были в единственном числе и уже стандартом.

                                                                                              Таких как он золотая рыбка отправляла подумать над разбитым корытом.
                                                                                                +3
                                                                                                Все верно написано.
                                                                                                  +1
                                                                                                  неа, неверно. Я вот выше в пример Java приводил. У каждого инструмента своя зона применимости. Чтобы сделать небольшой бложик для друзей, не надо использовать Spring. Нужно просто взять Wordpress и сделать.
                                                                                                    +1
                                                                                                    Как автор должен был заранее понять "зону применимости" каждого инструмента?
                                                                                                    Где эти зоны описаны подробно и четко?
                                                                                                      +1
                                                                                                      Просто нужен другой подход. Не "берем всё самое новое-сложное и пытаемся сделать простое приложение", а "пытаемся сделать простое приложение начиная с простых инструментов". А вот если уже не получается — наслаиваем библиотеками и/или технологиями. Не нужно ничего нигде описывать.
                                                                                                        +1
                                                                                                        Интересно, хоть один фреймворк описывается в документации как "сложный"? Помню, как преподаватель в Политехе, рассказывая про очередную библиотеку, название которой начиналось с "simple" иронизировал по поводу совершенно неумеренного использования этого слова.
                                                                                                          0
                                                                                                          Любой неизвестный фреймфорк (если речь о фреймворках, а не о микро-библиотеках, которые решают определённую задачу и заводятся с полпинка) заведомо сложный. В любом случае гораздо сложнее чем известный.
                                                                                                          +2
                                                                                                          Все равно непонятно. Ну хорошо, вот мы подошли той самой точке, когда "уже не получается" — дальше что делать, куда идти? Путей множество, выбор крайне неочевиден и на всех них в изобилии рассыпаны подводные камни и грабли.

                                                                                                          Вот вспомним JS нескольколетней давности, а именно эпоху jQuery, MooTools, Underscore.js и тому подобный вещей — тогда как было?
                                                                                                          Быстрое знакомство с API (именно так — знакомство, а не изучение, потому что в основе лежат довольно очевидные концепции) и почти сразу пользуемся. Оверхед (имею в виду мозговой оверхед, а не такты процессоры или байты памяти) почти равен нулю.
                                                                                                          Нынешние решения нужно довольно долго изучать.

                                                                                                          Я почти не могу представить ситуацию, когда бы jQuery не оправдал ожиданий — в том смысле, чтобы он оказался чем-то не тем, чем ожидалось. Его в какой-то момент начинает не хватать, это верно, но этот момент всегда вполне ожидаем и не является сюрпризом. Библиотека работает ровно так и настолько, как от неё ожидаешь.
                                                                                                          Нынешние мало того, что нужно долго изучать — довольно долгое время ты не знаешь, будет ли это оправдано в конечном итоге? Фреймворк запросто может не оправдать ожиданий, надоесть плясками с бубном, утомить подводными граблями и оказаться неподходящим. И всё будет выброшено, начинай сначала.
                                                                                                            0
                                                                                                            Ну хорошо, вот мы подошли той самой точке, когда «уже не получается» — дальше что делать, куда идти? Путей множество, выбор крайне неочевиден и на всех них в изобилии рассыпаны подводные камни и грабли.
                                                                                                            «Крайне неочевиден выбор» тогда когда вы начинаете решение задачи с изучения «новых-сложных фреймворков», типа как автор. А когда вы уже решили 90% задачи на том же, как вы пишете, jQuery — то поиск необходимого инструмента для решения оставшихся 10% — уже не кажется таким сложным, разве нет? Ведь речь как раз об этом.
                                                                                                            Как писал хабраюзер Awake
                                                                                                            Чтобы сделать небольшой бложик для друзей, не надо использовать Spring. Нужно просто взять Wordpress и сделать.
                                                                                                            — простым задачам простые (≈известные) инструменты.
                                                                                                            А если задача и есть изучение фреймворка — ну, значит нужно стиснуть зубы и изучать
                                                                                                              0
                                                                                                              Так а что именно-то изучать? :) Какой из стапиццот штук?
                                                                                                              Интернет тут не очень помогает, потому что там много субъективных мнений нравится/не нравится, а вот обоснований "почему" — либо вообще нет, либо они малопонятны для неофита (неофита именно в этом фреймворке, а не разработке вообще).
                                                                                                                +2
                                                                                                                Вот вам готовый алгоритм:
                                                                                                                1) Составляете список из фреймворков, хоть как-то похожих по описанию на нужный вам.
                                                                                                                2) Сортируете по кол-ву звезд на гитхабе в порядке убывания, берете первые три.
                                                                                                                3) Подбрасываете монету, не меньше двух раз (между 1 и 2, между победителем и 3).
                                                                                                                4) Провидение за вас всё решило, пользуйтесь.
                                                                                                                5) Если через N дней выбранный фреймворк всё еще кажется несносным — исключите его из списка и переходите в п.2

                                                                                                                Готов поспорить, что результат в среднем будет не хуже, чем после прочтения кучи холиваров со сравнениями.
                                                                                                          0
                                                                                                          Автор должен решить, что пришло время поиграться со всеми решениями и попробовать каждое из них. После чего, обладая опытом, уже может сам решить, какой из инструментов ему использовать в новом проекте.
                                                                                                      –2
                                                                                                      Это как раз та проблема, об одном из возможных решений которой я сообщал в последнем подразделе («Обобщение метода») моей блогозаписи «Двенадцать простых начальных шагов разработки модуля для Node.js».
                                                                                                        0
                                                                                                        Тут скорее не о проблеме выбора, а о том, что все варианты со своими компромиссами. Лично я сейчас в похожей ситуации как автор. Но последнее, что я осилил это на одном проекте отказаться от MochiKit и перейти на VanilaJS. Все модные фреймворки мне категорически не нравятся.
                                                                                                        +1
                                                                                                        Я web разработчик, и кажется я отстал от жизни, поэтому, старый добрый JS. И никаких там gulp, grunt, JSMVC…
                                                                                                          +1
                                                                                                          Вы сразу пишете в одном файле в минифицированном виде с source map'ами?
                                                                                                            0
                                                                                                            Никаких source map'ов, минификация в конце каким то старым минификатором.
                                                                                                              0
                                                                                                              Если нужно подключить пару jquery-плагинов на страницу и суммарный объем js-кода небольшой, то это нормально. Как только проект побольше, то без полезных инструментов разрабатывать и поддерживать его становится намного сложнее. А тенденции нынче идут в сторону сложного фронтенда...
                                                                                                                0
                                                                                                                Ну, справляюсь пока, куча js файлов, из которого генерится один. Да и на самом деле уже немного отошел от этого, теперь только админ.
                                                                                                            +2
                                                                                                            Уж больно много таких как вы. Боятся галпа как огня, а потом подключай каждый js файл вручную в индекс и следи за их порядком и все в (function() {})(); обязательно. jshint? sass? сжечь, сжечь!
                                                                                                            Прям хоть пиши "gulp для старичков"..
                                                                                                              0
                                                                                                              В подходе «каждый файл вручную в индекс» особенной беды нет; это даже (если я правильно помню) позволяет браузеру распараллелить скачивание их.

                                                                                                              Необходимость «(function() {})();» не слишком значительна, если глобальные переменные в скриптах не пересекаются.

                                                                                                              Вот JSHint как раз необходим; более того: как раз JSHint-то и станет следить за тем, вписаны ли (предназначенные для него) декларации глобальных переменных (наподобие «/* global $, _, s, window, singleMessage:true */»; пример этот реален) в начале файла. (Затем достаточно будет пристально проглядеть начала файлов, чтобы убедиться в том, что глобальные переменные в скриптах не пересекаются — дело это минутное.)
                                                                                                                +5
                                                                                                                «Необходимость «(function() {})();» не слишком значительна, если глобальные переменные в скриптах не пересекаются.»

                                                                                                                А мыть руки после вскрытия перед принятием родов не обязательно, если они не выглядят грязными.

                                                                                                                Изолированный scope это даже не вопрос, это должно быть доведено до автоматизма даже у новичка.
                                                                                                                  0
                                                                                                                  Я говорю не про то, что
                                                                                                                  старый добрый JS
                                                                                                                  плох, нет. Я говорю что пора бы двигаться дальше, однако очень много кто остается при своем "старом добром JS" даже в новых проектах.
                                                                                                              +5
                                                                                                              Напомнило шуточный заголовок поста — «Сто лучших web-фреймворков!».
                                                                                                                +4
                                                                                                                … месяца
                                                                                                                +1
                                                                                                                После C# и WPF web стек боль, но желание освоить и пощупать Vnext Asp.net Core было хорошее.
                                                                                                                Прошел какой-то год и я уже не пугаюсь слов gulp и bower, попробывал angular, ionic,mongoDB,docker,tutum.co cloud.docker.com
                                                                                                                Посмотрел cordova, onsenUI, ionic2, nativescript, titanium,
                                                                                                                Выбрать тяжело, но интересно)
                                                                                                                Хотя мысли автора посещали не раз, но я бил себя по рукам и не давал углубляться больше необходимого.
                                                                                                                  +4
                                                                                                                  Эволюция технологий в действии, через несколько лет 99% упомянутых тут технологий забудут как страшный сон и появится еще больше новых… А может случится массовое вымирание, и снова все будет просто и понятно. Даже жалко время тратить на освоение современных зоопарков.
                                                                                                                    +12
                                                                                                                    Есть такая алко-игра по мотивам поста. Играющие по очереди называют случайное английское слово, к слову добавляется js и гуглится. Если гугл смог найти библиотеку/фреймворк с таким названием, то играющий пьет рюмку водки. Вы не поверите...
                                                                                                                      0
                                                                                                                      Пф… когда читал комментарий, пил молоко, потому загуглил milk:

                                                                                                                      Milk.js is the new super modular JavaScript framework and is a MooTools project

                                                                                                                      В каком мире мы живем?
                                                                                                                        0
                                                                                                                        beer.js is a simple widget for the beer.db service....
                                                                                                                        –3
                                                                                                                        В этом плане мне нравится Dart. Это не просто язык, но и инфраструктура вокруг него. Там тебе и встроенный менеджер пакетов и сборщик и стандартная либа (огромная) и фреймворки типо Angular2 и т.д.
                                                                                                                        Аналогия с Android, есть у тебя Java, есть базовый фреймворк, есть стандартные либы (включая гугловые сервисы), есть Gradle (один единственный, который умеет все что нужно и не нужно), есть тесты. Все шикарно.
                                                                                                                        Тоже самое с C# и .net

                                                                                                                        Ну, а участь веба — зоопарк. :)
                                                                                                                          +2
                                                                                                                          Я до сих пор использую grunt
                                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                              +1
                                                                                                                              Но такой подход совершенно не подходит для публичного веба и больших нагрузок т.к. там везде Linux и другие стеки технологий. ;)

                                                                                                                              Desktop'ное приложение — пожалуйста, получите WinForms\WPF

                                                                                                                              На моём десктопе это не заработает. ;) (у меня Линуксы и одна МакОСь)

                                                                                                                              Это я к тому, что:

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

                                                                                                                              Привязав себя к совершенно не гибким технологиям одного вендора. (вендорлокинг)
                                                                                                                              0
                                                                                                                              Сегодня мне прислали ссылку на это очень крутое видео (Deco Screencast: 5 Minute Uber UI by Devin Abbott) и сразу вспомнился ваш пост :)
                                                                                                                                –2
                                                                                                                                так что настроился на «zero-tolerance mode» (прим. переводчика: рука не поднялась переводить такую чудесную фразу)

                                                                                                                                "Режим нулевой терпимости" [к себе и коду]. Не?
                                                                                                                                  0
                                                                                                                                  Используйте este (Happily maintained dev stack and starter kit for React universal apps. One stack for browser, server, mobile) как шаблон — там ответы на все вопросы
                                                                                                                                    –3
                                                                                                                                    Очередной публичный плач очередного ниосилятора. Надо было в каменщики идти, там технологии пореже меняются. Правда с таким воспитанием тяжело будет в коллективе…

                                                                                                                                    Нормальные пацаны по кайфу девелопят — хочешь sass, хочешь less. Просто нужно побольше учиться, и поменьше себя жалеть, особенно публично.

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

                                                                                                                                    Самое читаемое