Jeśli ktoś ma się uczyć nowego języka programowania każdego roku, jaka powinna być ta lista? [Zamknięte]

19

W pierwszym rozdziale „Pragmatycznego programisty” pierwszym celem nauki jest:

Naucz się co najmniej jednego nowego języka każdego roku. Różne języki rozwiązują te same problemy na różne sposoby. Poprzez uczenie się kilka różnych podejść, można pomóc poszerzyć swoje myślenie i uniknąć getter uderzył w rutynę. [...]

Aby osiągnąć ten cel w ciągu kariery zawodowej, lista języków prawdopodobnie będzie dość długa (szczególnie jeśli nie chcesz „robić postępów” w zarządzaniu). Najwyraźniej edukacja programisty (lub jakiejkolwiek innej formy) pozwoli Ci zacząć od podstaw języków przydatnych w handlu (zwykła lista z ofert pracy: C, C ++, Ruby, Python, JavaScript, C #, Java, VB, .. .). Ponadto formalny lub nieformalny program uczenia się prawdopodobnie obejmuje podejścia funkcjonalne (za pomocą czegoś takiego jak Haskell, LISP lub język pochodny ML)

Ale kiedy poznamy rozsądny podzbiór tej listy - co dalej i dlaczego ?

Richard
źródło
3
W tej odpowiedzi wymieniłem niektóre paradygmaty językowe, które można zbadać, aby poszerzyć swoje umiejętności. Zacznę od próby poznania wszystkich tych paradygmatów (zamiast skupiania się na językach), więc zaznacz wszystkie te, których używa twój obecny język, a następnie wybierz język, który ma tyle różnych, z których jesteś przyzwyczajony. Nie ma sensu zaczynać w C # niż Java, starając się początkowo bardziej zróżnicować. Po omówieniu wszystkich podstawowych typów możesz wybrać inne popularne języki.
Simon P. Stevens,
@ Simon: Dlaczego nie udzielić tutaj odpowiedzi?
Richard
1
Nauczysz
@Richard. Naprawdę nie sądziłem, że uzasadnia to pełną odpowiedź, po prostu odniosłem się do czegoś istotnego, co napisałem gdzie indziej.
Simon P Stevens,
1
Większość osób uczących się języka rocznie będzie „waletem wszystkich zawodów, ale mistrzem żadnego”, dopóki nie skupisz się na kilku przez kilka lat. Uważam, na podstawie dużego doświadczenia, że ​​pojęcie programisty „pełnego stosu” jest fałszywe, z wyjątkiem 1% - 5% programistów. Większość twardych ludzi, których znam, nie ma wielkich umiejętności frontendowych i vice versa.
śmieciowe

Odpowiedzi:

19

Spraw, aby było to interesujące i spędzaj co roku na pisaniu interpretera lub kompilatora dla własnego języka programowania, który wypełnia niszę, w której nigdy nie korzystałeś z języka programowania. Każdego roku napisz następny kompilator / tłumacz przy użyciu języka, który napisałeś w poprzednim roku.

alternatywny
źródło
7
Mogę proszę prosić o autograf? :-)
Christian Davén
1
+1 Znakomita odpowiedź, nawet jeśli prawdopodobnie miała być w humorystyczny sposób.
Joe D
1
@Joe D Nie oznaczono tego w całkowicie humorystyczny sposób. Jeśli możesz to zrobić, opanowałeś wszystkie nisze.
alternatywny
-1 za to, że nie oznacza to w całkowicie humorystyczny sposób. (jakbyśmy nie mieli dość na wpół porzuconych języków / implementacji)
ZJR
2
@ZJR Więc 99% Humorystyczny, 1% Humorystyczny jest zły? No chodź. Ponadto, dlaczego oddalasz odpowiedź na podstawie komentarza?
alternatywny
13

Powinieneś zmaksymalizować „marginalne znaczenie”, tj. Zawsze zapuszczać się w nowe obszary, w których jeszcze nie jesteś silny. Różnią się oba języki programowania oraz koncepcje . Jeśli nie znasz żadnego języka zorientowanego obiektowo, wypróbuj Javę i niektóre środowiska o wysokiej abstrakcji, takie jak Hibernacja. Następnie należy napisać kilka rzeczy administrowania systemów w języku skryptowym, takich jak Python lub Perl. Następnie podnieś trochę umiejętności na niskim poziomie w C lub C ++, pisząc wysokowydajny wielowątkowy kod serwera. Jeśli nie znasz programowania funkcjonalnego, wypróbuj Haskell z niektórymi problemami teorii grafów, takimi jak rozwiązywanie Peg Solitaire itp. Jest to bardzo możliwe, aby wszystko, czego się uczysz, miało natychmiastową wartość rynkową, dopóki nie trafisz na erudytę lub rzeczy specjalnego przeznaczenia, takie jak jako zabezpieczenie obiektowo zdolności ,Prolog lub VHDL .

Dobrym ćwiczeniem na drodze! To nauczy Cię myśleć w bok i przewidywać problemy w kategoriach niezależnych od języka, zamiast polegać na zbyt małej liczbie technik specyficznych dla platformy. Na przykład, gdy opanujesz podobieństwa i różnice w wirtualnej wysyłce metod między C ++ i Pythonem, prawie natychmiast „dostaniesz” to dla dowolnego innego języka.

DomQ
źródło
9

Język, który nie wpływa na sposób myślenia o programowaniu, nie jest warte poznania. - Alan Perlis

W związku z niektórymi innymi odpowiedziami, dlaczego uczysz się jednego nowego języka rocznie, dlaczego? jest rozszerzenie twoich możliwości jako programisty. Jak polega na uczeniu się języków z odrębnymi paradygmatami od języków, które już znasz, a podsumowanie paradygmatów, które już znasz, określa, którego języka uczyć się w następnej kolejności.

Jakie są te paradygmaty? Zaawansowana książka Koncepcje, techniki i modele programowania komputerowego zapewnia doskonały przegląd z mapą graficzną .

Tak więc, jeśli znasz tylko imperatywne języki podobne do C, to nauka Scheme / Lisp jest niezwykle przydatna. Jeśli znasz już imperatywne i funkcjonalne języki, przydatna będzie nauka Prologu itp.

Ostatnia książka, która próbuje uczyć wielu języków i paradygmatów, to Siedem języków w siedmiu tygodniach . Oczywiście nie będziesz biegły w każdym języku po tygodniu nauki, ale wydaje się, że zapewnia przystępną, zorientowaną na praktykę perspektywę wielu paradygmatów.

Kiedy grokujesz innym paradygmatem, to naprawdę jest moment Zen; przejście od programowania imperatywnego do programowania funkcjonalnego sprawiło, że zobaczyłem świat komputerów w zupełnie nowym świetle. Miłej nauki!

limist
źródło
A język wpływa nie tylko na twoje myślenie, co pozwala ci wyrazić, ale bardziej na to, co zmusza cię do wyrażenia.
Florian F,
9

C - jako niezbędny „program leżący u podstaw wszystkiego”, język programowania systemów

Lisp (schemat) - dziwny, ale niesamowicie potężny język ur, który zdaniem wielkich hakerów określa fajnie

Smalltalk - bo taki miał być OO

Erlang (lub inny język aktora), aby zrozumieć aktorów

Haskell - aby zrozumieć Monady

JavaScript - ponieważ jest wszędzie i jest niezbędny do skryptowania przeglądarki

Jeden z Python / Ruby / Perl (ale to naprawdę nie ma znaczenia, które) - więc wiesz, jak wygląda popularny, nowoczesny język skryptowy wysokiego poziomu z dobrą obsługą bibliotek

SQL - dzięki czemu możesz rozmawiać z relacyjnymi bazami danych

Prolog - ponieważ wciąż musisz oszalać

interstar
źródło
2
Powodem, dla którego nauczyłem się Haskell, jest to, że chciałem nauczyć się języka funkcjonalnego (w przeciwieństwie do wszystkich proceduralnych, które znałem wcześniej), a Haskell wydawał mi się dzieckiem plakatu dla języków funkcjonalnych. Powodem, dla którego podoba mi się Haskell, jest to, że jest językiem wysokiego poziomu, ma dobrą obsługę bibliotek i jest szybki (około 50% szybciej niż C, ale zależy to od tego, co robisz). Lubię też pisać sporo kodu i wszystko działa za pierwszym lub drugim razem (po skompilowaniu).
Joey Adams,
To na pewno ma znaczenie, czy uczysz się Perla, Pythona czy Ruby. Jako przykład, Python ma opisy list, które nie istnieją w Ruby, a Ruby ma moduły, które nie istnieją w Pythonie. Możesz powielić wyniki obu rzeczy w każdym języku, ale nauka jednego z nich wpłynie na twoje myślenie na bardzo różne sposoby.
Philodadad
1
Prolog - bo wciąż musisz oszalać - Najlepszy komentarz w historii +1
Zachary K
1
Myślę, że główną zaletą uczenia się haskell niekoniecznie jest opanowanie abstrakcji monady, ale raczej poznanie zalet PRAWDZIWEGO silnego i potężnego systemu typów. Jeśli pomysł na „system typu statycznego” przypomina coś w stylu Java, haskell zapiera dech w piersiach.
sara
4
  • Go (nowy język programowania na poziomie systemu z dobrym wsparciem dla współbieżności i nie tak tradycyjnych pojęć)
  • Lua (język skryptowy prosty, ekspresyjny, niezwykle elastyczny i zrównoważony paradygmaty imperatywny, funkcjonalny i metaprogramowanie, umożliwiający OOP)
  • D (C / C ++ wykonane poprawnie)
  • Groovy (Ekspresyjność i meta programowanie w świecie Java)
  • Eiffel (Design By Contract i inne podejście do OOP)
  • Prolog (język programowania logiki)
4 obrotów
źródło
1
Dlaczego ktoś miałby się tego uczyć? ( Dlaczego interesujący jest tutaj kawałek, istnieje kilka naprawdę unikalnych języków programowania: każdy paradygmat został wdrożony więcej niż raz.)
Richard
Ciekawe, że uważasz, że D jest wykonane w C poprawnie. Osobiście, gdy używam C, najczęściej używam go do niektórych rzeczy na niskim poziomie, w których nie chcę żadnych abstrakcji OOP.
Jonas
@Jonas: Nadal potrzebujemy prostego języka poprawnie, podczas gdy ten język nie przychodzi D może być ładnie używany tylko w trybie rozkazującym. Dla Ciebie D2 jest bardziej funkcjonalny, gdy zostanie ukończony, być może będzie to najlepsza implementacja paradygmatu w języku przede wszystkim imperatywnym.
Maniero
dobrze wykonane jest subiektywne. Dla mnie Erlang jest bardzo małym i prostym językiem zrobionym dobrze. Brakująca część to świetny framework GUI, a jeśli robisz złożone systemy, być może chciałbyś bardziej statycznego języka.
Jonas
@Jonas: Erlang to dobry język, ale C / C ++ nie jest zrobiony dobrze, to coś zupełnie innego.
Maniero
2

1) Prolog: Jest zupełnie inny niż wszystkie imperatywne języki, których do tej pory używasz, i zmieni sposób myślenia o problemach

2) Lisp: bez niego równie dobrze możesz używać Vi

3) Erlang: Znowu jest zupełnie inaczej, wydaje się też całkiem modny.

4) Coś z Turinga Tarpita (np. Brainfuck) i prawdopodobnie napisz do niego kompilator lub tłumacza: nie mogę wymyślić powodu, aby to zrobić, ale wydaje mi się, że to dobry pomysł.

Paul Butcher
źródło
1
„bez niego równie dobrze możesz używać Vi”. Dziwi mnie, że nikt tego nie podniósł :)
Gauthier,
Używam vi! (Cóż, gvim)
Zachary K
1

Oprócz tych, które wymieniłeś,

Haskell, F #, Clojure, OCaml, Lua, Go, D, Erlang, Objective C.

grokus
źródło
1

Chociaż zgadzam się, że dobrze jest uczyć się nowych języków (a nawet koniecznością przez długą karierę), myślę, że jeden rok za dużo minął przez pierwsze pięć dziesięciu lat. Wolałbym zobaczyć kogoś z takim doświadczeniem, który uczy się nowych rzeczy na temat języków, które już zna. W pewnym momencie potrzebujesz zarówno głębi, jak i wiedzy. Więc możesz napisać konstrukcję If w 12 językach, wielkie whoop. Wolałbym zobaczyć kogoś, kto naprawdę się w to zagłębi i stanie się ekspertem w przynajmniej jednej rzeczy. A potem następne kilka lat stanie się ekspertem w czymś innym. W ciągu ponad 30-letniej kariery chcę, aby ktoś miał głęboką wiedzę, a nie tylko podstawy wielu rzeczy.

HLGEM
źródło