Każdy język programowania można opanować z łatwością, jeśli podstawy programowania są silne. Fakt czy mit? [Zamknięte]

33

Czy to prawda, że ​​osoba o dość dobrych podstawach programowania może łatwo nauczyć się dowolnego języka programowania?

Cóż, kiedy mówię o językach programowania, mam na myśli zwinne i dynamiczne języki, takie jak PHP, Perl, Ruby itp., Ale nie poprzednie języki programowania z odległej przeszłości.

W pewnym stopniu pracowałem tylko nad Javą, groovy i flex. Biorąc pod uwagę fakt, że jestem programistą amatorem, ale z grubsza szybko się uczę, ile czasu zajęłoby przejście do jednego z takich języków?

Vamsi Emani
źródło
1
Zamień „Any” na „Most”.
4
Co sprawia, że ​​język jest „zwinny”? Myślałem, że zwinny to proces rozwoju .
oosterwal
17
Łatwo opanowany? Nie. Łatwo się nauczyłeś? Tak. Specjalizacja oznacza poziom wiedzy specjalistycznej, który wymaga wielu lat użytkowania w dowolnym języku. Należy nauczyć się, jak posługiwać się dowolnym językiem po opanowaniu podstaw.
Joel Etherton
1
Nie, dotyczy to tylko języków podobnych. Znajomość Java nie pomoże Ci nauczyć się Haskell, ale pomoże Ci nauczyć się C ++ i tak dalej. Znajomość PHP nie pomoże ci nauczyć się asemblera, ale pomoże ci nauczyć się Ruby.
iveqy,

Odpowiedzi:

46

Tak, z zastrzeżeniami.

Cztery tygodnie temu powiedziałbym, że mam umiejętności na poziomie profesjonalnym w C i C ++ oraz umiejętności na poziomie amatorskim w Javie. Mój szef poprosił mnie o napisanie oprogramowania w JavaScript, z którym nie miałem doświadczenia, i poszedłem.

W ciągu następnych dwóch tygodni przeczytałem wiele fragmentów przykładowego kodu, znalazłem wszystkie fajne biblioteki i napisałem mój program. Jest zrobione i działa. W zeszłym tygodniu kupiłem książkę JavaScript i czytałem ją, a chłopcze, nie wiedziałem, co robię. Teraz rozumiem, dlaczego moje przedmioty działały tak dziwnie.

Więc teraz mówię: znam trochę JS. Potrafię czytać i pracować z tym, ale jestem pewien, że to, co piszę, jest nieefektywne, trudne do odczytania i nie przestrzega najlepszych praktyk.

Ogólnie rzecz biorąc, szybki uczeń może zająć tydzień i zacząć produkować produkt niskiej jakości w nowym języku. Jeśli znasz Javę, możesz dość szybko wybrać C, C ++, PHP, Python, JavaScript, ale tylko na tyle dobrze, aby modyfikować kod lub pisać dobrze zdefiniowane funkcje. (Perl może być trudniejszy, ponieważ wyrażenia regularne są złożone.) Aby właściwie zaprojektować system w nowym języku, prawdopodobnie chciałbyś roku rozwoju zawodowego pod okiem doświadczonych mentorów.

Ćwiek
źródło
18
Zaryzykuję stwierdzenie, że zajmuje to dwa lata. Pierwszy rok powinien sprawić, że będziesz względnie sprawny, drugi rok powinien pozostać stosunkowo sprawny.
Tim Post
4
Miałem to doświadczenie wiele lat temu (po nauce kilkunastu języków) ... musiałem pracować w Adzie. Napisanie kodu w Adzie zajęło kilka dni. Aby naprawdę zagłębić się w przestrzeń projektantów języka / systemu wykonawczego i napisać DOBRY kod, co zajęło rok.
szybko_niedz.
1
Szczerze mówiąc, tak też nauczyłem się języka Java. Obecnie jestem na poziomie 1 roku i powiedziałbym, że „stosunkowo biegły” jest dokładny.
Brad
1
Powodem jest to, że twoje podstawy, nawet mocne, tylko tam, gdzie nie są szerokie. Jeśli przed jscriptem znałeś inne języki, z zamknięciami, listami, innymi strukturami danych i innymi zasadami określania zakresu, mógłbyś mieć mniej problemów.
Peter
Miałem podobne doświadczenia z VB.net, dopóki nie przeczytałem kodu napisanego przez mojego szefa (z kilkuletnim doświadczeniem w VB) ... och, kochanie. Kod pachnie jak zduplikowany kod, który wykracza poza języki!
DisgruntledGoat
28

Zasadniczo odpowiedź brzmi tak ... i nie ... zależy od tego, co masz na myśli przez podstawy i łatwo opanujesz .

FAKT

  • Znajomość podstaw programowania pomoże niezależnie od języka. Przez podstawy rozumiem tu rzeczy, które nie są specyficzne dla danego paradygmatu. Rzeczy takie jak algorytm, poziomy abstrakcji, izolacja itp.

  • Znajomość podstaw danego paradygmatu (OOP, funkcjonalna itp.) Ułatwi naukę języków obsługujących ten sam paradygmat. Można powiedzieć, że znajomość języka pozwoli ci szybko wybrać języki tej samej rodziny.

  • Z każdym językiem nauczonym w tej samej rodzinie następny będzie dla mnie o wiele łatwiejszy, nie zdziwiłbym się, gdyby ta krzywa uczenia się była wykładniczo szybsza, ponieważ wiesz więcej.

MIT

  • Po przejściu na nowy inny paradygmat znajomość języka pierwszego paradygmatu nie będzie tak pomocna, jak nauka języka w tej samej rodzinie. W rzeczywistości, w zależności od różnicy między nimi, być może będziesz musiał najpierw nauczyć się kilku rzeczy, zanim będziesz mógł przejść do przodu i naprawdę sprawdzić nowy paradygmat.

--- edytowana ostatnia sekcja na podstawie komentarzy ---

Fakt...

  • Znając pierwszy Paradigm może pomóc nauce następny ...

ale

Mit

  • Nie bądź zarozumiały, może równie dobrze cię spowolnić lub nie być w stanie pomóc w trzecim paradygmacie.
Newtopian
źródło
wszystko dobrze oprócz ostatniego. anegdotycznie znajomość języka programowania proceduralnego, takiego jak C, nie pomogła w nauce języka logicznego takiego jak Prolog, aw moim przypadku przeszkodziło, np. „P: jak kodować pętlę w prologu?” ==> „A: ty nie”.
Steven A. Lowe
2
Anegdotyczne dowody, które tu słyszałem, sugerują, że możesz dość łatwo rozpocząć programistę na Scheme, ale jest o wiele trudniej, jeśli programowali w języku BASIC lub C # lub coś w tym rodzaju.
David Thornley,
1
@Steven & David: Nie byłem całkiem pewien tego ostatniego. Przeszedłem z proceduralnego do obiektowego na funkcjonalny, ale nie próbowałem jeszcze rodziny logicznej. Z czasem łatwiej mi było, ale nie odważyłem się uogólniać. Zmodyfikuję odpowiedź na podstawie twojego komentarza.
Newtopian
14

dla dowolnego podobnego języka, tak

dla języków z radykalnie różnymi paradygmatami, nie tak bardzo

przykład: znasz C ++, chcesz nauczyć się Java, bułka z masłem; znasz VB.NET, chcesz poznać Prolog ... całe ciasto, być może trzy lub cztery ciasta

Steven A. Lowe
źródło
1
Zgadzam się. Niektóre języki kierują się zupełnie inną filozofią; dlatego nie jest trywialne przejście na przykład z języka imperatywnego, takiego jak C, na logiczny język programowania, taki jak Prolog, bez większego wysiłku.
sakisk
4

Uważam, że krótka odpowiedź brzmi: „trochę prawdziwe, ale trudne do zweryfikowania”. Bardzo trudno jest nauczyć się ściśle powiązanego API, zastosowań, idiomów i paradygmatów (OO, funkcjonalne itp.) Niż faktyczna składnia języka. Myślę, że sam język można łatwo podbić, jeśli masz dużą wiedzę i doświadczenie w zakresie podstaw programowania i trochę wiedzy na temat kompilatora, ale trudny do opanowania z powodu dodatkowej obsługi.

Jasnym przykładem byłoby przechodzenie z jednego języka do drugiego; C do Java. Składnia kodu jest bardzo podobna do programów w stylu C, ale musisz także znać java api (generics, odśmiecanie itp.) I najprawdopodobniej w naszym obecnym „krajobrazie IT” niektóre frameworki innych firm (Spring, jUnit , Hibernacji itp.), Aby zrobić coś przydatnego dla firm. Więc jeśli zrobiłeś wcześniej C, składnia języka nie byłaby problemem, to reszta.

To pochodzi ode mnie, który zna Java, C #, JavaScript, HTML, CSS, Delphi itp. Może nie znam wszystkich zakamarków na temat frameworków lub bibliotek, których używam, ale znam swoją drogę i mogę się szybko uczyć dzięki moje doświadczenie z wykorzystaniem innych niż wcześniej. Dla „szybkiego ucznia” jest to naprawdę myślenie boczne.

Łup
źródło
Całkowicie się z tym zgadzam. Nauka najlepszych praktyk / apis / popularnych bibliotek / itp. Zajmuje dużo, dużo dłużej niż naukę składni języków programowania, i to były prawdziwe kłamstwa, i coś, co można uzyskać, spędzając trochę czasu na pracy z językiem i jego językami ekosystem.
jviotti
3

Podstawy informatyki, które powinieneś znać, obejmują nie tylko podstawy matematyczne (teorię zbiorów, logikę, teorię grafów, algebrę, teorię informacji, algorytmiczną teorię informacji itp.), Ale także kilka języków programowania, przynajmniej jeden z każdego z nich grupa - tj. jeden imperatyw (prawdopodobnie z OOP, ale ten bit nie jest obowiązkowy), jeden chętny funkcjonalny, jeden leniwy funkcjonalny, jeden logiczny, jeden konkatenacyjny lub oparty na stosie.

Dzięki tej bazie możesz łatwo nauczyć się dowolnego nowego języka w krótkim czasie. Jeśli brakuje niektórych bitów, możesz napotkać poważny opór.

A najlepszym sposobem nauki języka od wewnątrz jest wdrożenie kompilatora zabawek lub interpretera dla znacznej jego części (oczywiście bez standardowej biblioteki - to najbardziej skomplikowana i najbardziej nudna część każdego języka).

Logika SK
źródło
2

Wydaje mi się, że konsensus jest taki, że posiadanie dobrych podstaw pomoże w pewnym stopniu i nie zgadzam się z tym. Jednak w pozostałych odpowiedziach brakuje jednego punktu, a mianowicie kwestia wychwytywania idiomów języka i myślę, że aby opanować język, trzeba go pisać idiomatycznie.

Na przykład możesz pisać ryzę całkowicie poprawnego języka C # bez użycia usinginstrukcji do automatycznego usuwania obiektów, ale w dobrze napisanym idiomatycznym języku C # zobaczysz using {...}wiele. Nie znam żadnych języków, które nie mają takiej konstrukcji (choć znam bardzo niewiele innych, a moja Java jest raczej zardzewiała, więc mogłam się mylić), więc nawet ekspert pochodzący z innego języka, który tego nie ma funkcja będzie musiała nauczyć się tego idiomu od zera.

Steve
źródło
Istnieją podobne idiomy szeroko stosowane w Lisp i Scheme, więc nie będzie to nic nowego dla kogoś pochodzącego z tego tła i celowo będzie szukać tej funkcji w każdym nowym języku.
SK-logic
Tak, ale jeśli pochodzisz, powiedzmy, z Pascala lub ADA, byłby to zupełnie nowy idiom, o którym nie wiedziałbyś nawet, dopóki go nie zobaczysz.
Steve
właśnie dlatego uważam, że trzeba znać co najmniej jeden język z każdej grupy, aby móc nauczyć się każdego nowego języka i mądrze wybierać narzędzia.
SK-logic
@ SK-logic: Kiedy zobaczyłem takie rzeczy, jak „używanie” i „próbuj… w końcu”, nie miałem problemu ze zrozumieniem ich jako przybliżonego odpowiednika Common Lisp „odprężenie”. Jednak takie funkcje językowe mogą nie pojawiać się w danym wyborze wielu paradygmatów.
David Thornley,
1

To prawdziwe stwierdzenie dla niektórych definicji „dość dobrych” i „łatwych”.

Im lepsze zrozumienie podstaw, tym łatwiejsze jest przejście z jednego języka na inny. Jeśli jesteś na przykład programistą Java, który dobrze rozumie języki obiektowe, podstawowe różnice w składni między Javą a C # powinny być stosunkowo łatwe do opanowania w ciągu tygodnia lub dwóch. Zrozumienie, w jaki sposób funkcjonuje we wszystkich powiązanych bibliotekach, zajmie więcej czasu, ale prawdopodobnie będziesz mieć przyzwoitą obsługę podstawowych bibliotek za miesiąc lub dwa. Następnie należy zastanowić się nad przypadkami, w których standardowe podejście do problemu w języku A nie przekłada się bezpośrednio na standardowe podejście w języku B (tzn. Chcesz użyć LINQ w języku C # zamiast JPA w Javie) i poczuć się komfortowo wystarczająco dużo w nowym języku, że „ myślę w nim bardziej niż w starym języku i „tłumaczę”. Zajmie to prawdopodobnie od trzech do sześciu miesięcy, w zależności od tego, jak dobrze funkcjonalność zwykle używasz map. Po sześciu miesiącach ekspert programista Java prawdopodobnie byłby dość wydajnym i kompetentnym programistą C #. Ale jak w przypadku wszystkiego, możesz spędzić lata ucząc się wszystkich zawiłych szczegółów, opanowując różne biblioteki i dodatki, które nie są częścią języka, ale są częścią otaczającego ekosystemu i ogólnie doskonaląc się jako programista w tym języku. ekspert programista Java prawdopodobnie byłby dość wydajnym i kompetentnym programistą C #. Ale jak w przypadku wszystkiego, możesz spędzić lata ucząc się wszystkich zawiłych szczegółów, opanowując różne biblioteki i dodatki, które nie są częścią języka, ale są częścią otaczającego ekosystemu i ogólnie doskonaląc się jako programista w tym języku. ekspert programista Java prawdopodobnie byłby dość wydajnym i kompetentnym programistą C #. Ale jak w przypadku wszystkiego, możesz spędzić lata ucząc się wszystkich zawiłych szczegółów, opanowując różne biblioteki i dodatki, które nie są częścią języka, ale są częścią otaczającego ekosystemu i ogólnie doskonaląc się jako programista w tym języku.

Justin Cave
źródło
1

Powiedziałbym, że całkowicie zależy to od entuzjazmu danej osoby do nauki nowego języka. Gdy podstawy są mocne i jeśli rozumie, w jaki sposób nowy język interpretuje cokolwiek, to dość łatwo jest nauczyć się dowolnego języka.

Najlepszy przykład to moje ja. Pracowałem z kilkoma językami, chociaż większość pracy wykonywałem w C #, ale rozpocząłem swoją karierę od C i zacząłem uczyć się C ++, Java, VB, PHP, języków skryptowych, perla i tak dalej. Gdziekolwiek w tym okresie nigdy nie czułem, że nie mogę się nauczyć tego języka.

JPReddy
źródło
3
A języki, które opisałeś są mniej więcej do siebie podobne. Aby podjąć wyzwanie, spróbuj nauczyć się Haskell, Scheme, Forth lub Prolog.
David Thornley,
1

Nigdy nie było mi trudno nauczyć się nowego języka programowania, wręcz przeciwnie, przez większość czasu była to świetna zabawa. Są jednak języki, na które patrzyłem, ale których nigdy nie rozumiałem, ponieważ nie mogłem pojąć ich idei, jeśli takie istniały. Jednym z przykładów jest COBOL, nigdy nie rozumiałem, co musiało pójść w jakim PODZIALE i SEKCJI i dlaczego. Inne przykłady to PHP i Groovy. W PHP starałem się zrozumieć, dlaczego trzeba go mieć, biorąc pod uwagę, że istnieje perl. Być może ktoś może to wyjaśnić. W Groovy nie rozumiem też niektórych koncepcji.

Ingo
źródło
1

To wszystko zależy.

Wiem, że to często odpowiedź ...

Ale co oznaczają podstawy ? Wiele osób, które mają podstawy dla jednego paradygmatu (jak OO), nie ma ich dla innych paradygmatów (jak funkcjonalne).

Wiele osób pochodzących z OO i znających wszystkie wzorce projektowe, może nie mieć żadnych wskazówek na temat funkcjonalnych wzorców projektowych lub rzeczy takich jak zrozumienie listy, curry, rekurencja ogona, zamknięcia ...

Więc TAK: jeśli podstawy oznaczają podstawy wszystkich paradygmatów.

W tym przypadku problem polega na tym, że javascript używa wielu paradygmatów, takich jak proceduralne, OO i funkcjonalne, i ma dziwny zakres pochodzący z java, c ++, ...

W związku z tym podstawy nie pomagają w tym przypadku, ale wybranie większej liczby podstaw tutaj i nadal konwersja na inny język może być łatwiejsza i łatwiejsza, im więcej wzorów pojawi się w zestawie narzędzi.

Piotr
źródło
0

Nie zapominaj, że sztuka programowania komputerowego to sztuka pozostawania DOKŁADNIE tym, co masz na myśli. Tak więc każdy sposób mówienia komputerowi, co robi, od Java do Access do Excela do Visual Fortran, jest językiem programowania.

A niektóre języki są po prostu złe. IMHO Excel i Basic to złe języki; Java i C ++ to dobre języki. Skrypty FileMaker to straszny język. HTML może być doskonały, jeśli nie jesteś niechlujny.

Czy możesz się tego nauczyć? Jeśli to dobrze, tak. Jeśli jest źle, zależy od twojego obrzydliwego progu. Trudno się nauczyć rzeczy, które sprawiają, że chcesz się rzygać.

Nie każdy zobowiązuje się do używania języka X w projekcie, chyba że widziałeś już język X i bawiłeś się nim.

Andy Canfield
źródło
0

Odpowiedź brzmi: „To nie jest mit!”

Jestem taki jak ty, pracowałem także w różnych technologiach, a mianowicie. java, .net, a ostatnio współpracowałem z iPhone'em, Androidem i Blackberry.

Sieć jest pełna zasobów, wystarczy przejrzeć informacje, zrozumieć to, wdrożyć to i iść dalej.

W rzeczywistości „Technologia jest stworzona dla programistów, a nie programiści są stworzeni dla technologii, technologie się zmieniają, ale programiści nie”.

:)

martwy
źródło