Jak nie lamić
From Wiki
Oto lista grzechów najczęściej popełnianych przez początkujących programistów (na forum, na kanale IRC oraz w innych miejscach w sieci), czyli zachowań, których należy unikać, by założony temat czy zadane pytanie nie zostało uznane za lamerskie i nie spotkało się z złym przyjęciem.
Doskonałym uzupełnieniem tego dokumentu będzie lektura artykułu Jak mądrze zadawać pytania, który napisał sam Eric S. Raymond.
Spis treści |
1. "Napiszcie mi grę"
- Wpadłem na genialny pomysł! Chodzi o grę, w której (...). Poszukuję programistów i grafików, żeby rozpocząć taki projekt.
Każdy z nas wciąż wpada na wiele ciekawych pomysłów - każdy ma ich więcej, niż kiedykolwiek będzie w stanie zrealizować. Co ty masz zamiar robić w takim projekcie? Co potrafisz, ile już masz zrobione? Jeśli chcesz tylko wymyślać albo zarządzać to niestety musisz pogodzić się z tym, że nikt nie napisze ci twojej wymarzonej gry.
2. "Co tu jest źle?"
- Pokaże wam swój kod. Ściągnijcie go i zobaczcie, dlaczego to nie działa? Nie wiem, gdzie tu jest błąd.
Każdy z nas ma swój kod i swoje błędy. W twoim kodzie błędy możesz znaleźć tylko ty sam - zrobisz to najszybciej i najlepiej, bo już go znasz. Nikt nie będzie analizował dziesiątek czy setek linii twojego kodu albo całego projektu.
3. "Nie działa"
- Napisałem tak jak kazali w (...), ale to niestety nie działa, wyskakuje jakiś błąd. Co zrobić?
Nikt nie będzie w stanie doradzić ci, co zrobić, po takiej zdawkowej informacji. Jako programista, a tym samym zaawansowany użytkownik komputera, musisz czytać, rozumieć i analizować komunikaty o błędach. Programów nie uruchamia się na zasadzie "działa lub nie działa". Trzeba zobaczyć, co jest źle. Czy program się kompiluje? Jeśli nie, to jak brzmi błąd kompilatora? Czy program się "wysypuje"? Jeśli tak, to z jakim komunikatem? Wykonanie niedozwolonej operacji (błąd ochrony), a może "Debug Assertion Failed"? Czy program się nie uruchamia? Czy jakaś jego część nie działa? Jeśli tak, jaki kod błędu zwracają funkcje, które wywołujesz w swoim kodzie? Czy w ogóle to sprawdzasz?
4. "Dajcie linka"
- Dajcie linka do jakiegoś dobrego kursu na temat (...) - tylko żeby był taki prosty, dla kompletnie początkujących, krok po kroku i najlepiej po polsku.
Są różne źródła wiedzy - lepsze lub gorsze, bardziej lub mniej odpowiadające twoim aktualnym potrzebom, ale nigdzie nie znajdziesz kursu, który nauczy cię dokładnie wszystkiego tego, czego chcesz, wykorzystując dokładnie taką wiedzę, jaką już masz i napisanego dokładnie takim językiem, jaki bez trudu zrozumiesz. Nauka programowania wymaga przeczytania wielu dokumentów, korzystania z różnych źródeł. Musisz też pogodzić się z tym, że po angielsku jest znacznie więcej ciekawych tekstów i prawie wszystkie dokumentacje, więc bez znajomości tego języka daleko nie zajdziesz. Dokumentów na interesujący cię temat szukaj przede wszystkim na Google.
5. "Jak się używa tej funkcji?"
- Wiem, że do zrobienia (...) używa się funkcji (...), ale wytłumaczcie mi, jak ją wywołać?
RTFM :) Jeśli dotychczas korzystałeś tylko z książek, tutoriali itp., to najwyższy czas, żebyś oswoił się z dokumentacją dostarczaną przez producenta danej biblioteki. Tylko w niej opisana jest systematycznie każda funkcja - co robi, jakie parametry przyjmuje, co zwraca i jak reaguje na błąd. Takie proste informacje trzeba zdobywać właśnie z takich źródeł, a na forum przychodzić tylko z ciekawymi, niebanalnymi problemami.
6. "Jak zrobić..."
- Jak zrobić, żeby w mojej grze...
Często takie pytanie jest zbyt ogólne. Nie pytaj, jak zrobić jakąś skomplikowaną rzecz oczekując prostej odpowiedzi tak jakby dało się to zrealizować przez wywołanie jednej funkcji. Musisz wiedzieć, że często kryje się za tym cała obszerna dziedzina, którą trzeba poznać i której nie da się wyjaśnić i nauczyć w jednej chwili. Pogódź się z tym i uwierz, że naprawdę nie ma drogi na skróty - gdyby była, wszyscy byśmy nią chadzali.
7. "Kto mnie nauczy..."
- Chciałbym opanować (...). Kto mnie tego nauczy? Mój numer Gadu-Gadu: (...)"
Nikt cię nie nauczy! Nauka programowania to nie szkoła. Nie znajdziesz nikogo, kto będzie poświęcał swój czas, żeby tłumaczyć ci zawiłości jakiejś dziedziny, pomagać ją zrozumieć i odpowiadać na twoje pytania. Nauka programowania to samodzielna praca oparta przede wszystkim na czytaniu i ćwiczeniu.
8. "Jaki silnik wybrać? Jaką książkę wybrać?"
- Jaki silnik jest dobry, żeby zrobić taką grę jak (...)? Pomóżcie mi coś wybrać!
- Z jakiej książki będzie mi się najłatwiej nauczyć (...)
Jest wiele silników, a niemal wszystkie mają podobne możliwości i w dowolnym z nich można napisać każdego rodzaju grę. Nie oczekuj więc, że inni wybiorą za ciebie lepiej. Pamiętaj też o tym, że każda osoba ma własne upodobania i uprzedzenia, więc prawdopodobnie każdy doradzi ci co innego. W ten sposób pytając o wybór silnika zrobisz sobie w głowie jeszcze większe zamieszanie. Wybierz sam, a każdy wybór będzie dobry.
Dokładnie to samo można powiedzieć o książkach.
Wybór silnika w kilku prostych krokach:
- Sprawdzasz czy ma dystrybucję binarną (gotowe biblioteki).
- Jeżeli nie ma binarek czy ma dobrą instrukcję kompilacji i czy da się w prosty (czytaj: wystarczy ci wiedzy o języku/kompilatorze) sposób skompilować.
- Sprawdzasz przykładowe aplikacje czy pokazują to co cię interesuje (wiesz jak osiągnąć wybrany efekt).
- Jak wygląda API (pasuje ci wizualnie ;)) i czy ma dobrą dokumentację.
- Comunity - forum itp. jak odpowiadają na pytania, czy projekt ma aktualna stronę, wiki, przykłady, tutoriale itd itd
- Piszesz we wstępnie wybranych silnikach (dwóch albo trzech) prostą aplikację np. wyświetlenie modelu, animowany model, teren itp.
- Wybierasz.
Czasami ważne jest także jakie formaty plików silnik obsługuje, jeżeli tylko własny to czy dostępne są aktualne eksportery z popularnych programów graficznych.
Dodatkową zaletą mogą być dostępne integracje z silnikami fizycznymi czy bibliotekami dźwiękowymi. No i oczywiście wybór in game gui i ewentualnie na potrzeby pisania narzędzi integracja z jakimś „poważnym” gui, np. WinAPI, Windows Forms, Gtk, WxWidgets, Qt.
- (Wersja 0.4.3, 19 sierpnia 2008)

