0

Ważne pytanie w programowaniu “Dlaczego”

Cześć, witam Ciebie w pierwszym wpisie po dłuższej przerwie. Nie była to przerwa od bloga, gdyż skupiałem się na rozwinięciu innych tematów tj. seria DailyChallenge albo czytelnia.  Nie pojawiały się po prostu dłuższe artykuły, ale to się właśnie zmienia.

Wracając do meritum, dzisiaj chciałbym poruszyć jedno z ważnych pytań w programowaniu. Zapraszam serdecznie do lektury artykułu (obiecuję, że nie będzie długi).

Dobre rady

Na pewno słyszałeś/aś różne rady odnośnie programowania, które padały z ust bardziej doświadczonych kolegów. Radami tymi mogły być np. “pisz testy jednostkowe”, “wycenę itemu pomnóż przez dwa, a jak to UI to przez trzy”, “programuj obiektowo”, “dokumentuj kod” itd. Wszystko się zgadza, rady te są bardzo ważne i każdy programista powinien wziąć je sobie do serca.

Ja dzisiaj chciałbym do tych rad dodać jedną: “zadawaj ważne pytania”. Ale właściwie, jakie to są te ważne pytania? Jest ich sporo np. dobrze wypytaj o funkcjonalność na etapie planowania, aby mieć wszystko to potrzebujesz do pracy. Jednak, dzisiaj chciałbym zadać tylko jedno pytanie “Dlaczego?”.

Dlaczego?

Co takiego magicznego jest w tym pytaniu? Komu je zadawać? Po co? Na wszystkie te wątpliwości postaram się odpowiedzieć.

A więc, co takiego jest w tym pytaniu, że uznałem za warte rozpatrzenia? Pozwala ono dojść do sedna problemu, czasami pozwala nawet stwierdzić, że problemu nie ma. Im szybciej zadasz to pytanie, tym lepiej. Przykładowo mając jakiś problem do rozwiązania, zapytaj “dlaczego mamy ten problem”. W odpowiedzi możesz usłyszeć np. “Dlatego, że obiekt A robi coś tam, a obiekt B coś innego, przez to obiekt C nie wie, jak się zachować”. Aha, a co, jeżeli obiekt C nie jest w ogóle potrzebny, ponieważ sprząta on po obiektach A i B? To tylko przykład z czapy, ale może się okazać, że dokładnie drążąc temat, możesz już na etapie planowania wykluczyć błędne podejścia. Możesz nawet stwierdzić, że problem leży gdzieś wyżej. Zamiast go rozwiązywać na niskim poziomie, trzeba coś zmienić kilka poziomów wcześniej.

Komu zadawać to pytanie? Wszystkim osobom, z którymi musisz rozwiązać jakiś problem, ale przede wszystkim, sobie. To Ty jesteś najważniejszy w całym tym procesie, ponieważ to Ty masz obowiązek i sposobność, aby wymyślić rozwiązanie. Owszem, inne osoby również będą nad tym myśleć, ale skoro to Ty mierzysz się z problemem, to najprawdopodobniej Tobie został on przydzielony i musisz ponieść odpowiedzialność rozwiązania. Drugą sytuacją jest to, że ktoś prosi Cię o pomoc, wtedy to Ciebie ktoś poprosił o radę i dobrze jest tej osobie pomóc, czyż nie?

Po co zadawać takie pytanie? Cóż, częściowo odpowiedziałem na to już wcześniej, ale jest jeszcze jedna kwestia korzyści pytania “Dlaczego?”. Otóż, dogłębnie analizując problem, zaprzeczając czasami istniejącym rozwiązaniom i proponując swoje, masz czyste sumienie, że zrobiłeś coś najlepiej jak mogłeś. Nie będą Cię po nocach gnębiły myśli, że coś mogłeś zrobić inaczej, ponieważ wiesz, że dokładnie przeanalizowałeś problem. Dobra, dobra… i tak będą Cię gnębić, bo zawsze coś można zrobić lepiej, inaczej, ale na pewno będą to słabsze myśli.

Dodatkowa korzyść

Jest jeszcze druga korzyść pytania “Dlaczego?”. Mogłeś o nim pomyśleć na samym początku, ale ja wspomnę o nim teraz.

Zadawanie tego pytania osobom bardziej doświadczonym pozwala Tobie zdobywać wiedzę. Jeżeli przykładowo, Twój kolega prezentuje jakieś rozwiązanie, a Ty czegoś nie wiesz, to nie siedź w ciszy, tylko zapytaj (oczywiście jeżeli typ prezentacji na to pozwala). Dzięki temu będziesz mógł poznać powody, które determinowały takie rozwiązanie, co z kolei będziesz mógł wykorzystać kiedyś w przyszłości.

Jeżeli nie jest to prezentacja już gotowego rozwiązania, a jedynie planowanie, to “wiercąc dziurę w brzuchu” możesz być kluczowym czynnikiem. Czynnikiem, który spowoduje, że błędny pomysł zostanie odrzucony na etapie planowania. Jeżeli jesteś przekonany co do swoich racji, to ich broń, masz do tego pełne prawo. Programista zarabia głównie myśleniem, więc proponowanie rozwiązań, odrzucanie błędnych i konstruktywna dyskusja leżą niejako w Twoim zakresie obowiązków. Nikt Cię za to nie ukaże, a wręcz doceni (oczywiście jeżeli będziesz miał rację, a nie gadał głupoty ;)).

Nie przesadź

Pytanie “Dlaczego?” pozwala dojść do sedna, wejść głębiej w mechanizm, ponieważ jeżeli nie będziesz drążył prawdopodobnie zaczniesz rozwiązywać problem w miejscu wystąpienia. Takie postępowania prowadzi to tzw. “szpachli”. Szpachla, czyli coś co działa (tak nam się wydaje na etapie pisania), ale zostaje z nami już do końca życia projektu. Tak, tak… na pewno to usuniesz w następnym release, yhy… Dług techniczny zostaje zaciągnięty, a Ty i Twoi koledzy będziecie musieli go spłacać.

Oczywiście nie możesz popadać w skrajność. Nie możesz wiecznie szukać dziury w całym, bo na pewno ją znajdziesz, nie o to jednak chodzi. Chodzi o to, abyś analizował problem do akceptowalnego poziomu. Czasami problem można rozwiązać przebudowując cały duży system, ale nikt Ci na to nie pozwoli z jednego bardzo prostego powodu: braku czasu.

Jak we wszystkim, trzeba umieć znaleźć złoty środek, tak aby nie wywoływać niesmaku u swoich współpracowników, ale też tak, aby nie “szpachlować” wszystkiego jak leci.

Podsumowanie

Temat tak na prawdę o wszystkim i o niczym. Ciężko tutaj podać przykład analizy problemu poprzez pytanie “Dlaczego?”, ponieważ każdy problem jest inny. Mógłbym przytoczyć tutaj kilka swoich przykładów, ale wolałem tego nie robić. Nie chcę zdradzać szczegółów implementacji mechanizmów, nad którymi pracuję zawodowo.

Chciałem Cię nakłonić do tego, abyś nie bał się pytać, nie bał się drążyć tematu, aż nie osiągniesz pewności. Pewności, że to co wymyśliłeś jest najlepszym co mogłeś wymyślić w tej chwili. Owszem za miesiąc, dwa wrócisz i powiesz “co za jełop to pisał”, ale tak to już jest. Powodem jest to, że się rozwijasz.

Pozdro!

Patryk Bogdański

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.