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?
programming-languages
learning
Vamsi Emani
źródło
źródło
Odpowiedzi:
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.
źródło
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
--- edytowana ostatnia sekcja na podstawie komentarzy ---
Fakt...
ale
Mit
źródło
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
źródło
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.
źródło
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).
źródło
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
using
instrukcji do automatycznego usuwania obiektów, ale w dobrze napisanym idiomatycznym języku C # zobaczyszusing {...}
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.źródło
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.
źródło
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.
źródło
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.
źródło
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.
źródło
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.
źródło
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”.
:)
źródło