Jak mogę się upewnić, że faktycznie uczę się programowania, a nie tylko uczę się szczegółów języka? [Zamknięte]


82

Często słyszę, że prawdziwy programista może łatwo nauczyć się dowolnego języka w ciągu tygodnia. Mówiono mi, że języki to tylko narzędzia do wykonywania zadań. Programowanie to najwyższa umiejętność, której należy się nauczyć i opanować.

Jak mogę się upewnić, że faktycznie uczę się programowania, a nie tylko uczę się szczegółów języka? Jak mogę rozwinąć umiejętności programowania, które można zastosować we wszystkich językach zamiast tylko jednego?


25
Spróbuj nauczyć się innego języka. Spróbuj rozwiązać problemy, które już wiesz, jak rozwiązać w swoim pierwszym języku w nowym języku. Na początku nie będzie łatwo. Ale będziesz wiedział, że uczysz się, gdy rozwiązywanie starych problemów w nowy sposób staje się zauważalnie łatwiejsze (uwaga: może to zająć trochę czasu).
FrustratedWithFormsDesigner

42
Ponadto ludzie, którzy twierdzą, że mogą uczyć się języka w ciągu tygodnia, muszą zdefiniować, co mają na myśli, mówiąc „Ucz się”. "What do you mean you're not an expert in LanguageX?!? I can learn a language in a Week!". Tydzień później:"See, I've learnt the language, and here's a Hello World example I copied from Wikipedia to prove it!"
JohnL,

9
Należy zadać jedno pytanie. Czy konstruujesz swoją logikę w składni, czy używasz szybszego i wydajniejszego modelu mentalnego? Uważam, że początkujący programiści zwykle myślą przy użyciu składni.
ChaosPandion 10.10.13

10
@PaulR: Nauka jazdy na rowerze nie zajęła mi 10 000 godzin. Albo pływać, jeśli o to chodzi.
Robert Harvey

7
@PaulR Mówi się, że opanowanie umiejętności zajmuje 10 000 godzin, a nie tylko „nauka”
Tobias Kienzler,

Odpowiedzi:


96

Nie martw się o spotkanie z jakąś niedorzeczną koncepcją „umiejętności”, tak często słyszaną w takich stwierdzeniach jak:

  • Wszystkie języki programowania są w zasadzie takie same.
  • Po wybraniu jednego języka możesz szybko i łatwo wybrać dowolny inny język.
  • Języki to tylko narzędzia, istnieje nadrzędna magia mózgu, która faktycznie tworzy oprogramowanie.

Wszystkie te stwierdzenia oparte są na błędnej przesłance i zdradzają brak doświadczenia w szerszym spektrum języków programowania. Są to bardzo powszechne stwierdzenia, w które głęboko wierzy programiści. Nie będę kwestionować tego, ale zakwestionuję ich dokładność.

Udowodniono to po prostu: Spędź tydzień (lub naprawdę więcej niż kilka dni), próbując poznać podstawy Haskell , Prolog lub Agda . Wkrótce zaczniesz słyszeć starą piosenkę Sesame Street w swojej głowie: „Jedna z tych rzeczy nie jest podobna do innych ...”.

Jak się okazuje, istnieje cały szereg języków programowania, technik i podejść, które są tak obce od tego, co 95% z nas robi lub kiedykolwiek robiło. Wielu zupełnie nie zdaje sobie sprawy z tego, że istnieje choć jedna z tych innych koncepcji, co jest w porządku i nie są konieczne, aby być zatrudnionym, a nawet skutecznym programistą.

Ale pozostaje faktem: te techniki i podejścia istnieją, są dobre dla wielu różnych rzeczy i mogą być bardzo przydatne, ale nie są one takie, do czego jesteś przyzwyczajony, a ludzie nie mogą ich po prostu odebrać po południu majstrowania.

Ponadto powiedziałbym, że większość przypadków, w których ludzie twierdzą, że mają lub potrafią uczyć się tak skomplikowanych rzeczy, jak języki programowania, tak szybko, jak w tydzień, cierpią z powodu efektu Dunninga Krugera , Wikipedia (moje podkreślenie):

Efekt Dunninga-Krugera jest uprzedzeniem poznawczym, w którym osoby niewykwalifikowane cierpią na iluzoryczną wyższość, błędnie oceniając ich zdolności znacznie powyżej średniej. Ta tendencja jest przypisywana metapoznawczej niezdolności niewykwalifikowanych do rozpoznania swoich błędów.

Odsyłam ludzi do bardziej doświadczonego spojrzenia na koncepcję uczenia się programowania przez Petera Norviga: Naucz się programować za dziesięć lat .

Badacze (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) wykazali, że potrzeba około dziesięciu lat na rozwój wiedzy specjalistycznej w wielu różnych dziedzinach, w tym w szachach, muzyce kompozycja, operacja telegraficzna, malarstwo, gra na pianinie, pływanie, tenis i badania w neuropsychologii i topologii. Kluczem jest celowa praktyka: nie tylko powtarzanie tego w kółko, ale stawianie czoła wyzwaniu, które wykracza poza twoją obecną zdolność, wypróbowywanie go, analizowanie wydajności podczas i po wykonaniu oraz poprawianie błędów. Następnie powtórz. I powtórz jeszcze raz.


Z pewnością istnieje zestaw nadrzędnych zasad, które ułatwią naukę wszystkich języków!

Być może, ale twierdzę, że ten zestaw zasad jest tak duży, że prawie zawsze będą języki poza twoim tygodniowym zasięgiem. Gdy dodajesz nowe koncepcje do listy, którą znasz i czujesz się swobodnie, ta lista języków poza twoim bezpośrednim zasięgiem może się skurczyć, ale trudno mi uwierzyć, że kiedyś zniknie. Lista koncepcyjnych podejść do obliczeń jest tak szeroka, że ​​zaskakuje, od języków konkatenatywnych poprzez języki oparte na wektorze po języki specjalizujące się w sztucznej inteligencji lub metaprogramowaniu ( lub języki, które istnieją wyłącznie w celu obsługi wyrażeń regularnych ).

Po dziesięciu latach będziesz mógł ogólnie programować. Oznacza to, że możesz napisać nieco przyzwoity kod w jakimś języku lub stylu języków. Więc po 10 latach jesteś gotowy, by zacząć zajmować się tymi niezliczonymi szerokimi, przekrojowymi koncepcjami przez resztę swojego życia, a poza tym , że jesteś Edsgerem W. Dijkstrą , Donaldem Knuthem lub Johnem D. Carmackiem , nie dostaniesz się do wszystkich z nich.


11
Enh. Istnieje różnica między „znajomością” języka a biegłością wystarczającą do wykrycia i naprawienia drobnego błędu w jednym. Dobry programista może zrobić to drugie dość szybko, nawet w archaicznych językach.
Telastyn,

5
@ CharlesE.Grant Myślę, że przeceniasz to, czego większość uczy się na studiach, a także to, ile czasu zajmuje osiągnięcie pół-biegłości w języku takim jak Haskell lub Prolog. Twierdziłbym, że wykwalifikowany doświadczony inżynier bez doświadczenia w programowaniu funkcjonalnym zajęłoby znacznie więcej niż tydzień, aby móc naprawić swój pierwszy błąd w programie Haskell.
Jimmy Hoffa,

11
Nadal twierdzę, że bardzo podstawowy zestaw pojęć jest dość zwarty. Kiedy zrozumiesz przepisywanie terminów , masz narzędzie do definiowania rachunku lambda, rachunku SK, maszyny Turinga, algorytmu Markowa itp. Niewielka liczba naprawdę fundamentalnych pomysłów może obejmować większość informatyki. Ale oczywiście wymagane jest doświadczenie, aby móc zobaczyć proste wzorce w pozornie złożonych rzeczach.
SK-logic

4
Powiedziałbym, że to nie tyle efekt Dunninga-Krugera, co zwykłe założenie, że „język programowania” = „język programowania w stylu c”. Po znajomości przyzwoitej ilości języka C ++, przyzwoitej ilości C # oraz kilku fragmentów Perla i Pythona, spodziewam się, że w ciągu tygodnia będę w stanie płynnie posługiwać się Javą, PHP itp. Niekoniecznie ekspert, ale przynajmniej dość płynnie. I nie podnieść JavaScript w ciągu kilku dni. W tym momencie chodzi głównie o poznanie różnic między nimi. Uwaga: najpopularniejsze języki świata rzeczywistego są podobne do litery C. To samo niekoniecznie byłoby prawdą, powiedzmy, Prolog.
neminem,

2
@WayneWerner Poważnie, różnica między językami Haskell, Prolog i Algol jest czymś więcej niż składnią, tylko utrwalasz mit. Podejmij mój test powyżej: poświęć tydzień na naukę Haskell i zobacz, jak to działa dla Ciebie. Szczerze mówiąc, będzie to dla ciebie dobre, wiele można się z tego nauczyć.
Jimmy Hoffa,

51

... jak mogę rozwinąć umiejętności programowania, które można zastosować do wszystkich języków zamiast tylko jednego?

Kluczem do tej kwestii jest, aby wznieść się w język i pomyśleć nie języka jesteś kodowania.

WAT

Doświadczeni programiści polyglot myślą w abstrakcyjnym drzewie składni (AST) własnego modelu mentalnego języka. Nie uważa się, że „potrzebuję pętli for”, a raczej „muszę coś zapętlić” i tłumaczy to na odpowiedni dla iteratora lub rekurencji dla tego języka.

Jest to podobne do tego, co widzi się podczas nauki języka mówionego. Ludzie, którzy mówią wieloma językami, płynnie myślą o znaczeniu , które pojawia się w danym języku.

Pewną wskazówkę dotyczącą tego AST można znaleźć w dwóch filmach o śledzeniu wzroku Kod Zrozumienie ze śledzeniem oczu i Eksperymentowanie z kodem oka (nowicjusz), w którym obserwuje się ruchy oka początkującego i doświadczonego programisty. Widać, że doświadczony programista „kompiluje” kod do swojego modelu mentalnego i „uruchamia” go w swojej głowie, podczas gdy początkujący musi iterować kod słowa kluczowego według słowa kluczowego.

Zatem kluczem do pytania o rozwijanie umiejętności programowania w odniesieniu do wszystkich języków jest nauka wielu języków, dzięki czemu można zdystansować się od modelu mentalnego jednego języka i rozwinąć zdolność do samodzielnego generowania AST dla problemu w język główny, który jest następnie tłumaczony na dany język.

Gdy ktoś ma już umiejętność używania AST w głowie, nauka innego języka w ramach podobnej szkoły myślenia (przejście do Befunge jest trochę skokiem z Jawy, ale nie tak bardzo z Forth ) staje się znacznie łatwiejsze - to „tylko” przetłumaczenie AST na nowy język, który jest o wiele łatwiejszy od trzeciego, czwartego i piątego (itd.) czasu, w którym jest to zrobione.


Jest klasyczny artykuł: Prawdziwi programiści nie używają Pascala . Część tego brzmi:

... zdeterminowany prawdziwy programista może pisać programy Fortran w dowolnym języku

Są też bity, dla których nie możesz po prostu użyć mentalnej AST - musisz także myśleć w języku. Zajmuje to trochę czasu (wciąż jestem oskarżany o pisanie kodu Perla w Pythonie, a mój pierwszy kod Lisp został sprawdzony pod kątem „To bardzo dobry program w języku C.”).

W tym celu muszę wskazać artykuł opublikowany przez ACM, Jak nie pisać Fortran w żadnym języku . Trzeci akapit tego artykułu (który nie prowadzi do cytatów) bezpośrednio odnosi się do pytania:

Istnieją cechy dobrego kodowania, które wykraczają poza wszystkie języki programowania ogólnego przeznaczenia. Możesz zastosować dobry projekt i przejrzysty styl w prawie każdym kodzie, jeśli się do niego zastosujesz. To, że język programowania umożliwia pisanie złego kodu, nie oznacza, że ​​musisz to zrobić. A język programowania, który został zaprojektowany w celu promowania dobrego stylu i designu, nadal może być używany do pisania okropnego kodu, jeśli programista jest wystarczająco kreatywny. Możesz utopić się w wannie z calem wody i możesz łatwo napisać całkowicie nieczytelny i niemożliwy do utrzymania program w języku bez gotosów i numerów linii, z obsługą wyjątków i rodzajami ogólnymi oraz wywożeniem śmieci. Niezależnie od tego, czy piszesz Fortran, Java, C ++ lub Smalltalk, możesz (i powinieneś) wybrać dobry kod zamiast złego.

Nie wystarczy mieć AST - trzeba mieć AST, którą można przetłumaczyć na inne języki. Posiadanie Fortran AST w głowie i pisanie kodu Fortran w Javie nie jest dobrą rzeczą. Trzeba także znać język i jego idiomy, aby móc myśleć w tym języku (pomimo tego, co powiedziałem na samym szczycie).

Widziałem kod Java napisany przez kogoś, kto nie przestał pisać kodu C. Był jeden obiekt z główną metodą. W tym obiekcie znajdowało się kilka metod statycznych wywoływanych przez mainprywatne klasy wewnętrzne, które miały pola publiczne (a zatem wyglądały bardzo podobnie do rozpórek). Był to kod C napisany w Javie. Wszystko, co zostało zrobione, to przetłumaczenie składni jednego języka na inny.

Aby przejść przez ten punkt, trzeba nadal pisać kod w wielu językach, nie myśleć w tych językach podczas projektowania kodu, ale myśleć w nich, tłumacząc projekt na kod, aby poprawnie pracować z idiomami języka.

Jedynym sposobem na osiągnięcie tego - możliwość rozwijania umiejętności programowania, które można zastosować we wszystkich językach - jest kontynuowanie nauki języków i utrzymanie elastyczności tego mentalnego języka programowania, a nie powiązania go z jednym językiem.

(Przepraszam ChaosPandion za ciężkie pożyczenie od pomysłu, który przedstawił ).


3
Nie ma potrzeby przepraszać. Myślę, że napisałeś imponującą odpowiedź.
ChaosPandion,

Chciałem podziękować osobie, która skłoniła mnie do myślenia w tym kierunku, aby napisać odpowiedź.

3
To bardzo dobra odpowiedź. Chciałbym móc dwukrotnie głosować.
Wayne Werner,

2
Właściwie właśnie dlatego nie powinieneś uczyć się najpierw OO, ponieważ formatuje twój mózg jednym z najgorszych możliwych wyobrażeń AST.
Morg.

1
@ JimmyHoffa - Być może masz rację. Zawsze początkowo uczyłem w jednym języku, a później powoli wprowadzałem kolejne. Nadal uważam, że warto to odkrywać, ponieważ zawsze mogę zahamować i skoncentrować się na jednym języku. (SML wydaje się być całkiem dobrym wyborem.)
ChaosPandion,

12

Wybierz język i zacznij pisać. Python jest dobrym wyborem dla początkujących. Dostępnesamouczki online , dzięki którym można nauczyć się, jak robić to poprawnie.

Wszystko z tego wynika. Twoje zainteresowania doprowadzą cię do ram i koncepcji projektowych, które dodadzą wyrafinowania twoim programom. Dowiesz się, że istnieją kursy online, które pozwolą ci ugruntować podstawy i teorię oraz że istnieją różne paradygmaty programowania, które możesz eksplorować i tak dalej.

I tak, odkryjesz języki takie jak Haskell, które nauczą cię czegoś nowego, gdy tylko będziesz mieć solidne podstawy w podstawach.

Niektórzy programiści prawdopodobnie sądzą, że wszystkie języki są takie same, ponieważ nie były narażone na żadne, które powodują, że myślą inaczej. Wszystkie najczęściej używane języki pochodzą z Algolu (są to głównie języki proceduralne), a spośród nich większość to języki nawiasów klamrowych podobne do C. Wszystkie z nich robią zasadniczo te same rzeczy, choć niektóre z nich są bardziej wyrafinowane niż inne.


2
To nie jest tak naprawdę prawda? Niektóre języki programowania kodują wszystko jako czyste funkcje (w tym decyzje + pętle). Inne mogą być modelowane za pomocą pchania i popping obiektów z zestawów itp.
jozefg 10.10.2013

1
Co nie jest prawdą? Musisz nauczyć się czołgać, zanim będziesz mógł chodzić lub biegać.
Robert Harvey

1
Ach, powinienem sprecyzować, miałem na myśli ostatni akapit, zgadzam się z resztą odpowiedzi
jozefg

1
Ostatni akapit zastąpiłem tym, który lepiej odzwierciedla moje zdanie.
Robert Harvey

5

Programowanie polega na rozwiązywaniu problemów w taki sposób, że rozwiązanie można wyrazić w tak ograniczonej gramatyce, że można je wdrożyć za pomocą języka programowania. Sztuka programowania jest zatem sztuką rozwiązywania problemów.

Niektóre języki zapraszają inne paradygmaty programowania, takie jak orientacja obiektowa, sterowana zdarzeniami, wielowątkowa i oparta na frameworku MVC. Są to tylko modele i wzorce i nie mają tak naprawdę nic wspólnego z implementacją.

Jeśli potrafisz usiąść i rozwiązać problem na papierze w taki sposób, że można go łatwo przetłumaczyć na kod i jest powiązany z odpowiednim modelem dla twojej platformy, to jesteś programistą. Jeśli wszystko, co możesz zrobić, weź te rozwiązania i zaimplementuj je w naszym wybranym języku, to inna sprawa.

Programuję od 30 lat (OMFG!) I nadal używam php.netdo wyszukiwania poleceń w PHP, ponieważ to nie jest mój pierwszy język.

Powiedziałbym, że znajomość języków jest odwrotnie proporcjonalna do tego, jak często patrzysz na instrukcję obsługi lub przepełnienie stosu. Specjalizacja w programowaniu polega na tym, jak łatwo rozwiązywać problemy w sposób zgodny z językami programowania komputerowego.

W powiązanych wiadomościach nauczyłem się Ruby w zeszłym tygodniu. Chociaż nie jestem „ekspertem”, mogę rozwiązać problem, który mógłbym napisać w Perlu, powiedzmy, a potem spędzić wiek tłumacząc go na Ruby, podczas gdy ja się go więcej uczę.


Twój komentarz jest pierwszym, który przeczytałem o modelach i wzorach! Jestem w 100% z twoim komentarzem, jedną rzeczą jest zdobycie języka i rozpoczęcie tworzenia programu. Innym jest przemyślenie problemu i znalezienie odpowiednich narzędzi do jego rozwiązania, a następnie zaczniesz szukać języka i zaczniesz programować.

3

Myślę, że podobnie jak w przypadku wszystkiego, praktyka czyni mistrza. Po prostu nie daj się zaszufladkować, aby zawsze robić to samo lub zawsze używać tego samego języka, i kontynuuj naukę każdego projektu.

Myślę, że możesz łatwo narysować analogię do czegoś takiego jak nauka gry na gitarze. Każdy dobry muzyk może nauczyć się grać nową piosenkę w bardzo krótkim czasie, ponieważ zna już wszystkie akordy i całą teorię, dlaczego akordy są odtwarzane tak, jak są. Jak oni to robią? Po prostu zagrali tyle piosenek, że wszystkie wzorce połączyły się ze sobą, a jednocześnie uzupełnili swoją wiedzę faktyczną udokumentowaną teorią, że te wzorce też się zgadzają.

Może więc możesz bardzo dobrze odtworzyć kilka utworów, ale nie możesz szybko odbiegać od innych ani wybierać nowych. Prawdopodobnie jest to odpowiednik programisty .NET, który ciągle tworzy tę samą aplikację CRUD , w pewnym momencie wypróbowuje coś nowego, dodaje niektóre wywołania usługi internetowej lub zaawansowany interfejs użytkownika, lub pisze to w zupełnie nowym języku. Kiedy rzucisz okiem na to, dlaczego rzeczy dzieją się w ten sposób, zadawaj pytania na Stack Exchange itp. W końcu zobaczysz wszystkie wzorce, które nieustannie się pojawiają i znasz niektóre z podstawowych teorii i nauka nowego języka nie będzie wydają się być równie zniechęcające.


1

Nie zamierzam mówić o tym, ile czasu zajmuje nauka języka ani co to znaczy uczyć się języka. Zamiast tego zajmę się twoim faktycznym problemem: jak ustalić, czy nauczyłeś się programowania, czy nauczyłeś się języka programowania .

Nauczyłeś się programować, jeśli nauczyłeś się rozkładać problem na odrębne procesy, a następnie używać tych procesów do rozwiązania problemu. Nauczyłeś się języka programowania, jeśli nauczyłeś się składni języka i wiesz, jak dostosować sposób działania procesu, gdy jest on implementowany w tym języku.

Nie oznacza to, że powinieneś programować w Fortan, gdy używasz Lisp, lub dodawać wartości kolumny w tabeli w db za pomocą kursora. Tyle, że język jest szczegółem implementacji. Taki, który może zmienić potrzebne procesy, ale nie musi identyfikować i tworzyć procesów - w końcu istnieje implementacja w świecie rzeczywistym, z wejściami / wyjściami i pożądanymi rezultatami.


1

Moją strategią zawsze było koncentrowanie się na czystych umiejętnościach, a nie na konkretnych umiejętnościach.

Zamiast uczyć się specjalnej składni Pythona (lub dowolnego języka) do wszystkiego, co chcesz robić, poświęć swoje cykle mózgowe na rozwiązywanie abstrakcyjnych problemów, na przykład jak najlepiej rozwiązać każdy problem w tej kategorii.

W ten sposób będziesz wiedział, co robić bez względu na język, i będziesz w większości posiadał ponadczasowe umiejętności, które można wykorzystać do programowania w dowolnym języku.

W szczególności unikaj narzędzi pełnych gotchas, takich jak MySQL lub opiniotwórcze języki, takie jak Java, ponieważ wszystko, czego nauczysz się za pomocą tych narzędzi, będzie miało dużą część wiedzy na temat konkretnych narzędzi, która z pewnością szybko stanie się bezużyteczna.

W przeciwieństwie do tego, co powiedziano w wielu odpowiedziach, NIE słuchaj innych programistów, jesteś noobem i nie ma sposobu, aby odróżnić fałszywkę od prawdziwej oferty, więc lepiej zabrać wszystko łyżką soli.

Chcesz cały czas zadawać pytania i akceptować tylko wtedy, gdy rozwiązanie jest szybkie, eleganckie i niezawodne.


1
„NIE słuchaj innych programistów” - tak, pewnie. „- Skąd miałbyś wiedzieć, czy napisałeś czytelny i łatwy w utrzymaniu kod? - Twój znajomy informuje Cię po zapoznaniu się z kodem. Uzasadnienie: Nie możesz tego ustalić sam, ponieważ wiesz więcej jako autor, niż sam kod mówi. Komputer nie mogę ci powiedzieć, z tych samych powodów, dla których nie można stwierdzić, czy obraz jest sztuką, czy nie. Dlatego potrzebujesz innego człowieka - zdolnego do utrzymania oprogramowania - aby spojrzeć na to, co napisałeś i wyrazić swoją opinię ... ” ( źródło cytatu )
komnata

@gnat rób co chcesz. Mówię tylko, że skoro większość programistów nie potrafi kodować gówna, ich opinie są potencjalnie szkodliwe i powinieneś zabrać ze sobą worki soli. Uważam też, że „edytowalne i czytelne przez kretynów” wcale nie jest oznaką jakości. Wierz w to, co chcesz, ale nie obchodź -1 tylko dlatego, że ludzie nie zgadzają się z twoją wizją.
Morg.

mój głos wskazuje na ocenę jakości postu , a nie na to, czy się zgadzam, czy nie (wrt zgoda, raczej myślę, że masz tutaj rację). Przytoczyłem inną opinię nie dlatego, że jest odwrotnie, ale dlatego, że ma solidne wytłumaczenie (patrz „RATIONALE”). Jeśli możesz wymyślić podobnie solidne wyjaśnienie na poparcie swojej opinii, rozważ edycję postu, aby go dodać
komnata

cokolwiek. treść> formularz. zachowaj formę, zachowam moją treść.
Morg.

0

Istnieje podejście teoretyczne. Dowiedz się, jak faktycznie działają komputery pod przykryciem. W jaki sposób podstawowe instrukcje procesora są ze sobą powiązane, aby uczynić bardziej złożone operacje i struktury, które przyjmujemy za pewnik w obszarach programowania na wysokim poziomie.

Następnie jest bardziej praktyczne podejście do programowania. Główną kwestią sporną, którą dręczą ludzie zwykle określani jako „nie dobrzy programiści”, jest to, że naprawdę znają tylko jeden język. I nawet jeśli znają innych, programują w nich w taki sam sposób, jak w języku ojczystym . To cykl, który trzeba przerwać, jeśli naprawdę chcą nauczyć się programować. Domyślną odpowiedzią jest nauczenie się co najmniej jednego języka z każdego paradygmatu programowania. Naucz się więc języka OOP, języka funkcjonalnego, języka skryptowego ... itd. A przez naukę nie mam na myśli uczenia się składni . Uczysz się języka, używając go do stworzenia czegoś.

Osobiście, gdy chcę nauczyć się nowego języka, korzystam z łamigłówek Project Euler . Idę do układanki, którą już rozwiązałem w języku OOP (jako przykład) i próbuję rozwiązać ją za pomocą funkcjonalnego, próbując postępować zgodnie z najlepszymi praktykami nowego języka. Kiedy rozwiązujesz ten sam problem za pomocą dwóch zasadniczo różnych podejść, nie tylko widzisz rzeczywiste różnice, ale także pokazuje, gdzie są wspólne obszary. Te wspólne obszary, które są wspólne dla wszystkich języków, to prawdziwe programowanie , różnice to tylko inne sposoby na osiągnięcie tego.


4
Nie nazwałbym uczenia się o fizycznym zachowaniu komputera „podejściem teoretycznym”, „podejściem teoretycznym” byłoby uczenie się teorii, czytanie tezy o kościele i nauka o izomorfizmie Howarda Curry, nauka rachunku lambda i podstawy teorii liczb, są to teoretyczne podstawy. Nie mówię, że twoja odpowiedź jest dobra czy zła, po prostu mówię, że nazwałbym to konkretnym podejściem nie teoretycznym, ponieważ nie ma w nim teorii.
Jimmy Hoffa,

@JimmyHoffa - Dobre punkty!
System Down

1
„Sposób, w jaki podstawowe instrukcje procesora są ze sobą powiązane (...)” wydaje się okropnym pomysłem dla początkujących (OP nie stwierdził, że jest jeden, ale załóżmy, że chodzi o argumenty. Uczyłby „mikrooptymalizacji”, nie ucząc jak optymalizować (architektura 3-5 etapowa może być uważana za nieco przestarzałą ...). Nie zrozumcie mnie źle - fascynujące CA - ale „właściwe” uznanie wymagałoby słów takich jak „poza kolejnością” i „wielopłatowy”, i prawdopodobnie po kilku podstawowych doświadczeniach programistycznych
Maciej Piechotka,

0

Cóż, większość rzeczy, które chciałem powiedzieć, zostały już powiedziane. Chciałbym dodać bardzo prostą analogię.

Jeśli języki programowania są uważane za zwykłe narzędzia, nawet wtedy absolutnie nie ma logiki, że bycie dobrym w jednym sprawia, że ​​bycie dobrym w drugim staje się bułką z masłem.

Zastanów się nad grupą renomowanych szermierzy, nagle odłóż miecze i po 7 dniach treningów wyruszyłem do walki z włóczniami. Co by się stało? Zostaną zmasakrowani.

Języki często nie są trudne do nauczenia się, ale potrzeba cierpliwości i ćwiczeń, aby być w tym dobrym. Ponadto nie ma właściwego sposobu na naukę programowania.

Nauka programowania przypomina granie w gry RPG. Czasem używasz mieczy, czasem włóczni, a czasem tarczy. Za każdego zabitego wroga dostajesz punkty doświadczenia. Gdy zdobędziesz wystarczającą liczbę punktów doświadczenia, awansujesz. Teraz opanowanie miecza nie sprawi, że będziesz doskonały dzięki łukom i strzałom. Ale część zdobytego wcześniej doświadczenia zwiększy twoją wytrzymałość i szybkość.

Oto kilka rzeczy, które możesz chcieć robić podczas nauki języka.

  • Przeczytaj o języku. jeśli zabrzmi to interesująco, wypróbuj samodzielnie aplikację hello world.
  • Przeczytaj tutoriale, porady i blogi.
  • Twórz proste aplikacje dla zabawy.
  • Przetestuj różne funkcje.
  • Jeśli naprawdę Ci się podoba, kup kilka książek i / lub samouczków wideo.
  • Szukaj dobrych bibliotek.
  • Szukaj odpowiedzi, pytaj tylko, jeśli nie możesz znaleźć odpowiedzi.
  • Pomóż innym pytać o odpowiedzi (gdzie jest lepszy niż tutaj?)
  • Zrób coś przydatnego. Stworzenie aplikacji kalkulatora może być dobrym ćwiczeniem, ale jeśli zrobisz aplikację listy rzeczy do zrobienia i faktycznie używasz na komputerze / telefonie, to uczucie jest 100 razy satysfakcjonujące.

Poznawaj nowe języki, odkrywaj nowe biblioteki, ucz się nowych sztuczek w wolnym czasie. Zanim się zorientujesz, zaskoczysz się swoimi umiejętnościami.


0

W moim przypadku uczę się, jak programować w następujący sposób:

  1. Ucz się od mistrzów. Słuchaj programowych podcastów, czytaj profesjonalne blogi w wybranym przez siebie temacie programowania, czytaj / oglądaj wspaniałe samouczki wykonane przez guru, które są rozproszone po całej sieci, a na koniec czytając epickie książki, takie jak The Pragmatic Programmer . Ta książka zawiera wiele klejnotów programistycznych, które zostały zgromadzone przez całą karierę autorów. Jednym z niezawodnych sposobów na nauczenie się, jak właściwie kodować, jest wiedza, w jaki sposób robią to inni programiści.
  2. Doświadcz, robiąc. Czytanie o tym i wiedza to jedno, w rzeczywistości wdrażanie go w życie i sprawianie, by działało, jest czymś innym. Nie ma lepszego nauczyciela niż doświadczenie, więc załóż czapkę kodującą i zacznij.
  3. Zapytaj kogoś, kto wie. Podobnie jak teraz, nie bój się pytać o najlepsze praktyki lub lepsze sposoby robienia rzeczy od seniorów w zespole, lub jeśli jesteś na tyle niefortunny, że nie masz dostępu do tych seniorów, mentorów lub guru, to jest jeszcze reszta wymiany stosów i internetu do zapytania.

Ponadto, jak wspomnieli komentatorzy, nie zapomnij także opanować swoich narzędzi. Nauka wszystkich najlepszych praktyk i najlepszych teorii jest zupełnie pusta lub będzie źle wdrożona, jeśli nie wiesz wystarczająco dużo o swoim narzędziu, w tym przypadku języku programowania.


0

Myślę, że jeśli potrafisz myśleć analitycznie, masz dobry początek.

Naucz się dowolnego języka i przećwicz serię przykładów, np. Tak jak w prawie każdej książce, która uczy programowania.

Następnie spróbuj rozwiązać własne problemy. Spróbuj znaleźć różne rozwiązania i porównaj je. Szybkość i zużycie pamięci są często używanymi czynnikami, które mają znaczenie. Omów swoje rozwiązania z innymi programistami.

Przeczytaj kod innych programistów i spróbuj zrozumieć, dlaczego w ten sposób rozwiązali problem.

Powinieneś również przeczytać kilka książek o algorytmach, aby uzyskać przegląd standardowych metod. Nowe problemy są często modyfikacjami starych problemów.

Dużo praktyki i pracy z kodem również w zespołach pomoże Ci krok po kroku podnieść swoje umiejętności.

Mam nadzieję, że moja opinia odpowiada na co najmniej częściowe pytanie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.