(Dlaczego) Czy powinienem nauczyć się nowego języka programowania? [Zamknięte]

97

Jestem dość biegły w Javie, C / C ++, JavaScript / jQuery i przyzwoicie dobry w Objective-C. Jestem dość produktywny, jeśli chodzi o języki i odpowiadające im frameworki, i z wystarczającą łatwością produkuję systemy na poziomie przedsiębiorstwa (a także te na małą skalę), utrzymując kod w czystości i utrzymywaniu (tak, mogę czytać własny kod po szóstej miesięcy :)

O ile nie wymaga tego platforma (iPhone, iPad itp.) Lub klient / organizacja wdrażająca, po prostu „dlaczego” powinienem nauczyć się nowego języka programowania? Dla żartu"? A co z tą zabawą, jeśli nie zrobię z nią nic wartościowego?

Wielu moich rówieśników jest gotowych zanurzyć się, aby nauczyć się „następnej nowej rzeczy / języka” i zwykle jest to Python, Ruby lub PHP (tylko wymieniając kilka popularnych). Teraz sama znajomość języka jest daremna. Musisz także znać frameworki, nauczyć się ich użycia / interfejsów API, a także „dobrych praktyk implementacyjnych” itp.

Czy z ekonomicznego punktu widzenia uczenie się nowego języka programowania przynosi jakieś korzyści? Jeśli język zostanie nauczony w szybki i brudny sposób, prawdopodobnie będzie on również używany do szybkiego i brudnego prototypowania / implementacji - ale nie uważam, że to uzasadniona inwestycja czasu / wysiłku.

Więc DLACZEGO powinienem (lub ktokolwiek w tej sprawie) uczyć się nowego języka programowania innego niż „jest fajnie, więc wypróbujmy” - jeśli inwestycja czasu może nie być tego warta na dłuższą metę?

doktoratów
źródło
6
programmers.stackexchange.com/questions/118338/... Może zainteresuje Cię odpowiedź, którą udzieliłem.
deadalnix
3
Jeśli widzisz nowy język z nowymi pojęciami i nie masz ochoty ich zrozumieć, wiele miejsc cię nie zatrudni (w rzeczywistości wiele pytań do rozmowy kwalifikacyjnej ma na celu konkretne określenie takich rzeczy)
Bill K
3
Zapytam, dlaczego nie powinienem nauczyć się nowego języka?
użytkownik
2
@ZacharyK, nawet jeśli praca była dla programisty Java, a kandydat był superduper w java. Wygląda na to, że strzelasz sobie w stopę.
NimChimpsky
2
Jest tam wielu facetów Super Java. Jestem tak samo zainteresowany tym, co będziesz wiedzieć za 6 miesięcy, jak tym, co wiesz teraz. (Oczywiście wydaje mi się, że cały czas spędzam w Erlang, CoffeeScript i PHP)
Zachary K

Odpowiedzi:

178

Od pragmatycznego programisty , wskazówka nr 8 „Regularnie inwestuj w swoje portfolio wiedzy”:

Naucz się co najmniej jednego nowego języka każdego roku. Różne języki rozwiązują te same problemy na różne sposoby. Ucząc się kilku różnych podejść, możesz pomóc poszerzyć swoje myślenie i uniknąć utknięcia w koleinach. Ponadto nauka wielu języków jest teraz znacznie łatwiejsza dzięki bogactwu darmowego oprogramowania w Internecie

Nie chodzi o następną „nową rzecz”. Chodzi o myślenie na różne sposoby poza normalnymi myślami.

Jest takie powiedzenie: „Kiedy jesteś młotem, wszystko wygląda jak gwóźdź”. Być może istnieje lepszy sposób na rozwiązanie problemu przy użyciu innej technologii. Jeśli tego nie zrobisz, możesz nie wiedzieć, że był dostępny.

jmq
źródło
Doskonały punkt Właśnie takie myślenie skłoniło mnie do wypróbowania RavenDB w projekcie i wiele się nauczyłem po latach utknięcia w rutynach programu SQL Server.
Bob Horn
52
Myślałem, że wtedy, gdy masz tylko młotek, wszystko wygląda jak twój kciuk
Zachary K
2
Całkowicie się zgadzam. Dodam również, że nauka innego języka pomaga lepiej zrozumieć aspekty języków, które wcześniej uważałeś za znane. Pomaga także rozróżnić, jakie są „prawdziwe” podstawowe pojęcia / wzorce / ograniczenia programowania i jakie są jedynie artefakty określonego zestawu narzędzi. Na przykład, jeśli wszystkie znane języki są słabo wpisane, możesz nigdy nie wiedzieć, że istnieje silne pisanie i nigdy nie zastanawiasz się, dlaczego! W związku z tym Twoje produkty mogą ucierpieć pod względem wydajności lub bezpieczeństwa, nawet jeśli będą się świetnie prezentować na rynku ;-).
JJC
3
Pragmatic Programmer to jedna z najlepszych książek programistycznych, jakie kiedykolwiek czytałem. Naprawdę dobry!
Soner Gönül
Naprawdę zgadzam się co do tego, że „chodzi o myślenie na różne sposoby poza normalnymi myślami”. Kiedy nauczyłem się Pythona, zyskałem nowy świat myślenia.
Yoo Matsuo,
80

Dlaczego ludzie wspinają się na Mt. Everest? Lub uruchom 100 mil w ciągu 24 godzin ? Dlaczego podejmujemy jakiekolwiek wyzwanie? Bo tam jest. Nie widzę nic złego w „Ars gratia artis”. Przychodzi moment, w którym nauka dla nauki staje się jej własną nagrodą. Ale jeśli chcesz mocniejszych powodów, aby nauczyć się nowego języka, oto kilka:

Nowe sposoby rozwiązywania problemów Nauka nowego języka, poświęcenie czasu na nurkowanie, daje szansę na ponowne zaprogramowanie się jako nowicjusz. Ta nowa perspektywa może nauczyć Cię technik, które mogą przenieść się na stary język. Pomyśl o wpływie Ruby on Rails na ASP.NET MVC lub o tym, w jaki sposób Java Hibernate została przeniesiona do C # (wraz z niezliczonymi innymi strukturami wpływającymi na rozwój .NET). Ekspozycja na różne języki może nauczyć cię nowych sposobów rozwiązywania problemów.

Właściwe narzędzie do właściwej pracy Wszystkie wymienione języki to hybrydy OO / proceduralne (lub czysto proceduralne w przypadku C). Spróbuj swoich sił w języku funkcjonalnym lub dwóch. Spróbuj zastosować silnię w Erlangu za pomocą rekurencji i obserwuj, jak szczęka uderza o podłogę, gdy 20000! zwraca w ciągu 5 sekund (brak przepełnienia stosu w witrynie). Następnie spójrz na moc skalowania aplikacji w celu przeszukiwania liczb i analizowania protokołów przy użyciu mniejszego kodu i w krótszym czasie niż potrzeba na uzyskanie dwóch wystąpień JVM rozmawiających przez RMI lub SOAP. Nauka innych języków / platform, które są ukierunkowane na rozwiązywanie określonych problemów, zapewni więcej narzędzi.

Poznawaj nowych ludzi / rozszerzaj swoją sieć Nurkowanie w nowym języku wystawia cię na nową społeczność. Poznawanie nowych ludzi jest dobre dla twojej kariery i osobiście.

Nowe możliwości Znajomość nowego języka może zwiększyć szansę na zdobycie tej pracy dzięki takiemu nowemu startupowi. „Człowieku, ta praca byłaby idealna, gdybym znała Ruby”. Poza tym możesz cieszyć się językiem na tyle, że zdecydujesz się zmienić ścieżki.

Dbaj o świeżość Praca z tą samą rzeczą na co dzień staje się nużąca. Posługiwanie się innym językiem może dać ci spokój od codziennego zgiełku i pozwolić odświeżyć się następnego dnia.

Bo tam jest. Naucz się nowego języka, ponieważ chcesz.

Michael Brown
źródło
3
+1 JavaScript może być funkcjonalny, ale z pewnością wygląda na to, że OP może pominąć kilka paradygmatów ze swojego zestawu narzędzi. Większe doświadczenie z językami funkcjonalnymi zapewni głębszy wgląd w ich istniejące języki, np. Szablony C ++
jk.
+1 za Utrzymanie świeżości, naprawdę fajnie jest pracować nad czymś innym
Mona
Chciałbym zaznaczyć, że optymalizacje wywołania ogona nie mają nic wspólnego z tym, czy język jest (czysty) funkcjonalny, czy nie, języki imperatywne skompilowane do działania w 64-bitowym środowisku uruchomieniowym .NET mogą na przykład uzyskać bezpłatną optymalizację wywołania ogona .
Blindy,
1
LOL, tak, to nie jest to, co czyni Erlang czystym językiem funkcjonalnym, ale całkowita zmiana perspektywy. W językach imperatywnych zachęcamy do unikania rekurencji we wszystkich przypadkach z wyjątkiem najbardziej trywialnych, a rekurencja języków funkcjonalnych jest sposobem na życie. Dopasowywanie wzorców w przeciwieństwie do if / else lub switch / case są również całkiem fajne.
Michael Brown
2
Spróbuj zastosować silnię w Erlangu za pomocą rekurencji i obserwuj, jak szczęka uderza o podłogę, gdy 20000! zwraca w ciągu 5 sekund (brak przepełnienia stosu w witrynie). To jeden z najsilniejszych argumentów przemawiających za nauką funkcjonalnego języka, jaki kiedykolwiek widziałem. Nigdy nie myślałem, że może być tak wydajny.
Olegs Jeremejevs
37

Myślimy słowami. Język, którego używamy, wpływa na sposób, w jaki to robimy. Interesujący jest przypadek dotyczący języka Pirahã - osoby posługujące się tym językiem nie mogą traktować czegoś jak pozornie „prostego” lub „intuicyjnego” jak liczby, ponieważ w języku, w którym je wychowano, nie ma słów na „określone ilości” (nawet „jednego” " i wiele").

W przypadku języków programowania jest to samo. Nowy język programowania może „otworzyć” umysł na niektóre aspekty programowania.

Biorąc pod uwagę twoje obecne zaplecze programistyczne, polecam nauczyć się funkcjonalnego języka, takiego jak Erlang lub Scala. Wreszcie, Clojure jest również bardzo solidnym językiem.

Jeśli chcesz poczuć się trochę bardziej jak w domu, wypróbuj potężny język skryptowy, taki jak Python lub Ruby.

egarcia
źródło
22
+1. „Nie warto znać języka, który nie wpływa na sposób myślenia o programowaniu”. - Alan Perlis
ruakh
2
Odrzucam założenie, że „Myślimy słowami”, ponieważ zaprzecza możliwości, że każdy (lub cokolwiek) bez słów może myśleć. Ale słowa niezwykle przydatne do etykietowania pojęć (i dlatego pomagają je rozróżnić). My przeważnie zrobić z naszą wyższą myślenia (dużo) zaangażowanie ze słów, ponieważ jest skuteczny. Co jest bardziej jednoznacznym stwierdzeniem, ale myślę, że bliżej prawdy. Zabawne, że nie mogę odrzucić użycia słów bez użycia słów…
Donal Fellows
@DonalFellows: Myślę, że mamy pewne „procesy mentalne”, których nie można wyrazić słowami. Ale nie nazywam tych „myśli”, ale „odczuwanie”, „refleks”, „intuicje” itp. Myślę, że właściwa myśl musi być możliwa do wyrażenia w kategoriach jakiegoś języka. Więc dla mnie coś, co nie ma języka, może żyć, przetwarzać, reagować, czuć ... ale nie myśleć. Ale jest to przekonanie oparte na intuicji, a nie na prawdziwych dowodach. A także trochę nie na temat, naprawdę :)
egarcia
Absolutnie się zgadzam, nauka języków tylko dlatego, że są nowym fajnym językiem programowania, nie ma sensu. Powinieneś trzymać się bardzo różnych i starać się nie obejmować zbyt wielu z nich. Bycie dobrym w czymś zajmuje sporo czasu (prawdopodobnie ponad 10 lat), nie ma znaczenia, czy gra na instrumencie muzycznym, gotuje czy programuje.
Mister Smith
2
@evilcandybag: Tak się składa, że ​​faktycznie mogę zademonstrować źródło: sciencemag.org/content/306/5695/496 , sciencemag.org/content/suppl/2004/10/15/1094492.DC1/… (PDF).
ruakh
26

Nie tylko chcesz uczyć się nowych języków, ale także języków, które są inne niż te, które już znasz. Jeśli wiesz, że nauka języka C # w rzeczywistości nie stanowi dla ciebie wyzwania, są one dość podobne. Idealnie powinieneś wybrać język, który bardzo różni się od tego, co wiesz. Jeśli znasz Java, JavaScript i Objective-C, potrzebujesz czegoś zupełnie innego

Jak na przykład:

Ruby to zabawny, słabo napisany język OO

Prolog Logiczny język programowania jest zupełnie inny

Współbieżność i tolerancja błędów Erlanga wypadły bardzo dobrze

Schemat Idź przeczytaj SICP i osiągnij oświecenie

Haskell Jeden z najpotężniejszych systemów typu na świecie, jeśli się skompiluje, prawdopodobnie będzie działał, a także powstrzyma cię przed popełnianiem różnego rodzaju dziwnych błędów i wiele więcej.

Lub po prostu wybierz siedem języków w ciągu siedmiu tygodni, co zrobi to, co mówi tytuł.

Zachary K.
źródło
2
+1! Ćwiczenie, które teraz wykonuję, polega na wdrożeniu tego samego algorytmu (sortowanie scalone) w różnych językach: to naprawdę daje mi poczucie, jak wiele jest sposobów wyrażenia tego samego obliczenia. Mam już uruchomione wersje C, C ++, Pascal, Java, Scala i Haskell. Zbliżają się Python, Ruby, Modula2, Scheme. Uważam, że możesz się wiele nauczyć, patrząc na różne języki programowania! Robiąc jedną rzecz w jednym języku, mogę uzyskać wiele pomysłów, jak lepiej ją zaimplementować w innym języku.
Giorgio
3
Lubię to, z wyjątkiem tego, jak opisujesz Haskella. Nadal możesz pisać niewłaściwy kod, który się kompiluje. (Poprawność typu nie jest jedynym wymogiem dla ogólnej poprawności). Powodem nauki Haskella jest to, że jest on bardzo podobny do matematyki i ma leniwy model oceny; powinno to podważyć wyobrażenia większości programistów o tym, o co chodzi w programowaniu.
Donal Fellows
Myślę, że powinien spróbować Prologu. Kiedy po raz pierwszy się tego nauczyłem, byłem zdumiony. Jak możesz to robić, pisząc tylko kilka znaków.
użytkownik
3
@DonalFellows z mojego doświadczenia, jeśli masz typy bezpośrednio w Haskell, reszta programu ma tendencję do pisania.
tobyodavies
1
„Ruby to zabawny słabo napisany język OO”: Czy Ruby jest naprawdę słabo lub raczej dynamicznie?
Giorgio
15

Twoje pytanie jest tak wiodące, że każe mi zadać następujące pytanie:

Jeśli jesteś programistą z zawodu, dlaczego na świecie nie chcesz nauczyć się czegoś nowego, aby wzbogacić swoje doświadczenie zawodowe?

Twoje pytanie przypomina mi postawę studenta, który kiedyś miałem. Rok lub dwa przed rokiem Y2K prowadziłem zajęcia Cobol (jako fakultatywne), na wniosek dyrektora ds. Usług karier na uniwersytecie, w którym prowadziłem wykłady. Miał tak wiele firm, które podchodziły do ​​niego z ofertami pracy dla programistów Cobola, że ​​myślał, że wyrządzimy naszym studentom szkodę, nie dając im możliwości uczenia się umiejętności i dodawania do ich zestawu umiejętności.

Miałem ucznia, który wziął klasę jako swoją ostatnią fakultatywną klasę na zakończenie studiów . W tym czasie pracował również jako programista C. Uczęszczał na lekcje Cobola, ponieważ nie miał innych wyborów i chciał zdobyć stopień naukowy. Więc przyszedł do klasy z chipem na ramieniu.

Znam już C i używam go profesjonalnie, więc nie wiem, dlaczego na świecie ktoś chciałby, a nawet musiałby uczyć się Cobola.

Rzuciłem mu więc wyzwanie, aby napisał program do odczytu danych z pliku o określonym formacie dla każdego rekordu danych wejściowych (tj. Ile znaków każde pole zajęło w linii, które to pole było pierwsze, drugie, trzecie itd. .)

Miał napisać swój program w C, co zrobił, i pokazał mi swój program. W tym samym czasie pokazałem mu moją wersję programu Cobol.

Potem rzuciłem mu piłkę krzywą:

Załóżmy, że użytkownik końcowy otrzymuje dane z innego miejsca. To są te same pola w każdym rekordzie, ale kolejność i liczba znaków na pole jest inna. Pokaż, co musiałbyś zmienić w swoim programie, aby działał z nowym formatem danych.

Cały dzień poświęcił na stworzenie nowej wersji programu, która działałaby w nowym formacie danych. Obejmowało to zmianę co najmniej 20 lub 30 linii kodu oraz modyfikację kilku funkcji i modułów.

Potem pokazałem mu zmiany, które musiałem wprowadzić w moim programie Cobol. Zmodyfikowałem klauzulę obrazkową, aby odzwierciedlić nowy format danych.

Nie jestem pewien, czy całkowicie zrozumiał lekcję tego ćwiczenia, ale przynajmniej przestał narzekać na resztę semestru.

Tak więc - w odpowiedzi na twoje pytanie: powinieneś uczyć się nowych języków, ponieważ chcesz się UCZYĆ. A jeśli nie chcesz się uczyć - więcej mocy dla ciebie ... (Po prostu nie jestem pewien, czy zatrudniłbym cię z takim nastawieniem)

Zeke Hansell
źródło
6
Chociaż twoje intencje były dobre, gdybym był tym studentem, po prostu pomyślałbym, że jedynym powodem, dla którego twoją aplikację łatwo było zmienić, było to, że wiedziałeś o ewentualnych zmianach wymagań. Gdyby program napisano w języku C z taką samą wiedzą, konieczne byłoby wprowadzenie minimalnych zmian.
hspain
Miałem współpracownika o podobnym nastawieniu: „C i PHP zarabiają mi pieniądze. Dlaczego mam marnować czas na naukę innego języka?” On już tam nie pracuje.
greyfade
3
wszystkie wymagania zmieniają się wcześniej czy później! Właśnie o to chodzi.
Zachary K
@hspain - właściwie ze względu na cały punkt tego ćwiczenia jest to, że Cobol traktuje specyfikacje I / O jako część programu pierwszego rzędu, a nie coś, co dzieje się w bardziej swobodny sposób w oparciu o sposób pisania i zamawiania Instrukcje I / O w C. Aby powtórzyć komentarz Zachary'ego K, faktem jest, że wymagania się zmieniają. - Tak, możesz zbudować program w C w taki sposób, aby był mniej kruchy, gdy zmieniają się takie wymagania, jak we / wy, ale wymaga to myślenia o programie w zupełnie inny sposób niż zwykle podczas pisania programu w C.
Zeke Hansell
Właściwie nie wiedziałem tego o kobolu. Któregoś dnia będę musiał rzucić okiem
Zachary K,
12

Istnieje kilka powodów, dla których nauka nowego języka może być warta inwestycji w czasie:

  1. Zwiększ rozmiar swojego zestawu narzędzi - nauka nowego języka może zapewnić dodatkowe ścieżki rozwiązywania problemów technicznych. Możliwość nowych narzędzi może zapewnić lepszy wybór języka / platformy do rozwiązywania określonych problemów niż narzędzia / języki, które wcześniej znano. Uproszczonym przykładem może być programista, który zna tylko C. Nauka języka skryptowego otwiera przed nim inne możliwości - w zakresie wdrażania, konfiguracji środowiska itp.
  2. Uzyskaj dostęp do nowej platformy - doskonałym przykładem może być Cel C - jeśli ktoś chce się rozwijać na iOS, nauka tego języka jest prawie obowiązkowa.
  3. Naucz się nowych paradygmatów - niektóre języki mogą mieć lepszy dostęp do nowszych paradygmatów. Na przykładzie C może być trudno opracować usługi sieciowe w standardowym ANSI C. Jednak nauka programowania w .NET, Java, PHP lub innych nowych językach może przyspieszyć rozwój usług internetowych.

Nauka nowych języków może przynieść natychmiastowe korzyści, jak już zauważyłeś, w „szybkich i brudnych” rozwiązaniach. Jednak te natychmiastowe rozwiązania mogą skłonić programistę do zbadania i głębszego zapoznania się z architekturą związaną z nowym językiem w celu „prawidłowego” nauczenia się go. Te ćwiczenia szybkiego uczenia się można postrzegać jako inwestycję w badanie, czy nowy język jest wart dodatkowego czasu na szkolenie.

JW8
źródło
11

Jednym słowem: zbywalność .

Otwierasz swoje perspektywy zatrudnienia, kiedy możesz pokazać, że masz zdolność przystosowywania się i uczenia się nowych rzeczy. Jasne, możesz pisać aplikacje w jednym języku, w którym naprawdę się biegłeś, ale co się stanie, gdy dowiesz się, że twój ulubiony język staje się nieistotny dla branży, w której pracujesz. Właściwie pamiętam czas, kiedy do pisania własnych usług internetowych od podstaw w C lub C ++, obecnie używamy narzędzi, które wykonują dla nas całą „webbiness” (Think Rails itp.).

Chodzi o to, że kończysz jak aktorzy, którzy robią seriale telewizyjne, a potem nie mogą łatwo przejść do niczego innego, ponieważ są zawsze postrzegani jako ich pierwotna postać. „Kto na ziemi chce, żeby kapitanem Kirkiem był Indiana Jones? !!”. To samo dotyczy programistów, którzy kiedykolwiek korzystali tylko z jednego produktu. Jasne, poznasz to jak nikt inny, ale to nie pomoże ci, gdy będziesz traktowany jak boks jako Fortran, który nie może przejść do pracy z C #.

Jeśli chcesz mieć możliwość łatwego przenoszenia pracy i utrzymywania otwartych opcji, musisz poszerzyć swoje doświadczenie. Pracuj nad wieloma różnymi projektami w wielu różnych językach, najlepiej na co najmniej 2 lub więcej platformach, i utrzymuj się na rynku, by być czymś więcej niż tylko tym, czym jesteś dzisiaj.

Oczywiście istnieje wiele innych powodów, aby uczyć się nowego języka, czasem nawet po prostu do cholery. Otwiera umysł na inne możliwości, więc kiedy szef podchodzi do ciebie i mówi „czy możemy coś zrobić”, możesz powiedzieć tak, korzystając z dostępnych narzędzi.

S.Robins
źródło
8

Na tym etapie swojej kariery powinieneś nauczyć się nowych języków, jeśli uważasz, że uczynią cię lepszym programistą.

Większość wymienionych języków (Java / C / C ++ / JavaScript / Objective-C) to konwencjonalne OO / imperatyw. Uczenie się jeszcze jednego języka OO / imperatywnego prawdopodobnie nie nauczy Cię więcej o tego rodzaju programowaniu. Jeśli nie masz szczególnego zainteresowania, nie ma sensu uczyć się smaku miesiąca na specie.

Jestem również skłonny do sceptycznego nastawienia do twierdzeń o zwiększeniu produktywności rzędu wielkości. Warto jednak sprawdzić okazjonalny, wysokowydajny język, aby sprawdzić, czy ci się podoba.

Najlepszym powodem do nauki nowego języka jest nauka umiejętności ogólnego zastosowania. W tym celu zaleciłbym głębokie zanurzenie w funkcjonalnym języku (Haskell lub jeden z Lisps) z jednej strony, a także kod asemblera i architekturę systemów (x86 lub ARM) z drugiej.

Programowanie funkcjonalne złamie ci mózg i poprawi umysł, podczas gdy uczenie się architektury maszyny poprawi twoje możliwości debugowania i optymalizacji, nawet jeśli nigdy nie napiszesz innej linii montażu.

5 obrotów
źródło
6

Każdy z nas decyduje, nad czym chcemy pracować, więc ...

  1. uczysz się, bo chcesz
  2. uczysz się tego, ponieważ potrzebujesz go do pracy, którą chcesz

Jeśli nie chcesz uczyć się PHP, nikt cię nie zmusza i jest mnóstwo obszarów, w których możesz programować, nawet nie wiedząc, jak napisać PHP.

Wiele osób patrzy na rynek pracy, aby zobaczyć, gdzie znajdują się gorące obszary i skoczyć na te technologie. Wiele osób uczy się jednego języka i trzyma się go, a 20 lat później zostają starszymi inżynierami utrzymania ruchu. A potem masz wielu ludzi, którzy są gdzieś pomiędzy tymi dwoma skrajnościami.

Ostatecznie chodzi o to, gdzie chcesz być.

DXM
źródło
W twoim opisie brzmi to trochę za czarno-biało. „Lejki technologiczne” i starsi inżynierowie konserwacji to dwie skrajności IMHO, przy czym większość z nas siedzi gdzieś pośrodku. Ponadto, niektóre „lejki technologiczne” są zbyt szalone na temat najnowszych, błyszczących rzeczy, aby właściwie nauczyć się jakiejkolwiek technologii (co zajęłoby więcej czasu niż jest w stanie zainwestować w jakąkolwiek pojedynczą technologię), więc mogą nigdy nie stworzyć solidnych, długoterminowych rozwiązań na problemy.
Péter Török
1
@ PéterTörök: Edytowałem moją odpowiedź. Wskazywałam skalę, ale byłam zbyt leniwa, żeby przeliterować. Masz rację, to ciągłe spektrum.
DXM
5

Najlepszy argument, jaki znam, to to, że poszerza twoją perspektywę na to, na ile różnych sposobów można rozwiązać problem, lub jakąś logikę. Znajomość języków Java i C ++ daje dobry obraz zarówno natywnych, jak i wirtualnych dziedzin, ale można odkryć znacznie więcej „stopni swobody”.

Mam około 15 lat doświadczenia w C ++, 5 w Javie. Jest wiele języków, których się nauczyłem i które pozostawiłem (PHP, Pascal, montaż dla wielu różnych procesorów, między innymi) i mogę powiedzieć na pewno, że nawet te, których już nie używam, pozostawiły znaczący ślad na tym, jak myślę o problemie . Ponadto: nawet jeśli chcesz trzymać się, powiedzmy, Java, dla danego projektu, będziesz musiał znać alternatywę dla przedstawienia dobrych kontrargumentów swoim zwolennikom.

Mimo to nauczyłem się Pythona w tym roku i byłem zachwycony, jak elegancko można zrobić pewne rzeczy. Tak bardzo, że postanowiłem przekonwertować garść serwletów REST, które napisałem, z Javy na Python. Zalety w utrzymywaniu kodu były dość znaczące. Z pewnością pozostawił ślad na moim sposobie robienia rzeczy, nie tylko dlatego, że teraz wybieram Pythona do niektórych zadań, ale także dlatego, że mogę przyjąć podobne zasady projektowania przy kodowaniu w C ++ i Javie.

To powiedziawszy, nie sądzę, że powinieneś uczyć się wielu różnych języków przez cały czas, tylko ze względu na to. Zajmuje to sporo czasu, a „zakwaterowanie”, które musisz sobie wyobrazić, aby mogły one współistnieć z innymi, których już znasz, również wymaga czasu i wysiłku. Postanawiam uczyć się języka tylko wtedy, gdy jest wystarczająco dojrzały, ma dobrą bazę programistów i oferuje znacznie inne wyniki niż inne, które znam lub planuję się uczyć. Kiedy na przykład postanowiłem nauczyć się Pythona, rozważałem także Ruby i Perla, a później odrzuciłem je - przynajmniej na najbliższą przyszłość.

Fabio Ceconello
źródło
5

Ludzie uczą się nowych języków ...

  • poszerzać swoją wiedzę. Jeśli wiesz więcej, poczujesz się lepiej i będziesz bardziej pewny siebie.
    Zaufanie = niesamowity kod!
  • mieć większy zestaw narzędzi. Powiedzmy, że musisz stworzyć aplikację. Jeśli znasz tylko Javę, zrobisz program w Javie. Ale jeśli znasz Java, Python, Scheme i Lisp, prawdopodobnie wybierzesz najlepsze narzędzie do tego zadania.
  • dostać pracę. Zmierz się z tym. Jeśli znasz więcej języków, masz więcej możliwości pracy. To dość oczywiste.
  • zostań lepszym wszechstronnym programistą. Jeśli znasz składnię Perla, wiesz, że może to być trochę szalone. Pisząc długie programy w Perlu, jesteś zasadniczo zmuszony do przestrzegania najlepszych praktyk, w przeciwnym razie nie będziesz szczęśliwym obozowiczem. Ponieważ znasz najlepsze praktyki Perla, może to pomóc Ci napisać lepszy kod PHP (w taki czy inny sposób).

Jak widać, istnieje wiele powodów, aby uczyć się nowego języka. Moja rada dla ciebie (i mój jedyny oryginalny cytat, który moim zdaniem jest dobry):

Często pisz kod; Dobrze pisz kod; Napisz kod w Scheme, PHP, Java, Python, Lisp, Perl, C, C ++, C #, Visual Basic, Ruby ...

Dynamiczny
źródło
1
@Nupul: A przynajmniej wydaje mi się, że cytat tak wygląda ...
Dynamiczny
5

Zgadzam się z większością już opublikowanych odpowiedzi. Aby do nich dołączyć, sprawdź statystyki zebrane w ankiecie dotyczącej przepełnienia stosu w 2011 r. Istnieje bardzo wysoka korelacja między liczbą znanych języków a zarobionymi pieniędzmi. Nie mogą być bezpośrednio związane ze sobą, ale warto o tym pomyśleć.

Ludzie, którzy uczą się więcej języków, zwykle zarabiają więcej pieniędzy.

http://blog.stackoverflow.com/2012/02/survey-results/

hspain
źródło
4

Alfred North Whitehead napisał świetny esej zatytułowany „ Znaczenie dobrej notacji

Warto zauważyć, jak ważny dla rozwoju nauki może być skromnie wyglądający symbol. Może oznaczać stanowczą prezentację pomysłu, często bardzo subtelną ideę, a jego istnienie ułatwia ukazanie relacji tego pomysłu do wszystkich złożonych ciągów pomysłów, w których występuje.

Język programowania jest formą zapisu. Potrafię kodować OO w C; tak właśnie zaczął Stroustrup od C ++ - jako serii makr C prekompilatora. Jednak pisanie kodu OO w Javie, C ++ lub C # jest znacznie łatwiejsze i szybsze, ponieważ zawierają one prymitywy językowe, które łatwiej obsługują OO.

Wszystkie podane do tej pory powody uczenia się nowych języków są ważne, ale myślę, że najlepszym powodem do nauki nowego języka jest to, że nowa notacja może pozwolić ci myśleć w nowy sposób, co może pomóc w rozwiązaniu nowych problemów.

Onorio Catenacci
źródło
2

Większość lub wszystkie powyższe odpowiedzi dotyczą zawodu. Programowanie. Chcę przypomnieć, że zanim jesteśmy programistami - jesteśmy ludźmi.

Jednym z dobrych powodów, dla których nie chcesz uczyć się nowego języka programowania, jest pozwolenie sobie na odpoczynek lub robienie innych rzeczy poza programowaniem.

Z mojego doświadczenia, pracy w rolnictwie i pracy z drewnem, dużo myślałem o programowaniu - więcej niż uczenie się nowego języka. tzn. aby być dobrym programistą, najpierw musisz być dobrym człowiekiem. Jeśli nie masz dużego doświadczenia życiowego, oprócz programowania, twój pomysł na programowanie może być całkowicie błędny - nawet jeśli jesteś ekspertem.

Wiele pojęć związanych z programowaniem pochodzi bezpośrednio z codziennego życia: prostota, łatwość konserwacji, praktyczność, użyteczność, szybkość - a czasem powolność , modułowość itp .; są wszystkie koncepcje używane na przykład przez stolarza.

Wierzcie lub nie: osobiście wiele się nauczyłem o programowaniu, biorąc długie wakacje na zbieranie pomarańczy. Główną koncepcją, której się nauczyłem, była prostota. Od pracy jako budowniczy nauczyłem się innej koncepcji: zbuduj bazę tak dobrze, jak to możliwe - jeśli chcesz, aby ściany stały prosto.

Na koniec odpowiedź na twoje pytanie może brzmieć: weź urlop, dołącz do klasy taekwondo lub zajmij się ogrodem - wtedy twoje pytanie nie będzie Ci już przeszkadzać.

Shian
źródło
Chociaż mogę się z tobą zgodzić, dodam, że po tych wszystkich dobrych pomysłach na temat programowania podczas wykonywania innych czynności chciałbym nauczyć się języka programowania, w którym te pomysły są realizowane. Zatem IMO dwa aspekty (przerwa w programowaniu i nauka nowych języków programowania) nie wykluczają się (nie powinny).
Giorgio
To prawda, że ​​przerwa od programowania i nauka nowych języków programowania nie wyklucza się (nie powinna). Jednak w bardzo szybkim świecie, w którym żyjemy, ważne jest, aby pamiętać, że odpoczynek - może być bardziej produktywny niż ruch. Może to być przerwa na kawę - a nawet 1 rok przerwy.
Shian
-2

Wartość uczenia się nowego języka programowania jest w przybliżeniu odwrotnością liczby języków programowania, które już znasz.

Wynika to z faktu, że istnieje skończona liczba paradygmatów, a nauka nowego języka zwykle zapoznaje cię z co najmniej jednym lub dwoma, czyniąc cię bardziej doświadczonym i zdolnym jako programista. Niektórzy mogą wywrócić świat programowania do góry nogami. Ale kiedy uczysz się nowego języka z paradygmatami, które już znasz, znasz je i jesteś do nich przyzwyczajony.

David Kendal
źródło
-3

Jak większość z nich już napisała, mam dobrą wiedzę praktyczną na temat C. Ostatnio pracowałem nad pewnym problemem, dla którego musiałem sprawdzić krzyżowo wyniki; to było matematyczne. Więc jaki jest najszybszy sposób na uzyskanie odpowiedzi, sprawił, że sprawdziłem szybszy język programowania do nauczenia się.

I dowiedziałem się, że bc , język dowolnego kalkulatora precyzji, narzędzie prawie dostępne na każdej platformie Unix.

Nie myślałem o Pythonie, Perlu ani nic takiego, ale odkryłem, że to rozwiązało moje problemy w mgnieniu oka. Sprawdziłem to na silni (20000), którą zasugerował jeden z przyjaciół, i dało to wyniki w mgnieniu oka bez awarii.

Ważne jest tylko do tego stopnia, że ​​musisz znać nowy język, który obecnie ułatwi Ci pracę / problem.

Zdecydowanie, jeśli napiszę to w moim życiorysie, chyba nikogo to nie obchodzi, ale z mojej perspektywy rozwiązuje mój problem, zanim zaatakuję go w moim ulubionym języku „C”.

A także, jeśli zajdzie potrzeba nauki nowego języka, otrzymasz szansę z różnymi problemami i wieloma rozwiązaniami.

czar x
źródło
-8

Każdy może stworzyć nowy język; ale wydaje się, że nikt nie rozumie, że „lepiej” rzadko jest tym samym, co „o wiele lepiej, że koszty adopcji są faktycznie uzasadnione”. Efektem końcowym są setki różnych języków, w których nikt nie jest w stanie zrozumieć całego kodu źródłowego, a programiści muszą marnować około jednej czwartej swojego czasu na nieproduktywność z powodu różnic językowych / frameworkowych / bibliotecznych.

W idealnym świecie istniałby jeden język programowania niskiego poziomu (np. C), jeden „bezpieczny” język programowania wysokiego poziomu (np. Java) i jeden język skryptowy. Byłby też duży młot do niszczenia „Wieży programowania w Babel”, stworzony przez ludzi, którzy nie rozumieją zalet standaryzacji i kosztu „rezygnacji” i ciągłego przekwalifikowania całej branży IT.

Z makroekonomicznego punktu widzenia nie ma nic złego w uczeniu się nowego języka programowania jako hobby, ale używanie tego nowego języka programowania do czegokolwiek sprawia, że ​​stajesz się częścią problemu.

Brendan
źródło
4
Brzmi jak niepraktyczny ideał. Kto decyduje o tych standardowych językach i jak zdecydować, że warto zmienić język? Co powiesz na ryzyko utknięcia w gównianym języku tylko dlatego, że nikt nie chce spróbować niczego nowego? Wyobraź sobie, że zrobiliśmy to 10 lat temu - wszyscy mogą korzystać z C ++ i Java (a może VB)!
Brendan Long
3
Twoja koncepcja „idealnego świata” brzmi podejrzanie podobnie jak koncepcja Dziewiętnastu Osiemdziesięciu Czterech . W waszym gazecie nie można było nawet pomyśleć o rewolucyjnych pomysłach, takich jak „programowanie funkcjonalne” i „wnioskowanie o typie” oraz „polimorfizm pierwszej klasy” i „multimetody”, ponieważ nie byłoby sposobu, aby je wyrazić. Trzeba przyznać, że Orwell nie myślał o twoim pomyśle z młotem, ale gdyby tak było, jestem pewien, że
trafiłby
2
Oprócz powyższych punktów, bardzo niewiele „odpowiedzi” odnosi się do rzeczywistego pytania. Głosuj
user16764
3
W idealnym świecie odpowiedź na pytanie Nupala byłaby tylko jedna. Posiadanie tych wszystkich dodatkowych odpowiedzi po pierwszej przez osoby, które nie rozumieją zalet normalizacji, powoduje zamieszanie. Nie ma nic złego w tym, że nie zgadzasz się z odpowiedzią we własnym umyśle, ale opublikowanie dodatkowej odpowiedzi sprawia, że ​​jesteś częścią problemu.
benzado
1
Ograniczenie do tych języków nie zapobiegnie żadnemu z wymienionych problemów. Musiałem przepisywać aplikacje wiele razy ze względu na zmianę frameworków niż zmianę języków.
Fabio Ceconello