5 języków programowania, które dobrze jest poznać

1

Ostatnio oglądałem wypowiedź twórcy języka C++, gdzie Bjarne Stroustrup powiedział, że zna ponad 20 języków programowania w przynajmniej podstawowym stopniu, dodał, że dobry programista powinien znać bardzo dobrze przynajmniej 5 języków, aby potrafił spojrzeć na problem z różnych perspektyw.
Jaką piątkę wy byście wybrali, w jakiej kolejności i dlaczego?
U mnie to wygląda tak:

  1. C++, bo od niego zacząłem i dzięki niemu można poznać niskopoziomowe mechanizmy.
  2. Java, paradygmat obiektowy i ciężko z nią umrzeć z głodu.
  3. Python, język skryptowy, dynamicznie typowany, można w nim szybko tworzyć oprogramowanie, szeroko stosowany.
  4. Haskell, paradygmat funkcyjny.
  5. Kotlin, wydaje się być najbardziej przyszłościowy z nowych języków.
5

Z języków, które otwierają oczy na pewne sprawy?

  1. Haskell. Brutalny język, uczy dobrych praktyk. Swoje wady ma, ale jak ktoś chce się rzucić na głęboką wodę w temacie programowania funkcyjnego to jest świetny.
  2. Python. Bo jest po prostu użyteczny. Jak potrzebuję naklepać coś poniżej 100 linii kodu (czyli po prostu skrypt) to wybór idealny.
  3. C. Nie C++, bo wszystkie ważne koncepty w temacie programowania średniopoziomowego są tutaj obecne, a sam język prostszy.
  4. ASM. Ale raczej nie taki dla x86_64, bo ISA jest przekombinowana. Na dzisiejsze czasy coś jak RISC-V wydaje się lepszym wyborem. Po prostu żeby poznać jak procek trawi kod.
  5. Lisp. Żeby zobaczyć, zaciekawić się i po kilku latach zrozumieć, czemu nie warto w tym pisać.

Dowloną pozycję na liście można wymienić na zamienniki. Czyli na przykład jak ktoś pisał w Pascalu to raczej temat C ma zaliczony. Albo jak ktoś siedzi w JVM to zamiast Lispa może śmiało pobawić się Clojure.

Extra

  1. Javascript. Bo jest wszędzie. Sam język nie jest ani ładny ani nie wyróżnia się szczegónie pod żadnym innym teoretycznym kątem. Aczkolwiek decyzje projektowe podjęte w ES6 i późniejszych są warte poznania i przestudiowania.
  2. Smalltak. Nie znam, ale jest często polecany, żeby poznać istotę OOP, a nie to co promuje Java.
  3. Prolog. Programowanie logiczne jest fajne. Kolejny punkt widzenia na problemy, które napotykami.
  4. LLVM IR. Odrobinę wyższy poziom abstrakcji niż ASM. Dobrze wiedzieć, że takie coś istnieje.
  5. WebAssembly. Trochę jak LLVM IR, ale poziom wyżej. Bardzo prosty język.
2
  1. Smalltalk - żeby wiedzieć, na czym polega OOP.
  2. Haskell - programowanie funkcyjne jest bardziej akademickie od obiektowego. Kiedy zaczniesz wychodzić poza bibliotekę standardową widać, że ludzie cały czas mają nowe pomysły na funkcyjne abstrakcje.
  3. Python - najlepszy język do skryptowania obecnie.
  4. Scala/Kotlin/Clojure/Java - warto chociaż trochę znać język działający na platformie z najbogatszym ekosystemem na rynku.
  5. Prolog - relikt dawnych czasów.

Dużo też zależy od tego, w co celujesz. R, matlab, SQL, C, Erlang, a nawet języki modelowania jak minizinc mogą być bardzo przydatne w zależności od tego, w jaką domenę celujesz.

1

Lua - tam, gdzie trzeba w locie zmieniać kod bez rekompilacji - np. gierki.

1
  1. Perl - pozwala się przekonać jak duże znaczenie może mieć kontekst, co jest bliskie językowi naturalnemu.
  2. C++ - w nowszych standardach można dbać o wydajność i nie tracić dużo na przejrzystości kodu.
  3. Asembler - pozwala nauczyć się myślenia "komputerowego".
  4. Ruby - wszystko jest obiektem, to dopiero zabawa w obiektowość ;) . Przy okazji dobrze działają narzędzia do analizy kodu, IDE itp., więc mamy bardzo fajne wspomagacze w pisaniu.
  5. Pascal - w celu edukacyjnym. Jest to język, w którym program musi mieć pewną strukturę, którą da się łatwo wytłumaczyć. Poza tym fajnie przekłada się na kod maszynowy, więc można pokazać jak taki kod przekłada się na działanie procesora.

Dla mnie wybór tych języków był głównie pod kątem rozwoju i poszerzenia horyzontów a nie znalezienia pracy. Z resztą z szerokimi horyzontami łatwiej znaleźć pracę. Zestawienie Javy i C++ byłoby dla mnie średnie, bo obiektowość się tu trochę pokrywa. Ruby czy Javascript mają inne podejście do obiektowości, więc pasują lepiej. Myślę, że po napisaniu kilku programów w każdym z tych języków można nauczyć się podejścia, że nie powinno się klepać kodu bezmyślnie: trzeba pomyśleć o algorytmie, języku i docelowym systemie.

4
  1. Dowolny funkcyjny
  2. Dowolny (w miarę współczesny) obiektowy
  3. Dowolny proceduralny, będący blisko maszyny
  4. Dowolny pozwalający na szybką automatyzację prostych rzeczy
  5. Dowolny inny niż pozostałe 4 ...
4
  1. Java - obiektowy musi być.
  2. Haskell - funkcyjny też.
  3. C - z wiadomych względów.
  4. Python - skryptowanie, dynamiczny, data science.
  5. LISP - a co?
3

Wymieniam tylko języki które znam w stopniu min. mniej-więcej (pracowałem lub zakodowałem przynajmniej hello world):

  1. COBOL. Najlepiej przed rozpoczęciem pracy żeby wiedzieć czy dasz radę w tym pracować.
    Polecane ćwiczenie: parser XML w COBOLu.
    Bonus za skończenie ćwiczenia: zadowolenie z posiadanej pracy przez kolejne X lat (niezależnie czy lubisz czy nie COBOLa).

  2. C / Pascal - żeby móc zawsze coś zakodować, nawet jak świat oszaleje na punkcie kolejnego paradygmatu a większość neuronów pójdzie na spoczynek.
    Polecane ćwiczenia:

  • liczenie miejsc zerowych funkcji kwadratowej
  • algorytmika - wybrane sortowanie
  • Mandelbrot w PPM lub ASCII
  1. Python / Java / C# / C++ - żeby móc coś zakodować wysoko-poziomowo
    Polecane ćwiczenia:
  • zadania z HackerRank / SPOJ
  • serwer RESTowy
  • optymalizacja modelu min. 10-parametrowego przy użyciu GA lub PSO
  1. PHP / JavaScript - żeby móc ogarnąć dynamicznego bloga (Wordpress) / CRMa (Sugar/Laravel) / forum (Drupal)
    Polecane ćwiczenia:
  • własny blog/forum z reklamami, komentarzami, moderowaniem i PM
  1. Julia / Fortran / Matlab / Octave / Jupyter - jeśli lubisz matematykę
9
  1. Haskell - żeby się nauczyć praktycznie programować z typami
  2. Clojure - żeby się nauczyc praktycznie programowac bez typow
  3. Idris - żeby się niauczyć niepraktycznie programowac z typami
  4. ARM - żeby się nauczyć niepraktycznie programować bez typów
  5. CSS - żeby zrobić diva w kształcie serduszka
1

Języki typu JAK

Języki typu jak skupiają się na szczegółowym rozwiązywaniu problemów, w większości przypadków dość banalnych, więc heroiczny poziom rozwiązywania błachych zadań podnosi poziom wrażeń. Warto takie języki znać jeśli ktoś potrzebuje robić kariere programisty.

Wtedy polecam:

  1. c++ (bo jest dużo literatury na rynku)
  2. java (bo ta literatura rozszerza zakres informacji z c++)
  3. scala (bo to rozszerza zakres informacji z java) i gdy masz scala to jesteś ustawiony.

Język typu CO

Koncentrują się na wrażeniach, na produkcie, na czasie dostarczenia. Wtedy polecam:

  1. php bo jak dojdziesz do scala, to php wywróci w Twojej głowie wszystko co wiesz o programowaniu
  2. js bo to jeszcze łatwy w pojęciu assembler i warto ten język poznać póki jeszcze ludzie się nim jarą; później jak pojawią się narzędzia wyższego poziomu to ciężej ludziom będzie się pochylić nad js, a bliski kontakt z js uzymysławia gdzie leżą jego mocne strony.

Piątka języków jakie wymieniłem to są języki jakich nie chcę używać przez następne 100 lat, natomiast pozwolą programiście odpowiedzieć na pytanie dokąd dalej zmierzać.

1
leto napisał(a):

dobry programista powinien znać bardzo dobrze przynajmniej 5 języków,

Ale [CIACH!], żeby dobrze znać 5 języków to trzeba być ultra mózgiem albo nerdem bez życia. Ludzie mający styczność z programowaniem 8:00-16:00 też mogą być dobrzy.

0

wymienił już ktoś R, fajny język gdzie nie trzeba używać pętli (można?

3
mechanix napisał(a):
leto napisał(a):

dobry programista powinien znać bardzo dobrze przynajmniej 5 języków,

Ale [CIACH!], żeby dobrze znać 5 języków to trzeba być ultra mózgiem albo nerdem bez życia. Ludzie mający styczność z programowaniem 8:00-16:00 też mogą być dobrzy.

Nie trzeba być ultra mózgiem - wystarczy być doświadczonym programistą.
Programista zwykły (taki 9-17) średnio co 5 lat rozgląda się za nową technologią, a co 10 zmienia ją diametralnie.

Ludzie mający styczność z programowaniem - masz na myśli tego typu ludzi?

1
mechanix napisał(a):

Ale [CIACH!], żeby dobrze znać 5 języków to trzeba być ultra mózgiem albo nerdem bez życia. Ludzie mający styczność z programowaniem 8:00-16:00 też mogą być dobrzy.

Bez przesady. Moim zdaniem wypada żeby dobry programista znał minimum 3 - 4 języki i to tylko ze względu na same różnice, które między nimi występują a tym samym ich zastosowanie.

  1. Jakiś język kompilowany do kodu maszynowego żeby umieć zrobić sensownego prawdziwego exe'ka np. C++, VisualBasic, GoLang, Pascal/Delphi, itp ... ;
  2. Jakiś skryptowy typu PHP, Python ;
  3. Jakiś assembler lub C żeby odrobinę zrozumieć jak działa procesor i sam sprzęt ;
  4. Coś co pozwala na pisanie rzeczy na wyższym poziomie abstrakcji nie koniecznie stawiając na wyśrubowaną wydajność kodu ( Java, C# ) ;
  5. I generalnie Javascript + HTML +CSS bo to absolutna baza do robienia profesjonalnych rzeczy webowych ;

Dobieranie złego języka do danego zastosowania powoduje powstawanie potworów. Teoretycznie można ale ja nie wyobrażam sobie pisania strony WWW np. w C++ ...
Różne języki służą do różnych rzeczy dlatego żeby umieć napisać dobrze każdy program to trzeba je znać.

8
  1. JS - żeby wiedzieć, że język dobrze najpierw zaprojektować, a potem zaimplementować.
  2. PHP - żeby wiedzieć, że projektowanie trzeba robić z sensem.
  3. Java - żeby wiedzieć, że brak rozwoju języka nie jest dobry.
  4. C++ - żeby wiedzieć, że wstawianie każdego możliwego ficzera do języka z lat 70tych to nie jest dobry pomysł.
  5. C# - żeby wiedzieć, że wstawianie jeszcze więcej ficzerów do języka z lat 90tych jest jeszcze gorszym pomysłem.
2

Haskell, Prolog, Clojure, Cobol, Visual Basic.

3

takie minimum dla profesjonalisty to bieglosc w bash, c, java, python i sql.
reszta to zabawki/prokrastynacja ;)

0
  1. Golang
  2. Ts.
  3. Python
  4. Rust
3
  1. Python 3.x
  2. Python 2.x
  3. IronPython
  4. Jython
  5. MicroPython

Bo ważna jest różnorodność.

4
leto napisał(a):

dobry programista powinien znać bardzo dobrze przynajmniej 5 języków, aby potrafił spojrzeć na problem z różnych perspektyw.

Od lat się zastanawiam, co oznacza "dobrze" / "bardzo dobrze" znać język. Wciąż nie mam odpowiedzi, choć pomysły na definicję widziałem/słyszałem różne:

  • Znać na pamięć wszystkie słowa kluczowe, składnię - raczej mało skomplikowane, pamięciówka
  • Znać na pamięć bibliotekę standardową i najpopularniejsze narzędzia - co do zasady nie jest to szczególnie trudne, ale raczej czasochłonne
  • Umieć wyrecytować changelogi dla N ostatnich wersji wstecz - zależy jak bardzo szczegółowe zmiany mamy śledzić - zadanie od trywialnego do ledwo wykonalnego
  • Wiedzieć w jaki sposób jest kompilowany / interpretowany, jak się zarządza pamięcią, wielowątkowością, charakterystyczne mechanizmy użyte w języku etc - nabyć ogólne pojęcie jak coś działa nie jest trudno, z niuansami i znajomością bebechów kompilatora / interpretera / maszyny wirtualnej już trudniej.
  • Mieć świadomość, dlaczego zostały podjęte takie, a nie inne decyzje
  • Podzbiór / całość powyższych

Wydaje mi się, że poza osobami zaangażowanymi w rozwój danego języka mało kto spełnia absolutnie wszystkie te kryteria w najbardziej restrykcyjnych wariantach - chyba, że język jest bardzo świeży i jeszcze dość biedny. Być może nawet niektórzy twórcy ich nie spełniają, jak projekt się zanadto rozrośnie.

Z pewnością żadnego języka (ani jego ekosystemu) nie znam dobrze - mogę jedynie znać podstawy podstaw, a w najlepszym wypadku znać język w stopniu słabym, ale wystarczającym, by jakoś tam w miarę swobodnie go używać i nawet z nim pracować, w razie potrzeby niezdarnie zajrzeć do bebechów i nie dostać ataku paniki. Jednych i drugich będzie w okolicach 5-7, mając na uwadze że tylko w obecnej pracy w mniejszym lub większym stopniu wykorzystuję/wykorzystywałem ze 4 języki JVMowe, 2 skryptowe i Python. Plus kilka kolejnych, o które zaledwie się otarłem i nie nazwę tego nawet podstawową znajomością.

Jaką piątkę wy byście wybrali, w jakiej kolejności i dlaczego?

Bez kolejności, równorzędnie. Trochę oszustwo, bo w niektóre kategorie wpycham kilka języków

  • Asm / inna niskopoziomowa reprezentacja np. LLVM IR - żeby mieć jakieś pojęcie, jak kod może wyglądać na poziomie prostych instrukcji i jak zmienia się to zależnie od np. architektury, optymalizacji
  • Java - jako przykład języka enterprajs + inny język JVMowy, np. Kotlin - jako przykład tego, że to samo co w Javie można napisać bardziej zwięźle i czytelnie, nie wszystko musi być pisane w trybie enterprajs OOP, a cukier składniowy to nie tylko widzimisię. Może być też analogiczne zestawienie dla .NET pewnie też byłoby OK.
  • Bash / Powershell - do pisania skryptów w powłoce systemu
  • Python - w miarę ekspresywny język, w którym mogę pisać zarówno skrypty, narzędzia i prototypy, jest też w pewnej mierze zaprzeczeniem języka enterprajs
  • dowolny "egzotyczny" język - najlepiej prezentujący jeszcze inne podejścia, niż te wymienione wyżej.
0
vpiotr napisał(a):

Programista zwykły (taki 9-17) średnio co 5 lat rozgląda się za nową technologią, a co 10 zmienia ją diametralnie.

i pamięta technologie której używał 10-15 lat temu?

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