Czy tworzenie gier to najlepszy sposób na naukę programowania? [Zamknięte]

21

Niedawno usłyszałem instruktora, że ​​tworzenie gier było najlepszym sposobem na naukę programowania. Poza tym, że wszystko musiało zostać utworzone w kodzie, powiedział, że naprawdę możesz w pełni doświadczyć i zaimplementować OOP w swoich programach. Innymi słowy, wszystko, co tworzysz w grze, jest dosłownie przedmiotem zarówno technicznym, jak i koncepcyjnym. Czy takie założenie jest bezpieczne? Czy zawsze są wyjątki podczas nauki programowania?

zauważ, że był nastawiony na rozwój .net / xna / c #.

Edward
źródło
3
„fakt, że wszystko trzeba było stworzyć w kodzie”. Co z modelami 3D, teksturami, dźwiękami i innymi zasobami? Możesz stworzyć silnik gry bez nich, ale pełna gra z bardzo małą ilością zasobów, nawet jeśli nie niemożliwa, będzie nie lada wyzwaniem.
POSIX_ME_HARDER
@Cheshire: Cóż, możesz zaprogramować osoby z takimi rzeczami jak przetwarzanie. Nie twierdzę jednak, że jest to bardzo praktyczne.
Anto
2
@Cheshire: Tak, niektórzy ludzie podejmują to wyzwanie bardzo bezpośrednio, tworząc wszystko proceduralnie. Nie jest to zbyt powszechne w grach komercyjnych (o ile mi wiadomo), ale popularne tylko po to, aby udowodnić, że można to zrobić i widziałem całkiem imponujące dema.
FrustratedWithFormsDesigner
6
Zakładam, że pytanie to oznacza „tworzenie gier”, a nie „granie w gry”, kiedy pytasz o gry? Nie można zrezygnować z intelektualnego skoku z Call of Duty do C ++ ...
HorusKol
1
Jeśli chcesz, aby gra była rozgrywana, być może zechcesz pójść na kompromis w czystej konstrukcji OO na rzecz szybkości.
Peter Taylor

Odpowiedzi:

25

Moim zdaniem rozwój gier jest jednym z najtrudniejszych. Spójrzmy na wszystkie koncepcje, które jedna osoba tworząca strzelankę FPS musi wiedzieć:

  • Grafika
    • Obliczenia 3d
    • Optymalizacje prędkości
    • Interfejs ze sprzętem graficznym
  • Gra
    • Struktury danych
    • Formaty plików do zapisania
    • Ogólny projekt, inaczej stworzysz bałagan, do którego nie można dodać funkcji
    • Znajomość sieci, jeśli gra jest wieloosobowa
  • Algorytmy AI
    • Znalezienie drogi
    • Bitwa walki
  • Wydawniczy
    • Znajomość systemu operacyjnego, na przykład sposób działania instalatorów
    • Być może tworzenie stron internetowych w celu rozpowszechnienia informacji

Widzisz, jedna gra może obejmować wiele obszarów jednocześnie. To sprawia, że ​​jest to doskonałe narzędzie do nauki, jeśli chcesz spędzić czas i zrobić to dobrze.

Jeśli chodzi o OOP, jest to jeden wzór, który działa dobrze. Możesz użyć gry jako narzędzia edukacyjnego do ćwiczenia dobrych technik projektowania.

Jednak aby odpowiedzieć na twoje pytanie, nie jest to jedyny sposób na naukę programowania. Gdy zostaniesz pośrednim programistą, stworzenie gry pozwoli ci dotknąć wielu koncepcji i poziomów programowania. Poza tym jest fajnie!

Michael K.
źródło
12
Zapomniałeś jednej rzeczy, historii dla tej gry, a czasami historia jest najważniejsza.
Mahmoud Hossam
Zakłada się, że jest to gra 3D.
Adam Harte
1
@Adam: Tak, ale 2d ma również swoje obliczenia. Obecnie celowo wykluczam oparte na testach gry RPG;)
Michael K
1
@Mohmoud Historia NIGDY nie jest „wszystkim, co ważne”. Jest to tak samo duży błąd, jak błędna / brakująca historia. Istnieje wiele aspektów tworzenia dobrej gry. Nie chcę grać nudną grą, bez względu na to, jak wspaniała jest ta historia. Również najbardziej udane łamigłówki nie mają historii.
Adam Harte
Przydaje się teoria gier.
VirtuosiMedia,
46

Nie być tautologicznym, ale programowanie jest najlepszym sposobem na naukę programowania. Jeśli interesują Cię gry komputerowe, programowanie gier może być świetnym sposobem na naukę programowania.

Nie dbam o gry, ale uwielbiam matematykę, więc wiele moich projektów edukacyjnych miało charakter bardzo matematyczny.

Najważniejsze jest to, że musisz znaleźć sposoby rozwiązania problemów z kodem, a gry działają dla wielu osób.

Eric Wilson
źródło
tak pierwotnie myślałem. Ale weź pod uwagę absolutną nowość w programowaniu. Gry wydają się być doskonałym narzędziem do nauki wielu różnych koncepcji. Michael wymienia niektóre z nich. Szczerze mówiąc, żałuję, że nie nauczyłbym się najpierw OOP z perspektywy gier. Ale mogło to wynikać z tego, że zostało to słabo wyjaśnione lub że tworzenie aplikacji biznesowych utrudnia zrozumienie tej koncepcji. Z pewnością interesujące jest obserwowanie obu argumentów.
Edward
@penguin, w jaki sposób granie w Call of Duty lub Halflife nauczy Cię programowania?
jwenting
13

Jest sposobem nauki programowania, między innymi sposobami. Kiedy piszesz kod, uczysz się różnych rzeczy. Teraz jest to najlepszy sposób? Nie tak pewny.

Przynajmniej dwa powody podane przez twojego nauczyciela są nieprawidłowe .

  • „wszystko musiało zostać utworzone w kodzie” : kiedy piszesz aplikację biznesową, tak naprawdę piszesz kod. Nie będzie napisane przez magię. Tak, są pomocniki, które pozwalają na użycie automatycznie wygenerowanego kodu. Nie, korzystanie z nich nie jest obowiązkowe. Nawiasem mówiąc, automatycznie generowane części są na ogół najbardziej denerwujące z programowania (to nie poprzez dodanie formantów do kontrolki Windows Forms dowiesz się czegoś ekscytującego i przydatnego).

  • „naprawdę możesz w pełni doświadczyć i wdrożyć OOP w swoich programach” : ktoś musi mi wyjaśnić, dlaczego jest to ważne tylko w przypadku gier, ale nie dotyczy niczego innego. Jeśli rozumiesz OOP i chcesz go używać, możesz go również używać w aplikacjach biznesowych. Jeśli go nie dostaniesz lub nie chcesz go używać (i wolisz na przykład funkcjonalne programowanie), rozwój gier nie zmusi cię do zmiany.

Ale:

Rozwijanie gier może być zabawne . Większość młodych ludzi lubi gry, więc woleliby rozwijać grę niż pisać aplikację biznesową, co dla większości z nich będzie nudne. Widząc to, nauczyciele mogą zacząć wierzyć, że gra jest najlepszym sposobem na naukę programowania, a następnie spróbują znaleźć logiczne wytłumaczenie tego.

To powiedziawszy, nauczyciele kończą, czyniąc tworzenie gier nudnymi dla młodych ludzi, jak tworzenie aplikacji biznesowych. Jeśli uważają, że granie musi odbywać się , aby nauczyć się OOP itp., Wówczas poprosą swoich uczniów o wykonanie takich projektów, które wcale nie są przyjemne. To był jeden z największych błędów moich nauczycieli, kiedy byłem na studiach. Bardzo często dawali nam projekty gier do pisania w Adzie w trybie konsoli. Brak grafiki. Nie ma zabawy. Brak doświadczenia użytkownika. Przez całe życie i karierę nigdy nie widziałem projektów tak nudnych.

Arseni Mourzenko
źródło
4
Gry działają dobrze z OOP, ponieważ jest to bardzo łatwe, aby zobaczyć, jak każdy BadGuy, Weapon, PowerUp, oraz inne przedmioty w grze mogą łatwo być obiektem. Możesz zaprogramować interakcje między obiektami i zobaczyć je na ekranie. Myślę, że część wizualna sprawia, że ​​jest tak atrakcyjna. Aplikacji biznesowych, które mają typ hierarchie ServerTaskScheduler, AbstractDataProcessor, UserQueryAgent, etc ... nie są tak ekscytujące , choć mogą one uczyć tych samych pojęć OOP jak w grach.
FrustratedWithFormsDesigner
4
@FrustratedWithFormsDesigner: może po prostu nie rozumiem, bo spędziłem zbyt wiele czasu rozwój aplikacji biznesowych, ale nie rozumiem, dlaczego byłoby to trudniejsze, aby zobaczyć w jaki sposób Customerlub Productczy Transactionmogą być obiekty. Ale rozumiem, że znacznie przyjemniej jest radzić sobie z BadGuynudami niż z nudami Transaction.
Arseni Mourzenko
Ma więcej wspólnego z poziomem myślenia abstrakcyjnego. Niektórzy programiści często się rozłączają, ponieważ nie mają pojęcia, z czym się odnosić. Np. Poznałem kilku deweloperów, którzy nie mają pojęcia, co to Transactionoznacza.
Spoike
7

Programowanie gier to najlepszy sposób na naukę programowania gier. Jeśli chcesz nauczyć się programowania, zrób to, jeśli chcesz nauczyć się programowania systemów, zrób to i tak dalej.

Programowanie gier jest trudne i najprawdopodobniej nauczy Cię wielu rzeczy (Michael zauważył wiele w swojej odpowiedzi, a wiele z nich jest bardzo trudnych i przydatnych także poza grami). Tworzenie RPG lub potentata (lub podobnej gry) nauczy Cię wiele na temat projektowania OOP, ponieważ bardzo dobrze nadają się do tego paradygmatu. Będziesz także mógł dowiedzieć się wiele o zagadnieniach dotyczących wydajności, trudnej matematyce do gier itp., W zależności od złożoności grafiki i fizyki.

To dobry i najlepszy sposób na naukę niektórych rzeczy, ale nie jest to lepszy sposób na naukę programowania. Bez względu na to, ile gier zaprogramowałeś, nadal nie będziesz wiedział, jak stworzyć system operacyjny. Myślę, że większość programistów wciąż mogłaby coś zarobić, opracowując grę, nawet jeśli nie robią tego jako głównej dyscypliny programowania, o ile mają czas.

Anto
źródło
7

Pytanie: Jaka jest najlepsza metoda nauki programowania?

Odpowiedź: Metoda, którą faktycznie wykonujesz

Tzn., Kiedy się uczysz lub robisz coś, nie ma większego znaczenia, jaką metodę wybierzesz tak długo, jest to metoda, którą faktycznie stosujesz.

Jeśli granie jest dla Ciebie naprawdę zabawne, wybierz to. Jeśli uważasz, że rozwiązywanie problemów matematycznych jest bardziej satysfakcjonujące, zacznij od tego. Istnieje wiele różnych rodzajów programowania i każdy z nich wymaga innych umiejętności, więc dobrym pomysłem jest zacząć od tego, który uważasz za najbardziej interesujący, prawdopodobnie z tym, z którym będziesz pracować.

... Ale tak, gry to dobry sposób na naukę dość szerokiego zakresu programowania, ponieważ obejmuje matematykę, współbieżność, algorytmy, oop, grafikę itp.

Homde
źródło
4

Jeśli lubisz grać, pisanie gier byłoby dobrym sposobem na rozpoczęcie rozwoju, ale nie powiedziałbym, że to najlepszy sposób. Myślę, że najlepszym sposobem jest kurs CS, a następnie praca w domu oprogramowania, który zainwestuje w szkolenie i mentoring młodszego personelu.

Poza tą wprawdzie dość pompatyczną odpowiedzią, tak, rozwój gier nauczyłby cię wielu dobrych umiejętności i myślę, że jeśli lubisz gry komputerowe, zainteresuje cię to procesem rozwoju. To musi być bardziej interesujące niż wiele innych prostych aplikacji widocznych w książkach.

Steve
źródło
2

Powiedziałbym, że najlepszym sposobem na naukę kodowania jest sprawienie, że będziesz się dobrze bawić. To nie musi być prawdziwa gra, ale jakaś gra dla ciebie. Dla mnie jest to gra polegająca na rozwiązywaniu niektórych problemów matematycznych rozwijających algorytmy w taki sposób, że mogę rozwiązać złożony problem w najszybszy możliwy sposób. Rzuć sobie wyzwanie, staję się lepszym programistą przy każdej próbie rozwiązania problemu. Im trudniejszy problem, tym lepiej.

Jeśli chodzi o naukę kodowania (najlepsze praktyki), powiedziałbym, że musiałbyś stawić czoła większym wyzwaniom. Wyzwania wymagają znacznie więcej niż pojedynczego wejścia / wyjścia

IvoC
źródło
2

Nigdy nie słyszałem o twierdzeniach, że granie w Halflife lub Call of Duty uczy umiejętności programowania.

Programowanie ich może, ale programowanie czegoś takiego nie jest niczym, co początkujący powinien nawet spróbować. Szczególnie początkujący często mają wrażenie, że mogą stworzyć kolejny przebój dzięki swojej nieistniejącej wiedzy programistycznej. Powiedz im, żeby najpierw spróbowali sklonować PacMan lub Tetris, a oni krzyczą, że nie tego chcą, i że powinieneś „dać mi zuh koduz”.

jwenting
źródło
1

Nie, naprawdę nie. Nie ma najlepszy rodzaj projektu, aby dowiedzieć się na programowaniu. Najlepszy rodzaj projektu jest odpowiedni do twoich zainteresowań.

Na przykład próbowałem nauczyć się programowania na kilka różnych sposobów, w tym programowania gier. Po prostu nigdy się nie trzymał.

Więc kiedy musiałem nauczyć się programować na podstawie tego, co robiłem w swoich badaniach? W tej chwili czuję się wystarczająco dobrze, żeby powiedzieć, że znam 2 języki i pracuję nad trzecim. Czemu? Ponieważ miało to związek z moimi zainteresowaniami. Miałem powód, aby się tego trzymać, powód do nauki i więcej problemów do wypróbowania niż tylko „Ćwiczenie 8” w książce.

Nawiasem mówiąc, nie oznacza to, że programowanie modeli epidemicznych jest najlepszym sposobem na naukę programowania. Ale to był dla mnie najlepszy sposób. Znajdź swoje. Mogą to być gry, ale może nie.

Fomite
źródło
+1 za „najlepszy rodzaj projektu jest odpowiedni do twoich zainteresowań”. Amen.
Bryan Oakley,
0

Z mojego własnego doświadczenia, pisząc grę (zakładając, że robisz to we własnym / małym zespole programistów), jesteś zmuszony nie tylko myśleć o algorytmicznej / analitycznej części programowania, ale także o doświadczeniu użytkownika i projekcie.

Ponadto, jeśli jest to dość złożona gra, będziesz nad nią pracował przez kilka miesięcy i zrozumiesz, jak ważne jest dokumentowanie wszystkiego, co robisz - co później uczyni cię lepszym członkiem zespołu.

rdasxy
źródło
... ale jeśli napiszesz jakiś program, który wchodzi w interakcję z użytkownikiem, czy nie musisz myśleć o tym, jak wygląda i jak wygląda? Czy mówisz, że w tradycyjnej aplikacji klienckiej tak naprawdę nie musisz myśleć o tych rzeczach, ale gra zmusza cię do tego? I czy duże aplikacje komputerowe nie mogą trwać nawet kilka miesięcy i wymagają wykonania dokumentacji? Jak to wszystko odnosi się do gier, ale nie do innych rodzajów programowania?
Bryan Oakley,
0

Zgodziłbym się, z wyjątkiem ...

Równie prawdopodobne jest, że pierwszym doświadczeniem programowania, jakie wielu kiedykolwiek miało, było zbudowanie i zaprogramowanie robota Lego (Mindstorms).

Chociaż ogólny termin „gra” może definiować kategorię tak ogromną, że obejmuje prawie wszystkie programy, w kontekście oryginalnego plakatu zawsze wydaje się, że oznacza „pisanie gier w stylu Doom”.

Jak już powiedziano tutaj wcześniej - najlepszym sposobem na naukę programowania jest posiadanie czegoś, czego naprawdę potrzebujesz, a który wymaga programu. To znaczy - naucz się programowania pisząc program, który chcesz.

Jednym z moich pierwszych programów Windows był program kontrolera MIDI, ponieważ naprawdę chciałem program kontrolera MIDI, a system Windows wydawał się idealnie dopasowany (suwaki, przyciski, obsługa SDK dla MIDI itp.). Nauczyłem się ton o programowaniu w systemie Windows (to było w Win 3.1 dni) od tego programu.

Nigdy nie brałem udziału w programowaniu gier również z powodów wymienionych tutaj - nie rysuję tak dobrze, więc każda gra, którą stworzę, będzie miała gorszą grafikę niż grafika. Chcę nauczyć się programować, a nie zarządzać „zespołem budującym gry” (chwalebne, ale zupełnie inne ćwiczenie).

Ostatecznie nie zgadzam się z oświadczeniem nauczyciela. Najlepszym sposobem na naukę programowania jest napisanie programu, który naprawdę chcesz.

-R

Huntrods
źródło