5 nowych języków programowania, które powinieneś znać

Dla niektórych osób nauka nowego języka programowania jest nadmiarem, którego najlepiej unikać. Dlaczego, och, dlaczego, argumentują, potrzebujemy jeszcze innego języka?

Czy nie mamy już dość?

Czy istniejące narzędzia nie wykonują pracy?

A potem są ci niestrudzeni poszukiwacze, którzy korzystają z okazji, by spróbować nowych rzeczy i potykać się o klejnoty. Nauka jest celem samym w sobie i nie trzeba ich specjalnie przekonywać, aby spalić swoje weekendy, budując grę karcianą opartą na konsolach w tym niejasnym, nowym języku.

Bez względu na to, do którego obozu należysz, jest coś poza dyskusją: wszyscy chcemy spędzać czas na czymś, co będzie miało świetlaną przyszłość.

Dla osób z obozu dziedzictwa, ich ulubiony istniejący język ma już mnóstwo rozmachu i nadal będzie miał świetlaną przyszłość. Muszę im przypomnieć, że ich teraz dojrzały, preferowany zestaw narzędzi programistycznych był kiedyś „kool-aid”, którego wielu nie chciało pić. I tak jest dzisiaj; nowe technologie są dodawane w celu rozwiązania nowych problemów lub złagodzenia bólu związanego z rozwojem.

Jeśli coś zrobi to wystarczająco radykalnie, jest szansa, że ​​nadal będzie brać udział w myślach i osiągać szczyt. Kiedy tak się dzieje, nie chcesz pozostać w tyle.

A dla tych, którzy lubią biegać z błyszczącymi rzeczami, ostrzeżenie: dobra zabawa jest niezbędna jako programista, ale musimy uważać, aby nie marnować energii bez celu.

Pewnie, Mózg to niesamowicie pokręcony, przypominający łamigłówkę, zabawny język, ale raczej nie odniesiesz korzyści z zajmowania się nim na poważnie. Chcesz czegoś nowego, rozsądnego i mającego solidne podstawy.

Jak wybrano te języki

Wybór języka to zastraszająca praca, zwłaszcza gdy nowe języki są rozważane dla przyszłych korzyści w zatrudnieniu i satysfakcji. Każdy autor języka jest głęboko przekonany, że zbudował idealny język i rozwiązał wszystkie problemy, na które trzeba odpowiedzieć. Jak więc tniesz?

W tym poście skupiłem się na kilku parametrach, aby moje poszukiwania mieściły się w rozsądnych granicach.

Data wydania

Szczególnie unikałem języków, które są bardzo, bardzo nowe.

Nowe, mam na myśli języki mające mniej niż 5-6 lat w momencie pisania, a zwłaszcza te, które nie osiągnęły stabilności (czyli wydanie 1.0). To niestety wyklucza kilka prawdziwych perełek, takich jak KryształAle mam nadzieję, że kiedyś do tego wrócę i napiszę o jego sukcesie.

Fragment kodu w Crystal („Szybki jak C, Zgrabny jak Ruby”)

Dla mnie 5-12 lat to najlepszy moment, kiedy język się ustabilizuje i dopracowuje się kolejne udoskonalenia. Oczywiście istnieją wyjątki od tej zasady, które zostaną uwzględnione w stosownych przypadkach.

Ten jest oczywisty, ale często jest ignorowany, gdy ekscytujemy się czymś nowym. Obecnie dla wielu osób wsparcie dużej firmy jest wystarczającym precedensem do osiągnięcia sukcesu, ale nie zawsze jest to prawdą.

Tak, Apple Objective-C, a teraz Swift, rozwijały się, ponieważ były to jedyne opcje w wysoce kontrolowanym ekosystemie, ale Facebook D oraz Włamać się (moim zdaniem brzydkie podejście do i tak brzydkiego języka) pozostaje niewiele więcej niż eksperymenty.

Idealną kombinacją byłby język wspierany przez dużą, stabilną firmę i zyskujący na popularności (jak React).

Ale sednem sprawy jest nadal społeczność. Jeśli język nie wywołuje szumu i nie ma wystarczającej liczby programistów, którzy mogliby edukować i popularyzować, nie wyjdzie z grobu GitHub.

Dla mnie wyklucza to dojrzałe, fascynujące języki, takie jak Rakieta oraz Erlangponieważ na krzywej wzrostu pozostały one płaskie.

Skoncentrowana, dobrze zdefiniowana USP

Trzecią rzeczą, której szukam, jest jasny cel dla języka. Na przykład, lepsza wersja PHP, która naprawia problemy z nazewnictwem i kompiluje się do natywnego PHP, nie działa dla mnie.

Korzyści są po prostu zbyt małe, aby usprawiedliwić pęknięcia, jeśli wszyscy spróbują się do tego przenieść. Według tej miary nie mogę powstrzymać się od odrzucenia prób takich jak CoffeeScripti wiele innych podobnych języków kompilacji do języka JavaScript.

Szczerze mówiąc, jestem zobowiązany do natychmiastowego odrzucenia ulepszeń dotyczących tylko składni. Historia pokazała, że ​​użyteczność przewyższa przyjazność, jeśli chodzi o języki, więc jeśli skupianie się na wszystkich nowych językach jest przyjemniejszym doświadczeniem, obawiam się, że nie znajdzie się na tej liście.

Przejrzysta, spójna składnia

Tak, wiem. Powiedziałem tylko, że składnia nie ma znaczenia. Cóż, żeby być precyzyjnym, powiedziałem, że „poprawy tylko składni” nie mają znaczenia. Ale to powiedziawszy, składnia pozostaje jednym z istotnych czynników wydajności programisty i łatwości konserwacji, więc jest to coś, co z pewnością będzie uwzględniane w moich obliczeniach tutaj.

Wraz ze składnią pojawia się idea spójności. Nazywanie funkcji, strukturyzacja modułów itp. to kluczowe rzeczy, na których błędy język nie może sobie pozwolić. Jest rok 2018, na litość boską, a kolejny projekt języka w stylu PHP byłby wstydem dla nas wszystkich. Więc bez zbędnych ceregieli zacznijmy od naszych pięciu najlepszych rekomendacji.

1. Julia

Dla ludzi z MIT języki dostępne dla nauki o danych były w najlepszym razie kompromisem. Python, mimo całej swojej przejrzystości i popularności, nie posiadał natywnych konstrukcji do obsługi obiektów danych. Ponadto, będąc językiem interpretowanym, Python był dla nich powolny (nie biblioteki, pamiętaj, ponieważ są one w większości napisane w C).

Ale być może największym ograniczeniem był niezgrabny model współbieżności i brak modelu obliczeń równoległych, z których ten ostatni jest podstawą superkomputerów.

W rezultacie, Julia urodził się.

Julia dotarła do stabilnego wydania 29 września 2018 r., zaledwie kilka dni przed napisaniem tego artykułu (porozmawiajmy o czasie!). Oto, co oficjalna strona internetowa ma do powiedzenia na temat swoich możliwości:

Julia specjalizuje się w obliczeniach numerycznych. Jego składnia jest świetna do matematyki, obsługiwanych jest wiele numerycznych typów danych, a równoległość jest dostępna po wyjęciu z pudełka. Wielokrotna wysyłka Julii jest naturalnym sposobem na zdefiniowanie liczb i typów danych podobnych do tablic.

Jeśli chodzi o składnię, Julia może być postrzegana jako połączenie Pythona i C. Tak, prawdopodobnie po raz pierwszy język celował w obie te cechy i odniósł sukces.

Aby sprawy były proste, Julia działa błyskawicznie i nie narzuca ścisłego pisania. Oto kilka testów porównawczych:

Oficjalne testy Julii

Jak widać, Julia jest nieco gorsza od C, ale wysadza Javę i Pythona z wody. A jakie słodycze oferuje Julia?

Oto implementacja funkcji do obliczania przeciwprostokątnej trójkąta prostokątnego:

Wreszcie, podczas gdy większość Julii ekosystem jest mocno nastawiony na pracę matematyczną, wierzę, że ma świetlaną przyszłość ogólnego przeznaczenia.

Według mojej wiedzy jest to pierwszy język, który ma pierwszorzędne wsparcie dla obliczeń równoległych, więc nie będzie zaskoczeniem, że zyskuje na popularności w domenach sieci Web i IoT.

2. Rdza

Jeśli wypróbowałeś nowe wersje przeglądarki Firefox, wiesz, że w końcu, po latach pracy, wygląda na to, że mogą one odebrać Chrome część rynku.

Jeśli przeglądarka jest lekka i zgrabna i szybko się renderuje, to wszystko dzięki specjalnie opracowanemu przez Mozillę językowi: Rdza.

Powiedzenie, że Rust ma świetlaną przyszłość, będzie kłamstwem; język jest już ogromnym sukcesem, a jeśli jeszcze o nim nie słyszałeś, to dlatego, że jego obszar zastosowań jest wyspecjalizowany, a jego cel przerażający: zastąpienie C++! Tak, w końcu mamy język, który nie tylko jest w stanie to zrobić, ale już to robi.

Dla ludzi sfrustrowanych przeciążonymi projektami i wyzwaniami związanymi z zarządzaniem pamięcią w C++, Rust jest powiewem świeżego powietrza.

Oto jak wygląda program Rust:

Moim zdaniem zwięzła i elegancka. Rust stosuje podejście programowania funkcyjnego, które sprawia, że ​​Twój kod jest bardziej komponowalny i nie ma hierarchii zorientowanych obiektowo, z którymi można się zmagać.

Więc co daje Rustowi odwagę, by pójść za C++? To nowy model pamięci. Zamiast polegać na starym tańcu new()/delete(), Rust wprowadza ideę własności.

Zamiast bezpośrednio przydzielać i uzyskiwać dostęp do pamięci, zmienne Rust „pożyczają” od siebie nawzajem, z surowymi ograniczeniami nałożonymi przez kompilator. Ogólna koncepcja jest zbyt skomplikowana, aby wyjaśnić ją w kilku słowach, więc zachęcamy do zapoznania się z oficjalne dokumenty uczyć się więcej.

Chodzi o to, że skutkuje to 100% bezpieczeństwem pamięci bez potrzeby garbage collectora, co jest dużym problemem.

Rust szturmem podbił świat programowania systemowego. Jest już obsługiwany na niektórych platformach, zasila przeglądarki i silniki renderujące, które szybko zastępują kod C/C++ w systemach produkcyjnych i jest używany do pisania systemów operacyjnych.

Jasne, tworzenie kolejnej przeglądarki lub sterownika urządzenia nie jest dla każdego, ale Rust już rozprzestrzenia się na inne domeny. Mamy już kilka w pełni funkcjonalnych, absurdalnie szybkich frameworków webowych w Ruście, a coraz więcej bibliotek aplikacji jest w trakcie rozwoju.

Szczerze mówiąc, jeśli interesuje Cię ekscytująca przyszłość, Rust to idealny język, a teraz jest to idealny czas. Rust to samolot, który wystartował, ale wciąż jest czas, aby wsiąść na pokład, gdy zmierza ku gwiazdom!

Uczyć się Rdza od Dymitra Nesteruk.

3. Eliksir

Wśród języków, które skupiają się na szczęściu deweloperów, pierwsze miejsce na stałe zostało zarezerwowane dla Rubiego. To język, który czyta się jak poezję i ma wystarczająco dużo skrótów, by zredukować mentalne tarcia o rząd wielkości.

Nic więc dziwnego, że framework Rails nadal dominuje w rozwoju pełnego stosu dla poważnych programistów i start-upów. Ale nie wszyscy byli zadowoleni z Railsów, zwłaszcza jeden z ich głównych programistów – José Valim. Myślę, że sam twórca najlepiej tłumaczy genezę tego języka w wywiad:

To długa historia, ale postaram się, żeby była krótka i słodka. W 2010 roku pracowałem nad poprawą wydajności Railsów podczas pracy z systemami wielordzeniowymi, ponieważ nasze maszyny i systemy produkcyjne są dostarczane z coraz większą liczbą rdzeni. Jednak całe doświadczenie było dość frustrujące, ponieważ Ruby nie zapewnia odpowiedniego narzędzia do rozwiązywania problemów ze współbieżnością. Wtedy zacząłem przyglądać się innym technologiom i ostatecznie zakochałem się w Wirtualnej Maszynie Erlanga.

Zacząłem coraz częściej używać Erlanga i z doświadczenia zauważyłem, że brakuje mi niektórych konstrukcji dostępnych w wielu innych językach, w tym funkcjonalnych. Wtedy zdecydowałem się stworzyć Elixir, jako próbę wprowadzenia różnych konstrukcji i doskonałego oprzyrządowania na wirtualną maszynę Erlang.

I oto, Eliksir urodził się!

Podobnie jak Scala ulepsza język Java, ale celuje w tę samą maszynę wirtualną pod spodem (JVM), Elixir wykorzystuje dziesiątki lat, sprawdzoną w boju maszynę wirtualną Erlang.

Dyskusja na temat Erlanga wykracza poza zakres tego artykułu, ale minimum, które powinieneś wiedzieć, to to, że jest to najlepiej strzeżona tajemnica branży telekomunikacyjnej: jeśli nasze sieci telefoniczne są znacznie bardziej niezawodne niż nasze systemy internetowe, to wszystko dzięki Erlanga.

Mówiąc prościej, oznacza to właśnie to. Jeśli budujesz system czasu rzeczywistego, taki jak czat, Elixir jest znacznie mniej głodny pamięci RAM i stabilny niż Ruby (lub PHP, Python i Java, jeśli o to chodzi).

Maszyna, która obsługuje Rubiego i maksymalnie obsługuje 10 000 jednoczesnych połączeń, może z łatwością obsłużyć 200 000 podczas korzystania z Elixir i nadal ma wystarczająco dużo pamięci RAM, aby uruchamiać gry 2D!

Fragment kodu eliksiru

Pod względem składni Elixir bezwstydnie kopiuje Rubiego, a jego dominujący framework sieciowy, Phoenix, bezwstydnie kopiuje Railsy. Powiedziałbym, że to też dobrze, ponieważ wraz z Laravel, Grails, Masonite itp., osiągamy punkt, w którym wszystkie języki mają frameworki podobne do Railsów, które mogą ułatwić przejście. Niektórzy mogą szydzić z „braku oryginalności”, ale przynajmniej nie narzekam.

Wreszcie, Eliksir to jedna z tych technologii, które są odświeżające, przyjemne i cholernie praktyczne. Kilka sklepów Ruby (a nawet innych niż Ruby) przenosi się do Elixir, a duże firmy, takie jak Pinterest, używają go w produkcji z niezwykle satysfakcjonującymi wynikami.

Wiele osób uważa, że ​​Node.js był prowizoryczną próbą współbieżności i wkrótce zostanie zastąpiony przez Elixir. Muszę powiedzieć, że się z nimi zgadzam.

4. Kotlina

W 2017 roku I/O Google wypuścił bombę na niczego niepodejrzewający tłum. Firma formalnie ogłoszona Kotlin jako podstawowy język programowania dla Androida, wywołując fale szoku w branży.

Teraz, gdy Google aktywnie szuka zastąpienia Javy, nie jest zaskoczeniem po tym, jak został ugryziony przez pozew Oracle; jednak przyjęcie Kotlina było nieco nieoczekiwane i nadal istnieje duża szansa, że ​​Google wkrótce wyda swoją wirtualną maszynę. Na razie jednak Kotlin przeżywa rozkwit.

Kotlin został opracowany przez JetBrains, firmę lepiej znaną z zestawu niesamowicie dobrych edytorów kodu. Jeden z nich, IntelliJ IDEA, stanowi podstawę Android Studio. Cele projektowe Kotlina to bezpieczeństwo, zwięzłość i 100% interoperacyjność z Javą.

Bardziej niż cokolwiek innego, kompilator Kotlin pracuje bardzo ciężko, aby wyeliminować wszelkie wyjątki wskaźnika zerowego, które są tak powszechne w świecie Javy. Zmniejsza również nieco przysłowiową gadatliwość Javy, co dla wielu przyniesie ulgę.

Oto wspaniałe porównanie kodu między Javą a Kotlinem:

Źródło obrazu: hype.codes

Kod Kotlina jest znacznie krótszy i ma znacznie mniejsze przeciążenie poznawcze do przebrnięcia.

Ale wyjaśnijmy jedną rzecz: Kotlin jest bardzo mało prawdopodobny, aby zastąpić Javę, chociaż szybko staje się faworytem. Wierzę, że dziesięć lat później małe i średnie zespoły nie będą szukać dalej niż Kotlin, podczas gdy duże grupy będą nadal używać Javy wyłącznie z powodów związanych ze starszymi wersjami.

To powiedziawszy, Kotlin ma niezwykle świetlaną przyszłość, ponieważ robi wszystko, co robi Java, może łączyć się z kodem Java bez zauważenia przez nikogo i jest o wiele przyjemniejszy!

5. TypeScript

Bóg wie, że musiałem się powstrzymać przed tym miejscem! Wszystko we mnie krzyczało „Wiąz! Elm!”, ale bez względu na to, jak rewolucyjne są jego pomysły lub jak boska składnia, Elm nie jest jeszcze postrzegany jako mainstreamowa alternatywa dla pracy front-endowej. 🙁 W każdym razie przejdźmy do głównego nurtu: TypeScript.

JavaScript jest jak dzikie jagody: brzydki i niesmaczny, ale musisz go znieść, jeśli chcesz przetrwać w dżungli front-endowego rozwoju. Podjęto wiele prób zastąpienia go (i najprawdopodobniej nowy standard WebAssembly się powiedzie), ale to, co naprawdę przykuło uwagę wszystkich, to superzestaw opracowany przez Microsoft.

Istnieją duże szanse, o których słyszałeś Maszynopis: Angular był pierwszym frameworkiem, który objął go od wersji 2, a ludzie szybko to zauważyli. To dlatego, że TypeScript dodaje kilka bardzo potrzebnych i fantastycznych supermocy do najsłynniejszego języka programowania na świecie.

Tak, w końcu można pisać natywny kod JavaScript bez cierpienia i przeklinania swoich narodzin!

Oto ulepszenia, które TypeScript wprowadza do tabeli:

✓ Silne pisanie: Wreszcie łańcuch nie jest liczbą, a liczba nie jest obiektem, co nie jest pustą tablicą!

✓ Sprawdzanie typu w czasie kompilacji: Jeśli Twój kod skompiluje się poprawnie, jest mniej więcej gwarantowane, że jest wolny od błędów środowiska wykonawczego JavaScript.

✓ Klasy i moduły: Tak, klasy są standardem w ES6, ale są również zawarte w TypeScript, oprócz zgrabnego systemu modułów.

✓ Wnioskowanie o typie: W przypadku typów złożonych typ może być łatwo rozpoznany przez kompilator, co oszczędzi Ci bólu głowy.

✓ Async/await: słowa kluczowe i wzorce async/await są fundamentalne, więc nie musisz już bawić się obietnicami i wywołaniami zwrotnymi!

Przestrzenie nazw, generyki, krotki . . . Mógłbym mówić i gadać, ale wystarczy powiedzieć, że TypeScript przekształca jedno z najgorszych doświadczeń programistycznych w jedno z najlepszych.

Fragment kodu TypeScript

Nie można zaprzeczyć wpływowi TypeScript. Wypchnął podobne próby, takie jak Dart Google, z pola (chociaż próbuje wrócić za pośrednictwem Flutter, mobilnego frameworka programistycznego) i otworzył oczy programistom JS na korzyści z silniejszych typów.

W rezultacie znaczące biblioteki, takie jak React, D3, Vue (nawet jQuery!) mają teraz wersję TypeScript, a w najlepszych sklepach z oprogramowaniem na całym świecie cały kod JavaScript jest pisany jako kod TypeScript. Nagłówki TypeScript są teraz dostępne również dla Node.js (szczerze, jeśli węzeł może poprawić swoją historię współbieżności i naprawić kiepskie zarządzanie pamięcią, będzie to trwało wiecznie).

Możesz być zaskoczony, gdy dowiesz się, że twórca Node.js, po upublicznieniu żałować jego dzieło, pracuje nad nowe środowisko wykonawcze (w tej chwili nie ma oficjalnej strony internetowej; tylko repozytorium GitHub), w której podstawowym językiem jest TypeScript.

Najlepsza wiadomość? TypeScript to mały język do nauki z dużymi korzyściami w przyszłości. Jeśli jesteś średniozaawansowanym programistą JavaScript, w ciągu dwóch dni zdobędziesz wystarczającą ilość TypeScriptu, aby przenieść cały istniejący kod!

Wniosek i wyłączenie odpowiedzialności

Poszczególne języki zyskują taką samą popularność jak te w tym artykule, ale z różnych powodów nie zostały uwzględnione na liście. Oto krótki przegląd:

  • Golang: Ugruntowany już jako język głównego nurtu, jeśli nie bardzo popularny. Wierzę, że w tym momencie Golang ma kilku konkurentów, którzy utrzymają niski udział w rynku.
  • R: R jest już gorący wśród naukowców zajmujących się danymi i jest mało prawdopodobne, aby przyciągnął wiele programistów aplikacji. Poza tym nie możemy zapominać, że biblioteki uczenia maszynowego powoli przechodzą do wszystkich głównych języków (na litość boską, nawet PHP je teraz ma!), więc wystarczy poczekać trochę czasu.
  • Swift: Apple ma żelazny uścisk na swoim ekosystemie, a Swift jest jedynym dostępnym tam językiem. Wcześniej cel C był wściekłością, podobnie jak teraz Swift. Uważam to za oszustwo, więc odmawiam umieszczania go tutaj.

Przyszłość jest zawsze niepewna, a jednym ze sposobów na karierę jest trzymanie się tego, co już się sprawdziło i nie uleganie „rozproszeniu”. Jeśli to zrobisz, Java, PHP, Python, Ruby itp. są doskonałymi językami do trzymania się. Jednak niektórym z nas norma nie wystarczy. Chcą wyjść, odkrywać i postawić na przyszłość. Jeśli należysz do drugiego obozu, jeden z tych pięciu języków powinien znajdować się na szczycie listy rzeczy do zrobienia.

Wreszcie, próbując ocenić język, nie pozwól, aby wysiłek Cię przytłoczył, ponieważ to nie jest tak dużo. Jeśli znasz już kilka języków programowania, możesz nauczyć się każdego z nich w ciągu maksymalnie dwóch miesięcy, spędzając 5-6 godzin tygodniowo. Natomiast szczęście i zwroty pieniężne, które można wygenerować w przyszłości, będą kilkukrotnie większe.

Czy brakowało mi tu jakiegoś krytycznego języka? A może mam coś nie tak z wymienionymi tutaj językami? Jeśli tak, proszę zostaw komentarz i pomóż mi się ulepszyć.