Przeszłość Jeśli instrukcje Tablice, pętle… Co teraz?

9

Zrezygnowałem z programowania nieco ponad rok temu, kiedy ciągle uderzałem w tę ścianę. Powracam do tematu, ponieważ chcę stworzyć podstawową aplikację na Androida. Ale czuję, że moja ograniczona wiedza nie wystarczy.

Oto mój problem.

Przeczytałem kilka książek i obejrzałem samouczki wideo na C # / Java, poszedłem za przykładami, a potem skończyłem książkę. W końcu zawsze wydają się mnie oszołomić, co robić dalej.

Co to znaczy, że uczą cię od podstawowej aplikacji „hello world” aż do if i tablic, a potem najwyraźniej oczekują, że wiesz, jak wejść w świat kodowania i tworzyć cokolwiek.

Czy coś mi umyka? Wiem, że są to elementy składowe wszystkich programów, ale książki, które czytam, nigdy tak naprawdę nie pokazują mi, co mam dalej robić.

Myślę, że najłatwiejszą odpowiedzią byłoby „zacząć kodować”, ale gdzie? Na przykład przeczytałem „Head First Java”; do tego stopnia, że ​​powiedzieli ci, żebyś wziął wszystko, czego się nauczyłeś, i stworzył grę wyścigową dla psów ...

„staraj się nie oszukiwać i nie sprawdzać dostarczonego kodu źródłowego, powinieneś być w stanie to zrobić do tej pory” _ to nie jest dokładny cytat, ale w zasadzie tak mi powiedziano .......

Pół godziny temu tylko wyjaśniali, jak robić tablice, a potem bez teorii mam stworzyć działającą grę?

Powód, dla którego o to pytam, to dlatego, że boję się, że to wszystko, co powinienem wiedzieć, aby przynajmniej zacząć kodować, ale wydaje mi się, że dostałem mały zestaw narzędzi i powiedziano mi, aby zbudować wieżowiec.

Dziękuję za wszelkie porady

użytkownik76625
źródło
„Wyścigi psów” mogą oznaczać wiele rzeczy. Na początek, czy w ogóle dotyczy to grafiki? Tak długo, jak to, co tworzysz, nie wiąże się z żadną grafiką, uważam, że jest to całkowicie odpowiednie dla początkującego. Może zamiast tego zrób kata, żeby nie myśleć o obrazach ...
jhocking
Z tym małym zestawem narzędzi można zbudować drapacz chmur - duże programy to po prostu zorganizowane kolekcje DUŻYCH małych bitów. Jednak nie będziesz w stanie TERAZ - musisz zacząć budować budkę dla ptaków i wspiąć się na górę. Jak powiedział jhocking, nie próbuj jeszcze nic robić z grafiką - jest dobry powód, aby początkowe rzeczy zawsze opierały się na niesformatowanym tekście.
Loren Pechtel,

Odpowiedzi:

10

Co to znaczy, że uczą cię od podstawowej aplikacji „hello world” aż do if i tablic, a potem najwyraźniej oczekują, że wiesz, jak wejść w świat kodowania i tworzyć cokolwiek.

Czy coś mi umyka? Wiem, że są to elementy składowe wszystkich programów, ale książki, które czytam, nigdy tak naprawdę nie pokazują mi, co mam dalej robić.

Właściwie nie. Nie są. Elementami składowymi wszystkich programów są abstrakcja i ponowne użycie. Wiele języków programowania nawet nie mają tablic lub ifS lub pętle.

Istnieje kilka świetnych książek, które uczą Cię programowania, a nie tego, jak działa dany język programowania, którym wydają się być książki, które czytałeś.

Jak projektować programy aka HtDP to taka książka. To uczy, jak projektować programy. Robi to, podając przepisy do analizowania, rozwiązywania problemów, przekształcania ich w algorytmy i dalszego działania programów.

Zauważ, że „przepis” jest w zasadzie innym słowem określającym „program”, więc innymi słowy, książka uczy programów, które ludzie mogą uruchamiać w głowach, aby generować programy do wykonania przez komputery. Jakie to jest świetne? :-)

Autorzy pracują obecnie nad szkicem drugiej edycji HtDP , którą warto przeczytać zamiast pierwszej. Materiał dotyczący programowania imperatywnego został usunięty i zostanie omówiony w niepisanym jeszcze drugim tomie Jak zaprojektować komponenty , ale możesz przeczytać te brakujące rozdziały z pierwszego wydania.

Należy pamiętać, że HtDP nie zakłada wiedzy programistycznej i jest skierowany do uczniów szkół średnich. Ale niech cię to nie powstrzyma: oznacza to po prostu, że prawdopodobnie będziesz w stanie szybciej ukończyć kilka wczesnych rozdziałów, ale nie sądzę, że będziesz się nudzić.

Konkretne abstrakty to również dobra lektura wzdłuż podobnych żył. Podobnie jak HtDP, nie zakłada żadnej wiedzy programistycznej.

Inną książką, o której możesz usłyszeć, jest Struktura i interpretacja programów komputerowych, zwana także SICP. Jest to jedna z największych książek programistycznych, jakie kiedykolwiek napisano, i znów nie zakłada żadnej wiedzy programistycznej.

To jest jednak nastawiony do kompletnych nowicjuszy , którzy studiują na MIT . I tak, gdy nie ponoszą żadnej wiedzy programistycznej, to nie zakładamy sporo domeną wiedzy, na przykład w dziedzinie inżynierii elektrycznej, fizyki i matematyki. Uwaga: nie mają one nic wspólnego z nauczanymi pojęciami , są po prostu potrzebne do zrozumienia ćwiczeń i przykładów . Lepiej więc najpierw przeczytać HtDP lub konkretne abstrakty, a następnie SICP.

Jörg W Mittag
źródło
1
Nigdy nie słyszałem o języku programowania bez ifoświadczenia lub czegoś w rodzaju loop: bez nich nie byłby on kompletny .
Przywróć Monikę - M. Schröder
@Martin Schröder: Istnieją języki programowania bez loopinstrukcji i są one kompletne.
Giorgio
@Giorgio: Na przykład? AFAIK potrzebujesz jakiejś pętli / goto.
Przywróć Monikę - M. Schröder
2
@ MartinSchröder: Rachunek Lambda jest kompletny według Turinga (w rzeczywistości jest to język, dla którego ten termin został wymyślony) i ma jedynie abstrakcję funkcji oraz zastosowanie funkcji. Nie ma nawet rekurencji, musisz ją zakodować za pomocą kombinacji punktów stałych! Z drugiej strony: istnieje wiele języków programowania, które nie są pełne Turinga, jak SQL (przed 2003 r.) Lub bardziej subtelnie, C (kompletność Turinga wymaga nieskończonej ilości pamięci, ale C gwarantuje, że możesz wziąć adres cokolwiek i przechowuj w zmiennej o skończonym rozmiarze).
Jörg W Mittag
2
@ MartinSchröder: Lub jeszcze jedna kwestia: istnieją języki programowania, w których kompilacja programu może zmusić kompilator do rozwiązania trudnych problemów. W języku C # możesz zakodować problemy 3-SAT jako problemy z rozwiązywaniem przeciążenia i zmusić kompilator do ich rozwiązania, aw Haskell możesz faktycznie zakodować problemy odpowiadające problemowi zatrzymania w systemie typów i zmusić kompilator do ich rozwiązania. Wydaje się, że myślisz o „językach programowania” jako językach imperatywnych , ale istnieje wiele języków, które nie są imperatywne, które mogą reprezentować złożone obliczenia.
Eric Lippert,
5

Cóż, nie jesteś w wyjątkowej sytuacji. Większość książek dla początkujących w języku programowania zwykle koncentruje się bardziej na podstawowych elementach składowych języka i to dobrze. Jednak, jak to się stało z tobą, w końcu znajdujemy się w sytuacji, w której nauczyliśmy się każdego konstruktu, który ma do zaoferowania język, ale nie możemy tego zastosować, aby rozwiązać niektóre praktyczne problemy. Krótko mówiąc, lukę między przykładami tekstowymi a praktycznymi programami można wypełnić tylko wtedy, gdy spróbujesz grać z kodem (jak powiedział Telastyn). Oto, co ogólnie robię, ucząc się nowych rzeczy:

  1. Ucząc się z książki, spróbuj znaleźć scenariusze z prawdziwego życia, w których można zastosować przykładowy kod / technikę w książce.
  2. Spróbuj połączyć przykładowe programy podane w książce, aby stworzyć coś większego i bardziej skomplikowanego. Następnie spróbuj zminimalizować kod i napisz inny kod, który daje ten sam wynik.
  3. Google dla praktycznych projektów dla rozważanego języka.
  4. Po upewnieniu się, że opanowałeś podstawowy element językowy, eksperymentuj z wybraną strukturą. Po raz pierwszy wybierz coś, co ma łatwiejszą krzywą uczenia się.
  5. Wypatruj istniejącego projektu i spróbuj przestudiować jego projekt.
  6. Wybierz zaawansowane książki, które uczą Cię bardziej zaawansowanych rzeczy związanych z projektowaniem aplikacji, takich jak wzorce aplikacji, projektowanie i wdrażanie OO itp.

Na koniec chodzi o praktykę i badania, które pomogą Ci poprawić swoje umiejętności programowania i ostatecznie uczynią cię architektem wielu drapaczy chmur.

mlakhara
źródło
2

Zobacz to dla C #. Jest bardzo kompletny: http://www.programmersheaven.com/ebooks/csharp_ebook.pdf Użyłem go sam, zaledwie pół roku temu. Korzystam z kompilatora #Develop z tym przykładem. Nie mogę ci wiele pomóc w Javie, ponieważ prawie nigdy jej nie używałem.

Kiedy przychodzi czas na programowanie, wiele osób nie zdaje sobie sprawy, że zwykle używasz dodatkowego SDK lub frameworka do projektowania. Nie spodziewaj się więc natychmiastowego przejścia z Java lub C # do programowania przez telefon, ponieważ prawdopodobnie potrzebujesz dobrej struktury pośredniej, a krzywe uczenia się dla nich mogą być tak samo męczące jak krzywe uczenia się dla samych języków programowania. Chociaż samouczek w języku C #, który opublikowałem, obejmuje tylko język C #, wiele pojęć, które obejmuje, można zobaczyć w innych językach obiektowych, takich jak Java.

Edycja: Opisany scenariusz to niestety trasa, którą podąża wiele samouczków. Nie musisz postępować zgodnie z takim samouczkiem, a jeśli działa on niezgodnie z twoim sposobem uczenia się, prawdopodobnie najlepiej jest spróbować wybrać inny (nie znam żadnego, ale Google chyba). Ale dla pewności sprawdź, czy autor opisywanej książki wyjaśniał wiersz po wierszu. Nie martw się o swoją inteligencję, tylko cudowne dziecko może przejść od książki do działającej gry. Pamiętaj tylko, że samouczki nie są w żadnym razie standardowym pomiarem umiejętności, więc idź na wszystko, co uczy cię najlepiej i nie zniechęcaj się!

osoba27
źródło
Świetna odpowiedź i chciałbym dodać, że powinieneś zdecydować o projekcie, który chcesz podjąć. Google sposoby rozwiązywania problemów związanych z projektem. Dowiesz się wiele, szukając lepszych sposobów rozwiązania problemów, z którymi się stykasz.
mortalapeman
1

Tak, powinno to wystarczyć do stworzenia bardzo podstawowych programów. W tym momencie próbujesz stworzyć nieco bardziej złożony program niż to, co robiłeś w książkach. Kiedy musisz zrobić coś konkretnego i nie wiesz, jak wykonać jakąś pracę, przeszukaj Internet lub zapytaj nauczyciela / mentora. Doprowadzi to do bardziej zaawansowanych funkcji (i dość często do ślepej uliczki, ponieważ nieświadomie wybrałeś coś znacznie bardziej złożonego niż to, co możesz zrobić).

Żadna książka nie nauczy Cię, jak rozwiązywać problemy.

Żadna książka nie wyjaśni, jak projektować programy - co przychodzi z praktyką. Żadna książka nie nauczy Cię, jak wykonać nietrywialną aplikację - jest po prostu zbyt wiele niuansów; nauczyłbyś się budować implementację, a nie podobne rzeczy.

Najlepszym sposobem na naukę w tym momencie jest dabble. Aby bawić się kodem, aby coś stworzyć. Tak jak artyści często zaczynają od rysowania małych ciekawostek, które stają się coraz bardziej wyrafinowane i dobrze wyglądają, tak też programiści potrzebują postępów eksploracyjnych.

Telastyn
źródło
1
„Żadna książka nie wyjaśni, jak projektować programy” - autorzy How to Design Programs mogą się nie zgodzić :-)
Jörg W Mittag
1
@ JörgWMittag: Będą mieli wspólne techniki i pokazy typowych programów, ale wszystko, co nie jest trywialne, będzie wymagało dużego wyuczonego osądu ludzkiego, którego od 2013 roku nadal nie można zmechanizować.
whatsisname
1

Naprawdę nie pamiętam, czy użyłem książki do programowania, ale wydaje mi się, że w tamtych czasach była to raczej instrukcja obsługi składni zamiast podręcznika. Nauczyło mnie, co może zrobić język programowania, ale nie jak zbudować z nim prawdziwą aplikację.

Na szczęście w książce było kilka przykładów, które wpisałem (tak, nie było wtedy przykładów kodu źródłowego do pobrania), a potem próbowałem dowiedzieć się, jak to działa. To nie jest optymalny sposób na naukę programowania, ale dla mnie to była świetna zabawa.

Zalecam, abyś wyznaczył sobie cel, taki jak „ Chcę zbudować aplikację JavaScript, która tworzy koło podskakujące ”, a następnie wykorzystać zdobytą wiedzę, aby rozpocząć i wyszukać wszystko inne w zestawach SDK / dokumentacji języka i / lub tutaj Na tak.

Właśnie takiego podejścia używam, kiedy próbuję wskoczyć na nowy język i nauczyć się pierwszych kroków. Większość książek, które czytałem w ostatnich dniach, nie byłam usatysfakcjonowana, ponieważ miałam to samo wrażenie, że brakuje czegoś ważnego . Ale na szczęście mamy teraz internety, więc niezależnie od języka, którego chcesz się uczyć, możesz znaleźć kod źródłowy w Internecie i użyć go, aby kontynuować naukę.

edytuj Oczywiście, niektóre bardziej ogólne książki uczące, jak zaprojektować aplikację lub jaki proces (SCRUM, XP, V-Modell) do naśladowania, są dobrym dodatkiem do znajomości czystego języka.

żenada
źródło
1

Zgadzam się z Jörgiem, że powinieneś również przeczytać kilka ogólnych książek na temat koncepcji programowania, zamiast uczyć się zbyt wielu szczegółów na temat konkretnego języka na tym etapie. Jeśli chodzi o książkę Jak projektować programy , jest ona wykorzystywana jako punkt odniesienia w tym kursie , który może Cię zainteresować.

W przeciwnym razie innym narzędziem, o którym inni nie wspominali, jest wiele rozmów z innymi programistami . Pamiętam, że dla mnie jednym z najskuteczniejszych sposobów nauki programowania było spędzanie wielu godzin na rozmowach z kolegami lub innymi programistami na temat aspektów programowania, języków programowania, technik lub konkretnych problemów, z którymi miałem do czynienia w danym momencie. Ustna transmisja wiedzy może być nadal jednym z najskuteczniejszych sposobów uczenia się nowych umiejętności.

Giorgio
źródło
+1. Znam ludzi, którzy chodzą na konferencje bez udziału w jednej rozmowie. Po prostu idą tam, aby spędzać czas na korytarzach i omawiać problemy z nieznajomymi, aby uzyskać inny punkt widzenia.
Jörg W Mittag
0

Sugerowałbym znalezienie projektów open source i przekształcenie ich w osobiste piaskownice. Zmodyfikuj istniejące zachowania, dodaj nowe zachowania i je też usuń. Baw się, wdrażaj własne pomysły i „co jeśli spróbuję tego”.

Nie zalecam, abyś przekonał kogoś do projektu open source i uznał go za swój własny.

Mówię, spójrz na inne działające projekty jako sposób na nauczenie się, jak przejść do kolejnych kroków. Istnieje wiele witryn z kodem opensource do pobrania. Oto kilka, które przychodzą na myśl: CodePlex CodeProject

Matt Raffel
źródło
-5

To jest życie programistów. Nie znasz technologii, ale rozwijasz „witaj świecie” i stajesz się ekspertem. W firmach (prawdziwe życie) tak to działa. Powodzenia

użytkownik76655
źródło
2
To niezbyt przydatna odpowiedź.
svick