Jestem młodym programistą, który pewnego dnia chce pracować w terenie jako programista. Znam Java, VB.NET i C #. Chcę nauczyć się nowego języka (jako programista wiem, że warto poszerzyć to, co wiem - uczyć się języków, które sprawiają, że myślisz inaczej). Przejrzałem online, aby zobaczyć, jakie języki są popularne. Wszyscy znają C i C ++ (nawet ci mugole, którzy tak mało wiedzą o komputerach w ogóle), więc pomyślałem, że może powinienem naciskać na C.
C i C ++ są ładne, ale są stare. Rzeczy takie jak Haskell i Forth (itp. Itp.) Są stare i straciły popularność. Boję się nauki C (a nawet C ++) z tego samego powodu. Java jest również dość stara i działa wolno, ponieważ jest uruchamiana przez JVM i nie jest kompilowana do kodu natywnego.
Od dłuższego czasu jestem programistą Windows. Niedawno zacząłem używać Javy - ale tylko dlatego, że była bardziej wszechstronna i można ją było rozpowszechniać w innych miejscach. Problem polega na tym, że nie wygląda to na bardzo użyteczny język z następujących powodów:
- Najczęściej używany jest do aplikacji internetowych i aplikacji na telefony komórkowe (w szczególności Androida)
- Jeśli chodzi o rzeczywiste produkty z niego wykonane, jedyne, co przychodzi mi na myśl, to Netbeans, Eclipse (hurra do tworzenia i IDE z językiem, dla którego IDE jest - to jak tworzenie strony internetowej do pisania HTML / CSS / Javascript) i Minecraft co bywa zabawne, ale leniwe i dwubiegunowe, jeśli chodzi o specyfikację komputera. wsparcie.
- Poza tym jest używany do serwerów, ale do cholery - nie chcę tylko tworzyć / konfigurować serwerów .
Języki .NET są jednak miłe:
- Ludzie się śmieją, jeśli w poważnej rozmowie wspominam VB.NET lub C #.
- Nie jest wieloplatformowy, chyba że użyjesz MONO (który jest wciąż w fazie rozwoju i wymaga pewnych ulepszeń).
- Brakuje rzeczy niskiego poziomu, ponieważ podobnie jak Java z JVM, jest on uruchamiany / zarządzany przez CLR.
Moją pierwszą myślą było nauczenie się czegoś takiego jak C, a następnie wykorzystanie go do odskoczenia do C ++ (tylko po to, aby upewnić się, że będę dobrze rozumieć / bazować), ale jak powiedziałem wcześniej, z każdą minutą robi się coraz starszy.
W co spojrzałem
Fantom wygląda ładnie. To jak miły pośrednik między moimi dwoma ulubionymi językami, a nawet pozwala mi publikować między nimi zamiennie, ale w przeciwieństwie do tego, czego chcę, kompiluje się do CLR lub JVM (w zależności od tego, do czego go publikujesz) zamiast być kompletną kompilacją .
D też wygląda ładnie. Wydaje się być bardzo użytecznym językiem i zwieluróżnychźródeł wydaje się być lepszy niż C / C ++. Skoczyłbym z tym dobrze, ale wciąż nie jestem pewien jego sukcesu, ponieważ oczywiście nie jest to obecnie główny nurt.
Istnieje kilka innych, które wyglądały całkiem ładnie, koncentrując się na innych rzeczach, takich jak Opa z programowaniem stron internetowych i Go by GOOGLE.
Moje pytanie
Czy warto uczyć się tych „eksperymentalnych” języków? Czytałem inne pytania, które mówią, że jeśli nie uczysz się ciągle języków i jesteś otwarty na wszystkie języki, nie masz odpowiedniego nastawienia do programowania. Rozumiem to i wciąż nie do końca rozumiem, ale tak naprawdę, jeśli język nie stanie się głównym nurtem, czy powinienem spędzać czas na nauce czegoś innego? Nie chcę uczyć się starych (lub już wkrótce) starych języków programowania. Wiem, że wiele osób postrzega to jako coś ważnego *, ale czy ktokolwiek z was kiedykolwiek wziąłby pod uwagę (zakładając, że jeszcze nie wiedziałeś) FORTRAN? Moim celem jest pozostawanie na bieżąco, aby mieć pewność, że odnoszę sukcesy w przyszłości.
Zrzeczenie się
Tak, jestem młodym programistą, więc prawdopodobnie w swoim pytaniu wypowiedziałem wiele naiwnych stwierdzeń. Zapraszam do poprawiania mnie w KAŻDYM! Muszę gdzieś zacząć się uczyć, więc jestem pewien, że duża część mojej wiedzy jest na tyle szkicowa, że spowodowała niepoprawne stwierdzenia lub błędy w moim myśleniu. Zostaw swoje uczucia w komentarzach.
Wyniki...
Naprawdę jestem zdumiony niesamowitymi reakcjami, z których większość tak ładnie wskazuje moje nieporozumienia i błędne osądy. Wiele się z tego nauczyłem i mam nadzieję, że wykorzystam wszystko, czego się nauczyłem! Prawdopodobnie zacznę uczyć się Haskell w następnej kolejności ( nie tak stary język, choć ma ponad 20 lat - hahaha ), a potem zacznę szukać innych opcji wokół mnie.
Dzięki
źródło
Odpowiedzi:
W uczeniu się drastycznie różnych języków nie chodzi o naukę języków, ale o kontakt z różnymi podejściami do problemów. Narzędzia do przybornika.
Należy zauważyć, że Haskell nie jest szczególnie stary i jest w rzeczywistości bardzo dobrym kandydatem dla kogoś, kto zna tylko języki głównego nurtu. Nawet bardzo stary język, taki jak Lisp, jest bardzo przydatny do nauki ze względu na jego wpływ na różne rzeczy.
Ponadto Java i .Net nie są interpretowane i spodziewam się, że przyjmujesz błędne założenia w oparciu o to błędne oznakowanie.
źródło
Bądź w formie: ćwicz regularnie
Praktyka czyni mistrza.
Im więcej kodu piszesz ORAZ czytasz , tym bardziej zbliżasz się do oświecenia / mistrzostwa jako programista / programista / inżynier oprogramowania / guru / ninja / rzemieślnik / hacker / modne hasło. Nie tylko kodując i czytając więcej, ale także wypróbowując nasze nowe sposoby pisania kodu, tym bardziej jesteś otwarty (masz nadzieję).
Rekomendowane lektury:
Poznawanie nowych paradygmatów i funkcji językowych
Być może nie będziesz w stanie przetłumaczyć tego, czego używasz w nowym Super-Language-X na Enterprise-Language-Y, ale może będziesz w stanie rozpoznać, kiedy to może być dobre dopasowanie. Być może będziesz w stanie wiedzieć, kiedy zintegrować inną technologię lub stos w swoim projekcie, aby dopasować się do określonego celu. A może będziesz wiedział, jak korzystać z funkcji języka Y, aby emulować fajną funkcję języka X i zmienić kod w celu skorzystania z niego (i potencjalnie oświecić innych współpracowników po drodze).
Na przykład mogłeś odkryć ciekawe zasady FP i chciałbyś je dostosować do Javy, która z założenia nie jest FP .
Rekomendowane lektury:
Bądź waletem wszystkich zawodów ... Master of Some?
Nie wiesz, który język stanie się głównym nurtem, gdy znajdzie się na „eksperymentalnym” etapie, więc nie powinieneś zbytnio przejmować się obstawianiem jednego z nich. Są szanse, że inni ludzie postawią ten sam zakład i będą zaintrygowani, gdy zobaczą te pojawiające się w twoim CV. Dodaj jedno narzędzie do paska. W naszym przypadku nie ma większego problemu z tym, ile waży w końcu.
Jasne, nie możesz zostać mistrzem wszystkich transakcji. Ale możesz być mistrzem jednego, a całkiem nieźle w reszcie. Uczysz się rzemiosła, a nasz jest wieloaspektowy. Robienie regularnych ćwiczeń, uczęszczanie na warsztaty, chwytanie książki, pisanie nowego projektu dla zwierząt i inne podobne rzeczy to nasz sposób na nadążanie za stale rosnącym tempem zmian w naszej dziedzinie.
Rekomendowane lektury:
Bądź elastyczny
Jeśli nie nauczysz się dostosowywać, trudno to zrobić, gdy jest to potrzebne. Dzięki ciągłemu uczeniu się nowych rzeczy, za każdym razem stajesz się coraz lepszy w zbieraniu nowych rzeczy (o ile nie ograniczasz się do bardzo podobnych wyzwań).
To tak jak w piosence Oasis „Stay Young” : Bądź młody i niezwyciężony .
Jeśli potrafisz się przystosować, możesz przetrwać.
Rekomendowane lektury:
Pozostań widoczny: zrozum radar agencji rekrutacyjnej
Używają słów kluczowych i technologii jako pól wyboru. Używamy ich jako doniczki z miodem dla bezmyślnych rekruterów.
Działa w obie strony. Tak długo, jak naprawdę znasz swoje rzeczy, dobrze jest mieć dużo rzeczy w swoim CV. Pokazuje twoje zdolności adaptacyjne i szeroki zakres wiedzy. Ponadto, jeśli naprawdę opanujesz kilka z nich i jesteś przyzwoity w kilku innych, pozwala to modulować różne wersje swojego CV dla różnych pozycji i zadań.
Inne pomocne tematy SE
źródło
Aby rozszerzyć odpowiedź Telastyn, w rzeczywistości chodzi o ekspozycję na różne paradygmaty programowania . Na przykład tak naprawdę nie chodzi o naukę programowania logicznego, ale o:
http://skilldrick.co.uk/2011/02/why-you-should-learn-brainfuck-or-learn-you-a-brainfuck-for-great-good/
http://norvig.com/21-days.html (Peter Norvig)
źródło
Cóż, to jest ogromny stos błędów. Ludziom, którzy znają C, trudniej jest nauczyć się C ++, ponieważ prawie wszystko, co myślą, że wiedzieli o tym, jak używać języka, jest ogromną ilością zła. Nie ma praktycznie żadnego idiomatycznego C, który jest nawet zdalnie dobrym C ++. Lepiej po prostu uczyć się C ++ od podstaw. Ludzie tacy jak ja, którzy poświęcają swój czas, aby pomóc innym ludziom w nauce języka C ++, spędzają ogromną jego część, próbując nauczyć ludzi porzucać swoje nawyki C.
Jeśli chodzi o popularność, dobrze, C ++ jest doświadcza trochę ponownego pojawienia się w ostatnim czasie. Ludzie zauważyli, że tak naprawdę wydajność ma bardzo duże znaczenie i nie można uciec od uruchamiania każdego komponentu jako zarządzanego, a Modern C ++ (szczególnie z C ++ 11) nie jest absolutnie niczym śmieci C, które uważali za i wcale nie jest tak źle. Naprawdę się nie starzeje. Robi się nowszy. Nowy standard jest ogromną aktualizacją - i nie ma odpowiednich języków zastępczych, zarówno obecnych, jak i w przygotowaniu, dla wielu obszarów, w których obecnie używany jest C ++. Jest tak nie tylko dlatego, że nie ma języków o przyzwoitej interoperacyjności C ++ (nawet samego C ++), co utrudnia migrację z istniejących baz kodu C ++.
Zdobądź nowych ludzi. AFAIK, VB.NET tak naprawdę nie istnieje z żadnego powodu poza tym, aby pomóc w migracji z VB6 i sam w sobie nie jest godnym celem, ale C # jest prawdziwym językiem. To trochę jak Java, tyle że dodali rzeczywiste funkcje językowe i fajne biblioteki. C # jest bardzo popularnym, dobrze obsługiwanym językiem z bardzo dobrymi narzędziami w VS, który nie wysysa tak mocno i jest solidną, jeśli nie wyjątkową rzeczą do nauki.
MONO jest dość stabilny. Ponadto ostatecznie 90% konsumentów komputerów stacjonarnych (a może 80%?) Korzysta teraz z systemu Windows. Jeśli zamierzasz opracować aplikację komputerową, pozostaje otwarte pytanie, czy użytkownicy spoza systemu Windows powinni poświęcić czas na wsparcie, nawet jeśli używasz języka wieloplatformowego.
Ostatecznie możesz wiele zyskać na nauce języka takiego jak C ++ lub Haskell, który koncentruje się na silnej technologii kompilatora, a nie na potężnym środowisku uruchomieniowym.
Po prostu nie wybieraj PHP. Jedyną rzeczą, jakiej możesz się z tego nauczyć, jest to, jak nie budować języka.
źródło
Kilka komentarzy na temat tego, co powiedziałeś ...
1) Każdy programista powinien nauczyć się języka C, nawet jeśli jest stary. To świetny język do zbliżania się do maszyny. Od rad Joela do studentów CS ...
2) Języki mogą być przydatne do nauki sposobu myślenia, nawet jeśli nie są powszechnie używane. Naucz się schematu (lub LISP), aby zrozumieć programowanie funkcjonalne, nawet jeśli nie jest modne. Z innego postu na tym forum .
Teraz, mimo zaatakowania twojej pierwotnej przesłanki, myślę, że powinieneś zostać pochwalony za ciekawość. Zbyt wiele osób staje się przestarzałych z powodu braku ciekawości. Wykorzystanie osobistego rozwoju to świetny znak, że dobrze się rozwiniesz. Ludzie, którzy najwięcej się uczą, chętnie pytają, jak to działa.
źródło
ŻADNY język, którego się uczysz, zmieni się w ciągu najbliższych 5 lat. Nie chodzi o naukę języka, który Twoim zdaniem może istnieć przez jakiś czas, ale raczej o nauczenie się JAK się uczyć. Większa ekspozycja na naukę języka i proces uczenia się tego języka pomoże Ci na dłuższą metę!
Ostatnia firma, w której pracowałem, posługiwała się własnym językiem wewnętrznym. Był podobny do Visual Basic, ale nie taki sam. Tylko dlatego, że znałem inne języki, byłem w stanie podnieść ich język znacznie szybciej niż inni pracownicy.
Nauczyłem się japońskiego po tym, jak nauczyłem się C ++, BASIC, Pascal i mogę powiedzieć, że nauka języka komputerowego i języka obcego wymaga tych samych umiejętności. Te umiejętności mogą zostać utracone lub wyostrzone. Jeśli masz dysk, kontynuuj i ucz się nowych języków!
(ps. jeśli chodzi o naukę FORTRAN lub asemblera, myślę, że warto wziąć przynajmniej jeden semestr starszych języków. To sprawia, że myślisz o rzeczach, które po prostu traktujesz jako oczywiste w nowszych językach, takich jak flagi, przydział pamięci itp. .)
źródło
Lepiej naucz się jak największej liczby „starych” języków, jeśli chcesz zostać programistą. Zacznij od Lisp, poznaj Fortha, zwróć szczególną uwagę na ewolucję wszystkich języków Wirtha, ewolucję Fortranu, wzrost i upadek Prologu, wkradnij się do tajemniczego ekosystemu Ada, zdobądź swoją tajną broń dzięki nauczeniu Occam. Pogoń za „głównym nurtem” jest najgłupszą rzeczą, jaką aspirujący programista mógłby zrobić.
źródło
Zgadzam się z tobą w części dotyczącej ekspozycji. Chociaż znam Java, C, C ++, JavaScript, Python, Ruby i trochę .NET (przede wszystkim dlatego, że nienawidzę czegokolwiek M $ <- osobista opinia), muszę powiedzieć, że naprawdę kocham programowanie w D.
D ma naprawdę fajny zestaw funkcji (większość z nich jest zaimplementowana w C ++ / Java (języki, które mają abstrakty klas) itp.), Ale jedno, co najbardziej uwielbiam najbardziej, to generics i delegaci (ułatwia implementację wywołań zwrotnych). Poza tym otrzymujesz znacznie prostszą składnię w porównaniu z C ++. D ma naprawdę wydajny moduł wyrzucania śmieci, chociaż możesz samodzielnie obsługiwać pamięć (szczególnie gdy współpracujesz z modułami C / C ++). Chociaż D nie ma wielu modułów wniesionych przez użytkownika, które nie powinny stanowić bariery wejścia. Możesz łatwo łączyć się z istniejącymi bibliotekami C / C ++ (które są pleanty), dzięki czemu jest zbędny na potrzeby modułów.
D ma własną standardową bibliotekę (Phobos), która zaspokaja wszystkie typowe problemy z programowaniem. Istnieje również alternatywna biblioteka ( Tango-D2 ), z której można korzystać zarówno na Phobos, jak i na własną rękę. Jeśli jesteś programistą i chcesz napisać serwer oparty na zdarzeniach, Tango ma niezłą abstrakcję Selector (tango.io.Selector tylko dla select (), poll (), epoll ()). Przekonałem się, że działa nawet lepiej niż libev.
źródło
Języki są opracowywane w celu rozwiązywania problemów w jakiejś dziedzinie (przynajmniej na początku). Jeśli nie spotkałeś się z problemami, których twoje narzędzia nie mogą rozwiązać w sposób, z którym czujesz się swobodnie, wbijesz drewnianą deskę, oczekując, że zostaniesz stolarzem. Spróbuj zrozumieć problemy, które języki próbują rozwiązać. Jedyną różnicą między „eksperymentalnym” językiem a nowym / modnym językiem fajnego faceta są pieniądze, które go wspierają, na przykład Go od Google i Dart. Jeśli zostały opracowane na moim podwórku, prawdopodobnie umrą na jakimś forum i to wszystko. Przetrwają tylko wtedy, gdy potrafią wyjaśnić problemy, które próbują rozwiązać. Lub na odwrót, takie jak Perl i C ++, które są dobre w absorpcji sposobów rozwiązywania problemów, aby utrzymać się przy życiu. I mogę zasugerować naukę Lua, to ” język przeznaczony do osadzania w programach, jest bardzo szybki i lekki, co daje narzędzia do rozwiązywania dużych lub małych problemów, których niektóre języki, takie jak Java, nie mogą rozwiązać w prosty sposób. Biorąc przykład z języka japońskiego, jeśli tylko nauczysz się składni, gramatyki i alfabetów, ignorując kulturę, nigdy nie zrozumiesz, dlaczego jest to tak skomplikowane, i ostatecznie o tym zapomnisz. To nic dla ciebie nie rozwiązuje.
źródło
Nauka wielu różnych języków zapewni szerszy wgląd w programowanie. Nacisk na „inny” - np. Nauka języka C # i Java nie nauczy Cię o wiele więcej niż nauka tylko jednego z nich. Ale nauka języka C # lub Java i języka funkcjonalnego (na przykład) będzie.
Powiedziawszy to, jako młody programista, myślę, że przydałoby Ci się znacznie więcej, dzięki znajomości jednego języka naprawdę solidnie, zanim skoczysz dookoła, patrząc na różne rodzaje języka. Pytanie, jak dobrze znasz Javę, VB.NET i C #, nie jest do końca jasne. Czy jesteś pewien, że jeśli zaatakowałeś projekt przy użyciu jednego z powyższych języków, wąskim gardłem byłby sam projekt, a nie znajomość języka? Jeśli spędzisz więcej czasu zadając sobie pytanie „jak to zrobić w języku ?” niż myślisz o rzeczywistym problemie, prawdopodobnie potrzebujesz więcej uwagi na jednym z obecnych języków.
I osobiście uważam, że powinieneś przyjąć pragmatyczne podejście, decydując, który to jest. Java jest używana do aplikacji na Androida? Świetnie, jeśli tworzenie aplikacji na Androida jest czymś, co Cię interesuje. Nie ma znaczenia, jeśli tak nie jest. C # nie nadaje się doskonale do programowania w systemie innym niż Windows? Złe wieści, jeśli jesteś zainteresowany programowaniem na Linuksa. Nieistotne, jeśli nie jesteś. I tak dalej.
A te „eksperymentalne” języki, o których wspominałeś? Pragmatycznie będą źle pasować, jeśli chodzi o pracę z innymi ludźmi - prawdopodobnie znajdziesz tysiąc osób, które znają C # lub Javę dla każdego, kto zna Fantom. W przypadku projektów osobistych niekoniecznie jest to problem. Jeśli Twoim celem jest zwiększenie szans na zatrudnienie, tak właśnie jest.
źródło
Można powiedzieć, że nauka programowania w języku takim jak Postscript lub APL jest prawdopodobnie stratą czasu, głównie dlatego, że szanse na wykorzystanie tej wiedzy zbliżają się do zera. Ale z tego samego powodu można argumentować, że Ruby i Python to strata czasu, jeśli nigdy nie zamierzasz ich używać do niczego.
Ale niewiele osób powiedziałoby, że nauka Lisp jest marnotrawstwem, nawet jeśli prawdopodobnie będziesz musiał pisać Lisp jak Postscript; ale nauka Lisp uczy inaczej myśleć o swoim problemie (mam nadzieję), dlatego większość programistów powie ci, że warto poświęcić czas.
Mimo to nigdy nie unikam nauki nowego języka, ponieważ wymagany czas to tak naprawdę tylko godzina lub cztery. I zastosowań dla języka Lua jak pojawiają się w najbardziej niezwykłych miejscach , a ty nigdy nie uznały je jeśli nie spędził kilka godzin przebiegającej przez przykładach.
Kiedy zobaczysz nowy język, przeczytaj nieco o jego przydatności. Jeśli jest to nisza, w której Twoje ulubione języki nie obejmują zbyt dobrze, poświęć dzień na naukę podstaw. Jest to z pewnością czas, który lepiej spędzić, niż oglądanie 17 sezonu Bachelor, lub inaczej możesz stracić czas. W ten sposób, jeśli masz do tego zastosowanie, może pojawić się w głowie i wiesz, gdzie dowiedzieć się więcej.
Osobiście naprawdę polecam zajrzeć do Go. Użyłem go do pisania jednostronicowych programów, które działałyby lepiej niż trzy dni i 13 bibliotek stron trzecich w C lub C ++, a nawet nie byłyby możliwe w Pythonie, C #, Ruby itp. Zostało zaprojektowane przez ludzi, którzy naprawdę, naprawdę, naprawdę znają swoje rzeczy.
źródło
Wybierz te z różnymi typami. Pogrupuj je według funkcji i wybierz jedną w każdej grupie. Jeśli chcesz to zrobić profesjonalnie, wybierz taki, który jest używany (więc C ++ zamiast D dla statycznie skompilowanego języka z metaprogramowaniem szablonu).
Słaby D, jest to dobry język, ale brakuje mu aplikacji zabójczej, którą miał C ++: prawie pełna wsteczna kompatybilność z językiem nr 1 w tym czasie (C w przypadku C ++). To miłe, ale ten ważny mały fakt prawdopodobnie spowoduje spadek D do statusu pokazu bocznego w książkach historycznych.
źródło
C może być stary, ale wciąż jest bardzo mocny i interesujący, nauka C bardzo pomoże ci w twojej „programistycznej” przyszłości.
Java nie jest powolna, ktokolwiek ci powiedział, że nie wie, o czym mówi, Java nauczy cię dużo o OOP
Dlaczego nie zaczniesz od Pythona, a następnie nie wybierzesz C lub czegoś innego,
źródło