Miałem swój pierwszy egzamin programistyczny niedawno ... i cóż, prawie go zdałem. Nie zrobiło się wcale świetnie. Mogę winić tylko siebie, bo poza studiami prawie nic nie zrobiłem.
Teraz zbliża się kolejna pora letnia i nie pozwalam, by to się powtórzyło. Od kilku tygodni czytam, czytam i czytam jeszcze trochę. Ciągle omawiam starsze rzeczy, za którymi tęskniłem, i nowsze, które robimy. Oczywiście widzę ogromną różnicę w rozumieniu języka. Ale o to chodzi. Potrafię czytać kod i mam teraz pojęcie o tym, co się dzieje w kodzie ... ale jeśli chodzi o mnie, kiedy sam go piszę, nie mam pojęcia. To tak, jakbym nigdy nie wiedział, jakie podejście przyjąć i nigdy tak naprawdę nie rozumiem w pełni pytań.
Codziennie robiłem sporo czytania (robiłem około 5-6 godzin w ciągu ostatniego miesiąca) ... Ale kiedy otwieram moje IDE, zawsze czuję się skazany, że jest naprawdę demotywujący. Zwłaszcza, że mam wiedzę na temat węzłów, list, tablic arraylerów, interfejsów itp., Ale oprócz tego, że czytałem je na stronie o tym. Mogę wskazać dokładnie wszystko, co dzieje się w programie, więc adnotowanie kodu przykładowego, który uważam za dobry ... ale pisanie własnego kodu to inna historia ...
źródło
Odpowiedzi:
Nauczysz się pisać programy, pisząc programy.
Ale musisz zacząć od małego, stary.
Stamtąd zacznij budować ...
i wtedy...
... i tak dalej. Gdy zrozumiesz podstawy działania obiektów, o wiele łatwiej będzie pisać większe programy.
źródło
Świetne pytanie! Ważne jest, aby zdać sobie sprawę, że masz wiele krzywych uczenia się do wspinania. Tylko po to, żebyś nie pomyślał, że uczysz się tylko języka programowania. Robisz o wiele więcej.
Uczysz się o ...
Podejrzewam, że walczysz w punkcie trzecim. Uczysz się, jak mówić rzeczy w kodzie (składni), ale tak naprawdę pytasz nas, co mam powiedzieć w kodzie. Czy istnieje właściwy i niewłaściwy sposób robienia rzeczy?
Sugerowałbym podjęcie wyzwania. Spójrz na następujące ćwiczenia.
http://en.wikipedia.org/wiki/Eight_queens_puzzle
To trudne wyzwanie. Musisz umieścić osiem królowych na szachownicy, aby każda królowa była od siebie bezpieczna.
Jako uczący się może to być zbyt duży zasięg, jednak możesz spojrzeć na ten problem i użyć go do nauki pisania kodu.
Oto strategia wypróbowania ...
Ponownie sformułuj problem, aby być znacznie prostszym niż podany problem do rozwiązania . Zapomnij o ośmiu królowych. Skup się tylko na jednym. Dowiedz się, jak napisać kod reprezentujący szachownicę w pamięci, umieść na niej pojedynczą królową, a następnie wyświetlaj go użytkownikowi na ekranie w postaci samego tekstu.
Po wykonaniu dźgnięcia w kroku 1. Połóż dwie królowe tak, aby obie były bezpieczne.
Na koniec spróbuj umieścić więcej niż 2 królowe na planszy, aby wszystkie były bezpieczne.
Powyższe kroki stanowią zwrot strategii projektowania o nazwie Step-mądre Udoskonalenie. Jest trochę oldschoolowy pod względem wzornictwa, ale w krótkim czasie przeniesie Cię z pustego ekranu do interesującego kodu.
Istnieją inne strategie projektowania i implementacji: Projektowanie oparte na testach, Projektowanie obiektowe i Wzorce projektowe, aby wymienić tylko kilka.
Z czasem dodasz te strategie do arsenału i wykorzystasz je w razie potrzeby. Im więcej strategii projektowania studiujesz i ćwiczysz, tym łatwiej będzie.
Niech źródło będzie z tobą.
źródło
Szybkie przedmowa
Ucz się poprzez działanie: wiedza a know-how
Istnieje ogromna różnica w wiedzy i know-how. Powszechnym błędem dla nowych uczniów jest myślenie, że ponieważ „rozumieją” program, gdy go czytają, tak naprawdę rozumieją powody, dla których program jest napisany tak, jak jest.
I jedynym sposobem na przejście do tej drugiej części jest ćwiczenie. Usiądź, otwórz edytor tekstu, wiersz poleceń i przejdź do tego.
Programowanie w małych
Jest prawdopodobne (i oczekiwane), że na tym etapie Twoja zdolność do zrozumienia, w jaki sposób kilka złożonych komponentów oprogramowania oddziałuje ze sobą, jest ograniczona. I to jest naprawdę dobra rzecz, ponieważ zmusza cię do rozpoczęcia od podstaw. Nie podskakuj z pistoletu i poruszaj się we właściwym tempie: zacznij od małych ćwiczeń dla małych zadań.
Szczerze mówiąc, nigdy nie byłem przekonany, że dobrym pomysłem jest rozpoczęcie nauki programowania w Javie (uczyłem programowania na życie na uniwersytecie i nadal czasami uczę się prywatnie). Jest to samo w sobie zbyt skomplikowane, aby zacząć, a większość książek o Javie będzie dość zniechęcająca. Niemniej jednak z pewnością można to zrobić (przynajmniej w niektórych obszarach tej globalnej wiedzy, których oczekujemy od programistów), o ile tylko ograniczysz się do nauki krok po kroku.
Książki
Ponieważ jesteś nastawiony na Javę i jeśli potrzebujesz porządnej książki Java, polecam:
Wspominam o tym, ponieważ nie wiem, czego używasz na zajęciach. Jest mnóstwo innych książek. Niektóre są dobre. Niektórzy kaleką studentów na lata.
Twój proces nauki
Podstawowy przepływ pracy
Odtąd radzę postępować zgodnie z 2-etapowym procesem dla wszystkich ćwiczeń i próbek kodu, które widziałeś na zajęciach:
W przypadku awarii
Jeśli zawiedziesz i poczujesz, że musisz rzucić okiem na książkę, Twoja porażka prawdopodobnie będzie:
Pierwszą przyczyną jest prawdopodobnie to, z czym najczęściej się spotykamy. Drugi jest anegdotyczny. Oba są przedmiotem powtarzającej się praktyki.
Za każdym razem, gdy nie uda Ci się wdrożyć jednego z tych wczesnych przykładów, spójrz ponownie na książkę, a następnie zamknij ją ponownie. Nie koduj, patrząc na książkę. Radziłbym nawet usunąć całe rozwiązanie i zacząć od nowa. Powtarzanie jest denerwującym, ale ważnym elementem procesu uczenia się.
Nie bierz tego lekko. Za każdym razem, gdy czujesz potrzebę powiedzenia sobie „tak, ok, wiem to” lub „Jestem tam w 90%, jest prawie tak dobry, jak gotowy” i chcesz przejść do innej sekcji, zwalczyć tę potrzebę i zacząć od nowa. Bardzo trudno jest uczciwie przyznać, że nie do końca zrozumiałeś pojęcie.
Uwaga dodatkowa: Uważam, że to wielka szkoda, że większość programów szkolnych próbuje teraz „rozpocząć” kursy programistyczne poprzez zbyt głupie rzeczy i zapewnienie zbyt zaawansowanych narzędzi dla uczniów: celem nie jest sprawienie, by twoje życie było nieszczęśliwe, ani abyś ty się uczył na pamięć rzeczy, które później w twojej karierze zostaną zautomatyzowane za pomocą twoich narzędzi i których czasem nawet ledwo pamiętasz. Ma nauczyć cię wszystkich bitów, które się unoszą.
W przypadku sukcesu: Go Beyond!
Jeśli uda Ci się wdrożyć swoje ćwiczenie, niekoniecznie przejdź bezpośrednio do następnego. Spróbuj zobaczyć, co możesz zrobić, aby to poprawić. Czy możesz zmienić żądane wyjście? Dodać małą funkcję? Opcja? Spróbuj, ponieważ jesteś teraz w strefie zabawy, w której minęła główna trudność, a te narzucone przez siebie małe wymagania są bardziej prawdopodobne, aby trochę poprawić nastrój.
Nie idź jednak za daleko: nie zaczynasz od drukowania alfabetu i odwracania go, aż nagle pojawia się na przekątnej na ekranie z gradientem kolorów. Rób małe kroki. Uczenie się jest długim i powtarzalnym procesem i musisz podchodzić do problemów z rosnącymi poziomami trudności (na przykład zobacz, jak zwykle myślę o wyjaśnianiu rekurencji ).
To tylko nauka - porównanie
Twój problem w ogóle nie jest związany z programowaniem. To ten sam problem, z którym spotykają się tysiące ludzi, próbując nauczyć się matematyki.
Jeśli dasz im problem, nie widzą, jak znaleźć drogę do rozwiązania. Jeśli jednak zapiszesz dla nich rozwiązanie, większość je zrozumie i pomyśli: „cholera, to było takie proste!”. Jednak podasz im podobny problem z różnymi miarami i hipotezami, a oni nie zdołają go rozwiązać: nie rozumieli logiki stojącej za tym i muszą poćwiczyć, aby móc to zrobić sami.
Zauważ, że jest to powszechny problem z matematyką, ale moim zdaniem można go zobaczyć w tonach innych dziedzin, w których wymagana jest pewna logika: nauka solfege, gramatyki języka, fizyki itp. I nie zależy to od „naturalnej” umiejętności zrozumieć te rzeczy: po prostu sprowadza się do praktyki (czy to w tym obszarze, czy w innych, które prowadzą jednostkę do łatwiejszego zrozumienia pojęć w tej dziedzinie).
Nie ma powodu, dla którego nie możesz nauczyć się pisać kodu. Po prostu próbuję dalej, aż dojdziesz do tego „ah AH!” / Moment Eureka. Następnie przejdź do następnego, trudniejszego problemu.
Mogą one również pomóc (później):
źródło
Wiem, że nie jest to odpowiedź, którą chcesz usłyszeć, ale: Napisz więcej kodu!
Dokładniej przeanalizuj kod, który rozumiesz. Często pomaga mi to „przetłumaczyć” na zwykły angielski (ponieważ jestem względnym początkującym).
Nie obawiaj się burzy mózgów w swoim pomyśle, aby najpierw napisać fragment kodu (tj. „Chcę tutaj zadeklarować zmienną, iterować przez ten segment itp.”), A NASTĘPNIE szukać kawałków po kawałku, jak robić te różne segmenty.
Pamiętaj, że kodowanie jest mniej podobne do ćwiczenia w zapamiętywaniu i jak wymyślanie sposobu na zbudowanie czegoś z elementów składowych. Podobnie jak nauka prawdziwego języka obcego, na pierwszym miejscu jest zrozumienie, jest to dobry znak, że jesteś na dobrej drodze.
Po prostu wierzcie, że im więcej piszesz i czytasz kod, tym bardziej będzie to miało sens.
źródło
Jak powiedzieli inni, jest to przypadek, w którym musisz ćwiczyć, ćwiczyć, ćwiczyć.
Napisz kilka małych programów, które rozwiązują tylko jeden problem
Czasami najtrudniejsza część to wymyślenie czegoś, co warto zaprogramować. Jeśli możesz, spróbuj pracować w temacie, z którym uważasz, że zmagasz się - na przykład na zajęciach, dziedziczeniu itp. Kilka pomysłów z mojej głowy:
GetArea
. Teraz spraw, aby klasy Triangle i Rectangle odziedziczyły po Polygon i upewnij się, że implementują GetArea. Rób to dalej dla wielokątów wyższego rzędu (pięciokąt, sześciokąt itp.).* Celem gry w golfa jest wykonanie podanego zadania przy użyciu jak najmniejszej liczby znaków, bajtów lub innych danych wskazanych w pytaniu. Jeśli przeczytasz niektóre z odpowiedzi, szybko docenisz sprytny sposób, w jaki ludzie rozwiązują te problemy. Nie koncentruj się na rozwiązaniu problemu w jak najmniejszej liczbie bajtów! Ludzie, którzy piszą do kodu golfa, są bardzo doświadczonymi programistami. Ale niektóre pytania oferują same w sobie łatwe zadania.
Kilka zabawnych przykładów golfa:
Podstawowa struktura rozwiązania problemu:
Wiele z nich daje dobry obraz tego, jak powinna wyglądać funkcja. Biorąc pod uwagę X, wykonaj Y, a wynik powinien wynosić Z:
Powyższy szablon jest wystarczający do nauki podstaw i zapoznania się z językiem. Bardziej zorientowanym obiektowo szablonem byłoby:
Jeśli to pomoże, zapisz to również na papierze. Dyskusja się przez proces jak ty , jako człowieka, by rozwiązać ten problem. Przykład: Biorąc pod uwagę liczby i, j oraz k, wyświetlaj je w kolejności malejącej. Jako osoba jest łatwa do rozwiązania. Trudność polega na tłumaczeniu pomysłów na instrukcje wiersz po wierszu, aby komputer mógł je rozwiązać.
Spróbuj również wymyślić własne pomysły. Może to być trudne, ale nawet najprostsze programy mogą nauczyć cię czegoś, o czym nie wiedziałeś. Chodzi o to, aby wiercić się podstawami, aż staną się drugą naturą.
źródło
Nigdzie nie dotrzesz po prostu czytając kod; musisz pisać kod. Po prostu napisz kod. Nie martw się, jeśli kod, który piszesz, to bzdury; każdy napisał bzdury. Niektórzy ludzie zarabiają na tym. Nikt nie zaczyna pisać dobrego kodu i jestem zdania, że podczas nauki prawie konieczne jest pisanie złego kodu, ponieważ tylko wtedy różnica między dobrym a złym kodem staje się naprawdę widoczna.
Trudno docenić różnicę między dobrym a złym kodem podczas czytania dwóch bloków kodu, które robią to samo, ale kiedy napisałeś skrypt i masz kogoś znającego się na recenzji i przekazaniu opinii, różnica często staje się znacznie bardziej widoczna, ponieważ możesz bezpośrednio zastosować to, co wiesz.
Programowanie nie jest czymś, czego można się nauczyć poprzez zapamiętywanie na pamięć; to nie jest tak, jak w twojej tabeli czasów lub datach w historii. Programowanie to praktyczna umiejętność, która wymaga ciągłej praktyki, aby zachować ostrość. Nauka programowania bez pisania kodu jest jak nauka pływania przez czytanie książki.
źródło
To pytanie ma już kilka naprawdę dobrych odpowiedzi, ale jest kilka myśli, których jeszcze nie widziałem.
Nauka języka programowania przypomina uczenie się „prawdziwego” języka: zawsze łatwiej jest czytać niż pisać, czy to jedno zdanie, artykuł naukowy czy książka. Podczas czytania wiele można zrozumieć na podstawie kontekstu, rozumiejąc tekst lub kod podczas czytania. Kiedy widzisz słowo, którego nie znasz, być może znasz inne słowo z tym samym rdzeniem; kiedy zobaczysz metodę, nazwa metody daje ci dobre wyobrażenie o tym, co robi. Pisząc, musisz pamiętać nie tylko składnię, ale także faktyczne słowa, których chcesz użyć. I to samo dotyczy programowania.
Jak powiedzieli inni, nie można nauczyć się pisać programów na podstawie samego czytania programów.
Zacznij od małego. Poszukaj samouczka Java i wykonaj wszystkie jednostki, jedna po drugiej. A kiedy jesteś wystarczająco pewny siebie, wybierz mały projekt, aby sprawdzić swoje umiejętności, być może jakąś prostą grę, którą dobrze znasz, która nie wymaga zbyt dużej interakcji z GUI. Kiedy już zdecydujesz, nie otwieraj swojego Eclipse i nie patrz na „pustą stronę”. Utwórz storyboard. Nie musisz rysować skomplikowanych diagramów UML, wystarczy pomyśleć o tym, w jaki sposób można rozwiązać niektóre aspekty programu - jak rozwija się historia lub twój argument, że tak powiem. A pisząc kod, zacznij od szorstkiego szkicu. Zwykle piszę dużo komentarzy, opisując, co program powinien zrobić, w jakiej kolejności, a następnie zaczynam wpisywać kod programu.
źródło
Jak mówią inni, wystarczy ćwiczyć pisanie kodu. Aby to się spełniło, musisz zmierzyć się z rozwiązaniem jakiegoś problemu, np. Wydrukiem predefiniowanych wiadomości, stworzeniem prostego interaktywnego kalkulatora lub rozwiązaniem konkretnego zadania.
Jeśli brakuje Ci inspiracji, Project Euler ma mnóstwo ćwiczeń matematycznych / programistycznych o rosnącym stopniu trudności. Dają jasne i ambitne cele do osiągnięcia oraz powinny pomóc Ci uzyskać bardziej komfortowe programy do projektowania.
źródło
Pomyślałem, że zacznę mówić o tym temacie, ponieważ naprawdę trafia blisko domu.
Po prostu potrzebujesz zacząć kodowanie. Nie zrozum mnie źle, czytanie jest świetne, ale to, co naprawdę daje ci tę wiedzę na temat kodowania, w rzeczywistości coś buduje. Nauczyłem się więcej na jednym letnim stażu niż na poprzednim czytaniu.
Powinienem również dodać, że nie powinieneś po prostu zaczynać kodowania na ślepo . Zrób projekt dla siebie. Potrzebujesz jakiegoś kierunku, żeby się postawić, żebyś wiedział, co chcesz zrobić. Zdziwisz się, jak szybko się nauczysz. Jeśli po prostu otworzysz IDE i zaczniesz tworzyć proste przykłady ze świata Witaj, to demotywujące uczucie szybko do ciebie wkradnie. Znajdź coś z niewielką głębią, a zanim się zorientujesz, będziesz się rozwijać.
źródło