Перейти к основному содержимому
Chapter content StyleChapter Difficulty9 min

Глава 1: Методология исследования

В ходе этой главы я хотел бы рассказать про методологию исследования, которая была реализована на страницах MyJS Web Docs; её вы сейчас читаете. Ровно она же используется мною и по сей день, чтобы полноценно и комплексно расширять этот труд.

Терминология

Перед разбором моей методологии исследования информации, для того чтобы определить её "механику", хотелось бы ввести в наш разговор термин "Методология" (Methodology), как он определён современной наукой и зачем нужен:

In its most common sense, methodology is the study of research methods. However, the term can also refer to the methods themselves or to the philosophical discussion of associated background assumptions. A method is a structured procedure for bringing about a certain goal, like acquiring knowledge or verifying knowledge claims.

~ wiki

Смысл значения методологии определяется по-разному в зависимости от сферы, в которой её используют: методология как исследование методов или совокупность этих методов исследования. Сама по себе она нужна для структурирования информации о способах сбора результатов проведённых исследований. Любое дело, где фигурирует сбор информации, может быть описано своей собственной методологией. И чуть позднее мы опишем нашу, а пока что предлагаю подметить, как методология неразрывно связана с термином "Исследование" (Reserch) через важный в наше время термин — "Знание" (Knowledge):

Research is creative and systematic work undertaken to increase the stock of knowledge. It involves the collection, organization, and analysis of evidence to increase understanding of a topic, characterized by a particular attentiveness to controlling sources of bias and error.

~ wiki

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

Моя методология

Пришло время рассказать о своей методологии. Её начало базируется на указанных выше принципах "механики" общего процесса исследования. Эта документация, как "первое приближение к общему пониманию ECMAScript Language Specification", имеет серьёзный фундамент.

В отличие от многих веб-ресурсов, книг, видео и других источников документация MyJS Web Docs не преследует цели донести информацию легко и быстро. Мы делаем упор на сложность материала, его предельную точность и проработку. Если вы хотите быстро понять спецификацию языка ECMAScript и изучить весь JavaScript, данный труд не рекомендуется вам к прочтению.

к сведению

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

Источники

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

Немаловажным ресурсом для проведения параллелей между спецификациями и пониманием, как устроены такие документы вообще, стала официальная спецификация WHATWG, которая, к примеру, реализует правила работы с HTML5 и некоторыми другими веб-модулями.

Большое влияние на понимание внутренних процессов движка JavaScript оказали блог от инженеров V8 и блог от Chromium. У них даже есть статьи с исторической справкой и разбором некоторых важных конструкций спецификации.

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

Строение содержания

Содержание документации выстроено по образу поэтапного изучения информации сверху вниз. При таком подходе каждый переход по главам подразумевает, что вы прочитали или уже овладели знаниями из предыдущей главы. Предполагается, что главы будут иметь указатель на затрачиваемое время при прочтении; указатель этапа написания (✏️), если глава находится в активной стадии разработки; а также классифицироваться по таким градации формальности: формальная (formal) и неформальная (informal); по градации лёгкости восприятия: лёгкая (easy), средняя (normal) и сложная (hard); и помечаться соответствующими значками над заголовком. Вот все доступные на данный момент обозначения:


Строение глав

Главы документации построены по двум форматам: вначале представлено общее описание темы с приведением цитат и теоретической базы, и после она раскрывается с практической точки зрения; а для узкоспециализированных тем теория опускается. Такая структура была выбрана не случайно.

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

Небольшое объяснение

Если в каком-нибудь языке компилируемом языке программирования при написании примитивного значения, например, 'hello' типа String вы имеете в виду реальную строку данных, для которой сразу же было выделено место в памяти, и после говорите об этом в рамках другого, например, интерпретируемого языка, проводя такую лёгкую параллель, то вынужден Вас удивить.

В случае использования на этом же примере языка JavaScript в условном host environment типа браузера Google Chrome, вы работаете не со строкой, а, по сути, с командой, обозначающей отдельную самостоятельную сущность — StringLiteral Expression, проходящей через десятки собственных проверок и алгоритмов, на выходе которых может получиться совсем не наша 'hello' типа String, но всё равно представляющая неявный идентификатор, ссылающийся в memory heap (кучу) и указывающий в ней на некоторую структуру данных, имеющих внутри значение этой строки (те самые данные).

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

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

Роль спецификации

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

Альтернативные ресурсы

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

  • MDN Web Docs — общая документация разных технологий от Mozilla. Тут собрана информация почти на любую тему веба.
  • How to Read the ECMAScript Specification — известная, но короткая мини-документация с хаками по прочтению спецификации.
  • As for JSYouTube канал, где бородатый хацкер исследует все аспекты JavaScript, среди которых спецификация ECMAScript, оптимизации V8, Assembler, SEO и многое другое.
  • You Don't Know JS YetGitHub книга со своим взглядом на JavaScript, хорошая интерпретация от известного разработчика.
  • ECMAScript 5.1 с аннотациями — русский перевод официальной спецификации ECMAScript версии ES5 с авторскими аннотациями.

На дорожку...

Методология помогает опереться на фундаментальные знания и опыт комьюнити при описании устройсва специфиации. Но стоит помнить, что документация написана не вместо, а в помощь к ней. Рекомендуется читать эти два ресурса параллельно, ориентируясь на представленные примеры.

Желаю удачи!

Footnotes

  1. Авторская позиция. В раскрывающемся блоке приведено моё объяснение касательно этой позиции.