wtorek, 21 grudnia 2010

Jak poznawać nowy język programowania? (w/g Rafała)

Często czytam wypowiedzi czy artykuły różnych programistów, stanowiące sprawozdania z procesu poznawania jakiegoś nowego dla nich języka programowania. Metody poznawcze bywają różne. Wielu programistów podchodzi do problemu analitycznie - wgłębiają się w każdy szczegół języka, analizują jego składnię, znajdują niedoróbki i niekonsekwencje, badają efektywność różnych konstrukcji, zastanawiają się nad ich przydatnością i tak dalej. I jest to podejście bardzo słuszne w swym założeniu, pozwalające na rzeczywiste zgłębienie języka. Ale nie sposób też nie zauważyć, że jest to podejście czasochłonne, a zwykle programiści - jeżeli poznawanie nowego języka nie jest ich zajęciem zasadniczym - cierpią na chroniczny brak czasu, ścigani przez terminy „na wczoraj”.
Jedną z moich informatycznych myśli przewodnich jest „rozwój poprzez poznawanie jednego nowego języka programowania na rok”. Gdybym stosował metodę przedstawioną wcześniej, prawdopodobnie miałbym problemy z wyrobieniem się w czasie. Mój sposób na poznawanie języka jest trochę inny. Opiera się na kilku założeniach: poznawanie języka poprzez programowanie w nim, czytanie szczegółowej dokumentacji w miarę potrzeb (na początku używam ogólnie dostępnej literatury zarówno drukowanej, jak i elektronicznej), rozpoznanie i wykorzystywanie bibliotek dostępnych dla danego języka. Oczywiście żeby zacząć pisać jakiś program, muszę mieć pomysł albo jakiś problem do rozwiązania. Najlepszym rodzajem „problemu do rozwiązania” jest zlecenie, z którym związane są konkretne terminy i - co nie jest bez znaczenia - równie konkretne pieniądze (tzw. czynnik motywujący). No ale to już inna sprawa.
Wracając do zgłębiania tajników języka - po prostu zaczynam pisać program. I już. Potem jest następny i jeszcze jeden, potem analizuję kod tych programów, wyłapuję błędy (umiem to zrobić, ponieważ zwykle w miarę pisania kolejnych programów moja znajomość języka zwiększa się - naturalna rzecz, jak myślę), poprawiam je, zapamiętując przy okazji różne techniki i metody charakterystyczne dla danego języka. W ten sposób poznałem m. in. Javę i C#, po części też C++, natomiast Pascala (tak, dawne czasy) nauczyłem się metodą wspomnianą na samym początku tego artykułu.
Czy mój sposób jest doskonały? Oczywiście, że nie. Choćby dlatego, że mogą mi umknąć np. ograniczenia pewnych elementów języka, szczegóły konstrukcyjne środowiska (nie IDE!) języka, różne szczegóły techniczne typu jakie wyjątki rzucają metody danej klasy. Nie jest to też sposób akademicki, który zakładałby poznawanie języka poprzez analizowanie jego dokumentacji (składnia, słowa kluczowe, zakresy zmiennych itp. a potem dopiero programowanie - tak uczyłem się wspomnianego Pascala). Mój sposób jest jednakowoż szalenie wygodny i wydajny (efektywny), ponieważ skupiam się na wykorzystaniu języka (narzędzia!) do rozwiązania konkretnego problemu czy grupy problemów. Po tych doświadczeniach mogę podjąć decyzję, czy dalej będę brnął w ten język, czy też nie nadaje się on do moich celów. A, i oczywiście staram się nie dopasowywać problemu do narzędzia, lecz odwrotnie: wybieram narzędzie nadające się najbardziej do rozwiązania danego problemu (np. dostępność i stopień zaawansowania bibliotek, dodatki, pluginy, szybkość pisania programu itp.).
A jak to jest z początkującymi, czyli ludźmi, którzy przygodę z programowaniem dopiero zaczynają? Niestety, muszą przede wszystkim poznać podstawowe pojęcia związane ze sztuką programowania i oczywiście zaznajomić się z komputerem jako urządzeniem programowalnym... Dlaczego „niestety”? Chyba dlatego, że jest to często najtrudniejszy etap nauki programowania, w którym najczęściej ludzie „wymiękają”, szczególnie ci, którzy myślą, że programy powstają jak obrazki w Paint`cie :-) Ale jest to wiedza dla nas niezbędna, „niestety” ;-)

Jaka jest geneza tego artykułu... Otóż ma to być kolejna próba odpowiedzi na pytanie: „Jak uczyć się programowania w danym języku?”. No to przedstawiłem moją propozycję odpowiedzi. A jaki język wybrać na początek? Myślę, że chyba coś klasycznego, jak C++ czy Java (patrząc też pod kątem popularności języków). Jednak zawsze znajdzie się jakieś "ale", tyle, że to jest temat na kolejny artykuł.