Отдел фронтенд-разработки компании Лайв Тайпинг перевёл для читателей Хабра большой материал о зарождении, развитии и перспективах языка JavaScript, вышедший в блоге сервиса Auth0. Сегодня мы публикуем первую часть перевода. Соперничество Netscape и Mosaic, грёзы об интерактивном вебе, язык программирования для не-программистов, переход от классов к прототипам и что общего между JavaScript и ECMAScript (спойлер: всё).



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

Все началось в 90-е


События, в результате которых появился JavaScript, разворачивались в течение шести месяцев, с мая по декабрь 1995 года. Компания Netscape Communications уверенно прокладывала себе путь в области веб-технологий. Её браузер Netscape Communicator успешно отвоевывал позиции у NCSA Mosaic, первого популярного веб-браузера. Netscape была создана людьми, принимавшими участие в разработке Mosaic в ранние 90-е. Теперь, с деньгами и независимостью, у них было всё необходимое для поиска способов дальнейшего развития веб-технологий. Именно это послужило толчком для рождения JavaScript.

Основатель Netscape Communications и бывший участник команды Mosaic Марк Андриссен считал, что веб должен стать более динамичным. Анимации, взаимодействие с пользователями и другие виды интерактивности должны стать неотъемлемой частью интернета будущего. Веб нуждался в лёгком скриптовом языке (или языке сценариев — прим.ред.), способном работать с DOM, который в те дни не был стандартизирован. Существовало одно «но», являвшееся на тот момент серьёзным вызовом: этот язык не должен был предназначаться для крупных разработчиков и прочих людей, имевших отношение к инженерной стороне вопроса. Java в те дни уже активно развивалась и твёрдо заняла эту нишу. Таким образом, новый скриптовый язык должен был предназначаться для совершенно иной аудитории — дизайнеров. Очевидно, что веб был статичным, а HTML был достаточно молод и прост в освоении даже для тех, кто не имел ничего общего с программированием. Следовательно, всё, что должно было стать частью браузера и сделать веб более динамичным, должно быть максимально понятным для далёких от программирования людей. Из этого предположения родилась идея Mocha, который должен был стать тем самым простым, динамичным и доступным скриптовым языком.



И тут в нашей истории появляется Брендан Айк, отец JavaScript. Айк должен был разработать для Netscape «Scheme для браузера». Scheme — это динамичный, мощный и функциональный диалект языка программирования Lisp с максимально упрощённым синтаксисом. Вебу требовалось что-то подобное: простое в освоении, динамичное, немногословное и мощное. Айк не стал упускать шанса поработать над тем, что ему нравилось, и присоединился к команде.



Перед командой была поставлена задача подготовить работающий прототип в кратчайшие сроки. Sun Microsystems заканчивала работу над своим языком программирования Java, на тот момент называвшимся Oak, и Netscape Communications была уже готова заключить с компанией контракт, чтобы сделать Java доступным в своем браузере. Так зачем же понадобился Mocha (первое название JavaScript)? Зачем нужно было создавать абсолютно новый язык программирования при наличии готовой альтернативы? Дело в том, что Java не был предназначен для той аудитории, на которую ориентировался Mocha — скриптеры, любители, дизайнеры. Java был слишком большим и навороченным для того, чтобы выполнять эту роль. Основная идея заключалась в том, что Java должен был предназначаться для крупных разработчиков и профессиональных программистов, в то время, как Mocha должен был использоваться для небольших скриптовых задач. Другими словами, Mocha должен был стать скриптовым компаньоном для Java по принципу, аналогичному тому, как взаимодействуют C/C++ и Visual Basic на платформе Windows.

Инженеры Netscape приступили к детальному изучению Java. Они даже начали разрабатывать собственную виртуальную машину Java, однако проект быстро свернули, так как она не могла достичь идеальной совместимости с виртуальной машиной Sun Microsystems.

Проблема скорейшего выбора языка стояла как никогда остро. Возможными кандидатами были Python, Tcl и Scheme. Айк должен был действовать быстро. По сравнению с конкурентами у него были два преимущества: свобода в определении набора необходимых возможностей и прямая связь с заказчиком. К несчастью, имело место и очевидное неудобство: для принятия огромного количества важных решений времени практически не было. JavaScript, a.k.a. Mocha, был рождён именно в таких условиях. В течение нескольких недель был подготовлен рабочий прототип, который затем был интегрирован в Netscape Communicator.

То, что должно было стать аналогом Scheme для браузера, вылилось в нечто совершенно иное. Рукой Айка управляли необходимость закрыть сделку с Sun и сделать Mocha скриптовым компаньоном для Java. Синтаксис должен был быть максимально близким Java. Помимо этого, от Java была унаследована семантика для большого количества устоявшихся идиом. Таким образом, Mocha был совсем не похож на Scheme. Он выглядел, как динамический Java, под оболочкой которого скрывался гибрид Scheme и Self.

Прототип Mocha был интегрирован в Netscape Communicator в мае 1995 года. Через очень короткий промежуток времени он был переименован в LiveScript, так как в тот момент слово live выглядело очень привлекательным с точки зрения маркетологов. В декабре 1995 года сделка между Netscape Communications и Sun была закрыта: Mocha/LiveScript был переименован в JavaScript и преподносился в качестве скриптового языка для выполнения небольших клиентских задач в браузере, в то время, как Java был полноценным профессиональным языком программирования для разработки сложных веб-компонентов.

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

Трудно сказать, как развивались бы события, если бы Айк не успел предоставить рабочий прототип вовремя. Python, Tcl, Scheme, рассматривавшиеся в качестве альтернативы, были совершенно не похожи на Java. Sun было бы трудно принять в качестве языка-компаньона для Java варианты, в корне отличавшиеся от него. С другой стороны, Java долгое время был важной частью веба. Если бы Sun не являлись определяющим фактором, у Netscape было бы намного больше свободы в выборе языка. Но стала бы Netscape разрабатывать собственный язык или воспользовалась одним из существующих? Этого мы никогда не узнаем.

Различные реализации


Когда Sun и Netscape закрыли сделку, и Mocha/LiveScript был переименован в JavaScript, встал ребром очень важный вопрос: что будет с конкурентами? Хоть Netscape и набирал популярность, становясь самым используемым браузером, Microsoft занималась активной разработкой Internet Explorer. С самых первых дней JavaScript показал настолько удивительные возможности в плане взаимодействия с пользователем, что соперничающим браузерам не оставалось ничего иного, кроме как в кратчайшие сроки найти готовые решения, представлявшие собой рабочие реализации JavaScript. В тот момент (и ещё достаточно долго после этого) веб-стандарты оставались достаточно слабыми. Поэтому Microsoft разработала свою реализацию JavaScript, назвав ее JScript. Убрав из названия слово Java, они смогли избежать возможных проблем с владельцами торговой марки. Однако, JScript отличался не только названием. Небольшие различия в реализации — в частности, подход к некоторым DOM функциям — оставили рябь, которая будет ощущаться ещё долгие годы. Бои за JavaScript шли на гораздо большем количестве фронтов, чем названия и таймлайны, и многие причуды этого языка появились благодаря им. Первая версия JScript появилась в Internet Explorer 3.0, увидевшем свет в августе 1996 года.

Реализация JavaScript получила свое собственное название и в Netscape. Версия, выпущенная вместе с Netscape Navigator 2.0, была известна, как Mocha. Осенью 1996 года Айк переписал бoльшую часть Mocha, чтобы разобраться с техническими огрехами и недоработками, возникшими, как следствие спешки при разработке. Новая версия была названа SpiderMonkey. Это название используется по сей день в JavaScript-движке браузера Firefox, внука Netscape Navigator.

В течение нескольких лет JScript и SpiderMonkey были единственными движками JavaScript. Особенности обоих движков, не всегда совместимые, определили вектор развития веба на ближайшие годы.

Основные особенности архитектуры


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

«Решение использовать готовый язык вместо изобретения своего никаким образом не зависело от меня. Установка, поступившая с самых верхов, звучала так: “Язык должен выглядеть как Java”. Это сразу отбросило Perl, Python и Tcl вместе со Scheme. Позже, в 1996 году, к нам зашёл Джон Оустерхаут, чтобы показать Tk и посокрушаться по поводу упущенной возможности для Tcl. Я не горжусь, но я счастлив, что я выбрал в качестве основных ингредиентов функции первого класса по подобию Scheme и прототипное программирование Self. Влияние Java, особенно баги с датами в 2000 году и чувствительность к регистру, стало досадным недоразумением.»Brendan Eich's blog: Popularity

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

Сравните этот пример, написанный на Java:

public class Sample {
  public static void main(String[] args) {
    System.out.println("Hello world!");
    try {
      final MissileSilo silo = new MissileSilo("silo.weapons.mil");
      silo.launchMissile(args[0]);
    } catch(Exception e) {
      System.out.println("Unexpected exception: " + e);
    }
  }
}

с этим примером, написанным на JavaScript:

console.log('Hello world');
try {
  const silo = new MissileSilo('silo.weapons.mil');
  silo.launchMissile(process.argv[0]);
} catch(e) {
  console.log('Unexpected exception' + e);
}

Функции как объекты


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

var myFunction = function() {
  console.log('hello');
}
otherFunction(myFunction);
myFunction.property = '1';

Благодаря тому, что функции рассматриваются как объекты, стали возможными различные функциональные паттерны:

var a = [1, 2, 3];
a.forEach(function(e) {
  console.log(e);
});

Эти паттерны с успехом используются во множестве библиотек, таких, как underscore и immutable.js.

Прототипное программирование


Хотя прототипное программирование стало популярным благодаря JavaScript, впервые оно была представлено в Self. Айк отдавал предпочтение именно этому стилю программирования, оказавшемуся достаточно мощным, чтобы смоделировать более традиционный подход Simula-подобных языков, таких, как Java или C++. По большому счету, классы, реализованные в современной версии JavaScript, не что иное, как синтаксический сахар, которым посыпана прототипная система.

Создатели Self, языка программирования, вдохновившего Айка на введение прототипов в JavaScript, пытались избежать проблем, связанных с объектами в Simula-подобных языках. В частности, ветвление между классами и экземплярами стало причиной многих проблем, присущих Simula-подобным языкам. Неоднократно обсуждалась проблема, возникавшая, когда код программы развивался и становился больше: так как классы являлись архетипом для всех новых объектов, с ростом кода становилось всё сложнее адаптировать базовые классы под новые требования, возникавшие в процессе. Подобной проблемы можно избежать, делая новые экземпляры прототипов, из которых, в свою очередь, создавались бы новые объекты. Это и есть основная концепция прототипов: образец, которому можно задать его собственные параметры. Если прототип не подходил для нового объекта, его можно было клонировать и модифицировать, не оказывая никакого влияния на другие дочерние экземпляры. В языках, основанных на классах, осуществить такой подход крайне сложно.

function Vehicle(maxSpeed) {
    this.maxSpeed = maxSpeed;
}

Vehicle.prototype.maxSpeed = function() {
    return this.maxSpeed;
}

function Car(maxSpeed) {
    Vehicle.call(this, maxSpeed);
}

Car.prototype = new Vehicle();

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

Прототипы сделали JavaScript обманчиво простым, дав разработчикам библиотек огромную силу.

Большая причуда: примитивы и объекты


Пожалуй, одной из самых больших ошибок, допущенных из-за спешки, в которой разрабатывался JavaScript, стало то, что объекты, ведущие себя совершенно идентично, могут быть различных типов. Например, тип строки (Hello world) не совпадает с типом нового объекта String (new String('Hello world')). Это порой приводит к нежелательным последствиям, которые могут сбить с толку.

> typeof "hello world"
< "string"

> typeof new String('hello world')
< "object"

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

«Всё остальное — это извращенная, безжалостная история. JavaScript стал самой популярной клиентской реализацией Java, с которой мог соперничать только Flash, поддерживавший ActionScript — прямого потомка JavaScript.» Brendan Eich's blog: Popularity

По волнам моей памяти: взгляд на Netscape Navigator 2.0 и 3.0


Первая публичная версия JavaScript была встроена в Netscape Navigator 2.0, выпущенный в 1995 году. Благодаря чудесам виртуализации и устаревшим и неподдерживаемым сайтам мы можем заново пережить эти моменты счастья.



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


К огромной радости, годом позже был выпущен Netscape Navigator 3.0, и он очень сильно отличался от своего предшественника:


Обратите внимание, сообщение об ошибке даёт гораздо больше информации о происходящем. Это, в свою очередь, позволяет нам понять, что интерпретатор воспринимает свойство прототипа по-своему. Мы подменяем объект базовым экземпляром Object, слегка модифицируем его, и — вуаля — всё работает! По крайней мере, частично. Судя по всему, присвоение внутри тестовой функции не делает ровным счётом ничего. Вполне очевидно, что впереди будет ещё много работы, и тем не менее, JavaScript в текущем состоянии вполне мог использоваться для большинства задач, и его популярность продолжала расти.

Такие возможности как регулярные выражения, JSON и исключения были ещё недоступны. В последующие годы развитие JavaScript происходило невероятно быстро.

ECMAScript: стандартизированный JavaScript


Первой большой переменой для JavaScript после его выпуска стала стандартизация ECMA. ECMA — ассоциация, созданная в 1961 году с целью стандартизации информационных и коммуникационных систем.

Работа над стандартизацией JavaScript началась в ноябре 1996 года. Стандарту, над которым работала группа TC-39, был присвоен идентификационный номер ECMA-262. К тому моменту JavaScript активно использовался на многих веб-страницах. В этом пресс-релизе 1996 года указано количество в 300000 страниц, использующих JavaScript.

JavaScript и Java лежат в основе Netscape ONE — платформы для разработки интернет- и интранет-приложений. В течение короткого времени с момента своего внедрения в прошлом году новые языки получили признание среди разработчиков, благодаря чему на данный момент существует более 175000 Java-апплетов и более 300000 страниц, использующих JavaScript по всему интернету, согласно www.hotbot.com. — Netscape Press Release

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

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

Краткая история JavaScript. Часть 2
Краткая история JavaScript. Часть 3
Поделиться с друзьями
-->

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


  1. hardtop
    17.03.2017 18:58
    +11

    А ведь Python мог быть, а…


    1. DaneSoul
      17.03.2017 22:24
      +1

      И на месте PHP тоже мог бы быть Python — и получилась бы целостная экосистема — и фронтэнд и бэкэнд на одном языке, но с несколько разным окружением…
      А получилось то, что получилось. :-(


      1. profesor08
        18.03.2017 18:38
        +1

        Можно же на JS писать и фронт, и бэк. Получается вот она, целостная экосистема.


  1. Juralis
    17.03.2017 19:30
    +4

    Уже не так важно, какой был бы выбран язык для веба. Грядут времена, когда можно будет писать для него на любом языке. Интересно будет посмотреть, выдержит ли это испытание js. Очень многие люди были вынуждены использовать js не по доброй воле, а в силу безальтернативности. В этом же причина популярности таких штук как node.js или mongodb. Идея использовать один язык для всех случаев — дюже привлекательна (по крайней мере, в вебе). И пока эту универсальность может дать только js. Но wasm может всё сильно переменить. И тогда будет интересно посмотреть на то, как изменится топ популярных языков. Впрочем, js — хорошая штука и его вряд ли просто так выкинут — легаси он себе нажил на десятилетие вперёд. А во многом именно от объёма легаси-кода зависит спрос на рынке труда и соответственно популярность того или иного языка.


    1. NeoCode
      17.03.2017 19:59

      Да, wasm это весьма неплохая штука. Я рад что к этому наконец-то пришли, надеюсь теперь уже все продумают как следует.


    1. Ryotsuke
      19.03.2017 17:01
      +1

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


      1. Juralis
        21.03.2017 17:30

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


  1. NeoCode
    17.03.2017 19:58
    +1

    Язык неплохой, пусть и с некоторыми странностями.
    Пока еще не писал на нем ничего такого, но только что закончил читать весьма неплохую книгу по JS.
    Конечно после статических языков хочется статической типизации.
    Устранить некоторые странности унаследованные из прошлого.
    Прототипное наследование весьма мудрено, и хотя общая идея понятна, во всякие тонкости просто не стал вдаваться. Здесь хочется больше ясности, а сейчас похоже на какие-то хаки, которые были «открыты» а не «спроектированы», как метапрограммирование на шаблонах С++ (ну не насколько конечно но типа того:) )
    Очень печально что IE как-то всю дорогу шел своим путем и этот след до сих пор чувствуется…


    1. denismaster
      17.03.2017 21:10
      +2

      ES6, TypeScript — обратите на них внимание=)


      1. bjornd
        18.03.2017 09:03
        +2

        ES6

        Тогда уж flow.


  1. sbnur
    17.03.2017 20:14
    +2

    Когда я думаю о javascript, я вспоминаю Данте.

    Земную жизнь пройдя до половины,
    Я очутился в сумрачном лесу,
    Утратив правый путь во тьме долины.


  1. Sad_Bro
    17.03.2017 21:27

    Сам сейчас возвращаюсь на JS. После php, — в плане читаемости кода JS просто выносит, большое количество синтаксических хаков что бы реализовать обыденные вещи способно запутать очень сильно. В то же время ES6 радует положительными тенденциями.
    Ну и горе тем кто выбрал JS первым языком программирования.


    1. DarthWazer
      18.03.2017 13:26
      +3

      Ну у меня JS был первым языком, но почему это горе?


      1. Sad_Bro
        20.03.2017 14:15

        У меня тоже он был первым, поэтому и говорю. Это здорово мне усложнило понимание ООП (инкапсуляции в частности). Был приятно удивлен простоте в Java, php, где не приходится отвлекатся на 'олимпиадные' хаки, а просто делать свое.


  1. nightvich
    17.03.2017 23:21
    +3

    Первая публичная версия JavaScript была встроена в Netscape Navigator 2.0, выпущенный в 2005 году.
    Наверное тут ошибка в дате.


    1. octob3rmut3
      18.03.2017 10:26

      Поправил, спасибо!


  1. hamperok
    18.03.2017 13:26
    +5

    «Краткая история JavaScript. Часть 1» — к статье не дошел, а противоречие в название уже увидел :)


  1. gogo67
    18.03.2017 13:26

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


  1. 8gen
    18.03.2017 13:26
    +3

    Если бы все плакуны выучили технологию в которой работают — не было бы плача по поводу JavaScript


  1. diamond_nsk
    18.03.2017 13:26

    JavaScript, вероятно, является одним из самых важных языков программирования на сегодняшний день.
    — суровое заявление! что значит «самый важный», на сраной козе не подъедешь? :) И есть «не важные» языки?


    1. ardentum
      18.03.2017 17:35

      А вы выключите у себя JS в браузере и, думаю, поймете.


      1. kazmiruk
        18.03.2017 20:44
        +1

        А вы удалите все написанное на С )


        1. profesor08
          19.03.2017 21:13

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


      1. diamond_nsk
        19.03.2017 11:05
        +2

        ну и ничего страшного не произойдет — моя контора сможет и далее плодотворно работать! а вот если выключу 1С — всё встанет колом и фирма обанкротится за неделю. Вывод — жс не важный язык, 1с — очень важный язык (? фреймворк) нашего времени *сарказм*


        1. ardentum
          19.03.2017 21:00
          +1

          ну и как это противоречит утверждению "является одним из самых важных языков программирования на сегодняшний день"? :)


          1. diamond_nsk
            22.03.2017 18:34

            не противоречит, это в ответ на предложение-доказательство:

            А вы выключите у себя JS в браузере и, думаю, поймете.


        1. Pakos
          22.03.2017 15:46

          Конкуренты из другой страны: выключайте, мы тоже у себя 1С выключим, как найдём.


    1. wendel
      22.03.2017 08:24

      Подумайте со стороны вопроса о доступности программирования не только для инженеров с бородами. Для масс нужны простые языки программирования что бы люди технически не сильно подкованные могли в этом разобраться Попробуйте дать человеку который никогда не программировал Javascript и Golang. Golang можно освоить за 2 дня или даже за вечер как и Javascript, но человек который никогда не программировал никогда не освоит Golang за 2 дня (хотя утверждается что Golang это проще простого), а вот Javascript как по мне вполне реально. Javascript важен потому что он действительно везде из за его универсальности и простоты. Веб, mobile, IOT, backend…


  1. romy4
    18.03.2017 13:58
    -11

    почему Mocha, а не Kaal?


    1. romy4
      18.03.2017 15:48
      -9

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


      1. Acuna
        18.03.2017 23:32
        -1

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


        1. romy4
          19.03.2017 02:56
          -3

          Стёб по поводу js удался. Он как язык действительно полный kaal, хотя и широкоиспользуемый в виду неимения иного.


          1. Acuna
            20.03.2017 22:30
            -1

            Да я понял) Но не расстраивайтесь, кому надо — оценят стеб обязательно)


      1. Acuna
        18.03.2017 23:59
        -1

        И эта проблема действительно актуальна! У меня школьный друг участковый и сотрудничает с детской комнатой милиции, поэтому частенько общается с детьми и с такими семьями, дак говорит это настоящий АДъ! Детям нужно отдать должное, что они при этом остаются более-менее веселыми и общительными и имеют какую-то самореализацию, не смотря на то, что в семьях их часто даже в прямом смысле унижают. И это не какие-то семьи алкашей, это как-бы типа нормальные по нормам мира семьи. Просто то, как их родители «воспитывали» их родителей, так они воспитывают и своих детей. Говорит «Я понял одно: хорошие родители — на вес золота». Унижения физические — это в какой-то степени вопиющие случаи, в этом случае, как правило, и поступают обращения в ментовку, однако словесные унижения и мат встречаются частенько. Нет нужды говорить, какую травму это наносит на всю последующую жизнь уже с самых малых лет, поэтому когда они вырастают — мы имеет что имеем. Для меня загадка, почему во всем русскоязычном интернете люди, имеющие такое детство, преобладают исключительно на Хабре, ну так получилось, что уж теперь… Поэтому с другой стороны их даже пожалеть надо, им действительно и было несладко, да и сейчас не особо с таким-то характером.


    1. justboris
      18.03.2017 23:44
      +3

      Потому что это в честь кофе Моккачино, а не того, о чем вы подумали


      1. romy4
        19.03.2017 03:03
        -2

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


  1. ls18
    18.03.2017 17:43

    Я ни в коем случае не умаляю достоинств JavaScript, но у меня стойкая неприязнь к frontend'у и JS в частности. С большим (можно сказать огромным) трудом дается работа с фронтедом, Может быть у меня одного так или я не один такой. Прошу простить, если кого задел :)


    1. samizdam
      18.03.2017 21:07

      Пишите backend.
      Я вот несколько лет назад, на заре текущей фронтенд движухи, когда доминировал jQuery, решил глубже специализироваться в серверном программировании. И нисколько не жалею. Разделение труда — залог прогресса.


      1. ls18
        18.03.2017 21:16

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


  1. Scf
    19.03.2017 00:03

    Ох уж это мощное прототипное наследование… четыре способа сделать наследование в яваскрипте


  1. KillerSkiller
    19.03.2017 18:11

    Интересно, знали ли разработчики фреймворка Mocha о том, что когда-то так назывался и сам язык


  1. Praksitel
    19.03.2017 18:11

    А что означает фраза «В декабре 1995 года сделка между Netscape Communications была закрыта»?


    1. KillerSkiller
      19.03.2017 18:17

      Сделка между Netscape Communications и Sun microsystems была закрыта


    1. octob3rmut3
      19.03.2017 18:21

      Пропущено слово, комментатор выше поправил. Спасибо.


  1. fly_style
    23.03.2017 12:38

    Кому интересно — линк на сорцы Netscape Navigator. Лично меня эта статья заинтересовала, и я попробовал собрать этот чудесный браузер (пока Linux only, попробую еще под OS X).