По моему язык здесь не причем, а виновата асинхронная модель программирования. На JavaScript можно и удобно писать код в синхронном стиле используя RingoJS или мой проект Common Node. Если интересно, то вот моя презентация с RejectJS в Берлине на прошлой неделе.
Я и имел в виду проблемы с кучей колбэков под асинхронностью. Мой проект решает эти проблемы.
По поводу языка, я не согласен. Используя модули и packages, очень даже удобно работать с большими проектами. JavaScript благодаря его динамичности очень компактный а прототипы позволяют писать код в разных стилях начиная с процедурного вплоть до функционального.
Я правильно понял что основная проблема это асинхронность нода? Если так, то я в принципе согласен что для многих задач это преждевременная оптимизация. Поэтому я написал Common Node который позволяет мне писать код в синхронном стиле не теряя преимуществ нода (низкий объем памяти, скорость и JavaScript).
Я тоже думаю что вокруг Node много шума а для большинства web приложений от асинхронности столько же пользы сколько от реактивного двигателя для трактора. Но использовать один и тот же язык внутри браузера и на сервере разумно. Поэтому я продвигаю Akshell — попробуйте и убедитесь сами что server side JavaScript это круто.
Вот ещё одна полезная ссылка с удалёнными вакансиями: https://www.toughbyte.com/positions?location=remote
Цифры и правда какие-то заниженные, хотя можно найти варианты куда привлекательнее. У нас, например, есть позиции, на которых вилка до 4,5к евро: https://www.toughbyte.com/positions?skill=&location=Budapest%2C+Hungary&level=#search
По поводу языка, я не согласен. Используя модули и packages, очень даже удобно работать с большими проектами. JavaScript благодаря его динамичности очень компактный а прототипы позволяют писать код в разных стилях начиная с процедурного вплоть до функционального.
Большинство приложений можно и нужно писать в синхронном стиле. На Ноде это можно сделать с fibers и моей библиотекой Common Node.
Ссылка на бенчмарки в README.
А в акшеле stack trace видно в HTML в Preview и в Eval консоле тоже. Добавь строку 'throw new Error();' и убедись сам(а).