Czy boli uczyć się fragmentów wielu języków programowania?

37

Karierę programistyczną rozpocząłem w BASIC, w 9 klasie. Nauczyłem się trochę języka BASIC, pisząc proste programy do dodawania, odejmowania i drukowania. Potem poszedłem na uniwersytet i podjąłem Informatykę i Inżynierię Systemów. W pierwszym roku uczyłem się C i mam nad tym dobrą władzę.

Następnie nauczyłem się C ++ w drugim roku. Po prostu nauczyło mnie trochę wiedzy na temat OOP. Teraz zajmuję się PHP (wraz z HTML). Nie opanowałem C ++, BASIC ani PHP. Planuję teraz przejść na rozwój aplikacji mobilnych. Ale czuję, że nie opisałem wszystkiego w językach, których się nauczyłem.

Czy to naprawdę ma znaczenie?

fuddin
źródło

Odpowiedzi:

50

Wszyscy tylko uczymy się fragmentów języków programowania. Za implementatory języka uważam tylko tych, którzy mają 10 na 10 znajomości języka.

Nauka wielu języków i paradygmatów jest jedynym sposobem na rozwinięcie „smaku” tego, co lubisz, a czego nie. Jeśli tylko dowiedział się jednego języka, nie byłaby nawet w stanie naprawdę zdecydować, czy nawet to podoba czy nie.

Robisz to właściwie. Będziesz mógł ponownie wykorzystać najważniejsze podstawy, których się nauczyłeś, a jednocześnie poznać różne składnie, biblioteki i frameworki.

Brian
źródło
16
Podoba mi się ta odpowiedź, tyle że jest mniej „tego, co lubisz”, a bardziej „właściwe narzędzie do pracy”. Nikt nie powinien używać tego samego języka do rozwiązania każdego problemu. To uczyniłoby złego programistę. Każdy język i paradygmaty mają zalety i wady.
user606723,
1
Biorąc pod uwagę, że kompilatory i tłumacze mają błędy, nie sądzę, że po ludzku możliwe jest uzyskanie 10 dla większości języków.
jmoreno
6
Nie sądzę, że nawet ludzie, którzy piszą kompilatory C ++, rozumieją C ++. Mam na myśli indywidualnie. Oczywiście zbiorowo, muszą jakoś zrozumieć cały język, ale nie sądzę, że na tej planecie jest jedna osoba, która rozumie wszystko. W rzeczywistości członkowie komitetu zwykle mają dość jasne zdanie na temat faktu, że wszyscy rozumieją tylko swoją specjalizację. Podobnie w Javie: Martin Odersky powiedział niedawno, że wierzy, że na świecie są tylko 3 osoby, które rozumieją symbole wieloznaczne. I z tonu e-maila odniosłem wrażenie, że się nie uwzględnił
Jörg W Mittag
2
w tej grupie, mimo że faktycznie zaprojektował Java Generics (oczywiście wraz z Philem Wadlerem). Chociaż, aby być uczciwym, symbole wieloznaczne zostały dodane do jego projektu bez jego zgody, w rzeczywistości wbrew jego wyraźnemu sprzeciwowi.
Jörg W Mittag,
1
@ Brian, zaufaj mi, nie musisz znać języka, aby móc wdrożyć jego kompilator. Możesz po prostu przetłumaczyć specyfikację na kod na ślepo. Ale dzięki temu nauczysz się przynajmniej kilku podstaw języka - dlatego jest to mój ulubiony sposób nauki nowych języków.
SK-logic
21

Jeśli nadal jesteś na uniwersytecie, nie powinno jeszcze mieć znaczenia, że ​​nie czujesz, że objąłeś wszystko w jednym ze znanych języków. Zrozumienie wspólnych podstawowych teorii stojących za tymi językami jest znacznie ważniejsze. Po zrozumieniu podstaw możesz poznać szczegóły dotyczące innych języków, gdy są potrzebne.

FrustratedWithFormsDesigner
źródło
5
Wydaje mi się, że w ciągu pierwszych dwóch lat co 3 - 4 tygodnie wybieraliśmy nowy język z Pascalem, który był podstawą większości prac nad naszym projektem (1982–1985) - niektóre z nich były językami funkcjonalnymi. Częściowo chodziło o to, by oddzielić „programowanie” od „kodowania”
Murph
12

Uważam, że najważniejsze w programowaniu jest zrozumienie różnych paradygmatów .

W swoim pytaniu wspomniałeś o programowaniu obiektowym (OOP) . Jeśli opanowałeś ten temat, powinieneś być w stanie wyjaśnić go przy użyciu tylko pseudokodu i zasadniczo niektórych graficznych reprezentacji modelowania (takich jak diagramy klas UML).

Niezależnie od tego, czy zdecydujesz się na korzystanie z Java, C ++ lub C # (...), zależy od Ciebie, czy od firmy, w której pracujesz, ale naprawdę ważne jest zrozumienie / rozpoznanie różnych problemów i wybór najlepszego modelu ich rozwiązania . Bardzo ważnym sposobem rozwiązania problemów w programowaniu jest użycie wzorców projektowych, które można znaleźć w tym podręczniku .

Jeśli chodzi o języki osadzone, uważam, że ważne jest zrozumienie różnych problemów związanych z takimi technologiami.

W metaforyczny sposób porównałbym to do napisania dobrej książki naukowej; ważna jest ujawniona teoria, problemy, które udało się rozwiązać, i tak dalej. To, czy piszesz książkę w języku angielskim, francuskim czy japońskim, nie jest w końcu tak ważne.

To powiedziawszy, ważna jest również znajomość konkretnego języka, jeśli chcesz się specjalizować w tej technologii, aby móc go bardzo efektywnie wykorzystywać.

SRKX
źródło
2
+1 dla paradygmatów. Nie jest ważne, aby skupiać się na cukrze składniowym języka X lub Y (oczywiście potrzebujesz go, jeśli używasz języka X codziennie w pracy); przydatne jest badanie różnych paradygmatów, ponieważ IMHO pomagają ci być bardziej otwarci i kreatywni w rozwiązywaniu problemów.
sakisk
5

Moim zdaniem zmiana języka często nie ma sensu. Nigdy nie zrozumiesz żadnego z nich. Zwłaszcza niektóre, takie jak C ++, gdzie niektórzy ludzie spędzają dekadę pisząc język i nadal mają kod wyglądający jak C.

Jeśli nie umiesz pisać najlepszych praktyk w języku, nie ruszaj się, IMO. Oznacza to, że ubezpieczenie więcej niż pary zajmie wiele lat, jeśli nie dekady.

DeadMG
źródło
5

Myślę, że nauka wielu różnych języków nie zaszkodzi, ale jednocześnie powinieneś nauczyć się co najmniej jednego lub dwóch dogłębnych.

Giorgio
źródło
3

W swojej karierze korzystałem z wielu języków, takich jak AMOS Basic, Java, C ++, PHP, VB6, Delphi itp. Dziś w pracy używam C #, JavaScript, Ruby i Clojure, a także grałem z Pyhtonem, Erlangiem, Wspólny Lisp i schemat.

Ale tej jesieni chciałem stworzyć specjalny kalendarz świąteczny dla mojego bloga i postanowiłem zapoznać się i rozwiązać konkretny problem w 24 dodatkowych językach. To było wspaniałe doświadczenie, wiele się nauczyłem i bardzo polecam to zrobić, gdy masz trochę doświadczenia w programowaniu.

Moja odpowiedź brzmi: Naucz się kilku języków naprawdę dobrze (powinny być zupełnie inne), ale upewnij się, że próbujesz i zapoznałeś się z wieloma.

Dzisiaj ważne jest, aby dobrze znać zarówno OOP, jak i FP (programowanie funkcjonalne), i powinieneś także czuć się komfortowo zarówno w bardzo statycznym, jak i bardzo dynamicznym języku.

PS: Mój blog jest w języku norweskim, ale jeśli chcesz zobaczyć listę języków, które opisałem , możesz tutaj zajrzeć .

Torbjørn
źródło
2

Uczę się tego, czego muszę się nauczyć w danym języku, kiedy muszę nauczyć się czegoś nowego. „Wyzwalacz”, który mówi mi, że muszę zagłębić się w język, polega na tym, że określony fragment kodu wygląda brzydko lub niezgrabnie, wydaje się niemożliwy do utrzymania lub jest trudny do przetestowania lub skomentowania. Często te wyzwalacze wskazują na brak wiedzy na temat konkretnego idiomu programowania, stylu, struktury danych itd.

David Pointer
źródło
2

Nauka wielu języków programowania jest dobrą praktyką i jest obecnie konieczna; tyle razy nie zawsze możesz użyć swojego języka do wszystkiego.

Korzyści z zobaczenia, jak robią to inne języki, pomogą ci jako programista; nawet jeśli od czasu do czasu, gdy skaczą wokół ciebie zrobić błędy składniowe (np sprawdza nierówności !=, ~=lub <>). Powinieneś jednak uważać, aby nauczyć się czegoś więcej niż tylko składni języka, ale najlepszych praktyk w tym języku, a także ogólnych umiejętności inżynierii oprogramowania. Rzeczy, jeśli nauczyłeś się C, a następnie nauczyłeś się C ++, powinieneś upewnić się, pisząc kod C ++, że jest on w stylu kodu C ++ (zamiast tylko C z kilkoma nowymi słowami kluczowymi. To znaczy, że masz wiele klas / obiektów, wolisz referencje / inteligentne wskaźniki nad surowymi wskaźnikami itp.

dr jimbob
źródło
1
Nie zaczynaj mnie, jeśli x <b> = </b> 5 Wtedy. Muszę dokładnie sprawdzić cały mój kod C przez około tydzień po utrzymaniu czegokolwiek związanego z BASICEM.
user606723,
2

dobrze jest uczyć się języków przynajmniej z różnych paradygmatów programowania! Język proceduralny, deklaratywny, funkcjonalny, obiektowy, prototypowy i dynamiczny - każda klasa programowania oferuje własny wgląd w to, jak zorganizować i rozwiązać problem. W końcu odkrywasz jeden lub więcej paradygmatów, z których jesteś najbardziej produktywny i zadowolony, i używasz go.

rgordon0
źródło
2

Absolutnie nie. Oczywiście chcesz także upewnić się, że uczysz się różnych stylów języków. Nauka zarówno C #, jak i Java nie rozwinie twojego umysłu w żaden znaczący sposób, ale nauka Java i Haskell tak.

Sprawdź książkę Siedem języków w siedmiu tygodniach , która przeprowadzi Cię przez wprowadzenie do Ruby, IO, Scali, Erlanga, Prologa, Clojure i Haskell. Jeśli lubisz języki, pokochasz tę książkę.

Zachary K.
źródło
1
Nauka języka C # po Javie może rozwinąć Twój umysł dzięki jego funkcjonalnemu programowaniu (i innym funkcjom, których brakuje Java). Ale jeśli chodzi tylko o naukę, Haskell będzie prawdopodobnie znacznie lepszy, ze względu na jego czysto funkcjonalny charakter.
sick
1

C i C ++ nie zaszkodzą programowaniu mobilnemu. Możesz używać obu z Cocoa Touch lub Android NDK, a czasem musisz to zrobić dla wydajności. Czasami też chcesz, bo chcesz napisać kod, który działa na kilku platformach. W takim przypadku, zakładając, że nie używasz tylko frameworka innej firmy, możesz napisać aplikację w C / C ++ i skompilować w opakowaniach specyficznych dla platformy dla wymaganych elementów natywnych (na przykład, jedynym sposobem na uzyskanie kontekstu OpenGL na iPhone'ie jest przy użyciu natywnej klasy CAEAGLLayer).

To tak, jakby im więcej narzędzi masz w szufladzie, tym więcej masz opcji wykonania zadania. Przekonasz się, że masz preferencje dla niektórych, ponieważ specjalizujesz się w różnego rodzaju zadaniach. Jeśli robisz tylko interfejs użytkownika, C może nie być twoim ulubionym. Martwiłbym się bardziej o rzeczy, które chciałem zrobić, a następnie uczyłbym się wszelkich narzędzi, których potrzebowałem.

Rab
źródło
1

Jest tak samo przydatny, jak nauka francuskiego, hiszpańskiego, angielskiego, arabskiego, hindi i chińskiego, ale nigdy nie zna dobrze żadnego z nich.

Mehrdad
źródło
6
Nie mam pojęcia, co chciałeś przez to powiedzieć.
sick
Zdajesz sobie sprawę, że większość z nas nie zna „dobrze” nawet naszych języków ojczystych, prawda?
Spidey
1

Przeciwnie, myślę, że to boli, gdy nie mogę / nie jestem w stanie nauczyć się nowego języka programowania. Może to wynikać z braku czasu lub z innych powodów. O ile mi wiadomo, programiści / programiści uwielbiają stawiać czoła językom, wprowadzać lepsze rzeczy / produkty, a kiedy widzisz, że zawsze robisz to samo, nie czujesz się dobrze. Potrzebujesz więc nowego wyzwania, nowego języka, czegoś nowego do nauki i dodawania kolejnych produktów.

Myślę więc, że ekscytuje mnie obserwowanie nowych języków, nowych bibliotek, nowych podejść, nowych technologii. Ale nie mam czasu na zdobycie ich wszystkich, a ludzie mogą nie zawsze być w stanie zejść wystarczająco głęboko. Więc boli nie uczyć się więcej; ale nie zaszkodzi dowiedzieć się więcej.

Yasin Okumuş
źródło
0

Zgadzam się z Brianem, FrustratedWithFormsDesign i SRKX, ale chciałbym dodać, że na uniwersytecie poszerzanie wiedzy o wiele języków programowania i paradygmatów jest pożądanym sposobem, aby stać się dobrym profesjonalistą.

To bardzo nieprawdopodobne, że wychodzisz ze studiów jako programista. Programowanie to ciężkie rzemiosło i będziesz potrzebował lat w branży, pracujących razem z dobrymi programistami, uczestniczących w dobrych programach szkoleniowych i spotkaniach społeczności, a przede wszystkim będziesz musiał stawić czoła problemom rzemieślniczym i wiele nie zdać, dopóki nie nauczysz się, jak opanować to.

Uczenie się wielu paradygmatów, wielu języków, rozwiązywanie wielu problemów w naszym obszarze, zapewni ci dobrą bazę do samodzielnego uczenia się rzemiosła, codziennie będąc profesjonalistą w branży.

Możesz wziąć udział w zajęciach z kompilatorami, ale nie wyjdziesz jako projektant języka, twórca, a nawet jako programista kompilatora. Dostaniesz kroki, procesy, problemy i podstawowe rozwiązania, a to da ci przewagę w dostosowaniu tej wiedzy do szerokiego zakresu problemów.

Spidey
źródło
0

Krótka odpowiedź: nie

Długa odpowiedź: tak wiele zadań programisty, inżyniera oprogramowania lub projektanta jest niezależnych od określonego języka, ale bardzo zależnych od określonej metodologii. Na przykład w programowaniu obiektowym chodzi przede wszystkim o to, gdzie rzeczy istnieją w pamięci i środowisku wykonawczym, jak są one dostępne i jak są dostępne do późniejszego wykorzystania (dziedziczenie i enkapsulacja). Implementacje są różne, na przykład Java ma obiekt klasy odziedziczonej najwyższego poziomu, czy ci się to podoba, czy nie, a C ++ nie ma niczego, czego nie określasz.

Wiele języków ma wspólne funkcje (i wiele się różni). Składnia jest oczywiście różna i jest trudniejsza, gdy porównasz zupełnie inne paradygmaty, takie jak imperatywna i funkcjonalna. Ale przetwarzanie ciągów jest w dużej mierze takie samo, gdziekolwiek się wybierasz, gdy tylko zadasz sobie małe pytania dotyczące składni, indeksu i zmienności. Każdy język z pisaniem statycznym ma na ogół pewną metodę rzutowania i wymuszania, ale jak i kiedy możesz to zrobić, zależy od projektanta języka.

Język jest narzędziem. Po prostu wkładasz więcej narzędzi do paska. Ale narzędzie jest tak dobre, jak rzemieślnik, który go używa.

Teraz, ile się uczysz, jest osobistym wyborem. Nigdy nie nauczyłbym się języka ze względu na naukę nowego. Każdy wybór do nauki nowego języka jest podyktowany wymaganiem dotyczącym kursu (w ubiegłym roku musiałem pobrać js, php i R na jedną klasę), istniejącym wymaganiem dotyczącym projektu (jeśli 90% pracy zostało wykonane w perl 6 przed dostaniesz zatrudnienie, podobnie jak pozostałe 10% po) lub korzyść specyficzną dla aplikacji (R ponad powiedzmy Java w połączeniu z pewną biblioteką cukierków do analizy statystycznej).

To powiedziawszy, chcesz dowiedzieć się, co jest dostępne i dostępne. Moja uczelnia prowadziła kurs na ten temat, programowanie pojęć językowych . Był to szeroko zakrojony kurs przeglądowy, nie rygorystyczny matematyki ani kodowania, obejmujący podstawy czegoś, co można by uznać za praktyczne, a nie teoretyczne informatyki. To był świetny kurs i chciałbym, żeby było to coś oferowanego w 1–2 roku, a nie 3–4. Tekst brzmiał: Koncepcje języków programowania . Nie oznacza to, że musisz wyjść i przeczytać tę książkę, ale z pewnością poszerzy to twoje horyzonty.

Justin Reeves
źródło
0

Widzę, że nie musisz uczyć się każdego języka. Ale spróbuj nauczyć się bardzo podstawowych funkcji, które będą wymagane także w innych językach.
Na przykład koncepcje OOPS są wymagane we wszystkich językach, czy to Java , PHP , czy w dowolnym innym języku. Pojęcia
alokacji pamięci są dość podobne w wielu językach programowania. Tego rodzaju tematy, których nigdy nie powinieneś przegapić.
Każdy język ma gramatykę i zasady, to samo dotyczy języków programowania; Sam Dennis Ritchie zaakceptował ten fakt. Dlatego należy nauczyć się gramatyki tego języka.
Ale widzę, że musisz nauczyć się nietypowych czynników między dwoma językami programowania. Pozwalają określić, który język oznacza co. C ++ to wszystko podstawowe OOP (Object Oriented Programming), więc kiedy poznasz pojęcia OOP , nauczysz się gramatyki, którą zobaczysz również w PHP i Javie.
Mój proces uczenia się był następujący:
Visual Basic 5 (częściowy) -> HTML 2.0 (częściowy) -> C (częściowy) -> CPP (częściowy) -> Java (częściowy),
a następnie ponownie nauczyłem się języka C, a następnie C ++, a następnie JAVA ( ukończyć tym razem), potem przeniosłem się na Androida, ponieważ znałem Java i XML(częściowe) i nauczyłem się tego w międzyczasie. Pierwsza próba nauczyła mnie mniej, ale w drugiej próbie naucz się wszystkiego, co pomoże ci następnym razem.

Sandeep Pareek
źródło
ten post jest raczej trudny do odczytania (ściana tekstu). Czy mógłbyś edytować go w lepszym kształcie?
komar