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?
źródło
Odpowiedzi:
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.
źródło
Po 30 latach powiem to.
Tak, tracisz orientację.
Więc?
Dlatego piszą podręczniki.
źródło
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.
źródło
Napisz kod. Jeśli chcesz być na bieżąco z aktualizacjami języka, po prostu pisz kod.
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”.
źródło
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.
źródło
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.
źródło
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!).
źródło
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 ++.
źródło
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.
źródło
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ę
źródło
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ę :)
źródło
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.
źródło
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.
źródło
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.
źródło
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!
Twoim pytaniem powinno być, jak ich nie śledzić. Moja rada, rzuć pokemona i zrób coś dobrego.
źródło