W swojej karierze spotkałem się kilkakrotnie z pytaniem „jak zostać programistą?”. Czy odpowiedź zawsze była dla mnie prosta? Odpowiem, że zdecydowanie nie. Moim zdanie nie ma prostego przepisu na to aby stać się programistą. Jestem również pewny, że każdy z nas ma nawet swoje własne, unikalne i zupełnie inne wyobrażenie odnośnie tego temu. Faktem jest właściwie tylko to, że jest nas na świecie wielu i zdecydowanie nie rośniemy ani na drzewach ani też nie zostaliśmy znalezieni w magicznej kapuście. Nie jesteśmy również efektem ubocznym żadnego prania, chociaż pewne powiązanie z pralką na pewno uda się znaleźć 🙂
Dlaczego akurat pralka? Ponieważ wielu ludzi prędzej czy później jest zmuszonych, poprzez mniej lub bardziej wonne argumenty, nauczyć się z takiegoż urządzenia korzystać. Ponad to wiele osób, które z takim cudem techniki miały już do czynienia, zapewne zauważyło, że pralki posiadają programatory, skąd można wysnuć wniosek, że do ich obsługi programowanie w jakiś sposób jest na pewno konieczne. Jak z tym jest na prawdę o tym napiszę w dalszej części tego wpisu.
O czym myśli przeciętny NIEprogramista kiedy zastanawia się nad tym jak to nieszczęsne NIE z siebie zmazać? Jestem tutaj w bardzo komfortowej sytuacji ponieważ nie muszę się tego domyślać – słyszałem to bowiem wiele razy na własne uszy. Otóż zatrważająca ilość moich rozmówców uważała, że do programowania potrzebna jest biegła wiedza z zakresu matematyki. Nie wnikając w historię tego, czy to faktycznie prawda czy może jednak mit od razu pośpieszę z wyjaśnieniem – współcześnie do samego programowania ani matematyka ani fizyka nie są potrzebne w formie takiej jaką sobie na co dzień wyobrażamy. No może przydatna będzie logika (i to wyłącznie na takim poziomie, który każe nam włożyć pranie do pralki zanim ją włączymy).
Co zatem z matematyki czy fizyki będzie dla nas ważne? Otóż wcale nie chodzi o wzory skróconego mnożenia, obliczanie delty czy jakiś abstrakcyjny wzór dla kulki staczającej się po równi pochyłej. To czego będziemy potrzebować to formalizm zapisu problemu. Tylko tyle i aż tyle. Jeśli jesteś drogi czytelniku w stanie nazwać poszczególne składniki formuły matematycznej, podstawić do nich wartości i dokonać obliczeń to gratuluję – posiadasz minimum wiedzy potrzebnej programiście!
Czasy kiedy matematyka w sensie swojej „tajemniczości” miała jakieś większe znaczenie w programowaniu są już dawno za nami. No chyba, że ktoś tworzy programy modelujące świat fizyczny – wtedy bez takiej dodatkowej wiedzy ani rusz. Ewentualnie jeśli ktoś prowadzi badania nad kryptografią, lub czymś równie zbliżonym do magii 😉 Możecie mi dawać wiarę bądź nie ale zdecydowana większość programistów z takimi rzeczami raczej się w swojej karierze nie spotka. Takie wyjątkowe jednostki są w naszym cyfrowym świecie porównywalne do znanych gwiazd ze świata muzyki, podczas gdy my na wesele zamawiamy sobie lokalnego barda, przy którego śpiewie będziemy się na pewno świetnie bawić.
No dobrze, to zatem co jest nam potrzebne? Może zaskoczę tutaj niektórych czytelników, ale chęć zarabiania dużej ilości pieniędzy nie jest dla nas programistów najważniejsza. Nie chcę tutaj wypowiadać się za wszystkich, ale programiści, których miałem przyjemność w życiu poznać, kierowali się przede wszystkim pasją. Kwestie finansowe praktycznie nigdy nie wypływały w rozmowach w charakterze inspiracji. Oczywiście skłamię mówiąc, że programiści zarabiają mało lub zarabiać nie lubią. Niemniej wg mojego doświadczenia najpierw stajemy się programistami a potem dopiero pojawiają się związane z tym „korzyści materialne” 😉
Dlaczego pieniądze są według mnie złą inspiracją? Ponieważ nie da się moim zdaniem być dobrym programistą nie posiadając do tego odpowiednich cech. Celowo nie używam tutaj słowa „predyspozycji” – te mogą być ważne w zawodzie architekta. Jak ktoś nie umie rysować to budynków nie zaprojektuje i już. Brak predyspozycji może natomiast programiście pracę utrudnić ale jak ktoś się uprze to na pewno mu jej nie uniemożliwi.
To co uważam za najważniejszą cechę w naszym zawodzie to ciekawość i wynikająca z niej chęć zdobywania nowej wiedzy. Przy czym nie jest to coś na zasadzie, że powstaje nowy film ze znanej serii więc trzeba iść do kina. Przeważnie jest to poszukiwanie rozwiązania konkretnych problemów. Cały czas szukamy nowinek, że np. ktoś odkrył jakiś nowy algorytm, nowy wzorzec projektowy, nową metodologię uczenia sieci neuronowych, czy coś innego, dzięki czemu nasza praca stanie się szybsza, wydajniejsza no i z całą pewnością ciekawsza (w końcu kto by się nie ucieszył gdyby dostał do zabawy nowe klocki? 😉 ).
Współczesne programowanie sprowadza się tak na prawdę tylko do tego aby sformalizować problem do rozwiązania. Jeśli chcemy napisać sobie kod sumujący dwie liczby to nie musimy myśleć o rejestrach, pamięci czy sposobie przetwarzania poleceń przez procesor. Dzisiejsze języki programowania nie skupiają uwagi programisty na rzeczach będących tak blisko sprzętu, czy mówiąc inaczej – sprawach niskiego poziomu (stąd też wzięły się terminy programowania niskiego i wysokiego poziomu). Współcześnie zapisanie sumy dwóch liczb bardziej przypomina naturalny matematyczny zapis niż przedziwne symbole rysowane zapewne na jakichś magicznych pentagramach w przeszłości.
Zaryzykuję stwierdzenie, że aby zacząć zabawę z programowaniem wcale nie trzeba znać żadnego języka programowania. Jeśli nie jesteś programistą drogi czytelniku to na pewno Cię tym zaskoczyłem 🙂 Otóż rozwiązywanie problemów w naszej profesji nie jest związane najczęściej z żadnym językiem – ten pojawia się dopiero przy implementacji. Aby to lepiej zrozumieć posłużę się podanym wyżej przykładem – czy jeśli będę chciał dodać do siebie dwie liczby to muszę wiedzieć jak to zapisać w jakimś języku programowania? A jeśli będę chciał policzyć odsetki od kredytu? Jeśli uważasz drogi czytelniku, że rozwiązanie takich problemów jest banalnie proste to się z Tobą zgodzę. To co programista musi wiedzieć to to jak przeprowadzić daną operację. Najpierw trzeba nazwać składniki, potem przygotować formułę obliczającą, później podstawić dane i na końcu wyświetlić wynik. Ot takich kilka następujących po sobie czynności. Tak samo jak z tytułowym praniem – jeśli potrafimy zrozumieć konkretne czynności do wykonania oraz to dlaczego muszą być ustawione w takiej a nie innej kolejności, to właśnie jest ten znak, że posiadamy odpowiednie cechy dla tego zawodu! 🙂
Mając określone kroki postępowania możemy brać się za implementację. W każdym języku może ona wyglądać mniej lub bardziej egzotycznie, chociaż pewne wspólne cechy da się zwykle dostrzec. Np. zwykle znak dodawania wygląda i działa tak samo 🙂
No dobrze – umiem zrobić pranie i uważam się za osobę w miarę ogarniętą i inteligentną. Co dalej? Czy powinniśmy zaczynać od kupienia sobie komputera? Niekoniecznie – na początku możemy zadowolić się książkami. W swoim życiu miałem kontakt z wydaniami zarówno dla profesjonalistów jak i zupełnie początkujących osób i chętnie mogę je polecić. Spotkałem się nawet z takimi pisanymi dla małych dzieci 🙂 Ja wiem, że to brzmi jak nauka magicznych zaklęć bez użycia różdżek. Chcę tylko powiedzieć, że da się również w ten sposób nauczyć podstaw programowania 🙂
Jaki język programowania wybrać na początku? Tutaj niektórzy specjaliści zaczęliby z całą pewnością snuć wywody o tym, że trzeba uwzględnić wiele czynników – czy chcemy programować aplikacje mobilne, strony internetowe a może chcemy pisać nowe oprogramowanie dla pralki? Potem musimy uwzględnić to, jaki system operacyjny preferujemy, czy chcemy korzystać z narzędzi płatnych czy może opensource, i wiele, wiele innych. Co ciekawsze – takie wywody są w pełni uzasadnione i słuszne. Jak pisałem wcześniej dotyczą one problemu samej implementacji i często potrafią zależeć od osobistych preferencji (bądź preferencji naszego klienta 😉 ) a mniej od samego problemu jaki mamy rozwiązać.
Aby dobitniej pokazać jak istotny jest wybór pierwszego języka posłużę się pytaniem pomocniczym (a nawet dwoma). Drogi czytelniku – czy posiadasz samochód? Jeśli tak to odpowiedz proszę sam sobie na kolejne pytanie – jak wybrałeś swój pierwszy samochód? Zabiłem Ci teraz ćwieka, co nie? 🙂
Otóż wybór pierwszego samochodu jest bardzo podobnym problemem co wybór pierwszego języka programowania. Sposób i wynikające z tego konsekwencje są również analogiczne! Jeśli ktoś za pierwszym razem wybrał sobie np. Skodę to za drugim razem będzie wszystko do niej porównywał. Być może nawet nigdy nie spróbuje jeździć niczym innym. Ktoś by mógł mi tutaj zarzucić – no ale dlaczego akurat Skodę? A dlaczego nie? Być może dlatego, ponieważ zawsze się komuś podobała, bo sąsiad taką ma, bo tata taką jeździł, bo w gazecie był artykuł z ładnym zdjęciem – każdy powód będzie tutaj równie dobry i każdy zaprowadzi nas do celu.
Wybór języka, chociaż potrafi zdeterminować naszą programistyczną przyszłość, nie ma na początku tak na prawdę większego znaczenia. Nawet jeśli po dwóch dniach uznamy, że inny język bardziej odpowiada naszej osobowości to niczego nie stracimy. Zmiana, dostosowywanie się – to bardzo naturalne procesy i nie należy się nimi martwić. Powiem więcej – warto się z nich cieszyć ponieważ takie działania są wyraźnym dowodem naszego zaangażowania i rozwoju 🙂 Ostatecznie, podobnie jak w świecie czarodziejów musi powstać więź pomiędzy magiem a jego różdżką, tak samo będzie i tutaj – gwarantuję, że w końcu natrafi się na ten konkretny język, w którym się zakochamy (od razu dodam, że po iluś latach również i tutaj potrafią pojawiać się rozwody i nowe miłości 😉 ).
Wiele języków jest do siebie bardzo podobnych składniowo (np. wiele języków można porównywać do tych bardzo popularnych jak C++ czy Java). Czasem spojrzenie na sam kod nie jest wystarczające aby języki między sobą odróżnić – czasem szybciej rozpoznajemy jakieś charakterystyczne dla języka środowisko niż samą składnię 😉
Kiedy już wybierzemy sobie język (na prawdę – na początku zacznijmy od jakiegokolwiek) wtedy będzie już z górki. Opanowanie podstaw po raz pierwszy zajmuje na początku trochę więcej czasu ale potem jest już łatwiej. Zwykle pierwszym programem jaki się pisze jest taki, który wyświetla na ekranie „Hello World”. Od razu proszę – szanujmy tę tradycję i przekazujmy ją dalej w niezmienionej formie 🙂 Niech te dwa słowa, kiedy już pojawią się na ekranie, będą dla nas jak narodziny do czegoś fajnego, jak autentyczne przywitanie nowego świata, do którego właśnie postanowiliśmy wejść 🙂
Zapewniam, że poznanie podstaw składni jednego języka sprawia, że bardzo szybko będziemy uczyć się innych – podobnych języków. Zachęcam tutaj gorąco do eksperymentowania – tego nie trzeba się bać. Wiedza jaką posiądziemy będzie nam towarzyszyć bardzo długo. Oczywiście, jeśli przez długi czas nie będziemy pisać w jakimś języku (nawet jeśli posługiwaliśmy się nim biegle) to pamięć składni się zatrze i trzeba będzie sobie wiele rzeczy później przypominać. Ale tego też nie trzeba się obawiać. To jest jak z jazdą na rowerze – jeśli raz się zrozumie jak coś działa to przypomnienie sobie jest problemem z natury banalnym.
Dlaczego w tym miejscu zakończę mój wpis i nie powiem jakie dalsze kroki warto wykonać wchodząc do tego nowego dla nas świata? To bardzo proste – otóż pokazałem Ci drogi czytelniku pewne drzwi. Jeśli zechcesz przez nie przejść to sam szybko odkryjesz, że powiedziałem tutaj o wiele więcej niż było potrzeba abyś mógł zacząć stawać się programistą. Być może kiedy kolejny raz będziesz nastawiać pralkę to poczujesz, że dotykasz pewnej idei, która może Cię zmienić i sam sobie powiesz – „może faktycznie warto spróbować?” 🙂