Node.js — раковая опухоль

http://teddziuba.com/2011/10/node-js-is-cancer.html
  • Перевод
Если и есть что-то, что веб-разработчики любят, так это знать что-то, что лучше традиционного. Но традиционное является таковым по одной причине: это дерьмо работает. Что-то давно беспокоило меня во всей этой шумихе вокруг Node.js, но у меня не было времени разобраться, что именно, пока я не прочитал полный боли в жопе пост от Райана Дала, создателя Node.js. Я бы забыл его, как любое очередное нытьё какого-то осла о том, что Unix слишком сложен. Но, как полицейскому, который, жопой чуя, что что-то не так с этой семьёй в микроавтобусе, останавливает его и находит пятьдесят килограммов героина, мне показалось, что что-то не так с этой слезливой историей, и возможно, просто возможно, он понятия не имеет, что делает, и много лет программирует, никем не контролируемый.

Поскольку вы читаете это, вы, возможно, уже поняли, что моя догадка подтвердилась.

Node.js — это опухоль на программистском сообществе, не только оттого, что он совершенно безумен, но и оттого, что люди, использующие его, инфицируют других людей, не умеющих думать самостоятельно, пока, в конце концов, каждый встречающийся мне мудак не начинает читать проповеди об event loop'ах. Принял ли ты epoll в своё сердце?

Крах масштабируемости ждёт своего часа


Давайте начнём с самой ужасной лжи: Node.js масштабируем, потому что он «никогда не блокирует» (Радиация приносит пользу! Теперь в вашей зубной пасте!). На сайтe Node.js сказано:
В Node практически нет функций, напрямую выполняющих операции ввода-вывода, так что процесс никогда не блокируется. Из-за того, что ничего не блокируется, менее-чем-эксперты могут разрабатывать быстрые системы.

Это утверждение заманчиво, ободряюще и полностью, блядь, неверно.

Давайте начнём с определения, ведь ваша, хабровские всезнайки, специфика — педантизм. Вызов функции называется блокирующим, когда выполнение вызывающего потока будет приостановлено до завершения этой функции. Как правило, мы думаем об операциях ввода-вывода как о «блокирующих», например, если вызвать socket.read(), программа будет ожидать завершения этого вызова, так как ей нужно что-то сделать с возвращаемыми данными.

Вот вам забавный факт: вызов любой функции, использующей процессор, тоже блокирующий. Эта функция, вычисляющая N-ное число Фибоначчи, заблокирует текущий поток, потому что она использует процессор:

function fibonacci(n) {
  if (n < 2)
    return 1;
  else
    return fibonacci(n-2) + fibonacci(n-1);
}

(Да, я знаю про замкнутое решение. А ты разве не должен сейчас репетировать перед зеркалом то, что скажешь, когда всё-таки решишься подойти к Ней?)

Посмотрим, что происходит с программой для Node.js, с вот этим маленьким бриллиантом в качестве обработчика запроса:

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end(fibonacci(40));
}).listen(1337, "127.0.0.1");

На моём предыдущем ноутбуке результат таков:

ted@lorenz:~$ time curl http://localhost:1337/
165580141
real    0m5.676s
user    0m0.010s
sys     0m0.000s

Время ответа — 5 секунд. Круто. Итак, мы все знаем, что JavaScript не офигенно быстрый язык, но что в этом страшного? А то, событийная модель Node и ёбнутые на всю голову фанатики заставили вас думать, что всё хорошо. Вот простенький псевдокод, показывающий, как работает event loop:

while(1) {
  ready_file_descriptor = event_library->poll();
  handle_request(ready_file_descriptor);
}

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

Итак, учитывая вышесказанное, давайте посмотрим, как мой маленький node-сервер ведёт себя при самой скромной нагрузке — 10 запросов, 5 одновременных:

ted@lorenz:~$ ab -n 10 -c 5 http://localhost:1337/
...
Requests per second:    0.17 [#/sec] (mean)
...

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

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

Отрицая философию Unix, Node наказывает разработчика


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

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

Концептуально, любая архитектура веб-приложения, не являющаяся раком мозга, работает именно так и сейчас: у вас есть веб-сервер, работа которого — принять запрос, разобрать его и решить, что с ним делать дальше. Это может быть отдача статического файла, вызов CGI-скрипта, проксирование соединения куда-либо ещё, что угодно. Дело в том, что HTTP-сервер не должен выполнять работу приложения. Разработчики обычно называют это разделением ответственности, и оно существует по одной причине: слабосвязанные архитектуры очень просты в обслуживании.

И всё же, кажется, Node не обращает на это внимания. У Node есть (и не смейтесь, я не придумываю) свой собственный HTTP-сервер, и его вы должны использовать, чтобы обслуживать входящий трафик. Да, в примере выше, где я вызвал http.createServer(), это из документации.

Если вы поищете «node.js deployment» в интернете, вы найдёте кучу людей, сующих Nginx перед Node, а некоторые используют штуку под названием Fugue. Это другой JavaScript HTTP-сервер, рожающий кучу процессов для обработки входящих запросов, ведь никто не подумал, что вся эта «неблокирующая» чушь может иметь проблемы с производительностью CPU.

Если вы используете Node, есть 99-процентный шанс, что вы и разработчик, и сисадмин, потому что любой системный администратор первым делом отговорил бы вас от использования Node. Таким образом, вы, разработчик, будете наказаны этой оргией с HTTP-проксированием, если захотите поставить настоящий веб-сервер перед Node для штук типа отдачи статического контента, перезаписи запросов, ограничения скорости, балансировки нагрузки, SSL или любых других футуристичных вещей, которые умеют делать современные HTTP-серверы. Да, в вашей системе будет ещё один уровень, требующий мониторинга.

Хотя, будем честны сами с собой, если вы Node-разработчик, вы, вероятно, запускаете приложение прямо из Node, запущенной в вашей экранной сессии под вашей учётной записью.

Это блядский JavaScript


Возможно, худшее, что можно сделать с серверным фреймворком, — написать его на JavaScript.

if (typeof my_var !== "undefined" && my_var !== null) {
  // идоты, вы опозорили Расмуса Лердорфа
}

Что это, я даже не…

Ниасилил?


Node.js — неприятное ПО, и я его использовать не буду.



Update: от переводчика


Я тоже JavaScript-разработчик, давно с интересом присматривающийся к Node.js. Мне тоже обидно и больно за любимый язык. Однако, если отвлечься от боли, в вышеизложенном тексте можно найти смысл, аргументы и доказательства. Я бы очень хотел внятной дискуссии, ибо переводил я его только ради этого. По неизвестно кем установленной традиции, сообщу, что это мой первый перевод и всё такое.
Метки:
Поделиться публикацией
Похожие публикации
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 345
  • –80
    Вы просто ничего не понимаете в Node.js)
    Ещё пади PHP считаете идеалом?

    >>Это блядский JavaScript

    вы будете гореть в аду)
    • +41
      Ааа, вы не знаете про Теда. Ну тогда поперевожу ещё. Кстати, у вас контраргументы есть?
      • +10
        Я не знаю. Хочу еще… Не ждать терпения не хватит пойду читать что за чувак такой. Приятно что есть и люди которые не ведутся на хайп вокруг асинхронных фреймворков
        • +3
          А чем так плохи асинхронные фреймворки?
          Нет, я понимаю что и на них при желании найдется тест «с резбой». Но синхронные, типа PHP, тут явно не в выигрышной ситуации.
          И кстати асинхронные фреймворки не вчера появились. Это только вокруг Ноды крику много. И что странно он частенько подогревается Microsoft-ом. Любопытно в чем тут у них интерес?
          • +3
            Плохи? Сами по себе ничем. Я например активно экспериментирую с tornado и gevent (Twisted для мутантов) и результатами доволен, хотя подводные камни тоже встречаются. Плоха шумиха вокруг них развернутая — волшебная палочка которая сделает всем вам хорошо и бесплатно. Собственно статья про то и написана, ну и ощущения от северного js у меня схожие с автором.
            • +17
              Как показывает практика (моя и не только) — без шума не взлетит. Это лет 10 тому назад можно было написать полезную программу и стать известным за пол года. Сейчас интенсивность фонового шума в интернете такова, что напиши ты хоть серебрянную пулю, если хотя бы ты сам не приложишь все усилия чтобы поднять вокруг своего решения максимально шума — о нем никто и никогда не узнает.
              В этом кстати история практически всех успешных решений и новинок последних лет. Они небыли лучшими, и, часто даже небыли первыми. Они просто были самыми шумными. Жаль что так происходит, но такова жизнь…
              • +4
                Да бросте Вы, совершенно очевидно, чего автор не понял. Об этом говорит пример с фиббоначи, как бы вы не старались, как бы не параллелили, если у вас одно ядро — Вы можете хоть миллион тредов наплодить, но быстрее всего задача будет решена последовательным выполнением, как в ноде, треды принесут лишь оверхэд, а если ядер несколько — нужно поднимать несколько инстансов ноды. Под неблокирующей архитектурой понимается лишь неблокирование ввода вывода, про CPU никто не говорит.
                • +5
                  Быстрее для этого клиента не будет, а для другого — будет, т.к. он не будет ждать в очереди, пока «насильник с фибоначи» отпустит сервер.
                  • 0
                    Это будет только в том случае, если на каждого клиента будет по потоку и операционная система будет их вытеснять. В случае асинхронной обработки клиенты с фибоначи всех забьют и все порастет.
                    • +1
                      И я про тоже. Каждый запрос к node должен быть максимально быстрым, чтобы не занимать цикл надолго: сколько новых лайков, есть ли новые сообщение и т.п. Приведенная реализация фибоначи на архитектуру node ложится очень плохо.
            • 0
              > Но синхронные, типа PHP, тут явно не в выигрышной ситуации.

              Возможно, но есть асинхронные PHP фреймворки, которые очень порадовали производительностью.
            • +8
              Узнал. Хорошо пишет. Мне кажется было бы еще интересно перевести Tornado vs Twisted и I Can't Wait for NoSQL to Die, правда боюсь что тот кто это тут опубликует — без кармы останется быстро.
              • +4
                Второй как раз давно хочу перевести, всё руки не доходили. А этот пост совсем за живое задел, потому и.
                • 0
                  ИМХО «I Can't Wait for NoSQL» это набор натяжек в стиле «миллионы домохозяек не могут ошибаться». Вся аргументация строится вокруг того, что реальный бизнес сейчас не строится на NoSQL. Софистика какая-то.
                  • +1
                    После просмотра блога Теда, я больше не воспринимаю его серьезно, как и его статьи. Вне зависимости от того, есть ли там рациональное зерно или нету
            • –30
              Вижу что перевод — но думаю взгяды переводчика в какой то степени отражает)

              Могу и с контраргументами

              function fibonacci(n) {
              if (n < 2)
              return 1;
              else
              return fibonacci(n-2) + fibonacci(n-1);
              }

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

              Про философию UNIX — херня. Нельзя жить вечно с философией прошлого тысячелетия. Это же IT)
              Создавать HTTP сервер на ходу — очень удобно. Зато PHP — идеальный пример философии юникс? 100500 функций — каждая из которых делает свою задачу. При этом никакого порядка ни в названиях, ни в порядке переменных, ни в возвращаемых результатах.

              Ну а про блядский Javascrpt — кто вас и автора заставляет писать так?
              • +27
                Философию вы зря обижаете. Кирпичные дома прочнее и теплее панельных, и соседей не так слышно. А то, что технология древняя… работает же!

                К PHP вы тоже совершенно зря прицепились, хотя он действительно вполне себе unix way, хотя бы в части работы в качестве CGI. А названия функций… издержки быстрого роста и тяжкое наследие. Более того, сейчас мне уже кажется, что фразу про Расмуса стоило бы перевести как «вы превзошли даже...»

                Давайте говорить о Node, а не тыкать пальцем, что «вон у них тоже всё плохо».
                • 0
                  Зато кирпичные строятся дольше и стоят вроде. )

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

                  Мир IT он такой. Все очень любят доказывать что то кому то. Что технология неправильная, что нужно делать так… и т.п. спорить и обсуждать это все бессмысленно — каждый решает для себя сам. Вот человек решил что node хрень — его право. Непонятно почему он пытается других убедить.

                  Ноду поизвращавшись можно заставить работать как CGI — вот только зачем…
                  • +6
                    Unix way был придуман, чтобы не извращаться.
                    • –1
                      Вы правы и неправы одновременно.

                      Почитайте unicorn.bogomips.org/

                      node.js вполне unix way.
                      • +3
                        Как ваша ссылка доказывает ваше утверждение? Там про нишевой продукт, а не про асинхронную general purpose серебряную пулю.
                        • 0
                          Да, ссылку не ту вставил, сорри. Хотел про nginx :)

                          поясню свою аналогию:

                          Node построен аналогично nginx, который также использует event-based модель.
                          Путь Unix подразумевает два варианта — отработку запросов по процессам, или в одном процессе. Использование потоков не поощряется (по сравнению с Windows way).
                          • +1
                            Нет, если рассматривать ноуд.джиэс в качестве кирпичика для построения чего-либо. Внутреннеархитектурно — да, на троечку с плюсом.

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

                            Что инджайникс, что ноуд, — нишевые продукты, «улучшенные и дополненные». С тем отличием друг от друга, что первый — строительный кирпичик-прокси с включаемой функцией имитатора вебсервера, а второй — просто имитатор вебсервера с функцией убийцы эрланга или (с натяжкой) руби.

                            Я не люблю хейтерство во всех проявлениях (хотя сам на публику, например, иногда этим страдаю), но в данном случае склонен думать, что как нишевое решение ноуд найдёт место под солнцем, как и армию апологетов, в глазах которых классические подходы проектирования программного обеспечения себя дискредитировали в силу столкновения недостаточно опытного человека с реалиями мира. Но признавать ноуд продуктом юникс-пути — увольте, не получается.
                            • +1
                              inetd это ведь unix-way? Он же призван встроиться в цепочку от консольной программы до пользователя сети (как pipe, только на уровне сети). nginx выполняет ту же роль. Вы помните почему inetd перестал пользоваться спросом? Он вел себя точно так же как apache — плодил процессы и подгружал программы полными экземплярами. Этот подход оправдывал себя не долго и от него отказались в пользу постоянно висящих в памяти демонов. Разумеется вам никто не мешает поднять старичка из могилы для того, чтобы писать сетевые сервера на shell, но современным требованиям к коммерческим системам это уже не соответствует. То же происходит и с веб-серверами: cgi отмирает из-за низкой эффективности и на его место приходят сервера приложений, управляемые событиями. Node.js просто один из экспериментальных представителей этой эволюции. Выживет он или не пройдет естественный отбор, покажет время, но эволюционный шаг unix, начавшийся с отказа от inetd в любом случае будет сделан. И пока не ясны все особенности приходящей парадигмы, сложно прогнозировать результаты этого эксперимента. А автор, в силу юношеской категоричности, ищет грань между черным и белым в сером мире, цепляясь за свое прошлое и навязывая его восприимчивому читателю.
                              • 0
                                Я ещё раз напишу. Тред начался с того, что ноуд назвали продуктом юникс-пути. Я как можно проще изложил, почему я не считаю это корректным.

                                С вами целиком согласен. Смысл эволюции в многообразии форм и все эти формы имеют право на существование.
                                • 0
                                  Может мы с вами по-разному понимаем одни и те же выражения, но архитектура event-driven приложений это на мой взгляд именно продукт пути, который проходит unix. С другой стороны unix-way, как понятие, означает не эволюцию, а идеологию и в этом контексте node.js не соответствует букве, хотя и пропитана духом unix-way.
                                  • 0
                                    Я специально отбил параграфы в своём предыдущем респонзе для разделения мыслей.

                                    Да, не UNIX-way.

                                    Да, event-driven и message-driven живут и у них есть будущее.
                                    • 0
                                      Я специально отбил параграфы в своём предыдущем респонзе для разделения мыслей.

                                      Я отвечал на первый :)

                                      Да, не UNIX-way.

                                      С буквой всё понятно, но даже духа не признаете?
                                      • 0
                                        Дух свободы и нигилизма? :) Шутка.

                                        Понятие этого духа у каждого своё и оно похоже на понятие демократии.

                                        На мой взгляд что-то такое есть, но без буквы это «что-то» есть в каждом первом опенсорс-проекте с гитхаба.
                                        • +1
                                          Спасибо. Исчерпывающе. :)
                    • –1
                      Если чесно, я вообще не понял за что вас так жестоко заминуосвали. Человек который один из немногих кто пишет статьи по программированию на хабр не достоин иметь такой низкой кармы.
                  • +4
                    Вы не вполне правы. Отдельный поток тут выгоден не всегда.

                    Более кошерно каждую следующую итерацию уводить в nextTick.
                    • 0
                      Подозреваю что при этом оно будет работать еше меленнее — слишком высокие накладные расходы.
                      • +1
                        Да не, нормально будет работать — даже статья на хабре про этот метод была habrahabr.ru/blogs/nodejs/112742/. Но это какая-то «добровольная многозадачность» получается. Программист берет на себя задачи планировщика.
                    • +8
                      Разница между node.js и unix way в том, что node.js разрабатывают и используют восторженные энтузиасты, а unix way — продукт мощного инженерного подхода. Как показывает практика, 40 лет он летал, этот unix way и будет летать дальше. Быстро, эффективно и масштабируемо.

                      Запомните — разработчики являются ресурсом, а не самоцелью. Синтаксический сахар и лень рождают чудовищ.
                      • НЛО прилетело и опубликовало эту надпись здесь
                        • +1
                          Наращиваемо как по горизонтали, так и в архитектурном плане, вверх.
                        • 0
                          очень правильное высказывание, но с одним минусом. вы просто не пробовали интегрировать Node именно согласно Unix way.

                          Воспринимайте Node как великолепный агрегатор.
                          • 0
                            Как использовать ноуд в качестве конечного решения — представляю, а как можно интегрировать согласно юникс-пути — неа, в упор не представляю.
                        • +7
                          Пхп — это пример не юниксовой философии, а образцово-показательного бардака.
                        • +2
                          Вот отличный контраргумент. V8 долизан до такого состояния что генерит адекватный машинный код в реалтайме. Потому по скорости там всё чудесно. Другое дело что надо им научиться напрыгивать на все ядра процессора.
                          • +6
                            Если у них stop-the world GC и отсутсвие нативной поддержки многопоточности, то натягивай-не натягивай, смысла не будет
                          • +23
                            Переводите. Тем более что у вас отлично выходит.
                            • –26
                              >Ну тогда поперевожу ещё

                              На самом деле не стóит.
                              • +13
                                Для вас — не буду.
                                • –4
                                  Да не только для меня.

                                  Действительно, поторопились вы с публикацией такого сырого перевода. Ужасные кальки с английского.
                                  • +15
                                    Если есть возможность — опишите, пожалуйста, в личку, что конкретно резануло. Расти есть куда, я не спорю, первый же перевод.
                                    • +9
                                      Отправил несколько замечаний =)
                                    • +1
                                      Наоборот — эти самые кальки отлично создают атмосферу
                                      • 0
                                        Кальки можно использовать как приём, безусловно. Но сочный слог Теда стоит передавать таким же сочными оборотами русского языка =)
                                • +3
                                  А Вы знакомы с Тедом Мосби?

                                  abcfilm.tv/img_kadr/58/02_04_6.jpg
                                  • +2
                                    Я, бывает, смотрю про него сериал. Забавный парень, скажу я вам, но сюжет вытягивает один Барни уже который сезон.
                                    • +1
                                      Уже имхо к сожалению и не вытягивает… (пичаль)
                                  • 0
                                    проверено на ноде, си, пхп:
                                    нода: 5 секунд (но ёлки...331 миллион итераций… хз откуда такой алгоритм))))
                                    си: 1 секунда
                                    пхп: 1 минута 35 секунд (для одарённых это 95 секунд))))

                                    исходники на СИ:
                                    long fibonacci(int n) {
                                    if (n < 2)
                                    return 1;
                                    else
                                    {
                                    return fibonacci(n-2) + fibonacci(n-1);
                                    }
                                    }
                                    int main() {
                                    fibonacci(40);
                                    }


                                    исходники на ПХП:
                                    <?php
                                    $i = 0;
                                    function fibonacci($n) {
                                    global $i;
                                    if ($n < 2)
                                    return 1;
                                    else { $i += 2;
                                    return fibonacci($n-2) + fibonacci($n-1);
                                    }
                                    }
                                    echo fibonacci(40);
                                    echo $i;
                                    ?>
                                  • +60
                                    >>Ещё пади PHP считаете идеалом?
                                    >>вы будете гореть в аду

                                    Традиции Хабра: разговор с копипастойпереводом.
                                    • +3
                                      Между тем тот же код в
                                      php: 2m 31s
                                      java: 0.891s
                                      javascrip: 2.45s
                                      ruby: 23.2s
                                      as3: 2.2s
                                      • –1
                                        Между тем через много лет :)
                                        python3: 38.629s
                                        php7: 11.693s
                                        node5: 1.893s
                                        java8: 0.546s
                                        неприятно удивил питон, думал он будет наравне с php по математике или даже быстрее
                                      • 0
                                        -80… это жестко
                                      • –69
                                        Выговорился, полегчало?
                                        • +60
                                          ПЕРЕВОД
                                          • –57
                                            перевод лучше оформлять как перевод, тогда будет намного меньше вопросов
                                            • –42
                                              короче гон :) иконка перевода внутри топика не показывается а в списке топиков да
                                              • +59


                                                Что я делаю не так?
                                                • +16
                                                  все так, просто раньше иконка перевода по-моему была и когда просматриваешь страницу топика а не только в списке
                                                  • +5
                                                    Да по слогу очевидно же, что перевод. :)
                                                    • 0
                                                      Ну буду стараться.
                                                      • +7
                                                        Перевод очень хороший, кстати. Легко читается, понимается без напряжения мозга.

                                                        Мне чтобы сделать на таком уровне, нужно сначала перевести с английского на русский, а потом с русского на русский.
                                                        • +5
                                                          Спасибо, наконец-то пригодилось высшее филологическое :)
                                                      • 0
                                                        Меня немного сбило с толку обращение к педантизму хабровчан, я даже на всякий случай несколько раз перечитал имя автора и подглядел первые комменты.
                                                • +26
                                                  Жаль, что, благодаря интерфейсу Хабрахабра, понять, что это перевод, теперь можно только дочитав до конца и увидев мааасенькую ссылочку на оригинального автора:



                                                  Ну, или где-нибудь на третьем абзаце осознать, что это перевод, по не характерным для русского языка выражениям (ну, например, вряд ли по-русски кто-нибудь сказал бы «Это утверждение заманчиво, ободряюще и полностью, блядь, неверно.» вместо хотя бы «Это утверждение заманчиво, ободряюще и нихуя не верно.»).
                                                  • +13
                                                    Вот-вот, только хотел написать, что практически все переводы тут спокойно узнаю по нехарактерным оборотам (:
                                                    • –4
                                                      Вот вот. Хабр в очередной раз показал свою стадность. Стыдно должно быть.
                                                      • 0
                                                        Стыдно за что? За то что люди мыслят похожим образом? Или за то что плодят бесполезные комментарии?
                                                        • –2
                                                          За то что люди мыслят похожим образом.
                                                          • +2
                                                            О боже… Пойду стыдиться.
                                                            • +1
                                                              Количество всевозможных точек зрения много меньше людей. Так что мыслить одинаково обречены даже те, кто на словах стыдится этого.
                                                          • +2
                                                            Да ладно вам! Перевод охуенен.
                                                            P.S. Я не знаком с автором перевода лично.
                                                        • 0
                                                          Ага, и к концу такой облом, что перевочика не польешь говном за спорную статью)
                                                    • –18
                                                      И не в лом же было переводить такое…
                                                      • –83
                                                        Уберите мат! Может в оригинале и сойдет, но не в русском.
                                                        • +71
                                                          Таков уж Тед. Иначе как «Криминальное чтиво» в переводе НТВ смотреть.
                                                          • –25
                                                            > Таков уж Тед.

                                                            Всегда поражали люди которые так говорят. Вы знакомы с Ted Dziuba лично? Поэтому называете его Ted? Или вы чувствует СВЯЗЬ между вами когда читаете его блог? Или это у вас так в Краснодаре принято? Саша, что на это скажешь?
                                                            • +14
                                                              Вы правы, Андрей, правильнее было бы сказать «таков уж стиль изложения Теда». Нет, я не знаю Теда лично, но давненько почитываю его опусы, да и вообще он мне интересен как личность. Я не вижу ничего страшного в том, чтобы называть людей по имени, ведь оно затем и даётся, разве нет? Более того, очень не люблю русскую традицию обращаться по имени-отчеству, мне кажется, «вы» вместо «ты», на которое мы с вами не переходили, вполне достаточно.
                                                              • +7
                                                                И кстати, в той культуре, откуда родом Тед (а также в родственных) люди обычно представляются по имени (причем так делает кто угодно, вплоть до нобелевских лауреатов), и предпочитают, чтобы их так называли. Автору спасибо за перевод.
                                                                • –4
                                                                  Расскажите мне об этом. Я не о том, что его назвали по имени, я о том, что тут все говрят так будто с ним лично знакомы «А ну Тэд он такой, да, шутник.»
                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                            • +8
                                                              из песни слов не выкинешь.
                                                              • +4
                                                                E-mail, принимающий жалобы от персон, оскорбленных нецензурной лексикой:
                                                                thisisnotarealemailyouasshole@thisisnotarealemailserver.com
                                                              • +2
                                                                Время ответа — 5 секунд.

                                                                Тед посчитал время запуска программы curl, её работы и завершения. Типичная ошибка разных тестировщиков скорости.

                                                                Числа в V8 (как и в PHP) представляются в виде машинных чисел в процессоре. По-этому математика там будет быстрой. Тест с числами Фибоначчи выбран не удачно что бы показывать тормоза. :)
                                                                • +1
                                                                  Что насчёт результатов ab?
                                                                • 0
                                                                  Повеселили, спасибо.
                                                                  $ time curl localhost:3000

                                                                  real 0m0.051s
                                                                  user 0m0.012s
                                                                  sys 0m0.008s
                                                                  • –1
                                                                    Очевидно что у вас разное желехо и результаты разные. Это не в защиту автора, а к вопросу о «правильости» тестирования.
                                                                    • 0
                                                                      На 3 порядка, думаете?
                                                                  • 0
                                                                    Тед посчитал время запуска программы curl, её работы и завершения. Типичная ошибка разных тестировщиков скорости.

                                                                    По результатам четко видно, что большую часть времени курл провел в заблокированном состоянии (читай: ждал ответа от сервера).
                                                                    • +7
                                                                      Тут и без тестов понятно что пример будет тормозить. Этот пример говорит лишь о том, что его автор не понимает как работает node.js или специально вводит в заблуждение тех, кто ещё не разобрался.
                                                                      Вот перевод отличной статьи.
                                                                      Золотые слова из неё: «всё выполняется параллельно, за исключением вашего кода». Так что если автор, до написания этой гневной статьи думал, что этот пример выдаст ему как «меньше-чем-эксперту» нереальную производительность, то ему просто надо идти учить матчасть.
                                                                      • –1
                                                                        Гневная статья? Где вы там гнев усмотрели?
                                                                        • +4
                                                                          Если перечислять всё можно скопипастить почти всю статью.
                                                                          К примеру это:
                                                                          Node.js — это опухоль на программистском сообществе

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

                                                                          и это
                                                                          Node.js — неприятное ПО


                                                                          Ну и весь мат.
                                                                          • –5
                                                                            Как по мне — обычная гипербола. Да и мат из разряда «мы им не ругаемся, мы на нем разговариваем».
                                                                        • +2
                                                                          > автор не понимает как работает node.js или специально вводит в заблуждение тех, кто ещё не разобрался.

                                                                          node.js утверждет, что scalable решения будут писать именно такие неразобравшиеся ;)
                                                                          • 0
                                                                            Есть лозунги и есть реальность. Как только дело доходит до серьезных денег, писать будут те, кто разобрался. А что разбираться легче, так за это автору спасибо.
                                                                            • +1
                                                                              Между «меньше-чем-эксперты» и «серьезные деньги» — пропасть. Не говоря уже о том, что благодаря EC2 и Azure можно начинать экспериментировать с масштабируемостью и без особых денег и/или знаний.
                                                                              • +1
                                                                                Между «меньше-чем-эксперты» и «серьезные деньги» — пропасть.

                                                                                Вас всерьез беспокоит чем увлекаются другие? Вы сокрушаетесь, что кто-то сделает не достаточно хорошо (по вашим меркам) только потому, что пошел на поводу у лукавой рекламы? Или вам никто не рассказал, что это плохо — негодовать по поводу чужих предпочтений, не совпадающих с вашими? Доводы автора о не правдивости рекламы node.js несостоятельны — порог вхождения действительно ниже и существует круг задач, где эта технология имеет свои преимущества. А то, что Тэд искал в ней универсальность викторинокса — личные проблемы Тэда и других страдающих психозом перфекционизма. Не существует самого лучшего языка или архитектуры, есть лишь удачные для определенного круга задач.

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

                                                                                Боюсь вы введены в заблуждение. Приступая к использованию этих платформ начинать экспериментировать с масштабиемостью уже поздно — на момент запуска проекта на этих сервисах надо уже четко осознавать что и для чего ты делаешь, чтобы избегать блокировок уровня архитектуры кластера. А при этом возникают проблемы, в сравнении с которыми блокировка потока node.js покажется цветочками. (Ну запустил для вашей задачи EC2 копию вашего сервера на соседнем ip, как вы собираетесь синхронизировать копии данных? Заблокируете копии приложения обращением к одной базе данных с разных серверов? Включите зеркальную репликацию данных между серверами, создав затор обменом между копиями СУБД?). Нет, тут уже не отделаешься простыми решениями, за которые так ратует автор поста. Тут придется разбираться со всякими Hadoop и/или RabbitMQ, которые бесконечно далеки от любимого Тэдом CGI-подхода (распараллеливания процессов полными экземплярами). Вот так поэкспериментируешь с EC2 и дойдет в чем главные преимущества однопоточной архитектуры для масштабирования. И перестанете слушать всяких троллей. Может на node.js не остановитесь, но уж чем Tornado или OTP лучше любимого Тэдом django в нагруженных проектах, усвоите на зубок.
                                                                      • +4
                                                                        Как будто 1000 число фиббоначи хоть на каком-нибудь языке будет быстро работать =)
                                                                        Так что пример нормальный.
                                                                        • 0
                                                                          Да на любом оно будет работать, если не через одно место писать. Тысяча операций сложения — пшик.
                                                                          Но, если писать рекурсивную функцию, да ещё такую, которая для подсчёта числа высчитывает два предыдущих (а для тех ещё два, …), то конечно, тут не поспоришь.
                                                                        • 0
                                                                          Вы хотите сказать что curl может запускаться 5 секунд?
                                                                          • 0
                                                                            Если загнать ОС в глубокий SWAP, то может и больше. Но в данном случае конечно большая часть процессорного времени была занята тяжелой рекурсивной функцией.
                                                                        • –5
                                                                          Текст из разряда «я умный, потому что бородатые дяди умные, а вы тупые, потому что вы тупые». Где умное-то в этом тексте?
                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                            • +15
                                                                              1. github.com/glenjamin/node-fib — комментарий к оригинальному посту (вернее, к ссылке на него на Hacker News).

                                                                              А HN, кстати, давно утвердился в качестве ведущей помойки англоязычного программерского сообщества. И ведь кому то было не лень переводить это все, с матершиной, и выкладывать на Хабр. Фантастика.

                                                                              2. Дискуссии в постах вида «X — говно, а автор Y — тупица» быть никакой не может. Кому что нравится, тот и использует: Node.js, Erlang/OTP, Scala — какая разница? Райан из ничего сделал ведущий JS рантайм, и получает за это тонны навоза на голову каждую неделю. Любой, кто делал FOSS проект который использует хотя бы пара сотен человек, знает, каково это — когда куча трепачей критикуют (а часто и оскорбляют) тебя за то, что ты что-то сделал, в отличие от них.
                                                                              • +7
                                                                                1. Я читаю лично Теда, о HN узнал от вас только что. Мне было не лень переводить пост, который меня задел. В комментарии на гитхабе, в секции «Why?» примерно моя позиция описана.

                                                                                2. Вообще, я надеялся, что придут гуру серверного JavaScript и расскажут подробно, в чём Тед ошибается. Пока аргументов было немного, а из исходника по вашей ссылке я понял, что его писал не-менее-чем-эксперт. Тед же подошёл с позиции именно такой, и успешно доказал, что кухарка сервера писать всё ещё не может.
                                                                                • –1
                                                                                  2. Это было и так понятно.
                                                                                • +1
                                                                                  «сначала добейся»
                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                    • 0
                                                                                      Да, слог просто чудесный. Я даже не догадывался что это перевод.
                                                                                    • 0
                                                                                      А мне вот наоборот очень даже нравится node.js
                                                                                      По поводу блокировок:
                                                                                      Блокируемыми являются потоки, но не сам процесс. Читая перевод возникло ощущение того, что Тэд считает, что блокировка потока означает блокирование процесса.
                                                                                      • +1
                                                                                        Не считает, и даже упоминает, к каким проблемам может привести бесконечное рожание потоков.
                                                                                        • +1
                                                                                          Да, всё верно, я видимо не так понял
                                                                                      • +6
                                                                                        А Ferrari SA Aperta очень не удобно ездить на дачу. Ferrari говно?
                                                                                        Статья — совершенно однобокий взгляд на node.js. Обсуждать даже смысла нет. О том как именно работает event loop и что делать со сложными математическими вычислениями написана тонна статей. Если кто-то использует node.js не понимая как он, в действительности, работает и надеясь на магическое слово «асинхронно» то это его проблема, а не Райана.
                                                                                        • +3
                                                                                          Так ведь Райан сам призывает забыть обо всём и просто писать быстрые приложения, не заботясь ни о чём. Собственно, маркетинг в этой статье, по большей части, и высмеивается, ну а про unix way Тэд просто не мог не упомянуть.
                                                                                          • 0
                                                                                            Я не думаю, что Райан словами «less-than-expert» имеет ввиду студентов которые только-только узнали о node.js и решили его использовать для своего супер-стартапа. Мне кажется, что для разработчика такого уровня «less-than-expert» это тот, кто сам не может создать такой же node.js.
                                                                                        • +28
                                                                                          Серверный JS сильно отличается от клиентского, хотя заманчиво на него похож. Многие начинают использовать node.js основываясь на своих знаниях и опыту написания клиентского JS. Но почти сразу сталкиваются с проблемами, которые браузер им «прощает». Большая часть JS-скриптов на клиенте работает 1 раз при генерации страницы или основываясь на действиях пользователя (клики, ввод данных и т.п.). Речь не идёт о сложных браузерных «долго живущих» приложениях которые. Так вот. В простых клиентских скриптах не обязательно заботиться об очистке памяти, о сильно скрученных замыканиях и т.п. Т.к. страница живёт относительно не долго (и скрипт вместе с ней) то такие «косяки» не видны. И кажется что JS очень простой. Но когда такой же стиль написания применяется в серверном JS — все недочёты быстро дадут о себе знать. И в этом месте начинающие node.js разработчики делятся на 2 категории. Первые идут разбираться почему их приложение работает медленно/жрёт память/падает/грузит процессор на 100%, осознают принципы и пишут нормально. А вторые идут на форумы и льют тонны говна на Райена, JS и «всех этих фанатиков».
                                                                                          Мне кажется что это уляжется только когда все осознают что JS это не «почти как на пэхэпэ но проще и есть свой сервер», а довольно сложный язык программирования, явно сложнее PHP (PHP тоже многое «прощает» из за того что скрипт живёт не долго и синхронно писать легче), который требует глубокого понимания принципов работы, принципов асинхронности и т.д.
                                                                                          Серверный JS не для домохозяек.
                                                                                          • 0
                                                                                            … но от маркетинга никуда не деться.
                                                                                            • +6
                                                                                              Все лозунги Node.JS про простоту разработки нужно отсчитывать от уровня самого Райана :)
                                                                                              • +1
                                                                                                Если бы node.js продали с такими обещаниями, то можно было бы подать на Райана в суд, но он бесплатен и распространяется как есть. А так, это просто краткое описание принципов работы node.js. Любой адекватный разработчик понимает что «nothing blocks» это не волшебство, а «почти ничего не блокируется». В любом случае — лить говно на чей-либо труд таких объёмов, основываясь только на нескольких строчках главной страницы, приводя примеры, которые заведомо будут тормозить — это обычный троллинг. Таких примеров можно привести миллион: айфоном плохо забивать гвозди, молотком плохо звонить.
                                                                                                Райану — огромное спаисбо за работу.
                                                                                                Горе-разоблачителям — вкусной кормёшки.
                                                                                              • +1
                                                                                                А теперь вопрос зачем на этом писать? Для io-bound как пишут ниже? Для этого можно спокойно взять java.
                                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                  • 0
                                                                                                    Тут только что написали, что server side javaScript отличается от client side. Что по сути выливается в разные парадигмы программирования.
                                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                      • 0
                                                                                                        > объекты не нужно сериализовать/десериализовать

                                                                                                        Нужно. Потому что JSON-JSON'ом, но eval при этом никуда не девается
                                                                                                        • –1
                                                                                                          Строго говоря, никуда не девается синтаксический анализ; но eval для него не обязательно нужен.

                                                                                                          Во-первых, есть скрипты наподобие json_sans_eval и JSON-js, способные невозбранно анализировать JSON, не прибегая к eval.

                                                                                                          Во-вторых, даже и они не требуются, потому что в современных браузерах есть быстрые методы JSON.parse и JSON.stringify есть они, понятное дело, и в движке Node.js, основанном на V8.
                                                                                                      • +1
                                                                                                        ну мне например, кажется заманчивым, что мне можно одни и те же алгоритмы проверок, как на клиенте, так и на сервере использовать для небольшой игрушки на html5, исходя из принципа «сначала сделать клиент и протестить клиент, а потом перенести часть критичного кода на сервер»
                                                                                                        • 0
                                                                                                          У меня вопрос. А с чего оно будет работать там «быстрее» чем в клиенте? К примеру при использовании Chromium?
                                                                                                          • 0
                                                                                                            «критичные» не в плане скорости, конечно же) защита от хаков
                                                                                                    • +2
                                                                                                      Тоже самое можно спросить, а зачем писать на Java, если можно на node.js? Всё зависит от конкретной задачи, конкретного разработчика, его опыта и привычек. Плохую программу и хорошую программу можно написать на любом языке.
                                                                                                      • –3
                                                                                                        Хотя бы по той причине, что не надо ломать себе мозг той самой серверной реализацией.
                                                                                                        • +2
                                                                                                          Опять-таки, это можно сказать и про Java. Все-таки для человека, хорошо знающего и понимающего JavaScript (а не просто умеющего гуглить и подключать «жквери-плагины»), порог вхождения для серверного JavaScript будет значительно ниже чем порог вхождения для написания серверной части на Java. А результат тот же, js давно уже не просто интерпретируемый язык, а такой же полноправный байт-код как и Java, только «компилируется» после запуска, а не вручную.
                                                                                                          • 0
                                                                                                            Одно дело когда у вас разные языки. А другое дело когда язык один, а подходы разные. И вы на дню по несколько раз переключаетесь туда сюда.
                                                                                                            • +2
                                                                                                              Джаваскрипт динамический и слабо типизированный. Он по определению будет медленнее джавы. Насколько — это уже зависит от паттернов использования и изощрённости движка.
                                                                                                      • +4
                                                                                                        По моему язык здесь не причем, а виновата асинхронная модель программирования. На JavaScript можно и удобно писать код в синхронном стиле используя RingoJS или мой проект Common Node. Если интересно, то вот моя презентация с RejectJS в Берлине на прошлой неделе.
                                                                                                      • +4
                                                                                                        Спасибо за перевод, очень экспрессивно. Сам думал перевести, но вчитался, и понял, что не буду.

                                                                                                        По уму — автор неправ. Гораздо интереснее и точнее вот это: habrahabr.ru/blogs/nodejs/127696/
                                                                                                        • +1
                                                                                                          нода уже научилась расползаться по ядрам процессора/процессорам или всё ещё нужно запускать n процессов?
                                                                                                      • +9
                                                                                                        Какой-то бессмысленный текст — автор показал, что рассчет числа Фибоначи займет 5 секунд? А что, если он напишет его рассчет и запустит в CGI-сервере, он отработает быстрее?

                                                                                                        Есть определенная ниша, где применение событийных фреймфорков здорово помогает (типичный пример — тысячи висящих соединений с иногда происходящими на них событиями). Нахваливаемый автором юникс-вейный CGI (это ж надо было додуматься, на каждое входящее соединение стартовать по процессу!!!) в такой ситуации съест все ресурсы сервера на форк процессов. Ну вы знаете, это то же, что бывает с сервером, если после установки Апача не понизить MaxChild (который там по дефолту то ли в 200, то ли в 300 установлен). Лучше ноды тут только C++/D и подобные языки.

                                                                                                        Так что статья ни о чем. Если вы пишете скрипты, которые работают по 5 секунд с полной загрузкой CPU, вам ничего уже не поможет.
                                                                                                        • +8
                                                                                                          В CGI сервере, по крайней мере, этот расчёт не заблокирует accept() входящих соединений, позволит загрузить все ядра CPU параллельными запросами этого расчёта, и не помешает параллельно с медленной обработкой этих запросов быстро обрабатывать другие запросы (как CGIшные так и на статический контент).

                                                                                                          И да, форк это тоже не решение в современных условиях, здесь я с Вами полностью согласен.

                                                                                                          На мой взгляд суть статьи в том, что:
                                                                                                          • — Совмещать веб-сервер и «неблокирующие» обработчики запросов в одной нити это плохая идея.
                                                                                                          • — Разработка неблокирующих серверных приложений это сложная задача для экспертов, а не простая для менее-чем-экспертов, как это рекламируется.
                                                                                                          • — JavaScript не самый подходящий язык для сервера.
                                                                                                          И лично я со всем этим полностью согласен (хотя последний пункт аргументировал бы не примером с undefined (синтаксис в языке не главное), а тем, что толпы существующих JavaScript-разработчиков привыкли писать клиентский JavaScript, а на сервере надо писать совершенно иначе — что превращает «плюс» использования уже известного языка в «минус» иллюзии что вы знаете как писать на этом языке на сервере).
                                                                                                          • +5
                                                                                                            Лучше ноды тут Erlang, Scala, Haskell, а потом уже все остальное.
                                                                                                            • 0
                                                                                                              Erlang ещё быстрее чем Node.JS считает фибоначчи: lionet.livejournal.com/95346.html
                                                                                                              • –1
                                                                                                                Вот многие нахваливают Erlang — особенно в сравнении с Node.JS. Щас почитал немного и пока не понял — в чём его прелесть?
                                                                                                                • +1
                                                                                                                  В концепции. Можно завести по одному потоку на каждое из нескольких десятков тысяч подключений и не опупеть.
                                                                                                                  • +11
                                                                                                                    1. несколько ортогональных инструментов обработки ошибок (hot code reload, try/catch, linked processes, supervisors)
                                                                                                                    2. горячая замена кода без остановки приложения. работа 24/7/365 без остановки для апгрейда.
                                                                                                                    3. горячий дебаг без пауз того, что дебажится
                                                                                                                    4. отсутствие разделяемой памяти — изоляция процессов друг от друга
                                                                                                                    5. возможность породить десятки и сотни тысяч независимых процессов, выполняющихся параллельно друг с другом и не блокирующих друг друга
                                                                                                                    6. неизменяемые структуры данных — способ исключить целые классы ошибок в коде
                                                                                                                    7. мощные библиотеки работы с асинхронными процессами — в бою уже пару десятков лет.
                                                                                                                    8. делать код-ревью на Erlang проще, чем на императивных языках типа PHP, Perl, etc: lionet.info/pdf/2010-lev-walkin-erlang-experience.pdf
                                                                                                                    9. по сравнению с Node.JS — код выглядит как код, а не как лапша:
                                                                                                                    Step(
                                                                                                                      function readSelf() {
                                                                                                                        fs.readFile(__filename, this);
                                                                                                                      },
                                                                                                                      function capitalize(err, text) {
                                                                                                                        if (err) throw err;
                                                                                                                        return text.toUpperCase();
                                                                                                                      },
                                                                                                                      function showIt(err, newText) {
                                                                                                                        if (err) throw err;
                                                                                                                        console.log(newText);
                                                                                                                      }
                                                                                                                    );


                                                                                                                    Эрланг:
                                                                                                                      {ok, Data} = file:read_file(Filename),
                                                                                                                      Text = string:to_upper(binary_to_list(Data)),
                                                                                                                      error_logger:info_msg("~s", [Text]).
                                                                                                                    


                                                                                                                    www.slideshare.net/rit2010/max-lapshin-erlyvideo-v2
                                                                                                                    lionet.info/pdf/2010-lev-walkin-erlang-experience.pdf
                                                                                                                    lionet.livejournal.com/tag/erlang
                                                                                                                    • 0
                                                                                                                      Кажется, начинаю понимать прелесть. Правда, с другой стороны смущает, что, например, в списках вроде как нельзя обратиться к, скажем, второму элементу списка, или ещё что-то вроде этого… А так же иммутабельность.
                                                                                                                      • +2
                                                                                                                        > в списках вроде как нельзя обратиться к, скажем, второму элементу списка
                                                                                                                        lists:nth([1,2,3,4,5], 2)

                                                                                                                        > А так же иммутабельность
                                                                                                                        К ней быстро привыкаешь. Да и обращаться ко второму элементу списка даже и не вспомню, когда приходилось. И иммутабельность, и набор типов данных приводят к другим алгоритмам работы с ними.
                                                                                                                        • 0
                                                                                                                          Догадываюсь :) Не очень сложно переучиваться то? Что хорошего посоветуете почитать?
                                                                                                                          • +4
                                                                                                                            Несложно. По наблюдениям некоторых товарищей, продакшн код вполне получается писать через 2 недели изучения. Из почитать, можно начать с Learn You Some Erlang for Great Good!. Лично я учил по Erlang Programming. Ну а потом уже можно и OTP in Action.
                                                                                                                            • +3
                                                                                                                              Причём " Learn You Some Erlang for Great Good!" стоит читать ровно до того момента, как эрланг перестанет казаться совсем уж инопланетным. Потом «Erlang and OTP in Action» гораздо лучше — кроме языка (который, в сущности, прост и, честно говоря, мог бы быть заменён на другой язык без особых потерь) показывается самое важное — использование инфраструктуры OTP, которая и даёт основные преимущества.

                                                                                                                              Ещё раз подчеркну: суть — не в эрланге как таковом, и его изучение — это только верзушка айсберга. Суть в OTP.
                                                                                                                              • 0
                                                                                                                                Спасибо за рекомендации! «Инопланетным» мне Эрланг перестал казаться быстро, но хотя бы пройдусь по первому ресурсу)
                                                                                                                            • +5
                                                                                                                              Это прям как ядерной ракетой банку тушенки открывать :)
                                                                                                                              • +1
                                                                                                                                да. точно nth. пойду краснеть.
                                                                                                                        • +2
                                                                                                                          Про язык вам уже выше сказали, но основная фишка в другом — это предельно тщательно продуманная платформа, прошедшая проверку огнём, водой и медными трубами. Практически на любую архитектурную проблему, с которой вы столкнётесь, вы найдёте хорошее идиоматичное решение в рамках фреймворка, без прикручивания сторонних костылей — от конфигурирования и деплоймента до обновления. Сравнить это можно разве что с Java EE — больше я решений подобного уровня не видел. Но в OTP всё это делается куда как понятнее и читабельнее.
                                                                                                                    • +8
                                                                                                                      > Это утверждение заманчиво, ободряюще и полностью, блядь, неверно.

                                                                                                                      Я бы за это предложение Вам руку пожал!
                                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                        • +5
                                                                                                                          Это чистый троллинг в стиле Теда Дзюбы. Он специально пишет так, чтобы те, кто мог оскорбиться, оскорбились и уронили планку. Статью перевёл оттого, что боль в жопе никогда не мешала мне трезво мыслить. Аргументация в статье есть, и, повторюсь, основной наезд в ней — на маркетинг в стиле «кухарка сможет писать быстрые сервера, потому что ничего не блокируется». Этот подход в корне неверен, и мы уже видели, к чему он приводит, на примере PHP, только там похожий тезис повторяли фанатики, а здесь — сам создатель инструмента. А если он так утверждает, он либо нагло лжёт с целью заработать медаль «за создание лекарства от всех болезней», либо недальновиден и не понимает, к чему могут привести подобные заявления. Это мы, опять же, видели на примере PHP, в который очень быстро влилось множество кухарок, а через год миллионы людей начали его хаять за то, что на нём можно писать говнокод.

                                                                                                                          Пожалуйста, покажите, какие именно ответы я проигнорировал: у Теда комментариев на сайте нет, здесь по делу минимум. Пойду почитаю HN, на который мне показали перед сном.
                                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                            • –1
                                                                                                                              За публикацию здесь этого троллинга можно было бы к вам претензий не предъявлять. Но вы в качестве собственной позиции высказываете троллистские акценты и это уже достойно порицания. Текст основан на, мягко говоря, притянутых за уши аргументах:

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

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

                                                                                                                              — Идеология UNIX не имеет к написанию веб-приложения никакого отношения. CGI давно доказал свою несостоятельность для серьезных проектов. Использовать Nginx в качестве http-сервера никто не мешает. И причитать по этому поводу совершенно не конструктивно. Чистый троллинг на пустом месте.
                                                                                                                          • –3
                                                                                                                            Tornado умеет асинхронно отдавать данные, не блокируя других клиентов. Так что проблемы с Фибоначчи там просто нет. Думаю, что и в Node.js сделать такое несложно, если уже не сделано. Статья интересная, но многовато ругательств.
                                                                                                                            • +2
                                                                                                                              И что же интересного в статье? Срыв покровов что фибончаи заблокируют поток? Как будто пацаны этого и так не знают. Что кому-то не нравится JavaScript? Что какой-то чувак не будет писать на Node.JS? Хоть бы одну интересную проблему обозначили, а то выглядит так как будто автор прочитал статью на википедии перед сном и пошел срывать покровы. Даже пассаж про веб сервера странный, как будто nginx не цепляют повсеместно перед той или иной динамикой.