Co myślisz? Jaka jest idealna sekwencja uczenia się języków programowania, która obejmie większość obecnie używanych języków i paradygmatów, a także pomoże zrozumieć wspólne podstawy programowania, pomysły i praktyki? Możesz nawet zaproponować sekwencję uczenia się zamiast paradygmatów.
Uwaga: To jest pytanie, które zadałem w przepełnieniu stosu i zostało zamknięte z powodu subiektywności i kłótni.
programming-languages
Gulshan
źródło
źródło
Odpowiedzi:
Python, Lisp, C, Haskell
Zakładając, że pytanie dotyczyło idealnej sekwencji uczenia się dla początkujących programistów (ponieważ stare ręce w programowaniu będą miały własną (prawdopodobnie przypadkową) sekwencję uczenia się), sugerowałbym przeczytanie eseju Norviga na temat uczenia się programowania za 10 lat , a następnie:
Python : Zacznij od dynamicznego, wysokiego poziomu, OO i funkcjonalnego języka. Ponieważ dla początkujących bardzo ważne jest, aby poczuć się jak najszybciej produktywnie, i nie może zostać wyłączony przez obcą składnię, brak bibliotek, brak wielu platform, brak zasobów edukacyjnych i brak społeczności. Python jest bardzo czytelny, ma mnóstwo dobrych bibliotek (zwłaszcza bibliotek naukowych - współczesny naukowiec / inżynier musi umieć programować), jest łatwy do uruchomienia z większości systemów operacyjnych, ma mnóstwo samouczków i całych darmowych książek i jest ogólnie przyjazny dla użytkownika - wszystko to wciąż jest wystarczająco potężne, aby rosnąć wraz z Tobą, gdy stajesz się zaawansowanym programistą pracującym nad dużymi problemami. Ważne jest również, aby wzmocnić ważne + użyteczne konwencje dla początkującego: czytelność kodu ma duże znaczenie i powinieneś pisać kod dla siebie i innych, aby łatwo zrozumieć.
Lisp: W szczególności przynajmniej przejrzyj Strukturę i interpretację programów komputerowych lub obejrzyj filmy SICP , a oczy szeroko otwarte, widząc podstawy i ekspresyjną moc programowania - można zrobić tak wiele za bardzo niewiele. Dowiedz się, w jaki sposób Lisp może wyrazić nie tylko paradygmat funkcjonalny, ale OO, logiczne / deklaratywne i inne - na przykład tworzenie nowych języków specyficznych dla domeny. Przeczytaj PAIP Norviga, aby zobaczyć, co mistrz może zrobić z tym językiem. Następnie sprawdź Clojure , nowoczesny dialekt Lisp, który może być jedną z następnych wielkich rzeczy.
C: Tylko dlatego, że to lingua-franca komputerów. :) Prawdopodobnie obecnie jest opcjonalny, jeśli ktoś jest przede wszystkim programistą w określonej domenie innej niż oprogramowanie. Uważam to za brzydkie, ale warto wiedzieć, aby docenić podstawowy sprzęt. Oczywiście korzystaj z K&R .
Haskell : czysta moc funkcjonalna. Gdzie obecny Com.Sci. teoria i praktyczna moc ekspresyjna spotykają się. Zobacz Real World Haskell .
Po powyższej wycieczce byłby bardzo biegły w rozwiązywaniu problemów i wyrażaniu rozwiązań w kodzie i byłby całkowicie swobodny z paradygmatami tutaj :
źródło
Tak bym to zrobił:
Python (lub Ruby lub Lua): Zinterpretowany język, bez typów, możesz zrobić rzeczy w kilku wierszach. Ogromna biblioteka (chyba do tego najlepiej Python). Możesz zagłębić się w algorytmy, ponieważ nie ma żadnych zakłóceń. Kompilacja nie jest konieczna, po prostu uruchom. Ponadto w Pythonie domyślnie uczysz dobrego stylu, ponieważ wcięcia w Pythonie są obowiązkowe. Możesz także uczyć orientacji obiektowej (w Lua jest to większy problem). Celem jest dobra zabawa i pokazanie uczniowi, co można zrobić.
C ++ (a może Java): szybki, pisany na maszynie język. Jeśli potrzebujesz orientacji obiektowej, znasz już kilka pojęć. Główną ideą jest „tłumaczenie” tego, co zrobiłeś w Pythonie i zrobienie tego z nowymi ograniczeniami (głównie typami). Teraz, jeśli masz odpowiednie koncepcje, dodawanie typów nie jest takim problemem. Następnym krokiem jest myśleć bardziej niskiego poziomu (Java nie pomaga tutaj), a wskaźniki Teach dobrze . Rozumiem przez to wyjaśnienie przestrzeni adresowej, procesora, systemu operacyjnego, abyś mógł zacząć widzieć pod swoim programem. Język skompilowany wprowadza rozróżnienie między interpretacją a kompilacją, bardzo przydatny do wyjaśnienia, czym jest język maszynowy itp.
Montaż : Wreszcie, bez magii, po prostu rozmawiasz z maszyną. Trwa debata na temat składni Intel i GAS, to nie jest ważne. Jeśli masz MIPS, uważam, że jest lepszy do nauczania, ale przypuszczam, że x86 jest wygodniejszy, ponieważ jest bardziej rozpowszechniony (x86_64 lepiej, ponieważ ma więcej rejestrów i drobiazgów). Musisz tylko usunąć część złożoności i pozwolić uczniom na dalsze badanie, jeśli chcą.
(Te pierwsze 3 to „głębokość”. Do tej pory schodziliśmy w dół, dopóki nie dotkniesz dna, które, jak mówią, jest „bliskie metalu”. Myślę, że to bardzo ważne, wiele pytań w programowaniu jest rozwiązany, gdy masz jasne pojęcie o tym, co się dzieje. Gdy to wiesz, możesz z pewnością zdobyć dalszą wiedzę.)
Schemat (lub Common Lisp lub Clojure): Jak powiedział @dukeofgaming, języki Lisp pozwalają dobrze uczyć rekurencji (dla tego schematu jest najlepszy, ponieważ nie ma wyraźnych pętli). Ale chciałbym uczyć dwóch innych rzeczy: zamknięć i makr. Makra odróżniają języki Lisp od innych. Osobiście nie lubię makr Scheme, ale nie jest to zbyt ważne. Myślę, że makra Clojure są na przykład ładne (ale rekursja w Clojure nie jest tak czysta, ponieważ JVM nie ma rekurencji ogona). Zamknięcia są bardzo ważną koncepcją, gdy już je omoczysz, natychmiast „widzisz” Javascript. Po przestudiowaniu języków C ++, Python i Lisp Javascript staje się „trywialny”.
Haskell : Jeśli chodzi o funkcjonalny język, nie sądzę, żebyś mógł pokonać Haskella. Lisp i Schemat są uważane za funkcjonalne, ale aby podkreślić funkcjonalne programowanie, musisz zmusić uczniów do myślenia bez stanu. Haskell ma również inne bardzo fajne rzeczy, takie jak curry i dopasowywanie wzorów do „destrukcji”. Nie znam dużo Haskella, ale zwięzłość kodu, który można napisać, jest po prostu piękna. Dobra znajomość Haskell znacznie ułatwia zrozumienie Erlanga.
Dalej : język stosu. To całkowicie łamie twoją logikę (jeśli Lisp i Haskell nie wystarczą). Posunąłbym się nawet do nauczania Jonesa Fortha, ponieważ znają oni zgromadzenie, a wtedy możecie całkowicie zrozumieć, co się dzieje. (Knowing Forth otwiera na przykład PostScript.)
(Więc te ostatnie 3 to szerokość, o której mówiłeś. Dla mnie te języki są na tyle dziwne, że zmieniają twój sposób myślenia. Przynajmniej dla mnie. I myślę, że dzięki tym rozumiesz wystarczająco paradygmatów, aby nauczyć się nowego języka bardzo szybko.)
Opcjonalnie możesz przestudiować te:
SmallTalk : język wyłącznie obiektowy. Aby zobaczyć, co dzieje się, gdy poważnie traktujesz orientację obiektu, język nie potrzebuje „if”, „for”. Wszystko jest przesłaniem: znowu wielka realizacja. (Ułatwi to teraz cel C).
Idź : (piękny) język z naciskiem na współbieżność. Uważam, że Go jest bardzo miły i wygodny w programowaniu.
Prolog : Kolejny paradygmat programowania. Nie napisałem żadnego Prologu, ale rozumiem, że to kolejny zadziwiający język.
źródło
Poważnie, mogłem nauczyć się języka BASIC, COBOL, Fortran, Forth, Pascal i Prolog, ale nigdy szczególnie nie potrzebowałem ich używać i tak naprawdę nie widzę żadnego sposobu, w jaki wpłynęłyby na moje użycie innych języki, z wyjątkiem być może niewłaściwego stosowania paradygmatów między sobą. Zajęło mi wieki oduczenie się języka BASIC na tyle, by napisać ustrukturyzowanego Pascala, kilka lat, aby przestać pisać kod Pascala w C, i kolejne kilka lat, aby uruchomić OOP, kiedy zacząłem używać Objective-C i Java. Z drugiej strony, odkąd pracuję (prawie) wyłącznie w językach OO, mogłem skoncentrować się na ulepszeniu mojego używania języków OO, nie starając się, aby wyglądały jak Scheme lub PostScript.
źródło
Trudno twierdzić, że jakakolwiek sekwencja jest idealna, ale opracuję plan, który mogę uzasadnić:
do
Nauka języka C wymaga cierpliwości i staranności, a także zapoznaje cię z podstawowymi sposobami radzenia sobie z danymi przez komputery i pokazuje prawie najszerszy zakres obowiązków, jakie programista może zaakceptować, radząc sobie z taką maszyną.
Perl
Jako antidotum na rygor wymagany przez C, spróbuj niewiarygodnie wybaczającego Perla. Co napisanie w C zajęło tydzień, możesz napisać w Perlu za godzinę. Wprowadza inny rodzaj przyjemności w programowaniu i pokazuje, jak wykluczenie pewnych obaw i szczegółów uwalnia programistę do skupienia się na różnych rzeczach.
C ++ , a może Java
Następnie zobacz, w jaki sposób skupienie się C na niskopoziomowych i prymitywnych aspektach programowania służy jako podstawa do podniesienia poziomu abstrakcji, zwracając uwagę na transakcje, które wykonuje się, poruszając się w abstrakcji w górę. Dowiedz się, jak tworzyć abstrakcje, które mogą zachować efektywność, która ma znaczenie dla Twojego programu.
Common Lisp
To nagroda za poprzednie hasło. Znajdziesz echo tego, czego nauczyłeś się we wszystkich poprzednich językach, i zobaczysz, jak głupie wydaje się tyle poprzednich ustępstw podczas programowania w Lisp. Preprocesor C i szablony C ++ przygotowują do docenienia systemu makr Lisp. Odzyskasz łatwość wyrażania się w Perlu, możliwości optymalizacji na niskim poziomie od C, możliwości budowania abstrakcji w C ++ lub Javie i miniesz je wszystkie. Żadna z poprzednich trzech - być może oprócz debuggera Perla - nie przygotuje cię do interaktywnego programowania z wydajnym REPL („odczyt, ewaluacja, pętla drukowania”). Praca z obrazemoparte na środowisku - które zmienia związek między twoim kodem źródłowym a ideą „programu wykonywalnego” - zmieni twoje wyobrażenie o tym, co to znaczy zbudować program.
Poza tymi czterema eksploracja innych stylów programowania, takich jak programowanie funkcjonalne w Haskell lub programowanie logiczne w Prologu, pozwala na pełniejsze zrozumienie zakresu programowania - szeroka wiedza, jeśli chcesz - ale w tym momencie lepiej wykorzystać swój czas doskonaląc swoje umiejętności - głęboka znajomość - w dowolnym znanym języku.
Po skosztowaniu wystarczającej liczby różnych języków, twój pogląd podniesie się, aby skupić się na ideach wykraczających poza którykolwiek z nich. To trochę jak różnica między nauką prowadzenia samochodu ojca a umiejętnością prowadzenia dowolnego samochodu: możesz nie cieszyć się z prowadzenia wynajętego minivana przez kilka dni, dobrze znając przyjemność z prowadzenia ulubionego samochodu sportowego, ale wymyślisz, jak go obsługiwać, i na pewno będziesz wyciągał z biednej bestii więcej niż amator.
źródło
1. Smalltalk
Zaprojektowany pierwotnie przynajmniej częściowo jako sposób na korzystanie przez dzieci z komputerów do nauki. Składnia jest wystarczająco prosta, aby opisać ją w akapicie. Podobnie jak LOGO jest przykładem zasady „niska bariera wejścia, wysoki sufit”.
Smalltalk to czysty język OO w tym sensie, że „wszystko jest przedmiotem”.
Uczy również wielu technik funkcjonalnych, szczególnie w interfejsie API Collection: łączenie komunikatów, funkcje wyższego rzędu, mapowanie, zmniejszanie i tak dalej.
Społeczność Squeak jest żywa i przyjazna. Zobaczysz także wiele dyskusji na temat zaawansowanych technik: podobnie jak społeczność lisp, na liście dyskusyjnej jest wielu bardzo doświadczonych Smalltalkerów, którzy chętnie dzielą się swoją wiedzą. (Nie szkodzi, że społeczność Squeak ma dużą populację profesjonalnych nauczycieli). Jest też inna lista dla początkujących.
2. PROLOG
Programowanie logiki języka, który daje bardzo odmienny pogląd obliczeń na niemal każdym innym języku. Prolog jest również wysoce deklaratywny (ale nie całkowicie:
!
operator lub cut może mieć znaczący wpływ semantyczny na predykat).3. Common Lisp
Zamień tutaj program, jeśli chcesz. Common Lisp obsługuje wiele paradygmatów, zwłaszcza OO i funkcjonalny. Ma również długą historię (Lisp jest drugim najstarszym wciąż powszechnie używanym językiem: tylko starszy FORTRAN).
4. Haskell
(Zastrzeżenie: Dopiero zacząłem się go uczyć.) Prawdopodobnie najczystszy funkcjonalny język na świecie. Ma bardzo zaawansowany system typu statycznego. Dostępne są przydatne książki wprowadzające .
5. C lub Delphi
Musisz wiedzieć, jak działają komputery. Musisz wiedzieć, jak działa pamięć i procesor. Oba są tradycyjnie „bliskie metalu” i mają społeczności, które zachęcają do myślenia o tym, jak ich język kompiluje się w asemblerze.
Dlaczego to zamówienie?
Smalltalk jest bardzo łatwy do nauczenia, więc możesz szybko zacząć koncentrować się na rozwiązywaniu problemów zamiast walczyć z kompilatorem („niska bariera wejścia”). Po rozpoczęciu programowania nie ma również sztucznego ograniczenia tego, co możesz zrobić - „wysoki sufit”.
Gdy masz już całkiem jasne pojęcie o tym, jak działa OO (i - pod warunkiem, że WIELE istnieje inne rozumienie tego, co oznacza „OO” - można powiedzieć, że OO dominuje na rynku), przejście na Prolog gwarantuje, że nie zaczniesz myśląc, że OO jest jedynym sposobem. Prolog bardzo różni się od większości języków i rozciąga mięśnie mentalne, abyś nie zaczął myśleć, że wiesz wszystko.
Z kolei Common Lisp jest językiem dla dorosłych. Ma dojrzały standard, jest liderem w projektowaniu języków od dziesięcioleci (wraz z Smalltalk) - wszystkie te fantazyjne nowe funkcje, które właśnie zyskał Twój ulubiony język? Szanse są pomysłami inkubowanymi w Lisp lub Smalltalk. Common Lisp jest również trochę wartki, a wszędzie znajdziesz brodawki.
Haskell jest czwarty na liście, ponieważ (powiedziano mi: dopiero zacząłem się uczyć) jego czystość oznacza, że niektóre bardzo powszechne rzeczy (jak We / Wy) są trudniejsze do zrobienia niż w mniej czysto funkcjonalnych językach. Haskellowie używają również dość egzotycznych terminologii (powiedzmy, takich jak „katamorfizm”, powiedzmy), i prawdopodobnie lepiej byłoby mieć trochę doświadczenia w programowaniu pod ręką, zanim się z tym zmierzysz. (Ale muszę powtórzyć, dopiero zacząłem się tego uczyć! Weź tę opinię ze szczyptą soli!)
A dlaczego C / Delphi trwa? Ponieważ chyba, że pracujesz w systemach wbudowanych, tak naprawdę nie powinieneś uczyć się programowania, myśląc, że wystarczy manualne zarządzanie pamięcią. Śmieci działał wystarczająco dobrze dla maszyny poziomu 1980. Twój telefon jest tak potężny!
Na koniec nie umieściłem Erlanga na powyższej liście, chociaż naprawdę powinienem.
źródło
Pyton. Doskonałe wprowadzenie do programowania. Będzie to również wiązać się z każdym wcześniejszym kontaktem z programowaniem.
Schemat. Doskonałe wprowadzenie do programowania. Jeśli masz do czynienia z nowicjuszami w dziedzinie programowania, możesz uczyć tego najpierw, a Python drugiego. Jedną alternatywą byłby najpierw Python, a następnie Common Lisp zamiast Scheme: więcej pracy, ale więcej nagrody.
C. Język niskiego poziomu, który pozostaje blisko krzemu. Dobry do nauki, co potrafi komputer. Możesz zastąpić jakąś formę języka asemblera, ale C jest dość zbliżony do podstaw i znacznie łatwiejszy w obsłudze.
Prolog. Alternatywnie, zamień dowolny język ogólnego przeznaczenia w stylu deklaratywnym, jeśli możesz znaleźć taki, który ci się bardziej podoba.
Haskell. Dla systemu typów i czystej funkcjonalności, jeśli nic więcej.
Jest tu kilku kandydatów, ponieważ nie można objąć wszystkich pojęć sześcioma językami. Warto zapoznać się z Common Lisp, choćby dla systemu makr i systemu obiektowego (który różni się od większości innych, które widziałem). Po czwarte, Tcl i APL są dziwnymi językami, które odniosły pewien sukces, i jeden z nich byłby dobry, aby zapobiec uczniowi, że nauczył się tego wszystkiego. Erlang byłby dobry dla współbieżności.
źródło
Podano wiele dobrych odpowiedzi, ale nie widziałem nikogo, kto oferowałby SQL. Jest to zupełnie inne zwierzę niż większość wymienionych na liście i bardzo ważne dla każdego programisty, który ma do czynienia z bazami danych.
Możesz także rozważyć niektóre „języki” skryptowe na poziomie systemu operacyjnego, takie jak Batch, grep, awk itp. „Make” może również należeć do tej kategorii.
Innym językiem, który możesz rozważyć (jeśli jeszcze nie jest całkowicie martwy) jest COBOL. Jest wystarczająco różniący się od innych języków proceduralnych, że należy o nim wspomnieć. Odmiany C, Fortran, Basic itp. Stały się tak podobne, że gdy się z nimi zaznajomisz, przejście do drugiego nie jest dużym problemem, ale w COBOL brakuje wielu konstrukcji uznawanych za oczywiste w innych. (Minęło co najmniej 20 lat, odkąd zrobiłem cokolwiek z COBOL, więc moje obserwacje mogą być nieaktualne w odniesieniu do tego języka.)
Możesz wspomnieć o APL tylko z historycznego punktu widzenia - lub pozwolić mu spoczywać w pokoju. Twój wybór.
źródło
Proponuję najpierw przeczytać Erica Raymondsa „Jak zostać hakerem”, ponieważ ma on kilka bardzo interesujących uwag na temat tego, jak zacząć, w tym Lisp, który ma pojęcie „kod to dane, a dane to kod”.
Do programowania sugerowałbym również Haskell, Prolog, SQL i język asemblera (tylko niektóre).
Niezależnie od tego, czego chcesz się nauczyć, poświęć trochę czasu, aby nauczyć się go poprawnie i napisz nietrywialne ilości kodu. Przypomina jazdę na rowerze - nie można się tego nauczyć z książki.
źródło
Po pierwsze> Co chcesz zrobić, kiedy zaczniesz programować? Nauka bycia programistą gier jest inna niż nauka bycia programistą baz danych dla biznesu ... różni się od programisty internetowego ...
Po drugie> Czy kiedy zaczniesz się uczyć, chcesz zacząć wysoko i zejść na dół? Lub zacznij od niskiego poziomu i podążaj w górę. Nauka języka C # (wysoki poziom) różni się znacznie od nauki asemblera (niski poziom).
Ogromny wybór zależy od tego, co chcesz zrobić. Programowanie sterownika najprawdopodobniej obejmie C lub asemblację ... Programowanie strony będzie PHP, C #, asp itp. Nie dotkniesz asemblera do programowania w sieci ... itd ...
Jeśli chodzi o podstawy ... kiedy zdecydujesz, co chcesz zrobić, łatwiej jest wybrać język. Na przykład zostałem analitykiem danych w szpitalu. Tak więc moim „wyborem” języków jest SQL / TSQL / DB2 dla dostępu do danych, C # WPF dla klientów Windows, Silverlight dla klientów WWW, niektóre RPG / CL dla logiki zaplecza IBM ...
Osobiście trzymam się dobrej książki + buduję własny program do nauki języka. Lubię APress i uwielbiam czytać C # 2008 Ilustrowane podczas nauki C #. Mają inne książki, które zawierają podstawy zarówno dla osób niewykształconych, jak i dla ekspertów.
źródło
Nowicjusz potrzebuje tylko jednego języka, aby zacząć, po nauczeniu się drugiego języka, oni już robią postępy poza wieloma konkurującymi programistami. Uczyłbym się w następującej kolejności:
Możesz zapytać „gdzie jest C ++?” a co z X? Szczerze mówiąc, uczenie się wielu języków ma kilka cech: wzbogaca twoje doświadczenie i zapewnia chęć do nauki większej liczby języków. Lista języków, które znam dobrze (Java, C #, Ruby, C ++, Javascript) są zorientowane obiektowo - ale przede wszystkim dlatego, że to właśnie muszę robić codziennie w pracy. Lista języków, z którymi się zetknąłem (Smalltalk, Python, Erlang, JESS, C, asembler [Motorola 6502/6510], Go) nauczyła mnie cennych lekcji. Potrafię przynajmniej zrozumieć, co się dzieje z tymi językami. Jest wiele rzeczy, których nie zbadałem, ale bardzo dobrze może w przyszłości. Istnieje również kilka języków znaczników: HTML, XSL: FO, XSLT, CSS, XML, SGML, na które ludzie muszą się ujawnić, jeśli będą w jakikolwiek sposób współpracować z siecią.
Po nauczeniu się co najmniej dwóch różnych języków, naprawdę nie sądzę, że powinieneś ograniczać to, co ktoś, kto chce się uczyć, decyduje się na następny. Uczenie się powinno być doświadczeniem organicznym, a zbyt duża struktura procesu tworzy grupę ludzi, którzy myślą dokładnie tak samo. Można powiedzieć, że monokultura.
źródło
Większość z tych odpowiedzi wydaje się mniej więcej taka sama, dlatego zamierzam przedstawić inną opinię. Od dawna uważam, że najlepszym pierwszym językiem jest Tcl.
Dlaczego? Po pierwsze, bardzo łatwo się go nauczyć. Język nie ma wiele składni, więc uczeń może bardziej skupić się na pojęciach programowania, a mniej na osobliwościach składniowych danego języka. W chwili pisania tego tekstu Tcl ma dokładnie 12 zasad rządzących całym językiem (w porównaniu z jedenastoma w ciągu ostatnich kilku dekad).
Po drugie, Tcl ma fantastyczny wbudowany język GUI, dzięki czemu można uzyskać względnie natychmiastową satysfakcję i nauczyć się podstaw programowania sterowanego zdarzeniami.
Po trzecie, jest rozszerzalny. Chcesz nauczyć się powtarzania pętli? Możesz napisać polecenie wykonujące pętlę powtarzania, dzięki czemu nie tylko nauczysz się korzystać z powtarzania ... dopóki nie dowiesz się, jak różni się ona od pętli while, ponieważ tak naprawdę napisałeś ją samodzielnie.
Ponadto, ponieważ jest rozszerzalny, istnieje łatwy podział na C. Możesz nauczyć się podstaw języka C i nauczyć się: a) rozszerzać Tcl o nowe polecenia napisane w innym języku, lub b) nauczyć się, jak dodać język skryptowy do programu napisanego w DO.
Kiedy nauczysz się Tcl i C, większość innych języków leży gdzieś pomiędzy tymi dwoma skrajnościami i powinna być stosunkowo łatwa do opanowania. Moja pełna lista, z czterema, których nauczałbym po Tcl i C, to:
źródło
Asembler, C, SQL, C #
Wiem, nudno i old skool. Całe pytanie ignoruje naprawdę trudną część programowania, która polega na rozwiązywaniu problemów, modelowaniu domen i budowie algorytmów. Ale oto dlaczego:
nie można udawać, przechodząc przez język asemblera; albo to dostajesz, albo nie. kompilator cię nie uratuje, nie ma narzuconych ram ani bibliotek i nie możesz ukryć się przed architekturą maszyny; to czyste programowanie (na poziomie początkującym dodaj dwie liczby)
po napisaniu kilku programów w asemblerze zawierających więcej niż kilkaset wierszy wskaźniki i zarządzanie pamięcią nie są już tajemnicze i powinieneś zacząć zauważać wzorce w kodzie (if, switch, tablica, pętle itp. ). C wyprowadza te wzory na światło słoneczne i pozwala im świecić. Standardowa biblioteka jest przydatna, nie będąc ogromnym, ale nie zawracaj sobie głowy makrami / szablonami / etc. na tym etapie.
teraz wskocz do baz danych za pomocą SQL. Nie przesadzaj z procedurami przechowywanymi, po prostu zapoznaj się z podstawami tabel i zapytań.
po napisaniu kilku programów C zawierających więcej niż kilkaset linii, wskaźniki, struktury i zarządzanie pamięcią są drugą naturą, a konstrukcje proceduralne są starymi przyjaciółmi. Zaczniesz zauważać wzorce wyższego rzędu: te funkcje zawsze mają tę strukturę danych, ta część kodu jest taka jak ta część kodu, z wyjątkiem metod X, Y i Z i tak dalej. Dodaj do tego swoje dane relacyjne, a teraz jesteś gotowy na język obiektowy. Z ogromnymi ramami i ogólnie tępą dokumentacją. Witamy w prawdziwym świecie! Eksploruj GUI, pisz aplikacje komputerowe, pisz strony internetowe, pisz usługi sieciowe, pisz co chcesz. Idź po pracę, jeśli masz na to ochotę.
Czy jesteś teraz programistą Jedi? Kod ninja? Nie , teraz jesteś po prostu kompetentny. Ale masz solidne podstawy do eksploracji nowych, błyszczących rzeczy.
źródło
Potrzebujesz podstaw:
Potem prawdopodobnie nie ma to znaczenia.
źródło
OK, to ostatni dzień nagród. I dodaję swoją odpowiedź. Moja sugerowana sekwencja
C, C ++, JAVA / C #, Python / Ruby, Dowolny inny język (Assembly / Lisp / Prolog itp.)
źródło
Schemat, C, C ++
Będę stronniczy i użyję modelu, którego obecnie używa mój uniwersytet, do swojego podstawowego programu informatyki. Byłem temu przeciwny przez pierwszy rok, ale w późniejszych latach jestem za to wdzięczny. Model opiera się na tym, że nie wymaga żadnego doświadczenia w programowaniu, ale wymaga umiejętności uczenia się.
Schemat
To my uczymy się programowania, im mniej magii, tym lepiej. Język nauczania Schematu przedstawia jasną i rozsądną definicję języka, naprawdę niewielki zestaw aksjomatów („magii”), na których można budować i rozszerzać. Każdy, kto rozumie funkcje matematyczne, może śledzić i rozumować programy Scheme. Rozpoczęcie od schematu zapewnia czysty, ale skuteczny sposób myślenia o obliczeniach bez martwienia się o szczegóły dotyczące konkretnego języka.
C
Przejście ze schematu do C jest drastyczne, ale pozwala poznać bardzo ważne mapowanie języków wysokiego poziomu na języki niskiego poziomu. Poznanie modelu pamięci (wskaźniki, stos, stos itp.) Oraz sposobu kompilowania i uruchamiania programów, jak działają wskaźniki, stos i stos są podstawowymi umiejętnościami. Dzięki zrozumieniu na niskim poziomie możesz zacząć analizować programy na wyższym poziomie (Big O). Możesz rozpocząć tworzenie własnych abstrakcyjnych typów danych, grając z różnymi implementacjami (powiedzmy prostą tabelę skrótów vs. drzewo binarne dla zestawu).
C ++
Poprzez naukę języka C i schematu zaczynamy dostrzegać różne paradygmaty języków programowania i sposoby ich zastosowania do różnych problemów. Teraz możesz podejść do najstraszniejszych aspektów programowania: wyboru i kompromisów. Wybór języka programowania może wpływać na wydajność, czytelność, łatwość konserwacji, odporność itp. W przypadku rozwiązywania problemów większych niż rzeczy, które można trzymać w głowie, wybór ten jest świetny, ale także niebezpieczny. C ++ stara się dokonać dla programisty jak najmniejszej liczby wyborów. Poprzez naukę C ++ nauczysz się, jak samodzielnie wymieniać te kompromisy i wybierać rozwiązania swoich problemów.
Nie możesz używać żadnego z tych języków w branży ani dotykać ich ponownie, ale proces ich uczenia pomaga zrozumieć inne języki, których będziesz używać. Innym aspektem jest to, że uczysz się narzędzi w określonym języku. Uruchamianie gcc za pomocą wiersza poleceń, nauka Vima, przechodzenie przez program za pomocą GDB, tworzenie plików Make, sprawdzanie kodu za pomocą SVN, pisanie skryptów powłoki w celu automatyzacji testowania itp.
Pamiętaj, że podstawa programowa obejmuje również inne kursy (architektura komputera, struktury danych i algorytmy, kompilatory, systemy operacyjne itp.). Zatem samo uczenie się tych języków nie wystarczy, aby biegle programować.
źródło
Przejście z języka podstawowego na język wysokiego poziomu jest właściwą drogą. W ten sposób nadal masz pojęcie, co dzieje się z tyłu.
źródło
Pyton. Aby załatwić sprawę, wykonaj zwykłe programowanie. Proceduralne, OO i (do pewnego stopnia) funkcjonalne.
Wyrażenia regularne. Są w bibliotece Pythona, ale jest to osobna DSL.
Shell (BASH lub cokolwiek). „&”, „|”, „;” operatory łączenia procesów są w Pythonie krytyczne i nieprzyjemne.
SQL. To - na razie - lingua franca w zakresie dostępu do danych.
XHTML. To - na razie - lingua franca do prezentacji danych.
CSS.
Może C, jeśli to konieczne.
źródło
Zacznij blisko metalu:
Problem z tak szerokim podejściem polega na tym, że nikt nie może stać się nawet w tych językach zdalnie bez wieloletnich studiów.
Chyba że Twoim celem jest nauczenie ich „Witaj świecie”, co powinno zająć około miesiąca dla wszystkich 6.
źródło
Dlaczego nie pójść od razu i nauczyć się VB lub C #. Oba moim zdaniem są kompletnymi językami, od początkującego do zaawansowanego, imho.
źródło