Чи найкраща мова для нових кодерів у JavaScript?

Незважаючи на безліч вад, JavaScript просто може бути найкращою мовою майстерності для дітей та нових учнів

Рік був 2007 р. O'Reilly Media, найвищий технічний видавець, що звертається до шельфу, підійшов до мене з ідеєю. Я хотів би написати книгу, яка представляє JavaScript для початківців?

Моя відповідь була негайною: чому?

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

JavaScript також постачався з серйозним багажем. Він був пов'язаний з проблемами сумісності веб-переглядачів, повільними, незахищеними та явно ненадійними. У мене не було інтересу вчити когось, як створити марний віджет веб-сторінок на JavaScript. Ця ідея видалася такою ж безглуздою, як і анімовані gif обертових глобусів, які були лютою в перші дні Інтернету.

Найбільш очевидний спосіб використання JavaScript, або я так наївно думав у той час, - це дозволити вашій великій стороні сервера¹ рамки зробити все необхідне JavaScript безпосередньо на сторінці. Так, цей JavaScript може бути трохи роздутим, але він був розроблений так, щоб він відповідав веб-переглядачу з іншого боку, і нічого не зламалося - навіть якщо відвідувач повністю відключив JavaScript.

Потрібно сказати, що я не писав книги. Я постійно кодував на веб-сервері і писав про мої улюблені технології (зазвичай C # і .NET Framework). Минули роки.

Потім сталося щось дивне.

JavaScript перейняв.

Я все ще не думаю, що JavaScript заслуговує того, щоб його називали найкращим вибором в мовах програмування. Я навіть не думаю, що це не дуже гарна мова, якщо ми будемо абсолютно чесними. Але я передумав одне. Тепер я вважаю, що JavaScript може бути найкращою відправною точкою для дітей та нових кодерів.

Неймовірне охоплення JavaScript

Єдина неперевершена перевага, яку має JavaScript, - це її охоплення.

JavaScript є скрізь - підтримується в будь-якій операційній системі, у будь-якій марці браузера, а також на настільних комп'ютерах та мобільних пристроях. Не менш важливим є той факт, що JavaScript не вимагає розгортання. Насправді вже важко запам’ятати не надто далеке минуле, коли компанії розгортали клієнтсько-серверні програми² у своїх внутрішніх мережах, проводячи тижні боротьби з проблемами налаштування та несподіваними помилками. Зіткнувшись з цими кошмарами, ви побачите звернення JavaScript.

Завдяки своєму охопленню JavaScript не потрібно було стати найкращою мовою програмування. Потрібно було лише стати досить хорошим.

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

Наприклад, скажіть, що ви створили дивовижну програму для вікторини особистості Створити середовище розробки відносно просто. Але що відбувається, коли ви хочете надіслати свою програму другові? Чи потрібно їм встановлювати час виконання або налаштовувати те саме середовище розробки? Чи потребує їх комп'ютер налаштування безпеки, перш ніж він дозволяє їм завантажувати та встановлювати вашу програму? Можливо, ваш друг використовує операційну систему, яка взагалі не підтримує вашу програму - або мобільну платформу, яка дозволяє лише професійні програми, які розповсюджуються в iTunes або магазині Google Play. З JavaScript та базовим веб-сайтом (GitHub надасть вам невеликий шматок місця безкоштовно), ці проблеми зникають.

І якщо новий кодер повинен бути дитиною, ось незаперечний факт: діти та браузери дуже підходять. Якщо ви спостерігали за роботою дитини за комп’ютером (а не мобільним пристроєм), ви, мабуть, помітили, що принаймні 98% їх часу проводиться в браузері. Там вони грають у ігри, користуються соціальними мережами та переглядають шкільні роботи через аудиторію Google та Google Docs. Цілком природно, що створений ними код використовується в тому ж світі браузера, який вони вже мешкають.

Тепер про проблеми ...

А як щодо проблем? У JavaScript є серйозні недоліки, і його примхи, невідповідності та обмеження можуть бути особливо болючими для тих, хто вчить програмувати вперше. На щастя, є сучасні рішення, які можуть запобігти більшість болю.

Давайте розглянемо чотири найпоширеніших скарги.

1. JavaScript не є безпечним

Однією з ключових концепцій, яку нові програмісти вивчають на початку, є ідея змінних, контейнерів, які зберігають інформацію протягом життя програми. Проблема JavaScript полягає в тому, що він нещільний і неохайний зі змінними. Він приймає речі, які не здаються правильними, і ігнорує очевидні проблеми. Його лінь може перетворити дрібні помилки на катастрофи.

Ось приклад деякого коду, який приречений на збій:

var myNumber = 100;
myNumber = myNumbr + 1;

Ви вловили помилку? Другий рядок фактично використовує дві змінні: змінну myNumber, яка була визначена в першому рядку, і уявну змінну myNumbr. Ми знаємо, що друга змінна є результатом помилки друку, але JavaScript корисно «виправляє» проблему, створюючи нову змінну myNumbr на льоту, що призводить до того, що обчислення мовчить невдало. Ця ж проблема виникає, якщо ви використовуєте ім'я змінної з непослідовною великою літери (наприклад, MyNumber замість myNumber). Подібна проблема виникає, якщо ви думаєте, що змінна містить число, коли в ній дійсно є фрагмент тексту тощо. Кожен розробник JavaScript має подібну історію жахів JavaScript.

Досить важко навчитися кодувати, не турбуючись про те, як ваша мова програмування одночасно саботує вас. Але, на щастя, проблеми безпеки типу легко вирішуються правильним інструментом розробки.

Один з моїх улюблених редакторів коду - як для навчання, так і для професійного використання - це Visual Studio Code. Він безкоштовний, легкий, з відкритим кодом та нескінченно розширюваний. Однією з його найкращих особливостей є можливість перевірки JavaScript-коду на наявність загальних проблем. Ви можете увімкнути перевірку помилок, додавши файл конфігурації або дотримуючись цей коментар у верхній частині файлу JavaScript:

// @ ts-check

Ось приклад, який має дві помилки, жодна з яких не є проблемою в очах JavaScript:

Кредит: Метью Макдональд ©

Якщо ви використовуєте коментар ts-check, Visual Studio корисно підкреслює ці можливі помилки:

Наведіть курсор миші на одну з цих підкреслених областей, і Visual Studio з'явиться пояснення проблеми:

Винос? Хоча JavaScript переносить безліч поганих практик програмування, якщо поєднувати JavaScript з хорошим редактором коду, ви можете отримати досвід, подібний до інших сучасних мов програмування. І ви не відмовились від досяжності JavaScript.

2. JavaScript не робить OOP

Об'єктно-орієнтоване програмування (OOP) - це спосіб моделювання та упорядкування коду. Зроблено правильно, OOP допомагає програмістам створювати простіший, краще організований код. Це також полегшує повторне використання важливих бітів функціональності.

JavaScript, як відомо, не має підтримки для об'єктно-орієнтованого програмування. Насправді, розробники JavaScript звичайно підробляють це незручними методами та незвичайними обхідними шляхами. Ці методи можуть мати сенс для тих, хто вже навчився програмувати (і навіть якщо вони цього не роблять, ви можете просто скопіювати шаблон у власні проекти та навчитися жити з ним). Але якщо ви абсолютно новачок у кодуванні, використання виразів для базової концепції програмування очевидний провал.

На щастя, є кращі, більш елегантні способи вирішення, які належним чином інтегровані з мовою JavaScript. Мій улюблений - TypeScript, проект з відкритим кодом, запущений Microsoft у 2012 році. TypeScript працює як своєрідна очищена версія JavaScript, яка додає об’єктно-орієнтоване програмування (разом з іншими корисними вдосконаленнями, як-от сувора перевірка типу).

Деякі можуть заперечити, що TypeScript - це не саме JavaScript - і це правда. Але ось магічна частина. Ви можете написати свій код у TypeScript, а потім перетворити його в JavaScript, перш ніж використовувати його на веб-сторінці. Це дає вам найкраще з обох світів: сучасну мову програмування для написання вашого коду та таку ж універсальну підтримку запуску вашого коду, як звичайний JavaScript.

Найкраще, що весь цей процес відбувається автоматично, якщо ви використовуєте такий інструмент, як Visual Studio Code. Так, згенерований код JavaScript все ще буде використовувати непарні обходи. Але так що? Програміст отримує для вивчення концепцій OOP, готовий код працює без гикавки, а сучасні комп’ютери обробляють весь безлад легко.

Ви мені не вірите? Деякі з найновітніших настільних додатків сьогодні використовують комбінацію TypeScript та Electron, що дозволяє JavaScript працювати за межами браузера. Один з найбільш вражаючих прикладів - Visual Studio Code. Це правильно - той самий інструмент гладкості, який ви використовуєте для написання коду JavaScript, також був написаний з кодом JavaScript. Більш конкретно, він був написаний з використанням сучасного аромату TypeScript мови JavaScript.

Звичайно, вам не потрібно використовувати TypeScript, і нові програмісти JavaScript можуть багато зробити, не вивчаючи жодних принципів OOP, якщо вони захочуть. Це дійсно питання вибору. Так чи інакше, надія на горизонті: JavaScript все ще вдосконалюється, і новіші версії повільно додають деякі вдосконалення від TypeScript.

3. Світ повний поганого коду JavaScript

Ви коли-небудь чули про Visual Basic?

4. JavaScript потребує додаткових бібліотек та рамок

Щоб отримати доступ до більшої функціональності (і щоб уникнути винаходиння колеса), кодери JavaScript повинні використовувати інші компоненти, бібліотеки та рамки. Вибір правильних інгредієнтів - тих, які добре працюють, буде підтримуватися довго в майбутньому і не буде конфліктувати між собою - не так просто, як здається.

Більшість мов стикаються з версією цієї проблеми. Однак мало мов страждають від цієї ситуації так само погано, як JavaScript. Щоб стати серйозним програмістом у світі безкоштовного для всіх JavaScript, вам потрібно зібрати власний стек інструментів для розробки та доповнень, вибираючи такі складні та вивернуті варіанти, що ви не знатимете, чи підходить вам один, доки ви Ви досконально дізналися це (в цей момент він, можливо, занепав, замінивши останню гарячу нову примху).

Як би погано не було цих головних болів, вони не впливають на нові кодери. Якщо хтось вчиться кодувати JavaScript, найкращим підходом є триматися подалі від фреймворків та бібліотек, будь то мова про jQuery, Angular, React, Vue або щось таке, що було придумано між часом, коли я набрав це речення та моментом, коли я хіт опублікувати. Врешті-решт, після того, як новий кодер має чітку команду програм програмування, вони, ймовірно, захочуть вивчити хоча б одну з цих рам. Але це вже тема для іншого дня.

Чи є у вас власна думка щодо найкращої мови для навчання дітей програмуванню? Правильної відповіді немає (і у мене є свої улюблені). Не соромтеся опускати вкрай впевнені відповіді в розділі коментарів нижче! А якщо ви хочете отримати безкоштовну заздалегідь оглядову копію моїх нових книг кодування для дітей, підпишіться на інформаційний бюлетень ProseTech.

Code Код на стороні сервера - це код, який працює на веб-сервері, далеко від комп'ютера. Клієнтський код - це код, який працює прямо у вашому браузері. Наприклад, пошук продукту в Amazon та на коді на сервері прокручує бази даних Amazon, генерує HTML зі списком можливих відповідностей та надсилає його у ваш браузер.

² Клієнт-серверні програми - це стара версія програми, яка ділить роботу на дві частини. Одна частина працює на настільному комп'ютері (клієнт), який спілкується з іншою частиною (сервером) на іншому комп'ютері.