Czy warto być poliglotą języków komputerowych? [Zamknięte]

14

Często słyszysz, że programiści powinni uczyć się wielu różnych języków, aby się doskonalić. Nadal chodzę do szkoły i nie mam dużego doświadczenia programistycznego (nieco ponad rok). Ale to, co było szlachetnym zamiarem poprawy umiejętności programowania, zmieniło się w pewnego rodzaju OCD: czuję, że nie uspokoję się, dopóki nie nauczę się wszystkich stosunkowo znanych języków programowania.

A oto samo pytanie: czy bycie poliglotą języków programowania faktycznie ci pomoże (I nie mam na myśli zwykłego „programisty powinien znać przynajmniej wszystkie paradygmaty”, mam na myśli naprawdę wszystkie języki, o których zwykle słyszysz)? Czy ktoś ma podobne doświadczenie? Czy to pomaga w pracy / umiejętnościach / karierze? Jak często potrafisz stosować te umiejętności?

Anton Barkovsky
źródło
3
Myślę, że kiedy ludzie sugerują innym naukę nowych języków, mniej chodzi o naukę języków, a więcej o naukę nowych paradygmatów. Moimi dwoma głównymi językami są Python i C ++, nauka Haskell była dla mnie wspaniałym doświadczeniem, ponieważ zmusza mnie do myślenia w inny sposób niż w innym przypadku.
Vitor Py
4
Znając wszystkie główne paradygmaty naprawdę pomaga wiele . Wystawienie choćby odrobinę na wszystkie interesujące języki może nieco pomóc, jeśli projektujesz własne języki (i jak tylko wejdziesz w paradygmat programowania zorientowanego na język, prawdopodobnie to zrobisz).
SK-logic
4
„Nie warto znać języka, który nie wpływa na sposób myślenia o programowaniu”. (Alan Perlis). Amen.
2
@ Job, znajomość 10 języków programowania wymaga jedynie niewielkiej części wysiłku wymaganego do nauki podstaw jednego języka mówionego.
SK-logic
2
@ SK-logika zależy. Założę się, że mogę nauczyć dziecko w wieku 6 lat mówić po hiszpańsku szybciej niż mogę nauczyć go pytona.
Raynos

Odpowiedzi:

10

„Programista powinien znać przynajmniej wszystkie paradygmaty”

To pomaga

Mam na myśli naprawdę wszystkie języki, o których zwykle słyszysz

To nie pomaga. Chociaż gdy poznasz już wszystkie paradygmaty, możesz nauczyć się języka tygodniowo.

Po prostu lepiej jest spędzić tydzień na nauce tego języka, kiedy go potrzebujesz .

Dobry programista to leniwy programista

Dygresja:

Nauka popularnych / popularnych języków nie jest tak pomocna jak nauka „wszystkich paradygmatów”. Pierwszy nie obejmuje drugiego. Na przykład nauka Self jest niezwykle przydatna do zrozumienia prototypowego OO. Nie jest to powszechny ani popularny język, ale jest o wiele bardziej przydatny niż nauka języka Python, gdy już znasz ruby.

Projekt językowy:

Znajomość większości języków jest przydatna, jeśli piszesz / projektujesz nowy język. Jest więc solidny przypadek użycia, ale jest dość niszowy.

Co zalecam zamiast tego:

Przeczytaj kod Ukończ 2 co najmniej 3 razy

Języki przychodzą i wychodzą w lewo i prawo w zależności od „tego, co popularne”. Technologia staje się przestarzała po miesiącach lub latach, w zależności od tego, jak wygląda krzywa technologii. (Sieć przestaje stosować technologię co 6 miesięcy).

Technika programowania i teoria informatyki zawsze pozostają takie same.

Raynos
źródło
Ale istnieje wiele interesujących drobnych funkcji w językach, a nawet uczenie się nowego języka z już znanego paradygmatu może zaskoczyć (na przykład dla mnie był to Smalltalk)
Anton Barkovsky
@AntoBarkowski to fałszywe stwierdzenie, nie porównuj SmallTalk z innymi językami OO. Java / C ++ / C # / etc. nie są prawdziwymi językami OO. Oczywiście SmallTalk warto się uczyć, ale to nie ten sam paradygmat;)
Raynos
6
Ludzie powtarzają „możesz nauczyć się języka na tydzień”, ale to po prostu nieprawda. Jasne, będziesz mógł pisać poprawny składniowo kod w tym języku, ale jest w tym coś więcej. Na przykład C # i Java są bardzo podobne pod względem składniowym i oba są językami OO. Jednak pisanie kodu Java w języku C # nie czyni z ciebie programisty w języku C #.
R0MANARMY
3
@ R0MANARMY „<dobrzy programiści> mogą nauczyć się języka w ciągu tygodnia”. Język nie obejmuje bibliotek, ram i interfejsów API. Moja definicja dobrych programistów może być jednak bardzo wysoka.
Raynos
1
@ R0MANARMY, który z tych drobnych, nieistotnych bitów semantycznych, o których wspomniałeś, może potrwać dłużej niż godzinę?
SK-logic
4

Nie chodzi o to, jak umieć pisać w wielu językach, chodzi o, jak mówisz, o paradygmaty. Im więcej opcji znasz, tym lepiej. Znajomość wielu języków z pewnością pomaga, ale jeśli nadal uczysz się tego samego rodzaju języków, szybko wpadniesz w ślepy zaułek.

Kluczem jest wiedza, w jakim języku / systemie najlepiej wdrożyć część twojego projektu. Nawet jeśli zdecydowałeś się na jeden główny język (jak większość projektów), nadal będziesz mieć różnego rodzaju narzędzia, skrypty, automatyzację i wsparcie kompilacji, które trzeba napisać. Zwykle wiele innych języków lub narzędzi jest w tym lepszych niż główny język.

Dla wyjaśnienia uważam, że głupio jest uczyć się wszystkich języków, o których faktycznie słyszysz: są ich setki i często są to tylko niewielkie różnice w innych językach.

edA-qa mort-ora-y
źródło
3

IMHO nie. Po pierwsze dlatego, że nie możesz nauczyć się języka w mniej niż rok. Napisanie w nim kodu zajmuje 2 dni, ale napisanie płynnego i dobrze sformułowanego kodu dla danego języka wymaga dużego doświadczenia. Dlaczego GC działa tak, jak działa, gdzie przydzielać pamięć, które konstrukcje są szybsze, jak poprawnie łączyć łańcuchy, jakie są niebezpieczne kąty języka itp.

Piszę okropny kod Java / .NET jako programista C ++, ponieważ wielu programistów Java pisze okropny kod C ++.

Najlepszą częścią nauki innych języków jest to, że uczysz się nowych paradygmatów i być może masz lepsze narzędzie do rozwiązywania konkretnych problemów. Powiedz - potrzebujesz bardzo szybkiej, niepublicznej aplikacji GUI, .NET jest tam niezastąpiony.

Ale nauka języka, aby nie używać struktur w .NET lub nie wycierać każdego obiektu w C ++, zajmuje dużo czasu. Myślę, że lepiej jest wydać go na naukę zasad projektowania, platform i wybranego języka.

Ale to tylko moja opinia.

Koder
źródło
2
„ponieważ nie możesz nauczyć się języka w mniej niż rok” False. Nie pomyl nauki języka z poznawaniem popularnych ram, które udostępnia. Dodaj także „ogólne techniki programowania” do listy na końcu.
Raynos
@Raynos: Uznałem, że o to mu chodzi.
Steven Jeuris
1
Moim ulubionym sposobem grania w nowym języku jest implementacja kompilatora dla przyzwoitej jego części. W sumie zrozumienie języka oraz identyfikacja i kradzież najlepszych funkcji zajmuje od 2 do 4 godzin. Niecały rok, nawet dzień.
SK-logic
1
Cóż, jeśli dołączasz do dużego projektu C ++ i przyszedłeś na wywiad ze słowami: „Programuję w Javie od 10 lat, ale ostatnie 6 miesięcy spędziłem na C ++, więc znam ten język”. Wątpię, czy dostałbyś wysoko płatne stanowisko programisty dla tej pracy. Więc nie, nadal uważam, że nie możesz nauczyć się języka przez około miesiąc.
Koder
2
@Coder, jeśli dołączasz do dużego projektu C ++ i przyszedłeś na wywiad ze słowami typu „Programuję w 20 językach od 10 lat, w tym w C ++”, prawdopodobnie dostaniesz pracę.
SK-logic
2

Poznanie ich nie jest praktyczne , ale wiedza o nich może być bardzo przydatna . Rozumiem przez to, że kiedy pojawia się nowy problem, możesz powiedzieć: „Niejasno pamiętam, że [inny język] miał lepszy sposób na rozwiązywanie takich problemów. Powinienem to sprawdzić”.

Karl Bielefeldt
źródło
Uważam, że podcasty takie jak SE Radio są do tego dobre. Często mają odpowiednią długość, aby wysłuchać dojazdy do pracy i możesz się wiele nauczyć w ten sposób. Ale jego forma Dlaczego jest interesująca.
Zachary K
1

Pomógłbyś bardziej w karierze, budując wiedzę o domenach, a następnie ucząc się wielu języków programowania. Nie wspominając o tym, że będziesz musiał nauczyć się dodatkowych narzędzi, takich jak korzystanie z profilera w swoim języku, to samo do debugowania, najlepszego frameworku GUI i jak szybko się z nim programować, jakie wspólne biblioteki stron trzecich istnieją z kompromisami i idiomy specyficzne dla języka.

Mądrzej jest również nauczyć się robić więcej rzeczy niż wiele sposobów robienia tego samego.

Peter Smith
źródło
1

Pracowałem na kilku systemach, w których komponenty zostały napisane w wielu językach (najgorszy sprawca wymagał ode mnie dostarczenia kodu napisanego w Ada 83, C, Fortran 77, SQL i DCL, podczas gdy moje ostatnie zadanie wymagało ode mnie dostarczenia kodu C ++ i Java ). Tak, istnieją przypadki, w których trzeba znać wiele języków na tyle dobrze, aby być w nich wydajnym (produktywnym! = Biegły; nie będziesz głębokim ekspertem w C ++ i Javie i ... chyba że dziwak).

Poza tym czas poświęcony na naukę wielu języków polega na pomocy w oddzieleniu koncepcji od implementacji . Dla mnie OOP nie miało sensu, dopóki nie pracowałem z wieloma OOPL. Ponadto w pewnym momencie swojej kariery będziesz musiał szybko zmienić biegi i zacząć pracować nad czymś zupełnie nowym i nieznanym; poświęcenie trochę czasu, aby wykroczyć poza to, co musisz wiedzieć, ułatwi to przejście, kiedy to nastąpi.

John Bode
źródło
1

Myślę, że lepiej byłoby uczyć się kilku różnych języków, a następnie przynajmniej jednego dogłębnego, zanim zaczniesz potrzebę nauki każdego możliwego języka. Gdy masz minimalną szerokość, głębokość staje się naprawdę ważna dla twoich postępów jako programisty. Widziałbym kogoś z głębią w jednym lub dwóch językach i odrobiną kilku innych niż ktoś z odrobiną wszystkiego. Zdobycie głębi jest jak nauczenie się innego paradygmatu, zmieni sposób myślenia o programowaniu i otworzy drzwi do naprawdę skomplikowanych ekscytujących projektów.

HLGEM
źródło
0

To jest jak nauka mówienia w wielu językach. Nauczenie się ich wszystkich do tego stopnia, że ​​są przydatne, jest prawie niemożliwe. Trzymaj się tych, których prawdopodobnie będziesz używać, a będziesz lepiej. Możesz nauczyć się C ++, C # i Java całkiem dobrze, ale próba wyciśnięcia Perla, Pythona, VB (nie VB.NET), Ruby i JavaScript na profesjonalny poziom jest jednocześnie głupia. Nie ma wystarczającej liczby godzin w ciągu dnia, aby utrzymać wszystkie swoje umiejętności na raz.

Christopher Bibbs
źródło