Jakie języki programowania warto poznać?

0

Witajcie!

Jestem na etapie poszukiwania języka programowania, w którym chciałbym się specjalizować.
Stosuję się tutaj do rad @Gynvael Coldwind z Poradnika Początkującego Programisty:

Co w takim razie początkujący programista powinien wybrać? Zacznę od tego, że pytanie jest nie do końca dobrze postawione - moim zdaniem powinno brzmieć "jaki język powinienem wybrać na początek?". Różnica, mimo iż minimalna, jest bardzo ważna, a wynika z faktu iż programista nie powinien ograniczać się do jednego języka. Powinien raczej popróbować różnych języków, tak aby poznać różne punkty widzenia, dowiedzieć się jakie mechanizmy istnieją w różnych językach, pomyśleć jak symulować pewne rozwiązania natywne dla pewnych języków w innych językach, nie mających natywnego wsparcia dla danej funkcjonalności, etc. Proszę zauważyć iż nie twierdze, że programista powinien w nieskończoność skakać między językami, wręcz przeciwnie! Każdy programista prędzej czy później znajdzie jakiś swój jeden, jedyny, ukochany język, w którym będzie się specjalizował, i który po pewnym czasie będzie znał na wspak i po rumuńsku. Twierdzę natomiast iż programista który pozna rożne języki, będzie lepiej pisał w swoim ulubionym języku, niż programista który ograniczył się tylko do tego jednego języka, nie poznając innych rozwiązań. Np. zdradzę że moim ulubionym językiem jest C (w dialekcie C99), natomiast przez ostatnie 20 lat miałem przyjemność programować w około 40 różnych języków/dialektów.

Kolejna ważna uwaga: nie ma języków które są "zawsze złe", tak samo jak nie ma języków które są "zawsze dobre". Język to tylko i wyłącznie narzędzie w rękach programisty, narzędzie które do pewnych zadań nadaje się lepiej, a w innych przypadkach sprawdza się gorzej. Oczywiście pewne języki każdy z nas polubi bardziej, a inne wręcz znienawidzi, niemniej jednak pamiętajmy o potrzebie obiektywności, oraz o tym że nawet "znienawidzonego wroga" należy poznać. Zresztą, a nuż polubimy ów język po bliższym poznaniu ;>. Przykładowo, kiedyś nie przepadałem za Javą, uważałem że język jest strasznie wolny i do tego niewygodny. Nie przeszkadzało mi to natomiast przez pewien czas pracować jako programista Java, a później przez pewien okres interesować się wewnętrzną budową VM Java'y i byte codem samego języka, przez co Javę poznałem i nawet polubiłem ;>

Obecnie poznałem:

  • Javę (uczyłem się długo do matury i nie tylko)
  • Pythona (zrobiłem całkiem spory kurs na Codeacademy i próbowałem pisać coś swojego)
  • PHP robiąc szkolne projekty (całkiem beznadziejne swoją drogą :P)
  • obecnie poznaję C (dopiero zaczynam poznawać język)

W planach mam jeszcze:

  • Rust
  • Go
  • Haskell

Moje poznawanie języka sprowadza się do pisania prostych programów, które mają pomóc mi poznać semantykę języka, czyli od prostych guessing game do obsługi sieci i operacji na plikach.

Jakie języki jeszcze warto poznać? Na jakie mechanizmy warto zwracać uwagę?

1

JavaScript. Nawet jeżeli go nie lubisz, to gdzieś w każdym projekcie webowym on się przewinie.

1

Scala, Kotlin, Go i Swift warto poznać. Ewentualnie Elixir/Phoenix.

1

@Ktos: Racja, słuszna uwaga :)

Mały Szczur napisał(a):

Scala, Kotlin, Go i Swift warto poznać. Ewentualnie Elixir/Phoenix.

Niekoniecznie Scala i Kotlin, bo one też są na JVM. Swift tylko Apple, więc raczej nie, aczkolwiek rzucę okiem na sam język. Elixir i Phoenix na pewno zobaczę ;)

1

sql - warto dobrze znac bo przydaje sie chyba na 99% stanowisk w it
regexy - w dowolnym jezyku do wyszukiwania i przetwarzania tekstu
groovy - do szybkiego prototypowania (+ bonus ze pod jvm i przy niektorych javowych toolach sie przydaje)
erlang - do polubienia sie z wielowatkowoscia
asembler (np x86) - do ogarniecia low levelu
j/k/q - do pocwiczenia umyslu :)
c# - zeby zobaczyc dlaczego java ssie ;)

1

Niekoniecznie Scala i Kotlin, bo one też są na JVM.

A co to ma do rzeczy? To inne języki niż Java. No i faktycznie są dostępne na inne platformy niż JVM:

Można pisać całkiem skomplikowane biblioteki w Scali i kompilować je na Scala JVM, Scala JS i Scala Native jednocześnie. Dla przykładu wersje wstępne scalaz 7.3 mają już wydania dla wszystkich trzech platform: https://github.com/scalaz/scalaz/wiki/7.3.0-M10

0

@katelx: Będąc upierdliwym sql to nie język programowania, ale w 100% się z Tobą zgadam ;)
Co do regex to od razu mi się przypomina ten film :P
O erlangu coś tam słyszałem, gdzieś mi się kiedyś o uszy obił, a assembler będę miał na studiach (podobno).
Wytłumaczysz mi tylko akronim

j/k/q - do pocwiczenia umyslu :)

@Wibowit: O widzisz, tego nie wiedziałem. W sumie to bardzo dobra uwaga, jako że lubię języki kompilowane :D Fajna sprawa, nad Kotlinem będę musiał się bardzo dobrze zastanowić ;)

0
Burdzi0 napisał(a):

Wytłumaczysz mi tylko akronim

j/k/q - do pocwiczenia umyslu :)

Tu chodzi o przekaźniki, z których zbudowane są rejestry.
Które buduje się z bramek logicznych, które budujesz z tranzystorów.

Potem masz już tylko więcej chemii i fizyki.

0

Chodziło mi o przerzutniki, nie przekaźnik xd

1

sql moze nie jest typowym jezykiem programowania, no ale idzie go podciagnac + ma duzo proceduralnych wariantow i warto miec w tym jako taka orientacje.
j, k i q to bardzo krotkie w zapisie jezyki uzywane glownie do przetwarzania wektorow danych (ale oczywiscie mozna uzywac do prawie wszystkiego)

0
  • podstawy C, potem C++
  • asembler (zacznij od 16 bitowego x86, potem 32 bity, następnie x64)
0

Czy nowy standard C++17 będzie o wiele szybszy po skompilowaniu od Rust? Chcę wybrać jeden z tych dwóch kompilowanych języków programowania, nie wiem czy Rust posiada jakąś bibliotekę graficzną na wzór QT? Chcę pisać programy okienkowe pod systemem FreeBSD i NetBSD, ale nie chcę się pakować w C/GTK3.
Jaka szkoda że Jerzy Grębosz piszę nową książkę o C++ nadal w standardzie C++11 :(

0
i486 napisał(a):
  • asembler (zacznij od 16 bitowego x86, potem 32 bity, następnie x64)

Nie ma sensu zaczynać od 16 bitowego, lepiej od C zejść w dół do asemblera zależnie od platformy jaką dysponujesz, czyli pewnie 64 bit.
Plus do tego łatwo można C z asemblerem łączyć, co daje dużo możliwości, a potem przyjdzie czas na zastanawianie się nad nagłówkami plików exe, bo początkujący tego nie ogarnie.
Elf jest trochę łatwiejszy i na linuxie jest ld zajebiste do tworzenia całej tej otoczki programu.
Lub samo C załaduje ci libki i można z poziomu assemblera kodować przy pomocy glibc.

Nie dość, że będzie łatwiej to od razu może wykorzystać wiedzę do analizy innych programów, które ma na dysku, lub do analizy własnych programów.
Które właśnie tak wyglądają w środku jakiś call wołą z glibc np. funkcję strlen i przed tym mu wrzuca na stos adres stringa i zwraca ładnie w rax długość.
A nie z jakiś biednych kursów uczyć się 16 bitów i do tego przerwań biosowych, takie coś to się fachowo nazywa "zabieraniem się od d**y strony".
To się przyda jak będzie system własny tworzył, a do tego trzeba mieć jakieś podstawy.

5

To zależy co jest Twoim celem?

  1. nauczenie się języka do pracy? jakie stanowisko? jaka platforma OS? jaka platforma sprzętowa?
  2. nauczenie się języka w którym będzie Ci się chciało robić projekty domowe?
  3. nauczenie się jakiegoś konkretnego paradygmatu?
  4. praca w jakiejś określonej domenie? jakiej?
  5. przygotowanie do studiów informatycznych?
  6. zrobienie gry lub dema?

Co warto znać niezależnie od odpowiedzi:

  • C: bo działa wszędzie
  • ASM (np. x86, ale niekoniecznie): przyda się jak będziesz chciał oprogramować oświetlenie choinki albo podejrzeć wynik kompilacji
  • SQL: bo nie jest używany tylko w projektach Jarka
  • regexp: żeby umieć coś grepnąć lub poszukać / zriplejsować w IDE
  • XML / JSON: po to żeby nie wymyślać swoich formatów tam gdzie nie trzeba
  • JavaScript / HTML / CSS: przydatne choćby w blogowaniu
  • PHP na poziomie Wordpress - gdybyś chciał zrobić swój blog na swoim serwerze
  • bash / PowerShell / cmd - żeby nie pisać procedur w Wordzie tylko w skrypcie

A co do właściwego programowania - no to musisz właśnie odpowiedzieć na powyższe pytanie.
Ważne jest też jaki model biznesowy pracodawcy i jego sektor rynkowy Cię interesuje - bo to ma znaczny wpływ na wybór.
Poza tym na pewno warto się nauczyć jakiegoś nowego języka - chociaż jak potem będziesz pracował w jakiejś staroci to może Ci być bardziej przykro :)

0
Mały Pio napisał(a):

Czy nowy standard C++17 będzie o wiele szybszy po skompilowaniu od Rust? Chcę wybrać jeden z tych dwóch kompilowanych języków programowania, nie wiem czy Rust posiada jakąś bibliotekę graficzną na wzór QT? Chcę pisać programy okienkowe pod systemem FreeBSD i NetBSD, ale nie chcę się pakować w C/GTK3.
Jaka szkoda że Jerzy Grębosz piszę nową książkę o C++ nadal w standardzie C++11 :(

Jeśli chodzi o Rust: na te pytanie nie jestem w stanie odpowiedzieć obiektywnie w tym momencie. Prawdopodobnie programy będą szybsze (jak zawsze w przypadku C++ oraz C zresztą).

Jeśli chcesz pisać okienkowe aplikacje pod FreeBSD oraz NetBSD to musisz liczyć się z tym, że nowsze wersje np. Qt SDK są dostępne z dużym opóźnieniem. Co więcej, na 90% będziesz musiał sam skompilować wszystko co w repo Qt a nawet inne rzeczy, które są w zależnościach. Przechodziłem to już i na FreeBSD żadna przyjemność, ponieważ Qt ma mnóstwo zależności. Tyle zachodu, żeby ostatecznie mieć starą, patchowaną wersję np. 5.6 (bo najnowsza za pomocą clone z repo nie zadziała).

Alternatyw za bardzo nie ma. Tak więc zostaje Ci pójście na kompromis. Qt, wxWidgets, GTK albo Mono (który działa i tak na GTK). Co do frameworków pod Rust to się nie wypowiem.

3

Czy nowy standard C++17 będzie o wiele szybszy po skompilowaniu od Rust?

Nie będzie ani szybszy ani wolniejszy, bo to nie język jest determinantem wydajności, chyba, że mówimy o programistach.

czy Rust posiada jakąś bibliotekę graficzną na wzór QT?

Jest gtk-rs i widziałem jakieś bindingi do QML. Więcej https://crates.io/keywords/gui

Chcę pisać programy okienkowe pod systemem FreeBSD i NetBSD, ale nie chcę się pakować w C/GTK3.

Hmmm… ciekawe platformy, ale po co? Jaki jest sens pisać okienkowe na te dwie platformy. Ogólnie coraz mniej oprogramowania okienkowego się pisze, bo jest zdecydowanie trudniejsze w deploymencie i aktualizacjach niż web (chociażby w sieci lokelnej). Jeszcze zrozumiem Windę, od biedy Linucha, ale BSD?


Co do tematu to moja lista języków, które warto znać:

  • SQL ale w wersji SQL:2003+ a nie te reliktowe, które większość tutoriali przedstawia czyli (w najlepszym wypadku) SQL:99
  • Prolog
  • Podstawy assemblera x86(-64)
  • sh
  • coś skryptowego (Ruby/Python/Lua)
  • podstawy JSa (gardzę językiem jako takim, ale niestety wybór jak Adam w raju)
  • podstawy jakiegoś Lispa (Scheme/Clojure), chociażby po to by rozumieć homoikoniczność
  • podstawy C (dla czego tablice indeksujemy od 0, czym są wskaźniki i podstawy arytmetyki wskaźników)

Co do języków ciekawych, dla zainteresowanych:

  • Io, jako, że to jest dobra implementacja dziedziczenia prototypowego
  • R/Julia, bo przydaje się czasami jak potrzebujesz zrobić raport (wszystkie sprawozdania z fizyki na studiach miałem napisane w R Sweave i rozsyłałem to po znajomych jako prawie, że gotowce)
  • cały czas chcę się nauczyć Coq/Agdy, ale jakoś nie potrafię ogarnąć tych języków
  • Erlang/Elixir - ciekawie rozwiązana obiektowość i wielowątkowość
  • Smalltalk - kolejne ciekawe (przez niektórych "klasyczne") podejście do obiektowości
  • Verilog/VHDL - bo nigdy nie wiesz co cię czeka
  • niePOSIXowy shell, jak np. Fish (ja sobie chwalę)
  • TeX, bo czasem wypada coś napisać
  • AWK/sed
  • vi
0

@vpiotr: Widzisz, doszedłeś do sedna mojego problemu :P
Nie wiem, jaka docelowa platforma mnie interesuje, nie wiem co chciałbym programować, więc stwierdziłem, że znajdę technologię, która mi się spodoba i właśnie w niej zacznę pisać :P
Rozmowa o sektorze biznesowym mnie w tym momencie przerasta bo tak naprawdę, żeby dowiedzieć się jak to wszystko wygląda musisz zacząć tam pracować (chyba, jeszcze nigdzie nie pracowałem jako programista). Szukam i chyba będę stawiał na nowe technologie. Zaczynam studia, po ich skończeniu już powinny być jakieś stanowiska dla nich (choć to raczej złudne nadzieje). Nie jestem w stanie odpowiedzieć na Twoje pytanie. Staram się już bardzo długo.

1

@Burdzi0: błądzisz, bo język jest tylko narzędziem i de facto nie jest istotne jaki wybierzesz. Popróbuj różnych dziedzin i zobacz co Ci się spodoba. Bo wyjdzie, że nauczysz się, nie wiem, Rubiego bo Ci tak powiedzą a następnie stwierdzisz, że chcesz iść w AI gdzie jest Python i Java, albo w statystykę gdzie masz R, albo w systemy wysokiego bezpieczeństwa gdzie masz Adę i MISRA C. Więc nie jest to istotne, znajdź sobie jakiś interesujący projekt i zacznij nad nim pracować, w dowolnym języku.

2

@Burdzi0: to próbuj wszystkiego po trochu.
Ale najlepiej jakieś realne programy typu "na zaliczenie". Jakoś tak 2-4 tyg programowania.
Bo hello-world'y czy sortowania przez kopcowanie nie pozwalają na wyczucie języka IMHO.

1

Algebra liniowa to jezyk XXI wieku.

0

Lepiej nauczyc sie jednego dosc dobrze niz skakac jak kozica...

0

Takie, jakie wymaga od Ciebie Twój aktualny pracodawca tj. projekt, w którym pracujesz.
Jeżeli nie pracujesz, jesteś na etapie nauki to dowolne dwa-trzy na poziomie wyżej niż basic, które znajdziesz w ogłoszeniach o pracę np. na tym portalu :) np. java, sql, hibernate jeżeli chcesz być koderem.
Jeżeli będziesz starał się o pierwszą pracę, to napisanie w cv, że znasz 10 języków programowania, moim zdaniem, nie jest dobrym pomysłem.

0

@goJavaGo: Zobacz pierwszy post. Mam zamiar spróbować kilku języków, a moim celem jest znalezienie technologii w jakiej chciałbym się specjalizować. Naprawdę czytajcie posty od początku (zwłaszcza cytowany fragment)

0

Może spróbuję inaczej :P
Przepraszam, że was tak męczę, ale są to sprawy dla mnie dosyć ważne.
Tak jak zaproponował @hauleth

@Burdzi0: błądzisz, bo język jest tylko narzędziem i de facto nie jest istotne jaki wybierzesz. Popróbuj różnych dziedzin i zobacz co Ci się spodoba. Bo wyjdzie, że nauczysz się, nie wiem, Rubiego bo Ci tak powiedzą a następnie stwierdzisz, że chcesz iść w AI gdzie jest Python i Java, albo w statystykę gdzie masz R, albo w systemy wysokiego bezpieczeństwa gdzie masz Adę i MISRA C. Więc nie jest to istotne, znajdź sobie jakiś interesujący projekt i zacznij nad nim pracować, w dowolnym języku.

i @vpiotr

@Burdzi0: to próbuj wszystkiego po trochu.
Ale najlepiej jakieś realne programy typu "na zaliczenie". Jakoś tak 2-4 tyg programowania.
Bo hello-world'y czy sortowania przez kopcowanie nie pozwalają na wyczucie języka IMHO.

poszukam platformy.
Dostępne platformy wymieniam poniżej. Jakim technologiom warto się przyglądnąć (najlepiej coś przyszłościowego)?

  • mobile - mam telefon z androidem - Java/Kotlin?
  • web - tutaj ograniczeń praktycznie nie ma - Java/C#/JS
  • desktop - C/Python/Rust/Kotlin/Go
  • embedded - to samo co desktop

Co zmienilibyście w liście?

0

@Burdzi0: a jak się z Javą czujesz? Według Ciebie jest ok?

1

Przyszłościowe to Rust, Go, D - zastępuje C/C++. Elixir - zastępuje Ruby, Python, PHP, Node. Scala, Kotlin - zastępuje Java. Swift - zastępuje Objective C.

0

@scibi92: Ostatnio mam wrażenie, że bardziej z językiem walczysz niż współpracujesz. 'Checked Exceptions' w szczególności. Troszkę mnie męczy, ale nie spisuję na straty, może docenię wygodę jak poznam coś innego

0

No rzeczywiście te checked exception to strasznie porąbene jest, otatnio korzystałem z BlockingQueue, a z czym jeszcze musiałeś walczyć? :)

0

@scibi92: Nie mogłem ogarnąć jak napisać obsługę Socketów asynchronicznie tak aby serwer miał możliwość zakończenia połączenia w dowolnym momencie

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