FabLabTwarda.pl

Programowanie – sprint, maraton a może sztafeta? Rady dla młodych programistów

Autorem artykułu jest Tomasz Kunicki, prezes AdRem Software.

Dlaczego stwierdzenie „u mnie działa” to niestety nadal trochę za mało, jaka jest różnica pomiędzy profesjonalnym i amatorskim programowaniem, co daje holistyczna praca nad produktem oraz jak ważna jest edytowalność kodu? Zaczynając przygodę z programowaniem, młodzi adepci prawdopodobnie nie wiedzą, jak długa droga ich czeka, zanim zostaną profesjonalnymi programistami. Aby mogli jak najlepiej przygotować się do tego wyzwania, powinni posłuchać, co radzą im doświadczeni „wyjadacze”. Jak zatem zostać programistą profesjonalnym? Zapraszam do przeczytania małego poradnika.

Fot: Startup Stock Photos, CC0 License.

Nie bójmy się stwierdzenia, że istotnym elementem dzisiejszego świata IT jest ciągła weryfikacja pisanych programów. One nigdy nie stoją w miejscu, nieustannie muszą być testowane i rozwijane, nad czym pracuje nieraz cały zespół.  Pierwszym krokiem w tym procesie jest monitorowanie tworzonej lub aktualizowanej aplikacji. Dotyczy ono wpływu zmian w kodzie na wynikowy produkt, a często nawet na skuteczność całej usługi, której jest częścią. Należy pamiętać, że jej rozwój nie powinien upośledzać wydajności innych składników środowiska, w którym działa. Monitorowanie służy w tej sytuacji jako punkt odniesienia, bez którego ciężko jest przecież stwierdzić, czy projektowana aplikacja po wprowadzonych zmianach działa wolniej, czy szybciej. Subiektywne odczucia w tej sytuacji nie wystarczą. Oczywiście najpierw trzeba sprawdzić, czy program w ogóle pracuje. Dobry programista musi zadać sobie pytanie – jak coś działa, czy jest skuteczne, czy spełnia oczekiwania, a co najważniejsze – czy rzeczywiście rozwiązuje problem, który postawiliśmy sobie, gdy rozpoczynaliśmy pracę nad projektem.

U mnie działa

Bardzo częstą wymówką młodych programistów na błędy zgłoszone przez użytkownika jest stwierdzenie „ale u mnie działa”. To dopiero wierzchołek góry lodowej – początek pracy, którą należy włożyć w ukończenie całego projektu. Pokazuje, że przed rozpoczęciem pracy nad programem niedostatecznie zdefiniowaliśmy warunki, w jakich kod będzie działał, a zatem nie przetestowaliśmy go w sytuacjach, w których będzie używany przez odbiorcę.

Jaka jest różnica między profesjonalnym a amatorskim podejściem do programowania? Chodzi przede wszystkim o cel, jaki chcemy osiągnąć. W trakcie studiów jest nim po prostu zdobycie zaliczenia – stworzenie programu i pokazanie, że działa. Czy rzeczywiście tak jest, a nasz program działa poprawnie we wszystkich założonych sytuacjach? To zazwyczaj zostaje pozostawione subiektywnej opinii osoby prowadzącej zajęcia. Celem dojrzałego programisty jest napisanie kodu, który będzie rozwiązywał problemy zdefiniowane na początku projektu, który będzie realizowany w zmiennych warunkach oraz rozwijany i aktualizowany przez wiele lat. Taki finał daje poczucie satysfakcji, będącej najbardziej oczywistym motywatorem do dalszej pracy. Warto pamiętać, iż tylko wiara w swój produkt może spowodować, że uda się go sprzedać. Pieniądze to w rzeczywistości tylko motywacja zastępcza. Nie wiedząc, dlaczego tak naprawdę coś robimy, nie widząc celu naszego działania lub mając w głowie jedynie cele pośrednie, nie będziemy w stanie zainteresować naszym produktem odbiorcy i nigdy nie wciągniemy go do świata naszej idei.

Cel. I co dalej?

Gdy ma się już wyznaczony cel, warto zadać sobie pytanie o to, jak go zrealizować? Tu również zauważymy różnice między amatorem i profesjonalistą. Ten pierwszy zazwyczaj oczekuje szybkich efektów. Jego marzeniem jest natychmiastowe napisanie czegoś własnego. Nie zawraca sobie zbytnio głowy użytym językiem, czy architekturą całego kodu. Niecierpliwość jest domeną osób początkujących. Profesjonalista zaś najwięcej czasu poświęca na analizę i projektowanie rozwiązania, antycypując przyszłe warunki i sytuacje, w których ma działać. Musi przewidzieć i przygotować program na to, że być może w przyszłości będzie musiał działać w dużo większej skali albo w bardziej złożonym środowisku. Sukces może ogłosić wtedy, kiedy program w wyżej wymienionych sytuacjach się nie zawali i nie będzie wymagał bardzo kosztownego przepisania.
Pamiętać należy, że dopiero końcową i nierzadko najkrótszą częścią  pracy zawodowca jest napisanie kodu, który „w praniu” często okazuje się dużo prostszy niż było zakładane przy starcie projektowania. Profesjonalny kod jest bowiem bardziej czytelny dla programisty, a dzięki temu prostszy w rozwijaniu i utrzymaniu. Warto wiedzieć, że to właśnie koszty wprowadzania zmian mają dużo większe znaczenie niż koszt stworzenia pierwszej wersji.

Złożony i gotowy na zmiany

Oprogramowanie można porównać do budowli z klocków Lego. Każdy, kto kiedykolwiek ich używał, wie, że im mniejsze są elementy, tym stabilniejsza budowla, ale również trudniej jest wymienić któryś klocek, gdy coś pójdzie nie tak. Podobnie jest z softwarem. Wymiana niektórych elementów może doprowadzić do całkowitego rozsypania się systemu. Z drugiej strony pozostawienie uszkodzonego fragmentu ze strachu przed zniszczeniem całości to najgorsze możliwe rozwiązanie. Może mieć ono identyczne skutki jak nieumiejętnie wprowadzona zmiana. Dlatego przy modyfikacjach istotne są procedury, które pozwalają na elastyczność i ułatwiają przeprowadzenie całego procesu.

Aplikacja jak Nowy Jork

Złożone aplikacje można porównać również do Nowego Jorku, który jest cały czas w budowie. Jako organizm miejski jest wydajny i spełnia swoje zadania, jednocześnie będąc nieustannie poddawanym zmianom i naprawom, które mają dostosować go do nowych wyzwań. Wszyscy, którzy byli w tym mieście, wiedzą, że prawie przy każdym skrzyżowaniu stoją rusztowania i dźwigi. Nikogo to nie dziwi – tętniące życiem miasto wymaga ciągłej modyfikacji i ulepszeń. Tak samo jest w programowaniu – programista musi być nastawiony na nieustające zmiany i umieć zostawiać sobie przestrzeń na ich wprowadzanie w takim zakresie, by jednocześnie zminimalizować ich ilość do niezbędnej. Każda zmiana nieuchronnie niesie ze sobą nowe błędy w kodzie, stąd zawsze należy ocenić, czy rzeczywiście podnosi jakość aplikacji, czy też przepisuje wcześniejszą funkcjonalność. Zatem największym sukcesem nie jest samo napisanie perfekcyjnego programu. Jest nim to, że po wielu latach można go wciąż szybko modyfikować. Mimo tego pozostaje stabilny i dobrze sobie radzi z błędami, które są izolowane i nie degradują jego działania. Do tego potrzebny jest całościowy wgląd w jego tworzenie i budowę.

Jak to wszystko ma się do codziennej pracy programistów? Mogą oni skupiać się na przykład jedynie na fragmencie produktu. W taki sposób zazwyczaj pracują ludzie w korporacjach i dużych firmach IT. Mogą też pracować nad kompletnymi modułami programu, ucząc się analizy i projektowania dobrego kodu od podstaw, tak jak to ma miejsce w krakowskiej firmie AdRem Software. Być może spróbowanie swoich sił właśnie w takich mniejszych projektach to właściwy sposób na zostanie profesjonalnym programistą.

Autorem artykułu jest Tomasz Kunicki, prezes AdRem Software.

Przeczytaj również

, , , , , , ,

  • Rollo

    A co, jeśli pracuje się samemu? Jako freelancer działający w pojedynkę nie dysponuję resztą zespołu, innymi developerami czy testerami. W jaki sposób wg. Was najlepiej weryfikować zarówno swoją pracę jak i własny rozwój? Kluby Anonimowych Programistów czy coś? :)

    • Uve

      Może spróbuj się zgłosić do udziału w jakimś hackathonie? Tam się pracuje w grupach i szybko można zweryfikować swoje umiejętności oraz się porównać z innymi lub po prostu zobaczyć, jak pracują inni.

      • Rollo

        Mówisz o konkursach online czy takich „na żywo”? Masz jakieś sprawdzone źródła?

        • Uve

          Mówię o jednych i drugich.
          Konkursy online można robić zdalnie – rejestrujesz się, rozwiązujesz zadanie, proponujesz pomysł, wysyłasz i czekasz.
          Konkursy stacjonarne też często mają pierwszy etap polegający na przesłaniu zadania, ale potem dochodzi do kolejnych etapów już w jakimś konkretnym miejscu i czasie.
          Popatrz sobie na listę hackathonów tutaj, może coś Cię zainteresuje: https://challengerocket.comhttps://challengerocket.com/pl/lista.html

          • Challenge Rocket

            @disqus_oAzEvx8hHH:disqus
            Dzięki za udostępnienie naszej platformy, staramy się na bieżąco wrzucać nowe ogłoszenia!
            :)