Jak poradzić sobie z potrzebą znajomości wielu języków programowania? [Zamknięte]


25

Jestem stosunkowo młodym programistą. Mam 23 lata i programuję zawodowo od około 5 lat.

Jako większość programistów zacząłem od C, dla zabawy nauczyłem się asemblera x86, a potem znalazłem C ++, który okazał się moją największą pasją w świecie programowania. Programowanie w C i C ++ wymusza naukę interfejsów API, bibliotek i frameworków specyficznych dla platformy, a wszystko to wymaga ciągłych badań i eksperymentów. Po pewnym czasie musiałem przejść do Java i C #, ponieważ zapotrzebowanie na mój region jest w zasadzie na te języki. Z tymi językami wkroczyłem w świat tworzenia stron internetowych, a następnie musiałem nauczyć się javascript. Tworzenie platformy .NET Framework było początkowo ekscytujące, ale ciągle czułem, że jestem związany przez Microsoft (i oczywiście .NET Framework odciągał mnie od Linuksa). Do tworzenia desktopów mogłem zrobić prawie wszystko, co zrobiłem z .NET przy użyciu C ++ z Qt, ale do tworzenia stron internetowych musiałem poszukać alternatywy. Szybko znalazłem Django, a następnie przystąpiłem do nauki języka Python, aby móc korzystać z Django. Obecnie uczę się programowania na iOS z Objective-C.

Do tej pory nauka wszystkich tych języków była bardzo łatwa (C ++ dobrze mnie wyszkolił), ale martwię się, że któregoś dnia nie będę w stanie ich wszystkich śledzić. Aby wyjaśnic. Jedynymi językami, których się nauczyłem, bo musiałem być C # i Java. Wszystkich innych nauczyłem się dla zabawy, ponieważ uwielbiam programować i uczyć się nowych rzeczy. Chciałbym też, aby moje umiejętności były ostre na komputerach, w sieci i na urządzeniach mobilnych.

Moje pytanie brzmi: w jaki sposób śledzisz wiele języków programowania? (Mam na myśli, śledź zmiany w tych językach i utrzymuj ostrość swoich umiejętności) i: Czy istnieje wystarczająco dużo języków programowania?


20
Jak śmiesz nawet myśleć o tym, że nie uczysz się więcej języków !?
Mateen Ulhaq,

9
„Za każdym razem, gdy uczę się czegoś nowego, wypycha mi z głowy kilka starych rzeczy. W tym czasie poszedłem na domowy kurs produkcji wina i zapomniałem, jak prowadzić”.
Dean Harding

1
Programowanie nie polega na opanowaniu składni języka X, programowanie polega na nauce programowania. Dowiedz się, jak wybrać odpowiedni język dla właściwego zadania, a następnie, kiedy już wybierzesz ten język, naucz się API i składni, a następnie rób to, co robisz w innym języku ... PROGRAM!
Chris

6
niektóre języki, których nigdy nie zapomnisz; inni, na których nie możesz się doczekać
Steven A. Lowe,

3
Jesteś głównie w OOP. Powinieneś poznać inne języki paradygmatu, takie jak język funkcjonalny Haskell, a następnie pomyśleć o śledzeniu.
Vigneshwaran

Odpowiedzi:


27

Osobiście uważam, że „śledzenie” języków to strata czasu. Zawsze dobrze jest wybierać nowe popularne języki, ale kiedy masz już popularny i dobrze ugruntowany język, taki jak C ++, Python itp., Nie powinieneś się martwić. Jeśli jesteś dobrym programistą, język to tylko zestaw słów kluczowych.

Istnieje tylko tak wiele istotnych paradygmatów; może stare psy nie mogą nauczyć się nowych sztuczek, ale tak naprawdę nie ma wielu nowych sztuczek. Jeśli martwisz się, że twój funkcjonalny / obiektowy / sterowany zdarzeniami / jakikolwiek język może nie trwać, naucz się innego paradygmatu; ale nie przejmuj się zbytnio dokładnym wyborem języka.

A co jeśli zapomnisz jedno lub dwa słowa kluczowe po pewnym okresie nieobecności w języku? Właśnie dlatego mamy Google.


2
Po prostu nie pozwól szefowi zobaczyć. :) Lub nieprogramista. Pomyślą, że programowanie jest tak łatwe i dlaczego programista otrzyma zapłatę za tak łatwą pracę.
Mateen Ulhaq,

4
Myślę, że to prawda, jeśli trzymasz się określonego paradygmatu. Np. OO / Tryb rozkazujący. Rozkłada się, jeśli spojrzysz na język, który nie jest konieczny.
Richard

@Richard: Wiem , że nie masz zamiaru sugerować, że OO koniecznie oznacza konieczność, prawda?
Frank Shearar,

@Frank: Tak, a nie bardzo często używana grupa języków (Java, C #, C ++), które są…
Richard

1
„(a) język to tylko zestaw słów kluczowych” - nie zgadzam się. Każda platforma ma lokalne, idiomatyczne sposoby robienia rzeczy. Bycie dobrym programistą na platformie X wymaga znacznie więcej niż tylko składni. Na przykład świetny kod JavaScript się nie stanie, jeśli założę, że mój sposób myślenia .NET OO jest wszystkim, czego potrzebuję.
Bevan

54

Martwię się, że któregoś dnia nie będę w stanie ich wszystkich śledzić.

Po 30 latach powiem to.

Tak, tracisz orientację.

Więc?

Dlatego piszą podręczniki.


14

Realne korzyści z nauki wielu języków jest różne paradygmaty i modele i sposoby myślenia przyznają ci.

Znajomość Javy i jej pojedynczego dziedziczenia powinna ukształtować twój pogląd na C ++ i jego wielokrotne dziedziczenie. Znajomość Javy i jej GC powinna ukształtować twój pogląd na C ++ i jego pamięć zarządzaną przez użytkownika. Twoja wiedza na temat C ++ i jego szablonów powinna ukształtować twój pogląd na Javę i jej ogólne cechy. Wszystkie te relacje działają oczywiście w obie strony.

Jeśli nigdy nie pisałeś w języku funkcjonalnym, nie docenisz tego, co <algorithm>stara się biblioteka C ++ i czego brakuje, ponieważ nie ma pierwszorzędnych funkcji obywatelskich (przynajmniej przed C ++ 11). Jeśli nigdy nie pisałeś w języku dynamicznym, nie zdajesz sobie sprawy z granic możliwości pisania statycznego. Jeśli nigdy nie pisałeś w języku bez zmiennego stanu, nie zrozumiesz kar, jakie nakłada na ciebie ten stan.

Nauka innych języków jest dobra, ponieważ pozwala lepiej zrozumieć istniejące języki. Pod tym względem nie musisz się martwić o aktualizację, ponieważ pojęcia języka nie zmieniają się szybko - lub wcale.


8
+1 Nie chodzi tylko o naukę wielu języków (nauka języków to łatwa część). Uczenie się różne paradygmaty jest to, co jest ważne. Osobiście uważam, że na poziomie uniwersyteckim studenci powinni być narażeni na te różne paradygmaty, to smutny stan rzeczy, gdy w dzisiejszych czasach jest tak wiele uniwersytetów „McJava (tm)” (Uwaga, nie mówię, że Java jest zła na powiedzenie, przeczytaj pełny kontekst.). :(
Darknight

8

Moje pytanie brzmi: w jaki sposób śledzisz wiele języków programowania? (Mam na myśli, śledź zmiany w tych językach i zachowuj swoje umiejętności)

Napisz kod. Jeśli chcesz być na bieżąco z aktualizacjami języka, po prostu pisz kod.

Czy istnieje coś takiego jak wystarczająca liczba języków programowania?

Uczenie się więcej niż jednego języka pomaga uzyskać perspektywę na inne języki, których inaczej nie uzyskałbyś. Uczenie się wielu języków daje szerokie ogólne spojrzenie na obliczenia w ogóle.

Ale nie można nauczyć się każdego języka i nie wszystkie języki mają wartość - ani dla ciebie, ani dla twojej pracy. Języki ezoteryczne nie są warte nauki, z wyjątkiem ich wartości intelektualnej, ponieważ nie mają praktycznego zastosowania.

Więc nie, nie ma czegoś takiego jak „wystarczająco”. Ale z pewnością istnieje coś takiego jak „nie warte kłopotu”.


4

Martw się o nadążanie za językami, które według ciebie będą używane lub których obecnie używasz. Nauka nowych języków jest pomocna, ale nie ma powodu, aby uczyć się o mniejszych zmianach w języku, jeśli nigdy więcej go nie użyjesz.


4

Nigdy nie przestawaj się uczyć; ale zdaj sobie sprawę, że nigdy nie wiesz wszystkiego o wszystkim. Zawsze będziesz mieć środowiska, w których będziesz biegły. Nie martw się, po prostu dobrze się baw.


To prawda, nigdy nie przestawaj się uczyć, ale FOCUS. Uczenie się wszystkiego jest jak bieganie jak kurczak ** bezgłowy kurczak, a na końcu jesteś dobry w NIC.
Sławek

@ Sławek: „w końcu jesteś dobry w NIC”. Prawie. Lepsza wersja może być: W końcu rzeczy, w których byłeś dobry, zostały zastąpione przez nową technologię, o której nie masz pojęcia.
S.Lott,

3

Masz wystarczająco dużo języków programowania, kiedy czujesz, że jesteś skończony. Znajomość wielu języków jest świetna, ale nie wiem, czy znajomość 12, gdy używasz 2 w pracy, zapewnia więcej niż kontekstowe korzyści. Nie ma nic złego w znajomości większej liczby języków, ale przez resztę czasu prawdopodobnie lepiej jest poprawić swoją znajomość języków i dyscyplin, których potrzebujesz najczęściej. Podobnie jak języki mówione, chcesz być bardziej biegły w tych, które zapewniają wartość w twoim życiu.

Pamiętam kilku programistów, którzy chwalili się, że znają wiele języków, ale w każdym z nich pisali kod w ten sam sposób, i niekoniecznie jest to dobra rzecz.

W miarę starzenia się czas pomoże ci podjąć decyzję (mam znacznie mniej czasu na naukę na boku niż przed ślubem, miałam dzieci, zostałam niezależnym pisarzem, zaczęłam zajmować się problemami zawodowymi i moja pamięć zaczęła iść na południe. Doh!).


3

Nauczyłem się wielu języków w ciągu ostatnich 25 lat. Po pewnym czasie niektóre stają się mniej przydatne i zostają zapomniane (Perl). Nie mówmy nawet o montażu 6502, Apple BASIC, Lisp, Prolog, Pascal, SPAN, FORTRAN ...

Inne języki wyblakły, po 10 latach musiałem ponownie się uczyć (Python). Nie było sensu nadążać za Pythonem, nie trzeba długo czekać na szybkość - Google / SO jest twoim przyjacielem.

W końcu język jest tylko narzędziem. Używasz go do danego zadania. Umiejętność polega na tym, aby wiedzieć, kiedy użyć. Szczerze mówiąc, kiedy zacząłem używać C ++, nigdy więcej nie chciałem kodować C. Kiedy nauczyłem się C #, nigdy więcej nie chciałem robić C ++.


3
doniesienia o śmierci Perla są bardzo przesadzone.
Philip Potter

To nic osobistego przeciwko Perlowi. Pracowałem na Uniksie, więc Perl był moją ulubioną bronią. Zbudowałem z niego całkiem cholernie duże aplikacje technologiczne. Potem przeniosłem się do systemu Windows. Teraz wróciłem, ale aplikacja, którą tworzę, jest w języku Python, więc używanie Perla i Pythona wydaje się bez sensu.
dave

1

Moim zdaniem programowanie to nie tylko język, którego używasz. Programowanie jest sposobem myślenia. Musisz być dobrym analitykiem, aby pisać dobre oprogramowanie, język programowania pomoże tylko zbudować oprogramowanie. Oczywiście, każdy język ma swoje wady lub zalety, ale aby zbudować dobre oprogramowanie, trzeba myśleć jako programista. Ludzie, którzy nie myślą jak programiści, nie będą budować świetnego oprogramowania, bez względu na to, jak dobry jest język.

Zawsze robię porównanie z kimś, kto buduje dom, nie dba o swój młot, dopóki ma taki, który może zbudować dom. Być może będzie musiał zapoznać się z młotem (na przykład ciężarem), ale gdy tylko zapozna się z narzędziem, może zbudować fantastyczny dom. Przyzwyczajenie się do narzędzia nie jest trudne, ponieważ większość „wersji” narzędzia jest dość podobna (dotyczy to również młotków, ale także języków programowania).

Podczas nauki korzystaliśmy z Java (wcześniej korzystałem z ASP i VB5), ale po ukończeniu studiów (około 5 ~ 6 lat temu) nauczyłem się używać C # (i Javascript), zmiana pracy „zmusiła” mnie do przejścia na VB.NET, następne zadanie pozwoliło mi na użycie obu języków .NET (co zrobiłem), a nawet „pozwoliło” na ponowne użycie Javy (dla niektórych starszych narzędzi, których używali). Obecnie pracuję z X ++ (język Microsoft Dynamics AX), ale nadal pracuję nad programowaniem w .NET. To tylko język, z którym pracuję w codziennej pracy, lubię też badać nowe języki, takie jak F #, Ruby itp. Nauka tych nowych języków zajęła tylko kilka dni (tylko po to, aby zrozumieć składnię), a reszta czasu, kiedy po prostu bawisz się językiem i uczysz się stopniowo.

Jest tak wiele języków, ale zwykle koncentruję się tylko na językach, które są naprawdę różne (jak F #). Uważam, że nauka nowych języków jest interesująca i zabawna, więc na razie dobrze, uczenie się nowego języka jest dość łatwe (przynajmniej jeśli myśl jest taka sama, C #, VB, Java są jednakowe, ale na przykład F # jest zupełnie inna) i nie martwię się zbytnio.


1

rozpocząłem karierę 5 lat temu na vb6, przeniosłem się na php, potem na Javę, a potem na .net. obecnie przez ostatni rok pracowałem nad asp.net mvc2 i próbuję swoich sił również na mvc3

sekretem jest to, że nigdy nie należy się przedawniać, że nie można opanować wszystkiego na świecie, więc martwienie się o to nie wchodzi w grę


1

Myślę, że to pytanie dotyczące kariery. Dlatego musisz wziąć pod uwagę osoby, które cię zatrudniają, tylko jeśli znasz określony zestaw narzędzi. Może to dyskwalifikuje pracę, ale może nie. Więc ucz się nowych rzeczy powierzchownie. Ale dogłębnie ucz się trudnych rzeczy (matematyka, nowe paradygmaty programowania).

Dostosowanie się do korzystania z nowych narzędzi jest kompromisem. Branża IT jest pełna hipotez i musisz się przed nimi bronić. Zaczyna się od stwierdzenia: nie, nadal używam mojego starego edytora (emacs?). Ale od czasu do czasu musisz uczyć się nowych rzeczy. Z biegiem lat stają się coraz lepsze (3-4). Jeśli masz szansę nauczyć się nowych rzeczy w pracy przy prawdziwym projekcie pod ręką: nie wahaj się, bo będzie fajnie! Najlepszym sposobem na odróżnienie szumu od prawdziwych innowacji jest spojrzenie na ludzi, którzy ich używają. Lepiej oceniasz ludzi niż technologię :)


1

Sugerowałbym naukę języków z różnymi paradygmatami, takimi jak funkcjonalny, OO i logiczny, ponieważ są one tak różne.

Niekoniecznie sugerowałbym jednak naukę 3 języków funkcjonalnych lub 3 języków OO.

Może jesteś dobry w recytowaniu. Ale trudno mi się uczyć na nowo podobnych rzeczy, które okazują się być prawie takie same, ale niezupełnie, szczególnie takie biblioteki, jak malowanie okien, wywoływanie baz danych, biblioteki kolekcji, w których trzeba pamiętać różne nazwy i konwencje, ale które zachowują się prawie tak samo. Czy to paintRect (xstart, ystart, xend, yend) czy (xstart, ystart, szerokość, wysokość)? Włączając tutaj „koniec”, a nie tam?

Ale niektórzy ludzie nie mają trudności z nauką tych rzeczy.

Sugerowałbym więc nauczenie się niektórych języków, ale nauczenie się kilku z nich dogłębnie może nauczyć cię więcej niż języka po języku tylko na pozór. Może nie 2 języki rocznie, ale co dwa lata jeden język.


0

Jestem trochę po przeciwnej stronie spektrum. Nienawidzę uczyć się wielu języków, ponieważ uczysz się prostych rzeczy i nigdy nie radzisz sobie z głębszymi problemami w ten sposób. Jednocześnie uczysz się złych praktyk z innych języków.

Kiedykolwiek widziałem hardcorowego programistę Java w C ++, bałagan czeka na wybuch ...

Problem polega na tym, że wszystkie języki mają swoje wady, w których abstrakcja zaczyna wyciekać lub grać przeciwko tobie. Możesz nauczyć się składni w ciągu 1 dnia, ale zajmie to 5 lat, aby wiedzieć, jak kodować skutecznie i bezbłędnie. Czy używasz at () lub []? Dlaczego Malloc sprawi, że w twoim długim procesie zabraknie pamięci?

A paradygmaty uczenia się są również ciekawą propozycją. Ponieważ używanie wytycznych Java w języku C lub wytycznych Perla w języku C # prawdopodobnie zamienia się w niesamowitą demonstrację sposobu pisania zaciemnionego kodu.

Uczenie się kilku nowych języków może pomóc ci poszerzyć horyzonty, ale nie powinny sprawić, że poczujesz się mądrzejszy, powinny sprawić, że poczujesz się głupszy z każdym nowym, którego się uczysz.


0

Ktoś inny zasugerował gdzieś, że „każdy powinien znać 3 języki”.

Zwykle się zgadzam. Powinieneś znać język skompilowany (C / C ++, C # itp.), Język interpretowany (Python, Ruby itp.) Oraz język przetwarzania tekstu (Perl, Awk itp.). Myślę też, że powinieneś znać język skryptowy powłoki (Bash, obecnie lub Windows Power Shell). Ta sama rada dotyczy zestawów narzędzi i interfejsów API.

Jedynym sposobem, aby nadążyć za językiem, który ewoluuje, jest jego użycie. Jeśli ograniczysz korzystanie z zestawu zwykłych języków do kilku, łatwiej będziesz używać ich wszystkich regularnie do rozwiązywania problemów, dzięki czemu będziesz w stanie nadążać za rozwojem każdego z nich.

Bądź na bieżąco z technologiami, z których korzystasz na co dzień, i pozostań tam. Nie ma nic złego w buszowaniu w innych obszarach zainteresowań, gdy masz czas. Zazwyczaj kompetentny programista nie musi długo uczyć się nowej technologii, mając wystarczającą motywację i blokując czas, aby z nią usiąść.

Nie ma potrzeby nadążać za każdą dostępną technologią ... będziesz w stanie dowolnie ją podkręcać, utrzymując te, których używasz najczęściej.


-5

Chłopaki, naprawdę - to smutne. Bez specjalizacji „nauczę się wszystkiego”. Przepraszam za to podejście, będziesz wiedział wszystko, ale twoje umiejętności będą tak niskie, że nikt nie zapłaci ci dobrze.

Przeprowadzono badania wskazujące, że potrzebujesz 10 lat treningu, aby być „dobrym” z czymkolwiek (programowanie, gra na gitarze, taniec itp.). I to prawda, potrzebujesz 5-10 lat pisania C ++ / python / etc. zdobyć umiejętności niezbędne do opracowania komercyjnego, dobrej jakości kodu.

A to bzdury na temat odniesień językowych? I gdzie są dobre nawyki programistyczne, które są różne dla każdego języka programowania. W którym dokumencie znajdziesz dobre praktyki zarządzania pamięcią i struktury danych dla praktyk bezpieczeństwa C lub Server Side?

Komputer stacjonarny, telefon komórkowy, serwer (!!!) - są to zupełnie inne środowiska. Ty decydujesz, czy chcesz „grać” przez całe życie, czy koncentrujesz się na jednej rzeczy i dostajesz przyzwoitą pracę. Prawdopodobnie ludzie powiedzą ci bzdury, że powinieneś znać każdy język na ziemi, ponieważ próbują zrobić to samo, aby poprawić swoją gównianą pracę. Ale zgadnij co, nigdy nie będą w stanie tego zrobić, nawet po przeczytaniu „referencji” Javy, bo do czego będą wtedy zdolni? Dokładnie NIC.

Tak - naucz się projektowania graficznego, pisania scenariuszy i flashowania, będziesz tego potrzebować! :) Nie wiem dokładnie, co jest nie tak, ale jeśli robisz jednocześnie klienta, serwer i telefon komórkowy - rzuć pracę i nie czekaj do jutra, bo musisz to zrobić teraz!

Moje pytanie brzmi: w jaki sposób śledzisz wiele języków programowania?

Twoim pytaniem powinno być, jak ich nie śledzić. Moja rada, rzuć pokemona i zrób coś dobrego.


1
Wiesz, że mam rację - kto zarabia więcej? Starszy inżynier Java w IBM lub „programmer-o-graphican-o-computerfixer-o” w lokalnej firmie zajmującej się tworzeniem stron internetowych? Cóż, znam dobrych grafików, którzy robią tylko grafikę i pobierają 10 000 USD za „głupi” projekt banerowy ... i niektórych facetów „wiem wszystko”, którzy robią głupie strony internetowe dla głupiego lokalnego biznesu za 150 USD (w tym robienie grafiki), naprawianie w międzyczasie komputery itp. Ponieważ wiedzą tak mało w tak wielu obszarach, że wszystko, co naprawdę mogą zrobić, to zainstalować motyw Wordpress lub sprawdzić, dlaczego msoffice nie działa.
Sławek

-1 za bycie bardziej rantem niż odpowiedzią i za pomylenie twoich osobistych doświadczeń ze światem. Chciałbym zobaczyć, do jakich „badań” masz na myśli. Powszechnie wiadomo, że rozwijanie wiedzy specjalistycznej w danej dziedzinie wymaga 10 000 godzin aktywnej praktyki. Zostało to spopularyzowane przez pisma Malcom Gladwella. Prawdopodobnie nie jest to zła zasada, ale nie jest to prawie fizyka. 10.000 godzin to pięć lat po 40 godzin tygodni i oczywiście wielu z nas poświęca znacznie dłuższe godziny na wczesne etapy naszej kariery.
Charles E. Grant

Nie, oni mają specjalizację. Ich specjalizacją jest programowanie. Języki programowania są po prostu narzędziami handlu, które można zebrać w razie potrzeby i wyrzucić, gdy nie są potrzebne. Dziesięć tysięcy godzin zostało spopularyzowane w książce Malcolma Gladwella. Ale zrozumiałeś, co mówił? Mówił, że geniusz muzyczny zajął na przykład 10 000 godzin. Nie twierdził, że gra na pianinie zajęła 10 000 godzin.
Antonio2011a,

Gdyby nikt nie nauczył się więcej niż jednego języka, wszyscy programowalibyśmy w asemblerze. Dzisiaj używam Groovy, Java, JavaScript, SQL, Ant i Selenium. Nie potrzebuję 7 osób w moim zespole. Potrzebuję ludzi, którzy mogą wybrać nową technologię i sprawić, by coś się wydarzyło.
kevin cline
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.