Czy warto uczyć się języków eksperymentalnych? [Zamknięte]

25

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

Freesnöw
źródło
10
„poznaj wszystkie pięć języków Python, C / C ++, Java, Perl i LISP” (Eric Raymond, How To Zostań Hackerem -> Podstawowe umiejętności hakowania -> 1. Naucz się programować. )
gnat
7
Pamiętaj, że samo bycie „starym” nie oznacza automatycznie „złego” domyślnie. Niektóre z najbardziej fantastycznych programów do tej pory zostały wykonane na C64 30 lat temu.
8
FWIW ma prawie każdy język - jeśli ktoś się z ciebie śmieje, że używasz prawie dowolnego języka (Java jest wolna, .Net jest dla suk M $, Haskell jest niepraktyczny, C ++ jest za stary itp.) Śmiej się z nich i powiedz im o użyciu odpowiednie narzędzie do pracy;)
Martin
6
Skąd wziął się „Haskell i… stracili popularność”?
leftaroundabout
13
Dla młodego programisty masz zbyt wiele założeń. Pozbądź się ich, one zaciemniają twój umysł.
Matthieu M.,

Odpowiedzi:

29

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.

Telastyn
źródło
Ups, przepraszam za interpretowany problem. Mieszałem tam dwa różne stwierdzenia oksymoroniczne. Naprawiłem to w samym pytaniu.
Freesnöw
19
Haskell jest jednak starszy niż na przykład Java. Ale tak, to nie znaczy, że jest przestarzałe. W rzeczywistości jego system typów wciąż jest o około 2 dekady wyprzedzony o Javę.
Jörg W Mittag
5
@ JörgWMittag: Myślę jednak, że mówi to więcej o Javie niż o Haskell.
Tikhon Jelvis
1
Programuję tylko w języku Haskell i Javie ... ale szczerze mówiąc , żaden język głównego nurtu nie ma systemu czcionek tak dobrego jak Haskell. (I muszę powiedzieć, OP ... wiele innych rzeczy, niż to, o czym wspominasz, działa na Javie.)
Louis Wasserman,
1
Haskell ma już ponad 20 lat, a standardowy Haskell jest tak samo stary jak standardowy C ++ (oba pochodzą z 1998 roku).
fredoverflow
23

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

Haylem
źródło
Jeśli masz zamiar przeczytać Beating the Average Paula Grahama (lub cokolwiek innego, co pisze na temat programowania, jeśli o to chodzi), weź to z odrobiną soli. Wiele rzeczy, które ma do powiedzenia na temat praktyki programowania, jest w 50% słusznych, aw 50% niebezpiecznie błędnych.
Mason Wheeler,
@MasonWheeler: Jest to kontrowersyjne, podobnie jak wiele rzeczy, które można tam znaleźć od znanych „gigantów” z branży, uznanych lub nie. Wiele osób nie pochwaliłoby także pism Zeda Shawa, podobnie jak inni Norviga. Do wszystkiego należy podchodzić z krytycznym umysłem: biorę to za coś za coś i zakładam (mam nadzieję), że ludzie na tym poziomie. Wielu pisarzy przedstawi tematy w świetle konkretnej sytuacji, nie pasującej do wszystkich. W rzeczywistości widzisz to także codziennie w odpowiedziach, ale dzięki „popularnej” sile będą one czczone jako „najlepsze” odpowiedzi. Mimo to ma charakter informacyjny.
haylem
8

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:

  • nauka uczenia się (ćwiczenie nowych umiejętności)
  • trenując swój mózg do myślenia w nowatorski sposób
  • może zdobycie mniej popularnej (lub nawet ezoterycznej) wiedzy, którą niewiele osób posiada i mogłoby się przydać
    • a przynajmniej zaimponować im swoją wiedzą techniczną :)
  • i oczywiście zapewnia cenny wgląd techniczny. Dlaczego C # jest bardziej popularny niż D? Czy C ++ może zrobić wszystko, co D może zrobić? Czy D może zrobić więcej, czy może bardziej przypomina cukier syntaktyczny?

http://skilldrick.co.uk/2011/02/why-you-should-learn-brainfuck-or-learn-you-a-brainfuck-for-great-good/

Innym dobrym powodem do nauki brainf * ck jest zrozumienie, jak podstawowy może być kompletny język programowania Turinga. Częstym argumentem, gdy programiści porównują języki, jest „cóż, oni wszyscy są kompletni z Turinga”, co oznacza, że ​​wszystko, co możesz zrobić w jednym języku, możesz zrobić w innym. Kiedy nauczysz się rozumowania *, zrozumiesz, jak trudne może być używanie języka pełnego Turinga i jak ten argument nie ma wody.

http://norvig.com/21-days.html (Peter Norvig)

Naucz się co najmniej pół tuzina języków programowania. Dołącz jeden język, który obsługuje abstrakcje klas (jak Java lub C ++), jeden, który obsługuje abstrakcję funkcjonalną (jak Lisp lub ML), jeden, który obsługuje abstrakcję syntaktyczną (jak Lisp), jeden, który obsługuje specyfikacje deklaratywne (jak szablony Prolog lub C ++), jeden który obsługuje coroutines (jak Icon lub Scheme) i taki, który obsługuje paralelizm (jak Sisal).

Astyanax
źródło
7

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.

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 ++.

Ludzie się śmieją, jeśli w poważnej rozmowie wspominam VB.NET lub 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.

Nie jest wieloplatformowy, chyba że użyjesz MONO (który jest wciąż w fazie rozwoju i wymaga pewnych ulepszeń).

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.

DeadMG
źródło
1
Znaczny procent ostatnich dodatków do standardu C ++ istnieje - podobnie jak znaczny procent dodatków w przeszłości - do łatania istniejących wad C ++. Na przykład odwołania do wartości dodają sporo dodatkowej złożoności, aby obejść szereg problemów związanych z wydajnością i złożonością związanych z konstruktorami kopiowania, które istnieją tylko dlatego, że C ++ pozwala na używanie obiektów jako typów wartości, co jest w 100% całkowicie błędne i istnieje dobry powód, dla którego żaden inny język OO tego nie robi.
Mason Wheeler,
@MasonWheeler Przynajmniej C #, D i Eiffel zezwalają na obiekty jako typy wartości. A RAII jest takie fajne do programowania systemów!
fredoverflow
@MasonWheeler: Odwołania do wartości umożliwiają również doskonałe przekazywanie i typy tylko do przenoszenia. Wydajność była tylko jedną z trzech głównych przyczyn ich wprowadzenia. Obiekty o wartościach są w porządku. Plus, oczywiście, możesz pisać własne obiekty o typie referencyjnym w C ++, jak tylko chcesz.
DeadMG,
Zabawne jest również to, że pomimo tych wszystkich problemów z wydajnością C ++ wciąż był najszybszym językiem.
DeadMG,
1
@FredOverflow: W C # wszystkie obiekty są typami referencyjnymi. Struktury mogą być typami wartości, ale obiekty nie mogą, a to z bardzo dobrego powodu: jeśli obiekty zostaną użyte jako typy wartości, wrzucisz ogromny klucz małpy w dziedziczenie i polimorfizm i ostatecznie będziesz musiał używać różnego rodzaju brzydkich hacków podobnie jak konstruktory kopiowania, w których przypisywanie (lub przekazywanie) obiektu potomnego do zmiennej typu nadrzędnego tak naprawdę nie przypisuje tego obiektu. To całkowicie psuje podstawienie Liskowa, co jest przede wszystkim celem używania OOP. To okropny pomysł i cieszę się, że nigdy się nie przyłapał.
Mason Wheeler
6

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 ...

Naucz się C przed ukończeniem szkoły

Część druga: C. Uwaga Nie powiedziałem C ++. Chociaż C staje się coraz rzadszy, wciąż jest lingua franca pracujących programistów. Jest to język, którego używają do komunikowania się ze sobą, a co ważniejsze, jest on znacznie bliższy maszynie niż języki „nowoczesne”, których będziesz się uczyć na studiach, takich jak ML, Java, Python, niezależnie od tego, jakich modnych śmieci się uczą. dni. Musisz spędzić co najmniej semestr, zbliżając się do maszyny, inaczej nigdy nie będziesz w stanie stworzyć wydajnego kodu w językach wyższego poziomu. Nigdy nie będziesz w stanie pracować na kompilatorach i systemach operacyjnych, które są jednymi z najlepszych zadań programistycznych. Nigdy nie będziesz mieć zaufania do tworzenia architektur dla dużych projektów. Nie obchodzi mnie, ile wiesz o kontynuacjach i zamknięciach oraz obsłudze wyjątków: jeśli nie potrafisz wyjaśnić dlaczego while (* s ++ = * t ++); kopiuje ciąg, lub jeśli nie jest to dla ciebie najbardziej naturalne na świecie, cóż, programujesz w oparciu o przesąd, o ile mi chodzi: lekarz, który nie zna podstawowej anatomii, przechodząc nasze recepty oparte na tym, co powiedziała babcia ze sprzedaży farmaceutyków, zadziała.

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 .

Gratulacje, to (dla mnie) brzmi, jakbyś chodził do jednej z niewielu szkół, które opuściły szkołę komputerową, a która próbuje uczyć informatyki. Program nauki jako pierwszego języka jest (IMO) bardzo dobrą rzeczą. Nie, nie jest tak komercyjny jak wiele innych, ale jest doskonałym językiem do nauki prawdziwej istoty informatyki. - Jerry Coffin 20 października 11 o 3:32

C, C ++ i Java są przemysłowymi produktami ubocznymi informatyki. Całe korzenie programu są związane z informatyką. Języki komercyjne mają tyle samo wspólnego z informatyką, co McDonalds z kuchnią. - JasonTrue, 20 października 11 o 5:30

Ci goście mają rację; mylisz programowanie z informatyką - jak powiedział Dijkstra, to jest jak mylenie budowy teleskopu z astronomią. Schemat dotyczy najlepszego języka do nauki podstawowych pojęć w informatyce. Jeśli spodziewasz się, że zdobycie stopnia naukowego w dziedzinie informatyki polega na nauce pisania aplikacji biznesowych w Javie, być może zostałeś zapisany do niewłaściwego programu. - Eric Lippert, 20 października 11 o 7:40

Prawie wszyscy programiści, których znam, samodzielnie nauczyli się C / C ++. Nie potrzebujesz do tego uniwersytetu. - mouviciel 20 października 11 o 7:48

Z tego samego powodu, dla którego kursy zoologii uczą biologii ewolucyjnej, anatomii i zachowań zwierząt, a nie jak rozwalać stoisko słonia - jk. 20 października 2011 o 07:58

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.

MathAttack
źródło
1
„Prawie wszyscy programiści, których znam, nauczyli się C / C ++ sami. Nie potrzebujesz do tego uniwersytetu.”: To samo tutaj. Na mojej uczelni dali nam zadania w C, ale nie dali nam kursu C. Oczekiwali, że nasi studenci informatyki pójdą po książkę i nauczą się jej.
Giorgio
1
Nauczenie się języka C to dość tortura. Moja sympatia.
DeadMG,
2
Właściwie nauka C była łatwą częścią, prawdziwe tortury zaczęły się, gdy musieliśmy przejść do C ++. ;-)
Giorgio
3

Ż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. .)

BillyNair
źródło
3

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ć.

Logika SK
źródło
+1: całkowicie się zgadzam. Wiele interesujących pomysłów, które dostałem podczas eksperymentowania z mniej popularnymi językami, takimi jak Haskell, Scheme, Scala, SML itp.
Giorgio
2

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.

Shripad Krishna
źródło
Nie dlatego, że nie pochwaliłbym nauki D, ale dla kogoś, kto już zna statyczne, OO i języki proceduralne na niskim poziomie, z pewnością warto nauczyć się języka, który podkreśla inny paradygmat lub jest nieco bliższy metalu. Nie ma też zbyt dużo eksperymentów w sprawie D.
leftaroundabout
1
Zgoda. Myślałem, że pytanie PO koncentruje się wokół „eksperymentalnego” bycia czymś, co nie jest jeszcze stabilne / wsparcia korporacyjnego / tego, co nie jest głównym nurtem. I nawet jeśli wybierzesz „eksperymentalną” implementację różnych paradygmatów, myślę, że istnieje tylko kilka paradygmatów. I większość języków implementuje jeden lub drugi. Następnie dochodzimy do tego, który język jest lepszy / szybszy / łatwiejszy w użyciu / najlepszy dla danego zadania. Czynniki te różnią się w zależności od programisty.
Shripad Krishna
1

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.

alfa64
źródło
1

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.

Carson63000
źródło
1

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.

tylerl
źródło
-1

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.

zaraz
źródło
-2

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,

just_a_dude
źródło
C jest także lingua franca mikrokontrolerów (gdy masz tylko 4K, nie możesz sobie pozwolić na 8K runtime). Tylko w tej przestrzeni C ma przed sobą kolejną dobrą dekadę aktywnego użytkowania.
TMN
Java była powolna - pamiętam, że przez pierwsze kilka lat była mniej niż demonem prędkości. Niektórzy uważają, że wydajność nigdy nie uległa poprawie.
MetalMikester