Is JavaScript de beste taal voor nieuwe coders?

Ondanks de vele gebreken is JavaScript misschien wel de beste knutseltaal voor kinderen en nieuwe leerlingen

Het was 2007. O'Reilly Media, een technische uitgever van de bovenste plank, had me benaderd met een idee. Wil ik een boek schrijven waarin JavaScript wordt geïntroduceerd voor beginners?

Mijn reactie was onmiddellijk: waarom?

Het was niet dat JavaScript nutteloos was. Maar JavaScript was slechts één ingrediënt in een zorgvuldige opstelling van technologieën die nodig zijn om een ​​website te bouwen - en het was veruit de minst belangrijke. Ja, een beetje JavaScript-pixiestof kan lange vormen valideren of een knop laten gloeien wanneer iemand erover zweeft. Maar JavaScript was optioneel - haal het uit een pagina en alles bleef min of meer op dezelfde manier werken.

JavaScript kwam ook met wat serieuze bagage. Het was verbonden met browser compatibiliteitsproblemen, traag, onzeker en duidelijk onbetrouwbaar. Ik had er geen belang bij om iemand te leren hoe een nutteloze JavaScript-aangedreven webpagina-widget te maken. Dat idee leek net zo zinloos als de geanimeerde gifs van roterende globes die in de begindagen van het internet woedend waren.

De meest voor de hand liggende manier om JavaScript te gebruiken, dacht ik destijds, naïef, was om je grote server-side framework het gewenste JavaScript rechtstreeks naar de pagina te laten weergeven. Ja, dat JavaScript is misschien een beetje opgeblazen, maar het was afgestemd op de browser aan de andere kant en er brak niets uit - zelfs als de bezoeker JavaScript volledig uitschakelde.

Onnodig te zeggen dat ik het boek niet heb geschreven. Ik bleef coderen op de webserver en schreef over mijn favoriete technologieën (meestal C # en het .NET Framework). Jaren gingen voorbij.

Toen gebeurde er iets vreemds.

JavaScript heeft het overgenomen.

Ik denk nog steeds niet dat JavaScript de beste keuze in programmeertalen moet worden genoemd. Ik denk niet eens dat het een bijzonder goede taal is, als we helemaal eerlijk zijn. Maar ik ben van gedachten veranderd over één ding. Nu geloof ik dat JavaScript misschien wel het beste startpunt is voor kinderen en nieuwe programmeurs.

JavaScript's ongelooflijke bereik

Het enige ongeëvenaarde voordeel van JavaScript is het bereik.

JavaScript is overal - ondersteund op elk besturingssysteem, in elk merk browser en op desktopcomputers en mobiele apparaten. Net zo belangrijk is het feit dat JavaScript geen implementatie vereist. Het is zelfs al moeilijk om het niet zo verre verleden te onthouden wanneer bedrijven client-server-applicaties zouden uitrollen² op hun interne netwerken, wekenlang worstelen met installatieproblemen en onverwachte fouten. Geconfronteerd met die nachtmerries, kunt u de aantrekkingskracht van JavaScript zien.

Dankzij zijn bereik hoefde JavaScript niet de beste programmeertaal te worden. Het moest alleen goed genoeg worden.

Een vergelijkbare dynamiek is aan het werk als het gaat om het leren programmeren. In het begin lijkt de kwestie van bereik niet zo belangrijk voor een persoon die als enige doel heeft goede programmeermethoden te leren. Maar veel van dezelfde problemen spelen een rol bij het leren programmeren zoals bij professionele ontwikkeling. Als u wilt dat uw werk een universeel bereik heeft, is JavaScript de enige kandidaat.

Stel bijvoorbeeld dat u een geweldige app voor persoonlijkheidsvoorspeller en quiz hebt gebouwd. Het opzetten van een ontwikkelomgeving is relatief eenvoudig. Maar wat gebeurt er als je je programma naar een vriend wilt sturen? Moeten ze een runtime installeren of dezelfde ontwikkelomgeving opzetten? Hebben hun computer beveiligingsinstellingen nodig voordat ze uw programma kunnen downloaden en installeren? Misschien gebruikt uw vriend een besturingssysteem dat uw programma helemaal niet ondersteunt, of een mobiel platform dat alleen professionele applicaties toestaat die worden gedistribueerd in iTunes of de Google Play Store. Met JavaScript en een eenvoudige website (GitHub geeft je een klein stukje gratis), verdwijnen deze problemen.

En als de nieuwe coder een kind is, is dit een onbetwistbaar feit: kinderen en browsers passen goed. Als je een kind aan het werk hebt gezien op een computer (geen mobiel apparaat), heb je waarschijnlijk gemerkt dat ten minste 98% van zijn tijd in een browser wordt doorgebracht. Ze spelen daar games, gebruiken sociale media en beoordelen schoolwerk via het Google-klaslokaal en Google Docs. Het is vanzelfsprekend dat de code die ze maken, wordt verbruikt in dezelfde browserwereld waarin ze al wonen.

Nu voor de problemen ...

Maar hoe zit het met de problemen? JavaScript heeft een aantal ernstige nadelen en de eigenaardigheden, inconsistenties en beperkingen kunnen bijzonder pijnlijk zijn voor iemand die voor het eerst leert programmeren. Gelukkig zijn er moderne oplossingen die de meeste pijn kunnen voorkomen.

Laten we eens kijken naar de top vier meest voorkomende klachten.

1. JavaScript is niet type-veilig

Een belangrijk concept dat nieuwe programmeurs al vroeg leren, is het idee van variabelen, containers die informatie opslaan gedurende de levensduur van een programma. Het probleem met JavaScript is dat het los en slordig is met variabelen. Het accepteert dingen die niet goed lijken en negeert voor de hand liggende problemen. De luiheid kan kleine typefouten veranderen in code-crashende rampen.

Hier is een voorbeeld van een code die gedoemd is te mislukken:

var myNumber = 100;
myNumber = myNumbr + 1;

Heb je de fout begrepen? De tweede regel gebruikt eigenlijk twee variabelen: de variabele myNumber die in de eerste regel is gedefinieerd en een denkbeeldige variabele myNumbr. We weten dat de tweede variabele het resultaat is van een typefout, maar JavaScript lost het probleem handig op door meteen een nieuwe variabele myNumbr te maken, waardoor de berekening stilletjes mislukt. Hetzelfde probleem treedt op als u een variabelenaam gebruikt met inconsistent hoofdlettergebruik (zoals MyNumber in plaats van myNumber). Een soortgelijk probleem doet zich voor als u denkt dat een variabele een nummer bevat terwijl deze echt een stuk tekst bevat, enzovoort. Elke JavaScript-ontwikkelaar heeft een JavaScript-horrorverhaal zoals dit.

Het is moeilijk genoeg om te leren coderen zonder je zorgen te maken over de manieren waarop je programmeertaal je tegelijkertijd saboteert. Gelukkig kunnen problemen met typeveiligheid eenvoudig worden opgelost met het juiste ontwikkeltool.

Een van mijn favoriete code-editors - zowel voor leren als voor professioneel gebruik - is Visual Studio Code. Het is gratis, lichtgewicht, open source en eindeloos uitbreidbaar. Een van de beste functies is de mogelijkheid om JavaScript-code op veel voorkomende problemen te controleren. U kunt foutcontrole inschakelen door een configuratiebestand toe te voegen of door deze opmerking boven aan een JavaScript-bestand te plaatsen:

// @ ts-check

Hier is een voorbeeld met twee fouten, geen van beide is een probleem in de ogen van JavaScript:

Met dank: Matthew MacDonald ©

Als u de ts-check-opmerking gebruikt, onderstreept Visual Studio deze mogelijke fouten:

Beweeg met de muis over een van deze onderstreepte gebieden en Visual Studio geeft een uitleg van het probleem:

De afhaalmaaltijden? Hoewel JavaScript veel slechte programmeerpraktijken tolereert, kunt u een ervaring krijgen die vergelijkbaar is met andere moderne programmeertalen als u JavaScript combineert met een goede code-editor. En u hebt het bereik van JavaScript niet opgegeven.

2. JavaScript doet OOP niet

Object-georiënteerd programmeren (OOP) is een manier om code te modelleren en te rangschikken. Goed gedaan, OOP helpt programmeurs om eenvoudiger, beter georganiseerde code te maken. Het maakt het ook gemakkelijker om belangrijke stukjes functionaliteit opnieuw te gebruiken.

JavaScript mist notoir ondersteuning voor objectgeoriënteerd programmeren. In feite vervalsen JavaScript-ontwikkelaars het routinematig met onhandige technieken en vreemde oplossingen. Deze technieken kunnen zinvol zijn voor iemand die al heeft geleerd te programmeren (en zelfs als dat niet het geval is, kunt u het patroon eenvoudig naar uw eigen projecten kopiëren en ermee leren leven). Maar als je helemaal nieuw bent met coderen, is het gebruik van een kludge voor een eenvoudig programmeerconcept een overduidelijke mislukking.

Gelukkig zijn er betere, elegantere oplossingen die correct zijn geïntegreerd met de JavaScript-taal. Mijn favoriet is TypeScript, een open source-project dat in 2012 door Microsoft is gestart. TypeScript werkt als een soort opgeschoonde versie van JavaScript die objectgeoriënteerd programmeren toevoegt (samen met andere nuttige verbeteringen, zoals strikte typecontrole).

Sommigen zullen misschien bezwaar maken dat TypeScript niet precies JavaScript is - en dat is waar. Maar hier is het magische gedeelte. U kunt uw code in TypeScript schrijven en deze vervolgens naar JavaScript converteren voordat u deze in een webpagina gebruikt. Dit levert u het beste van twee werelden op: een moderne programmeertaal voor het schrijven van uw code en dezelfde universele ondersteuning voor het uitvoeren van uw code als gewone JavaScript.

Het beste van alles is dat dit hele proces automatisch gebeurt als u een tool zoals de Visual Studio Code gebruikt. Ja, de gegenereerde JavaScript-code gebruikt nog steeds vreemde oplossingen. Maar wat dan nog? De programmeur leert OOP-concepten kennen, de voltooide code werkt zonder hik en moderne computers verwerken de hele puinhoop met gemak.

Geloof me niet? Sommige van de meest innovatieve desktopapplicaties van vandaag gebruiken een combinatie van TypeScript en Electron, een framework waarmee JavaScript buiten een browser kan worden uitgevoerd. Een van de meest indrukwekkende voorbeelden is Visual Studio Code. Dat klopt - hetzelfde gelikte hulpmiddel dat u gebruikt om JavaScript-code te schrijven, werd ook geschreven met JavaScript-code. Meer specifiek werd het geschreven met behulp van de moderne TypeScript-smaak van de JavaScript-taal.

Natuurlijk hoeft u TypeScript niet te gebruiken en nieuwe JavaScript-programmeurs kunnen veel voor elkaar krijgen zonder OOP-principes te leren, als ze dat willen. Het is echt een kwestie van kiezen. Hoe dan ook, hoop is in aantocht: JavaScript wordt nog steeds verbeterd en nieuwere versies voegen langzaam enkele verbeteringen van TypeScript toe.

3. De wereld zit vol met slechte JavaScript-code

Heb je ooit gehoord van Visual Basic?

4. JavaScript heeft extra bibliotheken en frameworks nodig

Om toegang te krijgen tot meer functionaliteit (en om het wiel niet opnieuw uit te vinden) moeten JavaScript-coders andere componenten, bibliotheken en frameworks gebruiken. Het kiezen van de juiste ingrediënten - die goed werken, zal nog lang in de toekomst worden ondersteund en niet met elkaar conflicteren - is niet zo eenvoudig als het lijkt.

De meeste talen hebben een versie van dit probleem. Maar weinig talen hebben zo veel last van deze situatie als JavaScript. Om een ​​serieuze programmeur in de gratis-voor-alle JavaScript-wereld te worden, moet je je eigen stapel ontwikkeltools en add-ons samenstellen, kiezen uit opties die zo complex en ingewikkeld zijn dat je niet weet of er een bij je past totdat je heb het grondig geleerd (op welk punt het misschien in veroudering is afgedreven, vervangen door de nieuwste hete nieuwe rage).

Hoe erg deze hoofdpijn ook is, ze hebben geen effect op nieuwe coders. Als iemand leert te coderen met JavaScript, is de beste aanpak om weg te blijven van frameworks en bibliotheken, of we het nu hebben over jQuery, Angular, React, Vue of iets dat is uitgevonden tussen het moment dat ik deze zin typte en het moment dat ik druk op publiceren. Uiteindelijk, nadat een nieuwe codeerder een goede beheersing van programmeerprincipes heeft, zal hij waarschijnlijk ten minste een van deze frameworks willen verkennen. Maar dat is een onderwerp voor een andere dag.

Heb je je eigen mening over de beste eerste taal om kinderen te leren programmeren? Er is geen goed antwoord (en ik heb mijn eigen favorieten). Voel je vrij om zeer eigenzinnige antwoorden te plaatsen in de commentaren hieronder! En als u een gratis exemplaar van mijn nieuwe codeboeken voor kinderen wilt ontvangen, meld u dan aan voor de ProseTech-nieuwsbrief.

¹ Code aan serverzijde is de code die op een webserver wordt uitgevoerd, ver weg van uw computer. Client-side code is de code die rechtstreeks in uw browser wordt uitgevoerd. Zoek bijvoorbeeld naar een product op Amazon en server-side code scours Amazon's databases, genereert de HTML met een lijst van mogelijke overeenkomsten, en stuurt het naar uw browser.

² Client-server-applicaties zijn een ouder applicatiemodel dat het werk in twee delen verdeelt. Het ene deel draait op een desktopcomputer (de client), die communiceert met het andere deel (de server) op een andere computer.