Пользователь
0,0
рейтинг
13 января 2013 в 18:22

Разработка → JavaScript: от начала до конца

TL;DR
Эта обзорная статья. Такое себе "краткое содержание предыдущих серий". Она будет полезна для новичков, или тех, кто не следил за отраслью в последнее время. Для новичков это будет первый шаг во "Вселенную JavaScript", бывалые смогут освежить свои знания.

У JavaScript очень удивительная судьба. Он преодолел путь от самого не понимаемого до самого удивительного языка. У него было тяжелое детство:
Изначально Автор хотел написать функциональный язык. Но менеджеры хотели получить, «обычный» объектно-ориентированный. И чтобы было легко искать разработчиков для новоиспеченного языка синтаксис решили сделать похожим на Java и даже название сделали похожим.
Но на этом история не заканчивается. Java, JavaScript это торговые марки Sun (а теперь Oracle). Microsoft не мог воспользоваться именем JavaScript (Netcape и Sun дружили против Microsoft). В результате Microsoft решил сделать реверс инжиниринг JavaScript и назвал его JScript. Сделали реверс инжиниринг, и сделали его настолько хорошо, что даже содрали все баги в реализации. Позже решили сделать стандарт и назвали его ECMAScript.

Bad parts


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

Язык программирования со слабой типизацией, с ошибками в реализации, с тяжелым наследием, с особенностями функционального языка вызывает только одно ощущение — «КАК? НУ КАК?». Постоянно пополняемый список «перлов» можно почитать здесь.

Чтобы не сойти с ума при работе с JavaScript, надо понимать, как работает слабая типизация, как работает область видимости переменных (глобальные переменные зло), как работает this, prototype и конструкторы. Также поможет jshint, чтобы избегать «плохие части» языка.

Вся эта история более подробно рассказана во второй лекции Дугласа Крокфорда. А лучше посмотреть все 8-серий. Там есть титры ;).

Стоит отметить, что, несмотря на все минусы, у автора получилось сделать первый функциональный язык, c таким широким распространением. У Крокфорда есть вводная статья про функциональную природу JavaScript.

Базовые вещи, которые нужно понять (следующие из функциональной/асинхронной природы языка) это: что такое control flow и как он помогает при работе с асинхронным языком и как работает обработка ошибок (try/catch не всегда помогают).

JSON, AJAX и кроссбраузерность


Следующим этапом в развитии JS были JSON, AJAX и кроссбраузерная разработка. Огромный скачок в этом этапе сделан благодаря jQuery. Очень рекомендую ознакомиться с туториалом от Джона Резига (автор jQuery). В туториале показаны некоторые приемы, использованные при создании jQuery. Или можно посмотреть интересные идеи непосредственно в исходниках jQuery. Также интересные приемы рассмотрены в JavaScript patterns и в essential js design patterns. Если для вас это все еще сложно, то можно ознакомиться с более базовыми вещами здесь: JavaScript Garden, eloquentjavascript

Flash off


HTML5 (html5rocks, diveintohtml5) и CSS3 вытеснили Flash из браузеров (ну еще не до конца, но это только вопрос времени). Отдельное спасибо за это Стиву Джобсу. Теперь в распоряжении у JS есть: Canvas, WebGL, WebSockets, WebWorkers, Audio, Video и т.п.

Server-side


Гугл разродился браузером. И ускорил JavaScript до нельзя, подарив всему миру V8. Из которого в свою очередь родился NodeJS (by Ryan Dahl). Так JS попал и на сервер. Казалось бы куда дальше, и так заняли весь веб-стек технологий. Но и это не конец, JavaScript умудрился вытеснить еще и SQL. Спасибо парням из 10gen за MongoDB. Еще по теме: SQL to MongoDB, sql comparison.

Все уже и сами могут сделать этот вывод, но я это скажу вслух напишу: теперь разработать веб приложение от начала и до конца можно, зная только JavaScript (html и css не в счет).

Ложка дегтя


  • NodeJS еще не дошел до версии 1, есть еще ряд не закрытых вопросов. Т. е. понятно, как написать чат на NodeJS, но как быть с большими и сложными проектами?..
  • Нет нормальных туториалов, так как технология активно развивается, и они быстро устаревают.
  • Разработка модулей происходит стихийно. Многие модули заброшены. Заходишь на Github и видишь, что последний коммит был около года назад.
  • Нет «взрослых» фреймворков. Есть «молодые» подающие надежду проекты. Но нет фреймворков уровня рельсов.
    Лирическое отступление
    Есть мнение, что в последних рельсах очень высокий порог входа, но на самом деле это потому, что в рельсах решены все стандартные задачи и тебе не надо изобретать велосипед каждый раз. Фреймворки для node оставляют много пространства для фантазии (не хватает CoC). Если посмотреть на проекты на Express (дефакто веб-фреймворк), то вы не найдете и двух одинаковых проектов. Кто-то настройки складывает в config.js, кто-то центральное приложение делает как модуль для тестирования, кто-то использует синтаксический сахар для автозагрузки модулей и т. п.

Скорее всего это «подростковые прыщи», которые со временем пройдут. Но пока это еще актуально.

Дальше больше


Фронтенд разработка


Наконец-то фронтенд разработка выбралась из каменного века, когда все делалось вручную. Появились инструменты для автоматизации (инструмент написанный на js специально для этих целей) и менеджер пакетов (я знаю, что это не первый менеджер, но будем надеяться, что этим будут пользоваться все). Все это собрано в кучу в проекте yeoman. Если говорить про yeoman, нельзя не упомянуть: html5-boilerplate и bootstrap

MV*


Вместе с Ajax появились и первые «тяжеловесные» библиотеки/фреймворки: ExtJS, YUI и т. п. Но они громоздкие и неудобные. JQuery c другой стороны более легковесный и привычный, но так как это библиотека, а не фреймворк, он и не предлагает метод структуризации кода. На помощь пришел Backbone. Следом за Backbone появилось много MV* фреймвокров. О них уже рассказывали: статья на Хабре, продолжение и статья на английском. А также можно сравнить фреймворки «на практике», почитав исходники на todomvc.

Angular


Этот фреймворк примечателен тем, что он пытается принести DataBinding в JavaScript. Это не единственный фреймворк который это делает. Но авторы на этом не останавливаются и хотят принести нативную поддержку DataBinding в браузеры. Они разрабатывают спецификацию «model driven views» вместе с командой Chrome. Ну еще он хорош, потому что есть хорошая документация, видео, заложено тестирование. Он довольно легкий и хорошо интегрируется с другими библиотеками.

Meteor


Именно за этим фреймворком (и ему подобными) будущее NodeJS. И вот почему, сам по себе JavaScript на сервере это еще то «удовольствие». Мы то с вами понимаем, что все эти рассказы про бешеную производительность из-за асинхронности — это только маркетинг. Скорость, отказоустойчивость, способность выдержать нагрузку определяется не ЯП, а архитектурой. От того, как организованы хранение данных (шардинг), кеширование, очередь задач, распределенные вычисления и от отсутствия узких мест (bottleneck) и т. п. Понимая это, я бы лучше выбрал ЯП, на котором легко писать и легко поддерживать большую базу кода, для которого есть много готовых решений (намекаю на RoR). Узкие места, требующие огромной производительности, распределенные вычисления и т. п. можно написать на Erlang, Java или С.

Но то, что может Meteor, не может предложить ни одна другая технология: полное повторное использование кода с сервера на клиенте (или наоборот), ну и еще маленькая тележка магии (датабиндинг, клиентский хот релоад...).
Его единственное преимущество является и его минусом. Клиентский и серверный код не разрывны. Meteor не очень подходит для тех случаев, когда клиент делается с использованием другой технологии. Например, нативный мобильный или десктопный клиент.
Кстати в ближайшем конкуренте Meteor derby этот вопрос решаем. Так как они используют Express и гораздо меньше магии, то к нему можно прикрутить REST API.
Если подумать, это не первая попытка уйти от классического клиент-северного подхода. До этого был, например, GWT. Но все предыдущие попытки были менее эффектны и это был не JavaScript.

Mobile


Мало того, что JS добрался до мобильных браузеров и выжил Flash, он еще претендует и на место нативных приложений. Это стало возможно благодаря Adobe Phonegap (ядро проекта было отдано в open-source под названием Appache Cordova).
Если добавить библиотеки для мобильных устройств, например: jQtouch, Sencha Touch, zepto; то получатся приложения с «нативным интерфейсом». Вот как смешать angular и jqtouch под PhoneGap
Если добавить движки для игр, то получатся мобильные игры и т. п.

Desktop


Давно уже существовали попытки сделать написание десктопных приложений таким же простым, как написание веб приложений. Вот одни из последних претендентов: tidesdk, Packaged apps от Google Chrome.
Есть другие подобные проекты, о которых ранее рассказывали на Хабре: AppJS, Node Webkit.

Заменители JavaScript


После того, как все сообразили, насколько важное место занимает JavaScript, решили придумать что-то более удачное, чем JavaScript. Есть куча ЯП, которые могут быть скомпилированы в JS. Среди этих проектов особенно можно выделить:
Конечно при таком подходе с языками «посредниками» проблема с дебагом на лицо. Она решается с помощью Source Maps.

Итого


JavaScript очень своеобразный язык, с родовыми травмами, которые в разные времена пытались решить по разному: jslint, заменители JavaScript, es6. Но не смотря на все проблемы, JavaScript активно развивается и набирает обороты: сообщество растет, инвестиции вливаются. Все интересное еще впереди!
kotiara @kotiara
карма
63,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (116)

  • +4
    Пишите, пожалуйста, или JavaScript, или уже джаваскрипт. Ява режет слух.
    • +3
      исправлено
      • +39
        Мне «джаваскипт» режет. Исправляйте назад! :)
        • 0
          Запомните простое правило:
          Jazz — Джазз
          JavaScript — Джаваскрипт
          Вы же не будете говорить вместо Джазз — Язз. Так и не говорите Яваскрипт.
          • +14
            Волнуюсь за остров.
          • +9
            Я говорю яваскрипт и мне плевать
          • +1
            Я придерживаюсь джаваскрипта, но остров Ява = Java :)
          • 0
            Juan — Хуан. Буду говорить ХаваСкрипт.
            • 0
              Nagila Java
          • 0
            Jazz, здоровенный jazz!

            Простите, не удержался :)
          • +1
            Тогда и кофе правильно называть Джакобс? По моему нет строгого правила произношения слов начинающихся с «Ja»
            • 0
              Jacobs ведь и фамилия. И послушайте, как их называют в фильмах. Джон, Джейкобс.
        • 0
          Стив, простите, Йобс.
    • +1
      Эээ. А ничего, что язык назван в честь острова Ява?
      • +6
        Если быть точным, то в честь сорта кофе, который производится на одноименном острове.

        А Джава (если верить русской википедии) — это поселок в Осетии ))

        Иностранцы, ее произносят как Джава. Но я думаю, что это дело вкуса. Поэтому исправил на JavaScript.
        • +9
          Если быть ещё более точным, JavaScript назван в честь Java, который назван в честь кофе, который назван в честь острова, который в честь чего назван, наверное, только туземцы знают.
          • +10
            В доме который построил Джек…
            • +1
              Ек)
          • 0
            Туземцы не знают, точная этимология слова Jawa неизвестна.
            • +1
              санскритское название Явы (Иабадиу, т.е. Явадвипа) с точным переводом — «остров ячменя» («География» Птолемея)
              • 0
                Это только одна из версий
                en.wikipedia.org/wiki/Java#Etymology
                • +1
                  ну да, версия. Зато какая цепочка от ячменя до веб программирования. Вот кстати перевод на русский ru.knowledgr.com/00047101/Ява. Непонятно почему люди сразу в википедию это не написали
              • +4
                ЯчменьСкрипт? :)
                • –1
                  Популярен у туземцев, не взошедших на ступень цивилизации. Надо же им как-то поля обрабатывать?! :)
                  • –2
                    public mozg extends tuzezemec {
                    protected int sborYachmenya {
                    while(true) {
                    Chelovek.goto(pole);
                    boolean estEchmen = lookFor(yachmen);
                    if(estEchmen) { take(find(yechmen));} else {goto(home);}
                    }
                    }
                    }
                    • 0
                      Тогда уж так:

                      class Farmer extends Worker {
                      
                        public void harvest (Field field) {
                          moveTo( field );
                          while( field.remains() ){
                            container.push( field.getSpica() );
                          }
                          goHome();
                        }
                      
                      }
                      
        • –7
          Вот первоочерёдно с чёт оссоциируется у меня «Ява», хотя мне всего 20 лет:

          Ява (мотоцикл) — мотоцикл, производимый сначала в Чехословакии, затем в Чехии.
          Ява (марка сигарет) — марка сигарет.

          На счёт кофе и острова впервые сейчас услышал, спасибо :)
          • +1
            в 20 лет впервые услышали о острове Ява? о_0
            • 0
              а о нём нужно знать?
              • +2
                есть такое понятие как общая эрудиция.
                А если его не принимать во внимание, то в общем-то и не обязательно знать о каком-то замкадном острове.
                • 0
                  Странная аргументация. А если бы я например жил не в Москве, а в Молдавии, то вы бы сказали — «зачем знать, что то кроме своего захалустного села». Так легко аргементировать обо всём. Ну и я очень сомневаюсь, что вы знаете все географические объекты, если только это не одна из ваших основных профессий/направлений учёбы.
                  • +2
                    а вы и впрямь москвич? :) Извините, что так получилось прям в точку. Просто есть же знаменитая шутка-вопрос: «если ли жизнь за мкадом?». Знакомые москвичи все образованные и эрудированные, так что у меня были поводы сомневаться в правомерности этой шутки. Но оказывается. всё же некоторые основания есть :)
                    Кстати, фраза «зачем знать что-то, кроме своего захолустного села?» выглядит гораздо понятнее без пяти ошибок.
                    Ещё раз извините, я просто в некотором культурном шоке от столь уверенного отрицания общей эрудиции. Неужели вам в самом деле ни разу не было интересно покрутить глобус и посмотреть на планету, на которой живёте, хотя бы так? Неужели никогда не было интересно почитать википедию о замкадных странах?
                    Все географические объекты знать вряд ли возможно. И вряд ли интересно. Например, большинству наверняка не интересно ничем не примечательное пересечение улиц Кастро и 18 в Сан-Франциско, когда для меня лично оно связано с воспоминаниями и значит много. Но все знают о существовании такого города. Кстати, а вы знаете? Так, на всякий случай спрашиваю, хотя понимаю, что этот город тоже знать незачем.
                    Ещё раз извините за много слов. Но уверяю, гордиться тут совершенно нечем.
                    • 0
                      Ещё раз извините, я просто в некотором культурном шоке от столь уверенного отрицания общей эрудиции

                      Мне вот интересно. А вы знаете остров «Anguilla»? А остров «Tawi-Tawi»? Найдёте сходу остров «Enggano»? Может вы в секунду скажете, где находится «Heard lsland and McDonald Islands»? Как на счёт острова «Bouvet»? Если вы не знаете хоть один из этих островов, то откуда у вас «столь уверенное отрицание общей эрудиции»? Почему вы не знаете этих островов?

                      Я вот знаю остров «Ява». Но совершенно не понимаю, почему люди обязаны его знать. Чем он примечательнее других островов, которые я назвал выше?

                      Зато я знаю другое. Вы — сноб. И «уверяю, гордиться тут совершенно нечем». Вы кичитесь каким-то «особенным» знанием, которое знает огромное количество других людей, но которое совершенно не обязательное даже для общей эрудиции.
                      • +1
                        Чем он примечательнее других островов, которые я назвал выше?

                        Ну хотя бы тем, что это самый населенный остров на Земле.
                        • –2
                          Вообще-то не этим в первую очередь, а всего лишь тем, что в отличие от многих других имеет отношение к обсуждаемой теме.
                          • +1
                            Знать о острове Ява — не обязательно, но по сути частенько где можно упоминание найти. Так что тут все проще, и не надо к людям придираться. А ваш довод глуп. Это логика аля «если я это знаю то и ты должен знать». Так только аутисты думают, и вы явно не один из них.
        • 0
          Да, я служил там. Населенный пункт Джава.
      • +7
        Эээ. А ничего, что язык назван в честь острова Ява?

        Вечный контраргумент — как вы читаете "Job"?
        • +2
          Еще в копилку. Jakob — в русской традиции читается как Яков
          • +1
            А не Джейкоб? Как Яков читается исходное еврейское имя, которое на самом деле звучит как Иаков.
            • 0
              А баптист Джон так и вовсе оказывается Иоанном крестителем…
              Бессмысленно сравнивать традиции произношения имен исторических личностей и современных имен. Американец по имени Jakob по-русски будет Джейкобом, русский мигрант Jakob, вероятнее всего, окажется Яковом, а герой книги Jakob, с намеком на библейского персонажа — Иаковом.
            • 0
              Русскими буквами невозможно правильно написать как оно звучит, ибо аин (ע) в יעקב произностится очень гортанно (хотя мало кто ее правильно произносит даже в Израиле). И не с И а с Й, йуд тут играет роль согласной.
          • +2
            ru.wikipedia.org/wiki/Jacobs вот вам еще в копилку
        • +4
          А как вы читаете «Jägermeister»?
          • +1
            А Java — это немецкое название?
            • +5
              А что, английское? Они только название острова адаптировали под язык.
        • +6
          Вечный контрконтраргумент — а ничего, что Job — первоначально английское слово, а Java — имя собственное, которое должно произноситься максимально близко до оригинального звучания, а не быть дважды перекручено во время переходов через адаптации к другим языкам?
          • 0
            Да даже «первоначально английские» слова могут произноситься совсем не так, как пишутся. Чего далеко ходить — colonel ;-)
            • +2
              Первоначально английские, а то как же.
              colonel (n.)
              1540s, coronell, from Middle French coronel, modified by dissimilation from Italian colonnella «commander of a column of soldiers at the head of a regiment,» from compagna colonella «little column company,» from Latin columna «pillar». English spelling modified 1580s in learned writing to conform with the Italian form (via translations of Italian military manuals), and pronunciations with «r» and «l» coexisted 17c.-18c., but the earlier pronunciation prevailed.
              • 0
                С таким подходом все слова рано или поздно были откуда-то да позаимствованы.
                • 0
                  Ну почему же. Вот вышеупомянутый job — возник в Англии, а не позаимствован.
                  • +4
                    В Дании возник…
          • +1
            Где-то на просторах хабра видел комментарий, в котором всем любителям называть JavaScript яваскриптом предписывалось использовать вместо «джаз» — «йааазь».
        • +2
          Да тут как бы не вопрос правильной транслитерации — я о том, что в русском языке традиционно (уж лет 200 не меньше) Java транслитерируется как Ява.
          • 0
            Я думаю, что проблема в том, что разработчикам, которые общаются с иностранцами такое произношение коробит.
            • +2
              Вполне может быть. А почему оно коробит русскоязычных разработчиков при общении с русскоязычными разработчиками? «Лондон» и «Вашингтон» тоже коробят?
        • +1
          На каком языке?
        • 0
          У нас преподаватель (женщина) в универе говорила без палева слово вjobбывать (вджобывать, то бишь работать). Ну, естесственно, от слова job :)
    • +1
      Ожидал увидеть в комментариях холивары про Flash vs JavaScript, но никак не про произношение :-))
  • +4
    Заголовок «JavaScript — с миру по нитке» подошел бы больше.
    • +4
      Но есть много хороших ссылок. Спасибо за wtfjs.com/
  • 0
    О Adobe Phonegap: помню делали одну app-у на нем, там было еще все бесплатно и никаких логотипов Adobe, потом, спустя буквально месяц, смотрю — уже Adobe. Первая мысль: да, все с ним будет ок, если такие большие компании, тем более изначально не сторонники этой технологии (читай «родители» флеша), верят в это.
    • +1
      Пощупал её и ужаснулся её тормозам.
      • 0
        Есть куча способов сделать приложение на Phonegap менее тормознутым, и наоборот, сделать нативное приложение тормозом. Для серьезных проектов оно не годится, но скажем если приложения являются как сопроводительная часть а не как основная, то первые версии имеет смысл делать на Phonegap.
        • 0
          IMHO: пока что он годиться для приложений (а не динамических игрушек). Не сложная анимация на моем Nexus 7 работала отлично, но уже на HTC One V (не такой уж и слабый смартфон) — фпс падал до уровня слайдшоу.
          • 0
            Там есть еще и нативные плагины, за счет которых можно исправить фпс в некоторых кейсах.
    • 0
      да ладно? Адоб не был родителем флэша.
      И то, что он купил phonegap, тоже ещё ни о чём толком не говорит.
      Да, перспективно и модно. Но если не взлетит, с лёгкостью откажутся, как сейчас отказываются от флэша.
  • +27
    JavaScript — один из самых невероятных инсайтов в истории разработки языков программирования.

    Создатель JS исходил из двух основных предположений:

    (а) предметная область такова, что большинство объектов уникальны; отсюда была выбрана прототипная объектная модель (не пиши классы — описывай объекты и клонируй их), разработана система удобного описания сложных уникальных структур (литералы — то, что потом назовут JSON), а также дозволена максимальная гибкость переопределения/доопределения объектов в рантайме;

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

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

    А все эти дурацкие стьюпиды, связанные с неявным преобразованием типов, — какие-то пугалки для младших разработчиков, никаких особых проблем они не доставляют при соблюдении минимальной гигиены в коде.
    • +1
      Чем хороша прототипная объектная модель, так это отсутствием для разработчиков необходимости создавать, поддерживать и развивать сложную библиотеку стандартных классов, как в Java, и отсутствием опасности получить широкий разнобой библиотек классов, претендующих на стандартность.

      Гибкость до- и пере-определения объектов, в том числе и базовых, в рантайме тоже в значительной степени обусловлена тем, что язык делали максимально быстро, так что решение вопросов типа «как делать библиотеку для сообщений с параметрами типа 'File {0} cannot be opened for writing'» отдали на откуп разработчикам, позволив в рантайме добавлять новые методы к объекту String и сняв с себя головную боль по определению «по возможности заранее максимально оптимального на все случаи жизни» их стандартного набора. Решение оказалось весьма мудрым.
      • 0
        Извиняюсь за некий сумбур: в первом абзаце имелись в виду разработчики самого языка программирования, во втором — разработчики программ на этом языке программирования.
  • –4
    >приложение от начала и до конца можно, зная только JavaScript (html и css не в счет).

    есть же способы генерации html\css через js.
    • 0
      Есть даже способы их рендеринга, но речь была не об этом ;-)
    • 0
      Суть в том что для генерации html/css вы должны знать что из себя представляет html/css. Даже если взять готовый набор компонентов, от необходимости знать синтаксис вас это не избавляет. Но согласитесь, сверстать страничку и написать логику на JS намного удобнее, чем брать Qt/GTK и писать кросплатформенные приложения, а тем более просто писать несколько версий приложений под каждую платформу.
  • +10
    Гугл разродился браузером. И ускорил JavaScript до нельзя, подарив всему миру V8. Из которого в свою очередь родился NodeJS (by Ryan Dahl). Так JS попал и на сервер.

    Не совсем так… JavaScript попал на сервер практически с самого рождения серверного программирования. Один из самых первых серверов, Netscape Enterprise Server, уже в 1996 году в качестве серверного языка использовал JavaScript.

    В противоположенном лагере была популярна технология ASP, где в качестве скритовых языков использовались VBScript и JScript. Так что и Windows уже лет 15 прямо «из коробки» поддерживает серверный JavaScript.

    Это только мейнстрим. Кроме него было еще несколько десятков менее популярных реализаций.
    • 0
      Не поспоришь. Но это был совсем хардкор и экзотика. Никогда до NodeJS не видел вакансии серверный JavaScript разработчик. А сейчас регулярно вижу. Технология ожила, ей действительно пользуются
      • +4
        Не поспоришь. Но это был совсем хардкор и экзотика.
        Да, существовали и экзотические решения. Но была и ASP — абсолютно мейнстримовая технология, занимавшая до трети рынка. Кстати, во многом похожая на PHP.

        Никогда до NodeJS не видел вакансии серверный JavaScript разработчик. А сейчас регулярно вижу.
        Вакансий было полно, просто они назывались по другому: не «серверный JavaScript-разработчик», а просто «ASP-разработчик». А ASP-разработчики (до ASP.NET), как правило, использовали либо VBScript (чуть чаще), либо JScript (чуть реже).

        Но, я, конечно, нисколько не отрицаю, что Node.js вдохнул в серверный JavaScript новую жизнь и перевел его на новый уровень.
  • –3
    Интересно, когда уже разработчики браузеров скооперируются и введут наконец VM, исполняющую байт-код вместо текстовых скриптов? Неужели до этого так трудно додуматься? Ведь очевидно же, что необходимость такой машины явно назрела, раз начали плодиться новые языки для web-разработки и их компиляторы в JS.
    Тем более, сам язык не слишком-то удачен и весьма ограничен. При работе с ним то и дело возникают затыки в реализации простейших вещей, которые на любом нормальном языке реализуются на раз-два. Попробуйте например на JS создать lazy-массив и вообще поработать с ленивыми вычислениями. Да он даже перегрузки операторов не поддерживает! Совершенно невозможно перегрузить например обращение к элементу массива "[ ]".
    Хуже того, нет возможности создавать классы с множественными конструкторами. Да собственно и классов-то нет, есть лишь попытки эмуляции нормальной ООП-системы разной степени удачности. Уж не говоря о том, что JS — язык со слабой типизацией, что довольно хреново при работе с большими проектами.
    Да к тому же в последнее время JS начинает напоминать нагромождение непонятных костылей. Например, я сильно удивился, впервые увидев в JS-коде перловский «use strict»…
    • +1
      разработчики браузеров не могут скооперироваться и всё к одному стандарту привести, а вы VM хотите
    • +2
      А какой язык вы считаете «удачным»? Просто любопытно
      • +1
        Из скриптовых языков очень удачен Python. Недостатки конечно есть (особенно разделение на 2.7/3.3), но в целом Python и Javascript — это просто небо и земля.
        Также очень хорошо продуман C#. Вот если бы его можно было использовать для создания сценариев или компилировать в JS…
        • 0
          Вот если бы его можно было использовать для создания сценариев или компилировать в JS…

          На правах оффтопика: обратите внимание на Kotlin. Одной из колерфич заявляется компилирование как в байткод jvm, так и в JavaScript.

          На странице демонстрации есть возможность опробовать и эту фичу.
        • +1
          Вот если бы его можно было использовать для создания сценариев или компилировать в JS…

          Выбирайте здесь или здесь (вот эта ссылка есть в посте)
          • 0
            Что-то у вас устаревшая таблица по второй ссылке. По крайней мере для C# -> JavaScript.
        • +1
          Также очень хорошо продуман C#. Вот если бы его можно было использовать для создания сценариев или компилировать в JS…


          Давно можно с помощью scriptsharp например.
          Я пишу статью для хабра на тему написания универсального C# кода для последующей компиляции в JavaScript, Mono. Надеюсь, она много кому окажется полезной.
      • –1
        Не могу сказать удачна ли реализация или нет, но сейчас разрабатывается очередная замена Javascript, на этот раз с Haskell синтаксисом. Называется Fay. Проект является одним из наиболее популярных на Гитхабе в разделе Haskell. Правда документации пока маловато по нему.
        • 0
          Как-то посмотрев на сравнение Fay и JS синтаксиса на ум пришла мысль, что примеры для JS уж сильно усложненные.
    • +1
      Вообще уже давно. JVM и AVM эти машины зовутся.
    • 0
      Интересно почему минусы ставят… Из за наездов на кривость JS?
      Я был бы рад, если бы в браузере сделали более низкоуровневую VM (llvm какой-нибудь например) и позволяли загружать код для неё. Написание трансляторов наверняка упростилось бы, скорость оттранслированного кода возросла бы. Желающим обфусцировать свой код тоже было бы попроще.
      Хотя, конечно, есть llvmjs или какой-нить google NaCl, но они популярности не получили и мейнстримом не стали.
  • –1
    Да закопайте уже стюардессу, пожалуйста.
    • +1
      Вы о чем конкретно?
  • +5
    И чтобы было легко искать разработчиков для новоиспеченного языка синтаксис решили сделать похожим на Java и даже название сделали похожим.
    Это какая-то новая интерпретация для меня. Язык назывался LiveScript, по маркетинговым соображениям его за какое-то время до выпуска переименовали в JavaScript.

    Чем JS на Java похож-то?
    • –1
      Вы еще вспомните название спецификации, а также названия языков, которые по ней идут.
    • 0
      Из того что я могу придумать:
      1) Аналог боксинга/анбоксинга примитивных типов в объекты этих типов (у Флэнагана это враппинг называется, если не ошибаюсь).
      2) Точка, как средство доступа к методам объекта.
      3) То, что у любого объекта есть неявный прототип object (в java несколько помню у всех объектов предок Object).

      Конечно это все «косметические» сходства и реально Java и JS очень далеки.
      • +1
        Это так любой язык к любому другому можно притянуть. А ещё он на Си похож, прям близнецы-братья: if, {}, for и так далее.
        • 0
          Так это потому, что Java взяла этот синтаксис из С. А С взял какие-то вещи из Fortran. Посмотрите лекцию Крокфорда, там все подробно рассказано
          • 0
            Да я знаю что откуда. Потому и можно (почти) любой язык к любому другому за уши притянуть. Все у друг друга что-то берут. И только Brainfuck единственный и неповторимый уродец. :-D
            • 0
              Отчего же? Хаскел очень даже уникальный и хорошо продуманный язык. Только вот я его так и не осилил.
  • +1
    Гугл разродился браузером. И ускорил JavaScript до нельзя, подарив всему миру V8. Из которого в свою очередь родился NodeJS (by Ryan Dahl). Так JS попал и на сервер.
    Да не так он туда попал. Он оттуда не исчезал никуда. Сто лет назад был какой-то веб-сервер у Нетскейпа, который поддерживал JS на сервере, были ASP у Микрософта, где поддерживались JScript и VBScript.

    Так что JS на сервере уже давно.
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      А, так это форк Titanium! Тогда многое понятно.
      • 0
        Чтобы два раза не заходить, сразу скажу, что на мой взгляд node-webkit проще в употреблении, нежели TideSDK, когда речь идёт о создании приложений с графическим интерфейсом на десктопах методами веборазработки.

        Хотя у TideSDK, с другой стороны, больше возможностей.
        • 0
          node-webkit проще в употреблении, нежели TideSDK, когда речь идёт о создании приложений с графическим интерфейсом на десктопах методами веборазработки

          Я думал, что в этом они одинаковые так как используют одни и те же веб-технологии (html, css, js). Или я что-то не понимаю?
  • +2
    --удалённый коммент--
  • 0
    > JavaScript очень своеобразный язык, с родовыми травмами
    Это уж точно!
  • –1
    Не думаю что начинающие могут читать на английском…
    А так — да. Хорошая статейка для истории языка — как раз сейчас читаю спецификацию и принципы работы
  • 0
    Кстати в ближайшем конкуренте Meteor derby этот вопрос решаем. Так как они используют Express и гораздо меньше магии, то к нему можно прикрутить REST API.

    Только derby используют socket.io, что совсем меняет картину.
    • 0
      Только derby используют socket.io, что совсем меняет картину.

      Можете подробней объяснить, что вы хотели сказать?
      • 0
        Socket.io ещё не стабилен на высоких нагрузках. Про meteor к сожалению ничего не могу сказать, не работал с ним.
        • 0
          Socket.io ещё не стабилен на высоких нагрузках

          Что значит не стабилен? О какой именно не стабильности вы говорите?
          • 0
            Вот issue, которую уже год решить не могут, обещают решение со стабильной версии 1.0 с переходом на ядро engine.io, которое на мой взгляд ещё сырее и что там ждёт неизвестно. :)
  • –1
    Я внимательно прочитал статью, но не нашел ответа на самый главный свой вопрос: с чего начать если знаний по джаваскрипту вообще ноль?
    • 0
    • +1
      "David Flanagan - JavaScript: The Definitive Guide, 6th Edition". Есть русский перевод "Дэвид Флэнаган - JavaScript. Подробное руководство (6-е издание)". Важно именно 6-ое издание, за 2012-й год, ибо даже 5-ое выпущено в августе 2006-ого и уже устарело очень сильно.

    • 0
    • 0
      Сначала можно посмотреть лекции Крокфорда (хотя бы вторую).
      Потом можно почитать Eloquent JavaScript (может как базовую книгу кто-то посоветует другую)
      Потом пройти туториал Резига
      Потом досмотреть все лекции Крокфорда.
      А дальше можно пересмотреть все оставшиеся ссылки из статьи (wtfjs, js patterns...)

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