Szukam nowego jezyka do nauki

0

Poniewaz programisci dobrze zarabiaja, a ja programowaniem pasjonuje sie juz od dnia w ktorym rodzice zaplanowali miec dziecko - szukam nowego jezyka wartego poznania.

  • Fajnie gdyby byl silnie
  • Kompilowany > Interpretowany
  • Obslugiwal paradygmat funkcyjny
  • Mial solidna obsluge wspolbieznosci

Mile widziane cos z powyzszych wymagan (im wiecej tym lepiej). I tak chodza mi po glowie:

  • Rust
  • Erlang
  • Coz z: Haskell/Lisp/F#

Finalnie moglbym zaczac z kazdym. Wolalbym jednak zebrac jakies opinie od ludzi, ktorzy grzebali w czyms wyzej wymienionym.
Polecasz -> napisz dlaczego, dzieki!

Jesli ktos ma jakas propozycje to rowniez ja rozwaze. O ile bedzie jakos uargumentowana :P

1

typescript :p

0
Hispano-Suiza napisał(a):

Poniewaz programisci dobrze zarabiaja(...)

Jedynie Ci, co wstrzelą się ze swoim produktem w języku X w niszę rynkową. Mam nadzieję, że pomogłem. :)

PS Jak ciekawe case study możesz te dwa filmy obejrzeć (bez względu na Twój stosunek do autora):

Jak mniej zależy Ci na zarobkach, a więcej na językach samych w sobie, to bierz jakikolwiek, które miały swoje początki po 1990 roku.

0

silnie, funkcje
to może po prostu matematyką się zajmij

4

Siedzę w Rustcie od niecałych dwóch lat (kodzę projekty po godzinach) i polecam 10/10 każdemu:

  • istnieje oficjalne wsparcie od IntelliJ w formie wtyczki (https://intellij-rust.github.io/),
  • menedżer pakietów (cargo) jest niesamowicie wygodny i przemyślany; nie przypominam sobie, abym kiedykolwiek miał jakieś większe problemy z zależnościami,
  • oficjalna dokumentacja (The Book) jest bardzo dobrze przygotowana, w zasadzie rzadko kiedy potrzebowałem zaglądać w inne źródła,
  • przede wszystkim sam język wyróżnia się na tle innych swoimi mechanikami (move semantics, borrow checker, async + await, iteratory oraz cała reszta, którą znajdziesz w poradnikach / porównaniach).

Patrząc na wady, największą bolączką Rusta jest IMO mierne wsparcie dla Futureów / Promiseów / Tasków znanych z innych języków - o ile w JSie, C# czy Go pisanie asynchronicznego (lub przynajmniej asynchronous-like) kodu jest przyjemne i wygodne, tak Rust wymaga jeszcze trochę dopieszczenia (choć prace wrą cały czas! https://areweasyncyet.rs/, https://github.com/rust-lang/rust/issues/50547).

2

Możesz się zainteresować Erlangiem, lub Elixirem, który oferuje, to co Erlang + bardziej przystępną składnię.

Elixir i Erlang są silnie, ale dynamiczne typowane. Możesz jednak wykorzystać typespece, aby nieco sobie ten temat ogarnąć i wykorzystać pattern matching na poziomie definicji funkcji. Rynek pracy w Elixirze się dość dynamicznie rozwija, sam miałem przyjemność siedzieć w jednym projekcie ponad rok i ogólnie mam bardzo pozytywne wspomnienia. Jako IDE masz IntelliJ z pluginem, Atom (polecam) albo cokolwiek innego - nie ma żadnego problemu ze wsparciem kolorowania składni i autouzupełnianiem. Do tego Elixir ma wbudowany formatter, więc kod zawsze wygląda czytelnie. Pozostałe ficzery sam wymieniłeś - funkcyjny, współbieżny, kompilowany ;)

Trochę meksyku w Elixirze masz z deplojem, jeżeli chcesz się bawić w distillery / edeploy, ale mają to niebawem (czekamy bodaj od roku...) poprawić.
Dodam jeszcze świetny package manager, rozwijający się ekosystem i dość przyjazną społeczność, a także świetne materiały do nauki (głównie pragpub).

1

Bait mi nie wyszedł :/ Zatem w kwestii wyjaśnienia.
Nie szukam języka po to żeby w nim pracować. Chciałem po prostu poznać coś nowego - raz na jakiś czas podobno wypada. Dzięki za dotychczasowe propozycje. Wezmę sobie do serduszka :-) I czekam na następne jeśli ktoś coś chce dorzucić ;-)

1

Możliwe, że szukasz Scali.

Scala jest silnie typowana i kompilowalna.

Pod względem atrakcyjności Scala jest taka średnia. Z jednej strony spoko, bo na tle języków funkcyjnych wyróżnia się tym, że łatwo można znaleźć b. dobrze płatną pracę. Nie tylko w PL, ale i za granicą (np. skandynawia). Czego za bardzo nie można powiedzieć o innych funkcyjnych językach.

Tutaj ludziom zazdroszczę nie tyle co samego faktu obcowania ze Scalą, ale uczestnictwa w ciekawych projektach. Firma, która decyduje się na Scale na 99% ma fajny projekt.

Scala jest również praktyczna. Nie wymusza na Tobie tylko funkcyjnego programowania. Daje Ci wybór, możesz część kodować obiektowo, część funkcyjnie więc nie ma paniki, że sobie nie dasz rady.

Natomiast to co mnie odrzuca to czas jaki trzeba wpakować w ten język. Dla mnie to taki drugi C++, w którym programista bardziej walczy z gramatyka języka niż na tym co chcę osiągnąć.

Ogólnie to tak ciężko Ci polecić inny język, bo nie sprecyzowałeś co chciałbyś w nim programować.

Z innych języków jakie trochę poznałem to:

Elixir -> jeśli chcesz błyskawicznie kodować websockety w oparciu o kompletny framework, https://elixirschool.com/ wersję PL zrobił @Koziołek :D Obawy: dziurawa abstrakcja, bo znajomość Elixira pociąga za sobą naukę erlanga, oraz jest tutaj holistyczne podejście (albo kodujesz aktory albo nie kodujesz), projekty w Elixir są bardzo OK do programowania scalowalnego IO, ale niekoniecznie sprawdzą się tam gdzie wymagane jest mielenie danych, obliczenia itp

ClojureScript -> jeśli chcesz robić front w reactjs (oraz react native) 100 razy LEPIEJ i prościej niż javascriptowcy (wydaje mi się, że programowanie w clojure nie wymaga tyle co lubienia lispu czy makr co pisania konkretnego kodu z podziałem na warstwy i zasięg)

Clojure -> ciężej wchodzi niż clojurescript, ale pierwszą zachętą jest to by połączyć oba języki wówczas robiąc rozwiązania webowe masz prostszy stack. Sam clojure pod względem składni jak i modelu programowania jest przeciwieństwem elixira. Elixir wymusza aktory, natomiast w Clojure masz wybór. Gdybym miał robić projekt z innymi ludźmi to wybrałbym język po którym wiem czego mogę się spodziewać od ludzi - np. elixir, ale Clojure w rękach kogoś to zagadka. Dla kogoś kto umie programować i chce programować pozwala na znacznie więcej. Możesz robić asynchroniczne IO, możesz kodować jak w go z routines, możesz kodować z aktorami, możesz skupić się na obliczeniach, możesz programować w logice - ale to wszystko wymaga większego pokładu cierpliwości i w ogóle większej wprawy w rozumieniu języka. Inaczej wyjdzie ci g'wno i dziwny błąd co chwilę. Poza tym społeczność języka koncentruje się na produkowaniu małych konkretnych bibliotek. Dlatego też jak robisz web to raczej nie w oparciu o kompletny framework, a zbiór bibliotek. To znów wymaga więcej czasu, ale ostatecznie oddaje Ci władzę nad tym co robisz. PS, ja wiem, że w tym języku nie znajdę dobrej pracy, ale uczę się go by móc w nim kodować własne projekty. Poza tym python coraz bardziej mnie ogranicza.

4

Polecam trochę haskella. Da się w nim robić normalne projekty (np. serwery www).
Zalety:
Dominuje podejście czysto funkcyjne, dowiesz się z życia po co są monady.
Jest dość prosty i czytelny.
Fajnie sie w nim modeluje mimo, że jest nieobiektowy. Haskell powoduje, że zaczyna się wątpić w obiektówkę.
GHCI jest fajne w nauce.
Na codingGame i podobnych da się ładnie uczyć haskella.
Wady:
jest to stary język wieć juz dużo jest naleciałości dziwnych (opcje/rozszerzenia kompilatora to chaos)
W praktyce są brudne częsci haskella, a template haskell to już prawdziwy rak,
jakość bibliotek w repozytorium (hackage) jest dość różna.

Powoli wchodzi Idris, czyli poprawiony haskell z dependent types, ale IMO trudno się będzie uczyć, bo mało jest przykładów.

2
jarekr000000 napisał(a):

Polecam trochę haskella. Da siew nim robić normalne projekty (np. serwery www).

Leniwe wartościowanie to może być coś dla mnie :]

0

Zanim odpowiem zapytam - które języki już znasz?

2
vpiotr napisał(a):

Zanim odpowiem zapytam - które języki już znasz?

Do tej pory miałem okazję pracować lub poznać:

  • C/C++ - Krótki epizod podczas studiów. Chociaż bawiłem się nimi dłużej niż trwał przedmiot. Bardzo fajne języki ale na dzień dzisiejszy ciężko byłoby mi znaleźć dla nich realne zastosowanie.

  • C# - Porzuciłem po rozstaniu z ostatnim pracodawcą. Coś mi w tym języku nie odpowiada mimo, że na pewnym poziomie w tych wersjach do 6.0 to praktycznie Java. Może ekosystem, może jakieś bardziej zaawansowane aspekty. Na pewno w moim odczuciu przeinżynierowanie tego języka. Ma kilka fajnych rzeczy, których nie uświadczyłem w Java i których mi brakowało. Natomiast to nie był powód żeby rzucać sę z powodu kilku fajnych rzeczy na cały ekosystem. Nie odpowiadała mi też praca na Windows - to na pewno. Plusem na dziś jest .NET Core. Ale tu znowu zraziłem się w wersji 1.0 gdy nie mogłem prostego projektu uruchomić, a na grupach twarzoksiążkowych widziałem posty ludzi, którzy siedzą w .NET od początków (+10 lat) i nawet oni nie dawali rady :D

  • Java - Porzuciłem po rozstaniu z ostatnim pracodawcą. Mordowały mnie rzeczy, które musiałem w tym robić. Stare Springi i EE. Na pewnym etapie po prostu przestałem rozumieć co tam robię i dlaczego obsługa cookies zajmuje 300 linijek. Kolejną rzeczą, która mi nie pasuje to dziedziny projektów. Prawdopodobieństwo trafienia w jakiś syfiasty projekt to jakieś 9:1 (albo i więcej).

  • Python - Okropny język. Spędziłem z nim +/- 3 miesiące. Zacząłem od pozycji z realpython.com do wersji 3.5. U siebie miałem wersję 3.6 i 1/4 rzeczy, którą przerabiałem w tamach nauki nie chciała działać. Jestem mocno niezwyczajny po życiu z Javą/C# do takich rzeczy. Nie mam pojęcia co ludzie w tym widzą. Do napisania 30-50 linijek skryptu jeszcze daje radę. Ale wszystko powyżej to katastrofa. Formatowanie kodu wcięciami - jak ma się gorszy wzrok to te odstępy trzeba mierzyć 30cm linijką na ekranie. Nawet to fantastyczne IDE od JetBrains czasami samo miało problem z ogarnięciem kodu i co najzabawniejsze w zależności od ilości wcięć potrafiło uruchomić kod dając zupełnie różne wyniki :D Kompletna paranoja ale rozumiem, że są ludzie, którzy lubią ten język i nie mam z tym problemu :-)
    @Julian_ Jak tam podeszła Ci książka?

  • JS - To ustrojstwo musiałem w końcu przyswoić ze względu na front. Ma swoje zalety (nie sądziłem, że kiedykolwiek to powiem) ale nie jestem fanatykiem. Fanem też nie. Żyję ze świadomością, że muszę to znać.

  • Go - Oszczędzę wam szczegółów. Mógłby to być najdłuższy post na tym forum, a szanuję wasz czas :-)

@jarekr000000 Bawiłem się +3 lata temu GnuCobol/Open Cobol - już sam nie wiem, która nazwa aktualnie obowiązuje. Frajdą było szukanie 7 plików *.dll do uruchomienia skompilowanego programiku. Zajęło mi to 2 dni :-) Aczkolwiek nie pamiętam ile te wersje mają wspólnego z tym Cobolem klasycznym.

Idris - Zerknąłem szybko na Twoją propozycję. Na pierwszy rzut oka wygląda dość ciekawie. Jest oficjalny tutorial @ http://docs.idris-lang.org/en/latest/tutorial/typesfuns.html. Pytanie jak się to rozwinie dalej Widzę, że pierwsze publikacje przypadają na 2008 rok i faktycznie nie ma tego za dużo.

2

OK, czyli sama rynkowa klasyka.

Proponuję rozważyć:

  • Elixir (lepsza strona Erlanga)
  • Rust (not your father's C)
  • Haskell (dla FP)
  • Clojure (Lisp na JVM, zaleta - nie tylko do projektów akademickich)
  • Kotlin (ładniejsza Java)

Oczywiście te języki polecam bo ich nie znam ;-)
Scale chociaż też nie znam to nie polecam. Jakoś mi zalatuje Perlem. Mogę się oczywiście mylić. Ale nie wiem czy znajdę czas żeby się do niej kiedyś przekonać.

A co do C++ - jest to taki trochę język typu łacina. Można się bez niego obyć, ale na pewnym etapie zaawansowania wypadałoby znać.
A np. do zaimplementowania wydajnej biblioteki dla Pythona.
Albo do poprawienia któregoś z kompilatorów języków wymienionych wcześniej.

Co do gołego C to bezdyskusyjnie warto go znać. Oprócz tego co napisałem o C++ ma on także prostszą składnię i jest wykorzystywany w większej liczbie miejsc. Poza tym jeden kilkumiesięczny epizod wystarcza żeby poznać go na całe życie (język ten nie zmienia się jakoś strasznie dynamicznie).

Pythona warto znać, ja na stanowisku Javovca mam do czynienia z Pythonem w formie skryptów deploymentu (WAS). Poza tym w Pythonie można robić własne rozwiązania typu REPL (własna biblioteka / serwis sterowana skryptem Pythonowym wyrzeźbionym na kolanie - np. podczas prezentacji).
Jeśli chodzi o coś większego w tym języku to się nie spotkałem, ale na pewno się da, zwłaszcza jeśli zastosujesz type hints.

0

Oczywiście te języki polecam bo ich nie znam ;-)
Scale chociaż też nie znam to nie polecam. Jakoś mi zalatuje Perlem. Mogę się oczywiście mylić. Ale nie wiem czy znajdę czas żeby się do niej kiedyś przekonać.

Kotlin odrzucam. Patrzyłem na niego ale nie porwał mnie kompletnie. Może gdybym bawił się w mobilne to tak. Scala była na celowniku i z jakichś względów odpadła (brak czasu). I materiałów też za wiele nie znalazłem. Jakoś bardzo nie szukałem bo pewnie gdzieś są :P

A co do C++ - jest to taki trochę język typu łacina. Można się bez niego obyć, ale na pewnym etapie zaawansowania wypadałoby znać.
A np. do zaimplementowania wydajnej biblioteki dla Pythona.

Czyli tak jak mówiłem. Nie widzę pola do używania ;-)

Pythona warto znać, ja na stanowisku Javovca mam do czynienia z Pythonem w formie skryptów deploymentu (WAS). Poza tym w Pythonie można robić własne rozwiązania typu REPL (własna biblioteka / serwis sterowana skryptem Pythonowym wyrzeźbionym na kolanie - np. podczas prezentacji).

Śmierdzi fanatyzmem, wiem. Ale zastępstwem dla Pythona dla mnie jest Go. Pythonowi brak argumentów w moim odczuciu, które przeważałyby żebym sam z siebie musiał go używać. Poza tym jestem na etapie rezygnacji z rynkowej Javy/C#. Liczę, że nie wybiorę się więcej w tym kierunku pomimo jakichś doświadczeń.
Języka szukam nie pod pracę, a pod zabawę. Nie wykluczam jednak, że jeśli trafiłaby się jakaś propozycja kiedyś w czymś nowym co wezmę na warsztat teraz to pewnie podjąłbym wyzwanie - bo czemu nie ;-)

1

Zapomniałem jeszcze o Julii i Nim.
Ten pierwszy do wszelkich symulacji numerycznych, ten drugi jako dużo lepsze C.

Julia
W zastosowaniach numerycznych aktualnie często spotyka się rozwiązanie typu biblioteka w C/Fortran + frontend w Pythonie.
Julia ze względu na wbudowaną wydajność pozwala na implementację tego samego w jednym języku, dodatkowo wspiera przetwarzanie równoległe.
Integruje się z Jupiter Notebook.

https://julialang.org/

Nim
Jest chyba mniej rozwinięty od Go i Rust. Ale ma dużo fajnych ficzerów językowych.
Bezpośrednia współpraca z bibliotekami w C, kross-kompilacja do JS.
Wbudowany szybki GC.
Niestety sterowany wcięciami, więc chyba Ci nie przypasuje.

https://nim-lang.org/

2

Pracuję zarówno z BEAM (Erlang/Elixir, zawodowo) jak i z Rustem (po godzinach) i mogę z całym sercem polecić oba do nauki, bardzo fanie rozszerza światopogląd. Dodatkowo polecę też Haskella (za @jarekr000000) bo tak samo pozwala na inne spojrzenie na programowanie.

2

jak dla funu to polecalabym erlanga, jakiegos lispa, haskella albo pochodna apl (j albo k)

1 użytkowników online, w tym zalogowanych: 0, gości: 1