JavaScript ли е най-добрият език за новите кодери?

Въпреки многото си недостатъци, JavaScript просто може да бъде най-добрият език за майтап за деца и нови учащи се

Годината беше 2007. O'Reilly Media, технически издател на най-високите етажи, се обърна към мен с идея. Бих ли искал да напиша книга, представяща JavaScript за завършили начинаещи?

Моят отговор беше незабавен: Защо?

Не че JavaScript беше безполезен. Но JavaScript беше само една съставка в внимателното подреждане на технологиите, необходими за изграждането на уебсайт - и той беше най-малко важният. Да, поръсването на JavaScript pixie прах може да валидира дълги форми или да накара бутон да свети, когато някой надвие върху него. Но JavaScript беше незадължителен - извадете го от страница и всичко продължи да работи по повече или по-малко по същия начин.

JavaScript също дойде с сериозен багаж. Той беше обвързан с проблеми със съвместимостта на браузъра, бавен, несигурен и очевидно ненадежден. Нямах интерес да преподавам на някого как да създаде безполезна джаджа, работеща с JavaScript. Тази идея изглеждаше толкова безсмислена, колкото анимираните gifs на въртящи се глобуси, които бяха яростта в първите дни на Интернет.

Най-очевидният начин да използвате 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. Любимият ми е 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 със списък на възможните съвпадения и го изпраща на вашия браузър.

² Клиент-сървърните приложения са по-стар модел на приложение, който разделя работата на две части. Едната част работи на настолен компютър (клиента), който комуникира с другата част (сървъра) на друг компютър.