5 нових програмских језика које треба да знате

За неке људе, усвајање новог програмског језика представља непотребан терет који је боље избећи. Питају се: „Зашто би нам требао још један језик?“.

Зар постојећи нису довољни?

Зар тренутни алати не завршавају посао?

С друге стране, постоје и неуморни истраживачи који радо користе сваку прилику да експериментишу с новим стварима и откривају скривене драгуље. За њих је учење циљ само по себи и не треба их много наговарати да викенде посвете изградњи једноставне карташке игре на конзоли користећи неки мање познат, нови језик.

Без обзира на то којој групи припадате, једна ствар је неспорна: сви желимо да улажемо време у нешто што има светлу будућност.

Они који се држе старих језика, сматрају да њихов омиљени језик већ има добар замах и да ће наставити да има светлу будућност. Међутим, треба их подсетити да је њихов садашњи омиљени алат за развој некада био нешто ново и непознато, што су многи одбијали да прихвате. И данас је ситуација слична; нове технологије се појављују како би решиле нове проблеме или олакшале процес развоја.

Ако се нешто покаже довољно иновативно, вероватно ће привући пажњу и стећи популарност. Када се то догоди, не желите да будете заостали. 🙂

А онима који радо експериментишу са новим стварима, ево упозорења: забава је важна за програмере, али морамо пазити да не трошимо енергију на бесмислене ствари.

Наравно, Brainfuck је изузетно чудан и забаван језиk, попут слагалице, али мало је вероватно да ће вам бити од велике користи ако се озбиљно бавите њиме. Потребно вам је нешто ново, практично и добро утемељено.

Како су ови језици бирани

Избор језика може бити изазован, поготово када размишљамо о новим језицима који могу бити корисни за будуће запослење и лично задовољство. Сваки творац језика чврсто верује да је направио најбољи могући језик и решио све проблеме. Како онда направити избор?

За потребе овог чланка, фокусирао сам се на неколико параметара како бих олакшао процес претраживања.

Датум изласка

Намерно сам избегавао језике који су веома нови.

Под новим језицима подразумевам оне који су млађи од 5-6 година од писања овог текста, посебно оне који још нису достигли стабилност (тј. верзију 1.0). Ово, на жалост, искључује неке праве драгуље попут Crystal, али надам се да ћу се вратити на то једног дана и писати о његовом успеху. 🙂

Исечак кода у Crystal-у („Брз као Ц, гладак као Ruby“)

По мом мишљењу, период од 5-12 година је најбољи за језик, јер се тада стабилизује и даље усавршава. Наравно, постоје изузеци од овог правила, и њих ћу узети у обзир кад буде потребно.

Овај критеријум је једноставан, али се често занемарује када смо узбуђени због нечег новог. За многе, подршка велике компаније је довољан доказ за успех, али то није увек тако.

Да, Apple-ов Objective-C и касније Swift су напредовали јер су били једини избор у строго контролисаном екосистему, али Facebook-ови D и Hack (по мом мишљењу, ружна интерпретација језика који је ионако био ружан) су и даље само експерименти.

Идеална ситуација би била да језик подржава велика, стабилна компанија и да брзо стиче популарност (као што је то случај са React-ом).

Ипак, заједница је кључна. Ако језик не привлачи пажњу и нема довољно програмера који га користе, едукују и промовишу, неће успети да се пробије из своје GitHub „гробнице“.

Због овога, искључио сам зреле, фасцинантне језике попут Racket и Erlang, јер њихов раст стагнира.

Фокусиран, добро дефинисан УСП

Трећа ствар коју тражим је јасан циљ језика. На пример, побољшана верзија PHP-а која решава проблеме с именовањем и преводи се у изворни PHP ми није прихватљива.

Предности су премале да би оправдале трошкове преласка на тај језик. Из тог разлога, одбацујем покушаје као што је CoffeeScript и многе сличне језике који се преводе у JavaScript.

Искрено, одмах одбацујем језике који нуде само побољшања синтаксе. Историја је показала да је корисност важнија од удобности када су језици у питању. Дакле, ако се сви нови језици фокусирају само на пријатније искуство, бојим се да се неће наћи на овој листи.

Јасна, доследна синтакса

Знам. Управо сам рекао да синтакса није важна. Да будем прецизан, рекао сам да „побољшања само синтаксе“ нису важна. Међутим, синтакса је и даље важан фактор у продуктивности програмера и могућности одржавања кода, па ћу то узети у обзир.

Уз синтаксу, долази и доследност. Именовање функција, структурирање модула итд., су кључни аспекти које језик не сме запоставити. Година је 2018, и још један језик дизајниран налик на PHP био би срамота за све нас. Дакле, без даљег одлагања, кренимо са наших пет најбољих препорука.

1. Јулиа

За истраживаче на MIT-у, језици за науку о подацима били су у најбољем случају компромис. Python, упркос својој јасноћи и популарности, није имао адекватне структуре за рад с објектима података. Такође, као интерпретирани језик, Python је био спор (не библиотеке, јер су оне углавном написане у C-у).

Али можда је највећи недостатак био незграпан модел истовремености и недостатак модела паралелног рачунарства, који је кључан у супер-рачунарству.

Као резултат тога, Julia је настала.

Julia је добила своју стабилну верзију 29. септембра 2018, неколико дана пре него што је овај чланак написан! Ево шта званична веб страница каже о њеним карактеристикама:

Julia се истиче у нумеричким прорачунима. Њена синтакса је одлична за математику, подржани су многи нумерички типови података, а паралелизам је доступан одмах. Julia-ин механизам вишеструког отпремања је природан за дефинисање типова података сличних бројевима и низовима.

У синтаксном смислу, Julia се може посматрати као спој Python-а и C-а. Вероватно је ово први пут да језик циља на оба ова квалитета и у томе успева.

Једноставно речено, Julia је брза и нема стриктно типизирање. Ево неких бенчмаркова:

Званични Julia бенчмаркови

Као што видите, Julia је мало спорија од C-а, али је бржа од Java и Python-а. А какав је код у Julia-и?

Ево примера функције за израчунавање хипотенузе правоуглог троугла:

Иако је већина Julia екосистема усмерена на математичке проблеме, сматрам да има светлу будућност и као језик опште намене.

То је први језик који знам да има подршку за паралелно рачунарство, па ме не би изненадило да постане популарнији у веб и IoT доменима.

2. Rust

Ако сте испробали најновије верзије Firefox-а, знате да коначно, након година рада, изгледа да би могли да преузму део тржишта од Chrome-а.

Ако је прегледач брз и ефикасан, то је све захваљујући језику који је Mozilla посебно развила: Rust.

Рећи да Rust има светлу будућност било би потцењивање; језик је већ остварио велики успех, а ако нисте чули за њега, то је зато што је његова област примене специјализована, а циљ му је веома амбициозан: замена за C++! Да, коначно имамо језик који то не само да може, већ то и ради.

За оне који су фрустрирани преоптерећеним дизајном C++-а и изазовима управљања меморијом, Rust је као дашак свежег ваздуха.

Ево како изгледа Rust програм:

Сажето и елегантно, по мом мишљењу. Rust следи приступ функционалног програмирања, чинећи код лакшим за комбиновање, и нема објектно-оријентисаних хијерархија са којима се треба борити.

Па шта Rust-у даје храброст да изазове C++? То је нови модел меморије. Уместо да се ослања на стари систем нев()/делете(), Rust уводи концепт власништва.

Уместо да директно додељују и приступају меморији, Rust променљиве „позајмљују“ једна од друге, уз строга ограничења која поставља компајлер. Цео концепт је превише сложен да би се објаснио у неколико речи, па погледајте званичну документацију за више детаља.

Поента је да ово резултира 100% сигурношћу меморије без потребе за сакупљачем смећа, што је огромна предност.

Rust је освојио свет системског програмирања. Већ је подржан на неким платформама, покреће прегледаче и машине за рендеровање, брзо замењујући C/C++ код у производним системима, и користи се за писање оперативних система.

Наравно, креирање другог прегледача или управљачког програма уређаја није за свакога, али Rust се већ шири и на друге домене. Већ имамо неколико потпуно функционалних, брзих веб оквира у Rust-у, а развија се све више библиотека за апликације.

Искрено, ако сте заинтересовани за узбудљиву будућност, Rust је одличан избор, а сада је право време да се упустите у њега. Rust је авион који је полетео, али још увек има времена да се укрцате док се пење ка звездама!

Научите Rust од Дмитрија Нестерука.

3. Elixir

Међу језицима који се фокусирају на удобност програмера, прво место обично заузима Ruby. То је језик који се чита као поезија и има довољно пречица да смањи напор размишљања за цео ред величине.

Није ни чудо што Rails framework наставља да доминира развојем пуног стека за озбиљне програмере и стартапе. Међутим, нису сви били задовољни Rails-ом, посебно један од његових главних програмера – Jose Valim. Мислим да сам творац најбоље објашњава генезу овог језика у интервјуу:

То је дуга прича, али покушаћу да будем кратак. Још 2010. сам радио на побољшању перформанси Rails-а када сам радио са системима са више језгара, јер наше машине и производни системи имају све више и више језгара. Међутим, цело искуство је било фрустрирајуће јер Ruby не пружа одговарајући алат за решавање проблема истовремености. Тада сам почео да разматрам друге технологије и на крају сам се заљубио у Erlang виртуелну машину.

Почео сам све више да користим Erlang и, са искуством, приметио сам да ми недостају неке конструкције доступне у многим другим језицима, укључујући функционалне. Тада сам одлучио да направим Elixir, као покушај да доведем различите конструкције и одличне алате на врх Erlang VM-а.

и тако је Elixir настао!

Баш као што Scala унапређује језик Java, али циља на исту виртуелну машину испод (JVM), Elixir користи предности деценијама старе Erlang виртуелне машине, која се показала као поуздана.

Дискусија о Erlang-у је ван теме овог чланка, али је важно знати да је то најбоље чувана тајна телекомуникационе индустрије: ако су наше телефонске мреже поузданије од веб система, то је захваљујући Erlang-у.

Једноставније речено, ево шта то значи. Ако правите систем у реалном времену, као што је чет, Elixir троши мање меморије и стабилнији је од Ruby-а (или PHP-а, Python-а и Java-е).

Машина која покреће Ruby и има максимум 10.000 истовремених веза, може лако да подржи 200.000 када користи Elixir, и још увек има довољно меморије за покретање 2D игара!

Исечак кода Elixir-a

Што се тиче синтаксе, Elixir безобразно копира Ruby, а његов доминантни веб framework, Phoenix, безобразно копира Rails. Сматрам да је то добро, јер заједно са Laravel-ом, Grails-ом, Masonite-ом итд., долазимо до тачке где сви језици имају framework-е сличне Rails-у, што олакшава прелазак. Неки би могли да се подсмевају „недостатку оригиналности“, али ја се не жалим.

Коначно, Elixir је једна од оних технологија које су освежавајуће, пријатне и проклето практичне. Неке Ruby (па чак и не-Ruby) фирме прелазе на Elixir, а велике компаније попут Pinterest-а га користе у производњи са изузетно задовољавајућим резултатима.

Многи сматрају да је Node.js био привремени покушај истовремености и да ће га Elixir ускоро заменити. Морам да кажем да се слажем с њима. 🙂

4. Kotlin

На конференцији I/O 2017, Google је објавио вест која је изненадила многе. Компанија је званично прогласила Kotlin као примарни језик за развој Android-а, што је потресло индустрију.

Није изненађујуће што Google активно тражи замену за Java-у након тужбе од стране Oracle-а; међутим, усвајање Kotlin-а је било неочекивано и још увек постоји могућност да ће Google ускоро представити своју виртуелну машину. Међутим, Kotlin је тренутно у нарастајућем тренду.

Kotlin је развио JetBrains, компанија позната по свом скупу одличних едитора кода. Један од њих, IntelliJ IDEA, је основа за Android Studio. Циљеви дизајна Kotlin-а су сигурност, сажетост и 100% интероперабилност са Java-ом.

Пре свега, Kotlin компајлер ради напорно да елиминише све изузетке нул-показивача који су толико чести у свету Java-е. Такође, смањује дугачак Java код, што ће многим бити олакшање.

Ево одличног поређења кода између Java-е и Kotlin-а:

Кредит за слику: hype.codes

Kotlin код је знатно краћи и има мање когнитивног оптерећења.

Али да разјаснимо једну ствар: мало је вероватно да ће Kotlin заменити Java-у, иако брзо постаје фаворит. Мислим да за десет година мањи и средњи тимови неће тражити даље од Kotlin-а, док ће велики тимови наставити да користе Java-у због наслеђа.

Упркос томе, Kotlin има изузетно светлу будућност јер ради све што ради Java, може се интегрисати са Java кодом без проблема и много је пријатнији!

5. TypeScript

Бог зна колико сам се уздржавао за ово место! Све у мени је вриштало „Brest! Elm!“, али колико год да су његове идеје револуционарне или колико год да је синтакса божанствена, Elm још увек није признат као главна алтернатива за фронт-енд рад. 🙁 У сваком случају, да пређемо на оно што је уобичајено: TypeScript.

JavaScript је као дивље бобице: ружан и непријатан, али га морате конзумирати ако желите да преживите џунглу фронт-енд развоја. Било је много покушаја да се он замени (и нови WebAssembly стандард ће вероватно успети), али оно што је заиста привукло пажњу свих је суперсет који је развио Microsoft.

Велике су шансе да сте чули за TypeScript: Angular га је први прихватио од верзије 2 па надаље, и људи су то брзо приметили. То је зато што TypeScript додаје веома потребне и фантастичне супермоћи најпопуларнијем програмском језику на свету.

Да, коначно је могуће написати изворни JavaScript код без мучења и проклињања сопственог постојања!

Ево побољшања која TypeScript доноси:

✓ Снажно типизирање: Коначно, стринг није број, а број није објекат, који није празан стринг!

✓ Провера типа у време компилације: Ако се код исправно компајлира, мање-више је загарантовано да нема проблема са JavaScript-ом у runtime-у.

✓ Класе и модули: Да, класе су стандардне у ES6, али су укључене и у TypeScript, поред уредног система модула.

✓ Закључивање типа: За сложене типове, компајлер може лако да открије тип, што вам штеди главобољу.

✓ Async/await: Кључне речи и обрасци async/await су фундаментални, тако да више нема петљања са обећањима и callback-овима!

Именски простори, генерици, tuple . . . могао бих да набрајам, али довољно је рећи да TypeScript претвара једно од најгорих искустава развоја у једно од најбољих.

TypeScript исечак кода

Утицај TypeScript-а је неоспоран. Он је избацио сличне покушаје као што је Google Dart (иако покушава да се врати преко Flutter-а), и отворио је очи JavaScript програмерима за предности јачег типизирања.

Као резултат тога, велике библиотеке као што су React, D3, Vue (чак и jQuery!) сада имају TypeScript верзију, а у најбољим софтверским компанијама широм света, сав JavaScript код се пише као TypeScript. TypeScript дефиниције су сада доступне и за Node.js (искрено, ако Node побољша истовременост и поправи лоше управљање меморијом, биће неуништив).

Можда ће вас изненадити што је творац Node.js, након што је јавно изразио жаљење за својим стварањем, ради на новом runtime-у (тренутно нема званичне веб странице, само GitHub репо) који користи TypeScript као примарни језик.

Најбоља вест? TypeScript је једноставан језик за учење са значајним предностима у будућности. Ако сте JavaScript програмер средњег нивоа, можете научити TypeScript за два дана и превести сав постојећи код!

Закључак и одрицање од одговорности

Неки језици су постигли сличну популарност као они наведени у овом чланку, али нису укључени из различитих разлога. Ево кратке анализе:

  • Go: Већ се усталио као главни, иако не и веома популаран, језик. Верујем да тренутно Go има неколико конкурента који ће задржати његов тржишни удео ниским.
  • R: R је већ популаран међу научницима за податке и мало је вероватно да ће привући програмере апликација. Осим тога, библиотеке за машинско учење полако улазе у све главне језике (чак их и PHP сада има!), па је само питање времена када ће бити шире распрострањене. 🙂
  • Swift: Apple има чврсту контролу над својим екосистемом, а Swift је једини доступни језик. Раније је Objective-C био присилан, као што је Swift сада. Сматрам да је то „варање“ и зато га нисам уврстио овде. 😀

Будућност је увек