Programmēšanas valodas iesācējiem

Ar kuru valodu lai sāk?

Kad sāc meklēt informāciju par programmēšanu, ātri vien var nonākt strupceļā, ja nav skaidras idejas, ar ko vajadzētu sākt. Tiek pieminētas daudzas un dažādas valodas - katrai ir savas stiprās un vājās puses, kā arī pielietojums atšķiras. Viens veids, kā saprast, ar ko vajadzētu sākt, ir padomāt, ko Tu gribētu darīt kā programmētājs. Piemēram, datu apstrādē un mākslīgā intelekta izstrādē bieži tiek izmantots Python, mājaslapu interaktīvās daļas izveidei - JavaScript,  operētājsistēmās un sistēmas rīkos - C/C++, lietojumprogrammu un tīmekļa izstrādei izmantojot .NET - C# un tā varētu turpināt. Tāpat vari papētīt, kādas valodas ir pieprasīas noteiktā reģionā vai kompānijā, tā sevi sagatavojot noteiktam darba tirgum.

Kuras ir vieglākās valodas un kāpēc?

Savu ceļu programmēšanas valodā vari sākt ar vieglāko valodu. Ja meklējam, kādas valodas tiek uzskatītas par vieglām, bieži sarakstu augšgalos parādās Python un JavaScript. Kāpēc Python ir viegla valoda? To ir viegli lasīt, jo valoda nereti atgādina parastu angļu valodu - vari apskatīt uzdevumus ar jau gatavu kodu šeit https://www.geeksforgeeks.org/python-programming-examples/. Kāpēc JavaScript ir viegla valoda? Šī valoda tika veidota priekš tiem, kas nav programmētāji un tā tiešām ir draudzīga iesācējiem. Nozīmīgi ir arī tas, ka šī JavaScript ir objektu orientēta valoda un palīdzēs saprast daudzus konceptus, kas būs attiecināmi arī uz citām objektu orientētām valodām.

Tā kā Python Latvijā nav tik pieprasīs kā JavaScript, bieži vien cilvēki sāk ar JavaScript. Taču tad pēc kāda laika mēs pamana, ka ir arī tāda valoda kā TypeScript un dažu brīdi pat ir grūti sapras, ar ko šīs valodas atšķiras. Varbūt tomēr vajadzēja sākt ar TypeScript? Kādas ir atšķirības starp šīm valodām? Īsumā varam teikt, ka TypeScript ir statisks JavaScript. Statisks ar domu, ka koda (mainīgā) tips tiek noteikts koda kompilēšanas laikā (kamer kodu raksta), bet JavaScript mainīgo tips tiek noteikts tikai tad, kad kods jau “strādā”. Šī iemesla dēļ Codelex kā pirmo valodu ievadnodarbībās māca TypeScript.

Kas ir JavaScript?

JavaSript (JS) ir multiplatformu programmēšanas valoda, kas tika radīta neprogrammētājiem, lai tie varētu izveidot vienkāršu funkcionalitāti mājaslapām. 1995. gada septembrī Netscape programmētājs Brandans Eihs 10 dienu laikā izstrādāja jaunu skriptu valodu. Sākotnēji tā tika nosaukta par Mocha, bet ātri kļuva pazīstama kā LiveScript un vēlāk - JavaScript. Skriptu valoda (script language)  jeb skriptēšanas valoda (scripting language), tas nozīmē, ka tā tiek interpretēta izpildes laikā (run time), nevis kompilēšanas laikā (uzreiz, kad kods tiek rakstīts). JavaScript galvenokārt ir klienta puses valoda, tā darbojas datora pārlūkprogrammā, bet pēc Node.js ieviešanas, JavaScript var arī darboties uz servera. Daudzas no tīmekļa vietnēm nav tikai vietnes, tās ir lietojumprogrammas. Piemēram, tīmekļa e-pasti, dokumentu rediģēšana, kalendāri, interaktīvās kartes - tas viss balstās uz JavaScript. Tas ir iespējams tāpēc, ka JavaScript atbalsts ir iebūvēts gandrīz katrā tīmekļa pārlūkprogrammā. Taču sarežģītu lietojumprogrammu izstrāde, izmantojot JavaScript, var būt apgrūtināta, tāpēc tiek izmantots TypeScript. JS sākotnēji nebija paredzēta šāda līmeņa sarežģītības pakāpes lietojumprogrammu izstrādei. JavaScript nepārtraukti tiek pilnveidots un pašlaik to pat var izmantot spēļu izstrādē. Unity - starpplatformu spēļu izstrādes rīks atbalsta JavaScript. Arī mobilās lietotnes un datorprogrammas priekš Windows un Mac operētājsistēmām var tik rakstītas, izmantojot JavaScript.

Pēc Stack Overflow datiem, JavaScript jau devīto gadu pēc kārtas ir populārākā programmēšanas valoda (https://insights.stackoverflow.com/survey/2021), bet TypeScript ieņem 6. vietu. Tur pat arī redzam, ka  TypeScript lietotāju vidū tiek mīlēts vairāk nekā JavaScript. Arī Ocotverse ziņojums jau vairākus gadus pēc kārtas uzrāda JavaScript kā populārāko valodu un var redzēt, ka TypeScript popularitāte strauji pieaug (https://octoverse.github.com/#top-languages-over-the-years).

Kas ir ECMAScript?

Parādoties JavaScript un tam ātri attīstoties, tika saprasts, ka ir nepieciešamas kādas vadlīnijas, lai valoda tiktu uzturēta un atjaunota. Uzņēmums Netscape valodas specifikācijas izstrādi uzticēja Eiropas Datoru ražotāju asociācijai (ECMA - European Computer Manufacturers Association) - organizācijai, kas dibināta ar mērķi standartizēt skaitļošanas tehniku. Šiem standartiem ir jāpalīz nodrošināt tīmekļa lapu savietojamību dažādās tīmekļa pārlūkprogrammās. ECMA specifikācijas tika apzīmētas ar ECMA-262, un ECMAScript valodās tika iekļautas JavaScript, JScript un ActionScript.

JavaScript īpatnības.

JS tiek izmantots let un var, deklarējot jaunus mainīgos. Ja mēs vēlamies deklarēt jaunu mainīgo, to varam izdarīt ar vārdu “let” (ieteicamais variants) vai “var”. Nav svarīgi vai tas būs, piemēram, strings (teksta formātā), integer (skaitlis) vai boolean (true/false vērtība). Šī ir būtiska atšķirība starp TypeSript un JavaScript. TypeScriptā katram mainīgajam uzreiz tiek noteiks vērtību tips. JavaScript ir dinamiska un “vāja” valoda (dynaminc and weak).

Kad mēs gribam pārbaudīt, vai kaut kas ir vienāds, piemēram, C# ir tikai viens veids kā to izdarī - ar ==, bet JS var gan ar ==, gan ===. Labā prakse ir izmantot ===, jo kad mēs izmantojam ==, JS pats pielīdzina tipus. Piemēram, ja mēs salīdzinām “1” un 1, izmantojot ==, rezultāts būs true (JS pats pārveidos skaitli 1 uz string), bet ar ===, būs false.

Vai JavaScript ir saistīts ar Java?

Nē, nav. JavaScript programmēšanas valoda, ko izstrādāja uzņēmums Netscape, Inc. Tā nav daļa no Java valodas.

Kur iegūt vairāk informācijas par JavaScript?

JavaScript dokumentāciju un informāciju par pasākumiem var atrast oficiālajā mājaslapā https://www.javascript.com/. Tur ir arī norādīti vairāki JavaScript kursi dažādās platformās. Ir pieejamas arī vairākas JavaScript komūnas, piemēram, šī https://dev.to/t/javascript.

Kur izmēģināt JavaScript?

Ja ir vēlme pašam izmēģināt JavaScript un pievienot arī CSS un HTML, to var izdarīt, piemēram, https://jsfiddle.net/, https://playcode.io/ , https://codesandbox.io/.

Kas ir TypeScript?

TypeScript ir programmēšanas valoda, kas balstās uz JavaScript (JS) un atšķirībā no JavaScript, tai ir statiski tipi. Tā nav patstāvīga. Rakstot TypeScript kodu, fonā tas tiek konvertēts JavaScript pirmkodā. Ja ir vēlme apgūt TypeScript, jāzin ir arī JavaScript. Varam teikt, ka tā savā ziņā ir uzlabota JavaScript versija. JavaScript kods būs valīds arī TypeScript failos, bet TypeScript nebūs valīds JavaScript failos, jo tam ir papildu iespējas. Angliki tas skanētu - TypeScript is a superset of JavaScript.

Kāpēc vajag TypeScript, ja ir JavaScript?

Lielākajai daļai valodu ar laiku nāk klāt kādi uzlabojumi, bet JavaScript gadījumā nevar pielikt klāt TypeScript īpašības un nosaukt to par jaunu JavaScript versiju. JavaScript tika radīta kā vienkārša valoda, ar kuras palīdzību tīmekļa dizaineris vai neprogrammētājs var ievietot tīmekļa lapā nelielu funkcionalitātes vai animācijas elementu. Tas, kas padarīja šo valodu draudzīgu, saudzīgu un elastīgu, nepadarīja to draudzīgu liela mēroga izstrādei un sarežģītām lietojumprogrammām. Neprogrammētājiem ir vieglāk strādāt ar JavaScript, bet programmētājiem ar TypeScript - it īpaši, ja programmētājs jau zina kādu statisku programmēšanas valodu. Šajā gadījumā daudzi koncepti pārklāsies. Piemēram, JavaScript nevar definēt noteiktu tipu mainīgajam, bet TypeScript to var. Šis kods būtu valīds TypeScript, bet JavaScript failā jau koda kompilēšānas brīdī neatbilstošā vieta tiks iekrāsota.

JS atšķirībā no TS kods netiek iedalīts moduļos vai “telpās pēc nosaukuma” (namespace), nepastāv “interface” (programmēšanas struktūra, sintakse, kura mantošanas brīdī piešķir noteiktas īpašības, uzvedību objektam). Ja JavaScript piemīt tādi trūkumi, tad kāpēc to turpina izmantot? JavaScript jau tiek ļoti plaši un ilgi izmantots. JavaScript piemīt ļoti daudz labu īpašību - gadu laikā ir veikti daudzi uzlabojumi, ieviestas labās JS praksesi, izveidotas papildu bibliotēkas un radīs TypeScript. Ir daudz iespēju, kā atvieglot sev darbu ar JS, kaut vai izmantojot TS.

Kādas ir TypeScript priekšrocības?

TypeScript ir stripra un statiska valoda (strong and static). Tas nozīmē, ka TypeScript mainīgā tips netiek mainīts - JavaScript šis ir pilnībā valīds kods.

Ja mēs tādu cenšamies izmantot TypeScript failā, mēs redzam, ka ir problēmas.

Ja mums ir jāuzraksta kaut kas vienkārš, tad ir patīkami izmantot tādu dinamisku valodu kā JavaScript, bet brīdī, kad kods paliek komplicētāks, lai pieļautu mazāk kļūdu, TypeScript ir daudz noderīgāks. Rakstot funkcijas iekš TS, mēs varam laicīgi pateikt kādus tipus mēs sagaidām kā parametrus un kādu tipu funkcija atgriezīs.

JavaScript variants

TypeScript variants

Ja mēs TypeScript gadījumā nenorādīsim tipu uzreiz, mēs nekavējoties redzēsim kompilācijas kļūdas paziņojumu (Parameter 'firstValue' implicitly has an 'any' type)

TypeScript ir labi organizēta valoda. TS nodrošina veidus kā grupēt, sakārtot un pārvaldīt apjomīgu kodu. Tas tiek darīts, izmantojot klases (sākot ar JS versiju ECMAScript 2015 tiek atbalstītas klases arī iekš JS), kas ir objektu orientētas programmēšanas koncepta pamatā. TS atļauj izmantot arī konstruktorus, piekļuves modifikatorus un tiek nodrošināta mantojamība. Moduļi un telpas pec nosaukuma (namespace) mums palīdz noteikt koda pieejamības līmeni. Nav vēlams, ka viss kods būtu pieejams no jebkuras citas vietas kodā. Mēs vēlamies, lai kodā pastāv sava veida hierarhija un kārtība. Šīs lietas var nebūt būtiskas mazos projektos, bet lielos projektos tas ir pavisam citādāk.

TypeScript mums palīdz būt konsistentiem - to ir daudz veiglāk testēt, noteikt un izsekot kļūdas (debugging process). Lai šīs priekšrocības pilnībā izmantotu, mums ir jāstrādā ar koda rediģēšans platformām, kas atbalsta TS. Ir platformas, kuras jau pēc pamata uzstādījumiem atbalsta TS, bet citās šī iespēja ir jāpieliek papildus. Kopumā var teikt, ka priekš TS ir daudz un dažādu papildu instrumentu, kas atvieglo un uzlabo koda rakstīšanu.

Tipizētas un netipizētas, statiskas un dinamiskas valodas.

Vairākas reizes minējām, ka TypeScript ir gandrīz tas pats, kas JavaScripts, tikai ar tipiem. Ko tad īsti nozīmē statiska un tipizēta (static and strongly typed) un dinamiska un netipizēta valoda (dynamic and weakly typed)?

Piemēram, TypeScript tipi tiek pārbaudīti un kļūdas novērotas jau koda kompilēšanas brīdī (kamēr kods tiek rakstīts, statiskas valodas īpašība). Līdzīgi notiek, piemēram, ar C#, Java, C un Scala. JavaScript mainīgā tips tiek pārbaudīts tikai tad, kad kods jau strādā (run time, dinamiskas valodas īpašība). Tajā brīdī mainīgajam ir iespēja pārvērsties citā tipā. Piemēram, kad programma sāk strādāt, mainīgā tips ir strings, bet pēc tam tas ir integer (skaitlis). Līdzīgi notiek, piemēram, ar PHP un Perl programmēšanas valodām.

Pozitīvā īpašība statiskām valodām ir ātrāka kompilētā koda izpilde. Ja kompilators zina precīzus izmantoto datu tipus, tas var izveidot mašīnkodu ātrāk, aizņemot mazāk atmiņas.

Dinamiskai valodai ir arī savi plusi. Izpildes laika tipa informāciju (RTTI -run-time type information ) var izmantot arī, lai īstenotu dinamisko dispečerizāciju (dynamic dispatch - metodes izsaukšana uz objektu, obj.method() ), vēlīno sasaisti (late binding - sasaiste notiek, kad konkrētā koda daļa tiek palaista), lejupvērstu pārnešanu (down-casting - tipa mainīšanu uz zemāku tipu jeb apkštipu. Ja ir klase “Dzīvnieks” un tā apakštips ir “Kaķis”, no sākuma tips var būt “Dzīvnieks”, bet pēc tam pārmainīts uz “Kaķis” ), atstarošanu (reflection - programmas spēja manipulēt ar objektu mainīgajiem lielumiem, īpašībām un metodēm koda darbības laikā) un līdzīgas funkcijas. Kā vēl vienu plusu var minēt to, ka atkļūdošanas cikls ir daudz īsāks un mazāk apgrūtinošs, jo nav jāgaia kamēr kompilātors pielāgosies jaunajām izmaiņām.

Spēcīgi tipizētā (strongly typed) valodā, mainīgie ir piesaistīti konkrētiem datu tipiem, un tā radīs tipa kļūdas, ja izteiksmē tipi nesakrīt, kā paredzēts, neskatoties uz to, ka notiek tipa pārbaude. Par to iepriekš tika minēts zem “Kādas ir TypeScript priekšrocības?” sadaļas. Rakstot kodu ir iespējams pieļaut dažādas kļūdas. Ja ir iespējams izvairīties no tām, lietojot tipus, tad mēs lietosim tipus un TypeScript. Šī iemesla dēļ mēs to iesakām kā pirmo programmēšanas valodu, ko apgūt.

Vāji tipizētās valodās mainīgie nav piesaistīti konkrētam datu tipam. Tiem joprojām ir tips, bet tipa drošības ierobežojumi ir mazāki salīdzinājumā ar stingri tipizētām valodām.

Kur iegūt vairāk informācijas par TypeScript?

TypeScript dokumentāciju un informāciju par komūnām var atrast oficiālajā mājaslapā https://www.typescriptlang.org/. Tur atrodama arī playground sadaļa (rotaļu laukums), kur ir iespējams pašam izmēģināt, kā tas ir - raksīt TypeScript kodu.