Drobne programowanie

Kaczuś zaprasza do opowieści o algorytmach, językach programowania i strukturach danych

Na stronie stosowane są pliki cookies. Więcej na podstronie.
odsłon: 13214

Coś dla początkujących programistów

Co jakiś czas spotykam się z pytaniami "Jak zostac programistą", "od jakiego języka programowania zacząć naukę", "czy matematyka jest potrzebna, by zostać programistą" itd... Postaram się w tym krótkim tekście lepiej lub gorzej odpowiedzieć na te i inne pytania, które powstają przy okazji.

Co potrzeba aby zostać programistą

I już na początku pojawiają się schody, bo w zależności od tego jak zaawansowanym programistą chcemy być, takie umiejętności będą nam potrzebne. Tak więc poczynając od najprostszych programów (zaprogramowanie pralki, aby prała, albo zmywarki - aby zmywała) - gdzie wystarczy umiejętność czytania ze zrozumieniem instrukcji obsługi albo krótki instruktaż kogoś potrafiącego się posługiwać danym modelem urządzenia, aż do wielkich systemów - jest ogrom możliwości znalezienia dla siebie niszy. Dla w miarę uniwersalnych potrzeb przyjmijmy, że będzie to osoba umiejąca stworzyć jakieś proste gierki, albo jakiś przydatny program komputerowy.
Do takich umiejętności potrzeba:
  • umiejętność zadawania pytań (zarówno wyszukiwarkom, jak i innym ludziom)
  • wyobraźnia
  • umiejętność analitycznego i abstrakcyjnego myslenia
  • przynajmniej podstawy matematyki (głównie znajomość algorytmiki, szacowania itp)
  • duża siła woli do kończenia przynajmniej niektórych projektów (ileż to na dyskach programistów znajduje się rozpoczętych i nigdy nieskończonych programów :)
Tak więc przy okazji odpowiedzieliśmy sobie na pytanie o matematykę. Ogólnie im jej znajomośc lepsza, tym w bardziej skomplikowanych projektach można uczestniczyć.

Istotna jest natomiast umiejętność zadawania pytań i to z kilku względów:
  • jeśli natrafimy na problem, aby umieć skorzystać z wyszukiwarek
  • jeśli rozwiązanie naszego problemu nie do końca jest dobrze opisane w sieci, aby umieć zadać konkretne pytanie komuś bardziej doświadczonemu. I uwaga programiści należą do osób, które nie lubią, gdy ktoś mówi "nic nie rozumiem - pomóżcie mi". Niestety tu pytania muszą być konkretne i "nic nie rozumiem" dla programisty oznacza "leń i obibok, któremu nie chce się uczyć, to co mam marnować czas na pomaganie takiemu". Dlatego tu polecam ostrożność jesli chcemy uzyskać jakąkolwiek pomoc.
  • czasem omawiając problem innej osobie - najlepiej takiej, która nie uczestniczy w pisaniu naszego genialnego programu - sami znajdujemy rozwiązanie. A jesli nie, to osoba taka zadając pytania w celu zrozumienia problemu, bądź też dzięki świeżemu spojrzeniu znajdzie lub wskaże nam rozwiązanie. Tak zdarzyło mi sie to niejednokrotnie. Związane jest to z tym, że musząc przedstawić komuś niewtajemniczonemu nasz problem, musimy uporządkować chociaż w myślach to co zrobiliśmy pozbywając sie różnych skrótów myślowych i czasami właśnie to powoduje, że znalezienie rozwiązania jest możliwe.
Zanim przejdę do odpowiedzi na pytanie "jaki język programowania wybrać na początek", tudzież "jaki język jest na tyle przyszłościowy, by warto było od niego zacząć naukę" (bo odpowiedź na oba będzie podobna) może napiszę o tym

jak zacząć programować

Naukę proponuję rozpocząć od "grania coverów" (że tak przyrównam to do nauki gry na instrumencie, czy początków grania w zespole). Czyli od przepisania jakichś dostępnych w miarę prostych programów, analizowania, wprowadzania zmian i testowania, co one dadzą. Nie porywajmy się na pisanie zaawansowanych programów (czyli wymyślania własnego repertuaru), dopóki nie zdobędziemy podstawowych umiejętności. Wraz z tymi testami proponuję zacząć naukę podstaw dowolnego języka programowania (o tym dalej). Jak przepiszemy już pierwsze programy, nauczymy się podstaw wybranego języka, to wprowadzać należy poznawanie podstawowych struktur i typów danych (tablice, listy, kolejki, stosy, typy całkowite, typy zmiennoprzecinkowe, typy stałoprzecinkowe, teksty), oraz podstawowych algorytmów (takich jak sortowanie, wyszukiwanie, czy proste metody numeryczne). To nic, że w niektórych językach są gotowe typy takich danych jak i funkcje sortujące, wyszukujące itp, istotne jest to, aby poznać jak mogą być one stworzone.
To ma 3 konsekwencje:
  • jeśli usiądziemy przy języku bez takiego wsparcia, poradzimy sobie
  • łatwiej będzie nam dobierać odpowiednie typy i algorytmy do danego problemu, wiedząc jak działają
  • przy okazji nabierzemy biegłości w programowaniu - należy pamiętać, że podobnie jak w muzyce - aby być biegłym w programowaniu trzeba dużo ćwiczyć.
Z czasem należy wprowadzić kolejny element - tworzenie własnego programu, najpierw jakiegoś małego i całkowicie samodzielnie, a później należy to rozwijać. Dobrze też zacząć współdziałać w jakiejś grupie, bo to uczy innych przydatnych rzeczy.

No i w końcu przychodzi nam odpowiedzieć na pytanie

jaki język wybrać.

Przede wszystkim należy powiedzieć, że język nie ma większego wpływu na to czy nauczymy się programować. Dlatego przy wyborze należy się kierować dwoma przesłankami:
  • czy dany język łatwo przyswajamy (to zależy od róznych cech danej osoby, znałem osoby, które ponieważ wcześniej zajmowały się dużo elektroniką łatwiej rozumiały asemblera, który jest maloskomplikowanym, ale trudnym językiem), znowu innym lepiej uczyło się wysokopoziomowych języków typu java, c#, czy inny python. Są tez tacy, którzy wybierają coś pośredniego C, C++, Pascal, E...
  • czy mam jakąś pomoc (czyli literaturę w przystępnej dla mnie formie, albo kogoś znającego bardzo dobrze dany język, gotowego mi pomagać)

Czy należy patrzeć na to jaki język jest przyszłościowy rozpoczynając naukę programowania?

Nie, nie i jeszcze raz nie! Najpierw nauczmy się programować, a to który język bedzie przydatny okaże się za wiele lat, w zasadzie większość programistów poznało więcej niż jeden język programowania. Ja sam zaczynałem od Basica (na C=64 i na Elwro Junior), później podstawy Pascala (Elwro junior i pierwsze PC-ty), następnie C++ (a w zasadzie C z klasami: Amiga i nowsze PC), dalej były C, asembler, gdzies tam liznąłem jakieś awk, php, C#, sql-e, arexx i wiele innych, które były akurat mi do czegoś przydatne. Więc jak zajdzie potrzeba, a będziesz umieć programować w jakimś języku, to w rozsądnym czasie nauczysz się kolejnych języków.

Tak więc zapraszam do nauki!
Z poważaniem
Tomasz Kaczanowski

2015-04-19 15:26:15


programista początki język programowania