Programowanie okiem szachisty
Programowanie i szachy mają ze sobą wiele wspólnego. W obydwu przypadkach wysiłek umysłowy przekształcany jest w oczekiwany rezultat. Programista, tak jak i szachista, jest odpowiedzialny za wykonaną pracę, za swoje ruchy, a także za ostateczny wynik. Obydwaj dążą do celu i chcą osiągnąć go w najlepszy możliwy sposób oraz w jak najkrótszym czasie.
Nowy projekt, czyli domyślna pozycja wyjściowa
Z tej pozycji mogę zrobić dowolny ruch, mogę obrać ścieżkę, którą będę podążać. Jestem pełen nadziei i optymizmu na satysfakcjonującą realizację nowego projektu. Tak jak w szachach, start od początku jest najlepszym momentem do dołączenia do projektu. Dzięki temu znam jego pełną historię i założenia.
Projekt trwający, czyli pozycja z historią wykonanych ruchów
Do projektu mogę dołączyć również w trakcie jego trwania. Przyjmijmy, że zespół się powiększa i jest potrzeba zwiększenia mocy przerobowej. Projekt posiada już historię, a decyzje co do wyboru technologii, narzędzi i sposobu jego realizacji zostały podjęte. Wchodzę zatem w określone środowisko, z którym muszę się zapoznać.
Zaraz, zaraz, czy w szachach zaczynam grę “od środka”? Inaczej niż od pozycji wyjściowej? Grę - nie, ale analizę pozycji szachowej lub wykonanie zadania szachowego - tak. Jest to sytuacja analogiczna jak z dołączeniem do projektu trwającego, ponieważ potrzebuję bliżej się zapoznać z zastaną sytuacją.
Analiza i planowanie. Po co to komu?
Projekt, nowy czy trwający, to złożony organizm. On chce “żyć”, rozwijać się i wzrastać. Potrzebuje do tego określenia założeń, celu i… no właśnie, planowania.
Jeżeli nie wiesz dokąd zmierzasz, każda droga zaprowadzi Cię donikąd.
Henry Kissinger
Pan Henry zna się na rzeczy :) W przypadku programowania, tak samo jak w przypadku szachów - plan, jaki posiadam, a także analiza są niezwykle ważne. W szachach analizę pozycji wykonuję, aby lepiej poznać miejsce, w którym się znalazłem, a także podjąć decyzje co do kolejnych ruchów.
Analogicznie sytuacja wygląda w programowaniu. Analiza pozwala lepiej zrozumieć projekt, zadanie czy błąd jaki napotkałem oraz zaplanować to, co będę robił. Pozwala również ustrzec się problemów, które mogą się pojawić lub lepiej się na nie przygotować.
Przewidywanie oczekiwań klienta, czyli co druga strona może lub chce zrobić
Gra w szachy to gra w przewidywanie. Wykonuję ruch, oponent wykonuje ruch, powstaje określona pozycja i przewiduję, do czego dąży mój oponent. Im dokładniej poznam jego zamiary, tym lepiej się na nie przygotuję.
W przypadku szachów przewidywanie pozwala wykonać ruchy utrudniające oponentowi osiągnięcie zwycięstwa. Natomiast w programowaniu drugą stroną jest klient i, w przeciwieństwie do szachów, współpracuję z nim, rozmawiam, rekomenduję rozwiązania. Tak jak w szachach poznaję jego oczekiwania i przewiduję jakie kroki może podjąć w kolejnych etapach pracy nad projektem. Dzięki temu mogę przygotować kod, który pozwoli skalować projekt i przyjemnie rozwijać go dalej.
Wybór wariantu/ścieżki, czyli do celu prowadzi wiele dróg
O tak, ta kwestia ma zastosowanie zarówno w programowaniu jak i w szachach. W programowaniu możemy wybierać różnorakie narzędzia, biblioteki i sposoby na rozwiązanie danego problemu.
Nie inaczej w szachach. Mnogość debiutów, wiele wariantów danego debiutu dają szerokie spektrum doboru ścieżki, którą będę podążał. Istotne jest, aby osiągnąć cel, czyli wygrać. Jeśli zrobię to w pięknym stylu, satysfakcja gwarantowana ?
Atak, presja i kryzysowe sytuacje, czyli gaszenie pożarów
Projekt trwa, kodu i funkcjonalności przybywa. Wraz z tym mogą się pojawiać sytuacje kryzysowe. Bardzo ważne jest jak zachowam się podczas takich sytuacji.
Zarówno w szachach (ale też w każdym innym sporcie) jak i w programowaniu istotna jest koncentracja i chłodne podejście do sytuacji kryzysowej. Mam mało czasu, czuję presję i muszę podjąć właściwe decyzje, które będą mieć wpływ na kolejne kroki. Idealnie byłoby, abym wybrał rozwiązanie, które będzie najbardziej skuteczne i poprawne.
Ponownie jak w szachach, również w programowaniu, trzeba ćwiczyć, trzeba praktykować, wyciągać wnioski i poprawiać warsztat.
Koordynacja i dobra komunikacja, czyli jak wspólnie dążyć do celu i osiągnąć sukces
Dobra komunikacja między figurami szachowymi pozwala osiągnąć oczekiwany rezultat, np. zdobyć figurę oponenta, skutecznie się obronić lub solidnie atakować i doprowadzić do mata, czyli wygrać partię. Brak koordynacji pomiędzy figurami skutkuje osłabieniem pozycji na szachownicy i prowadzi do przegranej.
Jak się to ma do programowania? Wiemy, że projekty bywają różne. Mniejsze, większe, proste lub mocno złożone. Niezależnie od wielkości czy rodzaju projektu zarówno koordynacja, jak i komunikacja ma ogromne znaczenie. Komunikuję się z klientem, z członkami zespołu, z firmami zewnętrznymi. Powinienem dostarczać informację rzetelną i czytelną dla każdej osoby biorącej udział w projekcie. Istotne jest, aby wspólnie osiągnąć zakładany cel.
Projekt zakończony? Wnioski, przemyślenia, analiza popełnionych błędów
Projekt, jak partia szachowa, dobiegł końca. Wykonałem swoją pracę. Nadszedł moment na analizę i wnioski.
Tylko ten nie popełnia błędów, kto nic nie robi.
Napoléon Bonaparte
Które momenty były trudne? Jak zareagowałem na presję? Czy zrobiłem wszystko najlepiej jak potrafię? Co mogę poprawić? Nad czym powinienem popracować?
Takie pytania mogę sobie zadać zarówno po partii szachowej, jak również po zakończonym projekcie. Istotne jest, aby obiektywnie spojrzeć na moje umiejętności i konstruktywnie podejść do problemów. W obydwu przypadkach, czy to w programowaniu, czy w szachach, za każdym razem mogę wyciągnąć wnioski, przeanalizować wykonane ruchy, aby w kolejnym starciu być jeszcze lepszym.