Изучение программирования для блокчейн приложений: фронтенд и JavaScript
Возможно, одной из главных проблем при изучении фронтенда является объемность и комплексность этой области программирования.
Количество технологий, взаимодействий между этими технологиями и их настроек настолько велико, что может легко ввести новичка в паралич выбора, в состояние ступора, когда огромное количество способов решения одной и той же задачи не помогает, а мешает прогрессу.
Когда я только начинал изучать программирование несколько лет назад, я столкнулся с такими же трудностями.
Основываясь на собственном опыте изучения программирования и обучении программированию других, я попробую показать путь изучения JS, который сделает процесс более эффективным и увлекательным.
Но вернемся немного назад, к определению. Фронтендом называется набор навыков и технологий, применяющихся для разработки приложений выполняющихся в браузерах на различных устройствах. Ключевое отличие фронтенд разработки от других областей – код взаимодействует с конечным пользователем и наоборот.
Еще совсем недавно фронтенд разработка могла вестись только на JavaScript или языках транспилирующихся (компилирующихся) в джаваскрипт, таких как TypeScript или Pure Script. В следующих постах я расскажу об альтернативе - WASM. Но пока только о JS.
На уровне языка значимых отличий в использовании JavaScript для "обычного" программирования и для взаимодействия с блокчейнами - нет. Поэтому в этом посте каких-либо упоминаний блокчейна не будет.
JavaScript
Главный язык фронтенда – джаваскрипт.
Эволюция JavaScript зависела от несколько необычного фактора (ключевого для понимания направления развития) – строгой необходимости поддержки обратной совместимости.
Поддержка обратной совместимости означает, что код написанный на предыдущих версиях языка (к примеру, на сайтах которые много лет не обновлялись), иногда с использованием кривых костылей, будет продолжать выполняться в современных браузерах.
Вместе с очевидными преимуществами такого подхода, есть и недостатки. Необходимость поддержания предыдущего функционала привела к тому, что в джаваскрипте, в отличие от других языков, развивающихся в это же время, сохранилось большое количество костылей, хаков, недоработок и недостатков из ранних версий, когда использование языка и веба вообще как платформы для приложений, было в зачаточном состоянии.
Аналогичная история и с образовательными материалами. Так как предыдущие версии языка без проблем работают и сегодня, образовательные материалы по JavaScript часто, особенно в русскоязычной среде, используют устаревшие подходы и методологии.
Важно отметить, что в последние годы JS стал быстро развиваться и в язык были добавлены фичи, которые делают его использование значительно более приятным.
Тут мы приходим к одному из ключей к успеху изучения джаваскрипта: использование современных образовательных материалов, использующих последние обновления функционала и обновленные методологии.
Образовательные ресурсы:
Современный JavaScript или Ecmascript 2018
Техническое название JavaScript – EcmaScript. Названия обновлений версий языков следует за названиями годов, в которых были приняты эти изменения, например, ecmascript 2015 или ecmascript 2017. Они также были известны под сокращениями ES6 или ES7.
Со временем JavaScript программы превратились из простых jQuery скриптов в большие сложные приложения, где парадигма асинхронного программирования JavaScript приводила к появлению "ада коллбеков".
"Ад коллбеков" делал код нечитаемым, усложнял понимание сути программы.
Для решения этой проблемы сообщество JS разработчиков начало использовать так называемые Promises, которые позже вошли в стандартную библиотеку, а ещё позже их использование стало значительно удобней, благодаря новому примитиву асинхронного программирования – async / await.
JavaScript – объектно ориентированный язык программирования с особенностями, использующий прототипы в качестве системы наследования.
В современном джаваскрипте были добавлены классы, широко использующиеся, к примеру, при создании React компонентов.
Как классы, так и async/await в JS – синтаксический сахар, функционал языка, который улучшает внешний вид, облегчает читабельность, улучшает понимание синтаксиса, но не меняет суть работы программных конструктов.
Async/await и классы – только два из многих дополнений, которые облегчают жизнь JS разработчика.
Образовательные ресурсы:
- ECMAScript
- Что нового в ECMAScript 2017 (ES8)
- ES6, ES8, ES2017: что такое ECMAScript и чем это отличается от JavaScript
- ES6 - JavaScript Improved
- ES6 / EcmaScript 6 for beginners - the essentials
- Нативные ECMAScript модули — первый обзор
- Ад коллбеков
- Habrahabr: JavaScript ES8 и переход на async / await
- StackOverflow: JavaScript - прототипно-ориентированный или объектно-ориентированный язык?
Транспиляция
Использование последних версий языка усложняется тем, что в интернете до сих пор активны устаревшие браузеры, которые не поддерживают последние фичи.
Для этого был разработан процесс, так называемой, транспиляции. Транспиляция превращает синтаксический сахар и новый функционал в код, который могут выполнять старые браузеры.
Отличие транспиляции от компиляции
при транспиляции язык, на котором пишут программисты, превращается в другой язык, на котором пишут программисты
при компиляции язык, на котором пишут программисты трансформируется в машинный код или код для виртуальной машины.
Текущий индустриальный стандарт инструмента для транспиляции JS кода – Babel.js
Образовательные ресурсы:
Главные советы
- Сразу учите современный JavaScript: ES2016, ES2017, ES2018
- Внимательно следите за тем, что получается, а что нет
- Если есть такая возможность, изучайте материалы сразу на русском и английском языках
- Не обращайте внимания на эти советы, если вы осознанны и видите, что у вас работает другой подход
В следующем посте – про изучение JavaScript в контексте Document Object Model и node.js