Programowanie okiem szachisty

Programowanie okiem szachisty

Krzysztof Nizioł - Symfony Full Stack Developer
5 minute(s) read

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.

Dołączam do projektu

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.

On-demand webinar: Moving Forward From Legacy Systems

We’ll walk you through how to think about an upgrade, refactor, or migration project to your codebase. By the end of this webinar, you’ll have a step-by-step plan to move away from the legacy system.

Watch recording
moving forward from legacy systems - webinar

Latest blog posts

See more

Ready to talk about your project?

1.

Tell us more

Fill out a quick form describing your needs. You can always add details later on and we’ll reply within a day!

2.

Strategic planning

We go through recommended tools, technologies and frameworks that best fit the challenges you face.

3.

Workshop Kickoff

Once we arrange the formalities, you can meet your Polcode team members and we’ll begin developing your next project.