Szybciej, wolniej, wolniej

Poniższy fragment książki jest brutalną prawdą, esencją strasznej zarazy panującej w firmach, która z zimną krwią wyniszcza wszystko, co jej stanie na drodze.

Systematyczne lekceważenie planowania i projektowania prowadzi do rozwoju w cyklu „szybciej, wolniej, wolniej”.

Wygląda to mniej więcej tak:

  1. Błyskawicznie dostarczasz wersję 1.0, pisząc cały kod na kolanie.
  2. Budujesz wersję 2.0, na bieżąco rozwiązując problemy stwarzane przez uciążliwy bałagan w kodzie.
  3. Wraz z kolejnymi wersjami rozwiązywanie problemów ze starym kodem „na bieżąco” sprawia, że bałaganu przybywa, a praca staje się coraz wolniejsza. Wyrzyscy stopniowo tracą wiarę w system, programistów i całą sytuację, w której się znaleźli.
  4. Gdzieś w okolicach wersji 4.0 zdajesz sobie sprawę, że nie wygrasz. Zaczynasz rozważać opcję przepisania systemu od podstaw.

„Refaktoryzacja do wzorców projektowych” Joshua Kerievsky

Continue reading →

Znajomość wzorców projektowych

„Jeżeli nie znasz wzorców, prawdopodobieństwo stworzenia wielkiego, wspaniałego projektu jest na pewno mniejsze. Wzorce projektowe mają uchwycić pewną mądrość. Korzystanie z zasobów mądrości jest zawsze pożyteczne.”

„{…}, wzorzec jest jednocześnie rzeczą, która pojawia się w świecie rzeczywistym, i regułą, która mówi nam, jak stworzyć taką rzecz. Jej zaprojektowanie i zbudowanie należy do nas. Jest to zarówno proces, jak i rzecz; zarówno opis rzeczy, która żyje własnym życiem, jak i opis procesu, który prowadzi do jej powstania.”

„Refaktoryzacja do wzorców projektowych” Joshua Kerievsky

Pex For Fun

Jest ciekawa gierka dla programistów. Coś jak sudoku, czyli nie ma sensownego wytłumaczenia, dlaczego się w to gra, ale wciąga.

Pex For Fun polega na tym, aby napisać taki kod, który zwróci wyniki zgodne z oczekiwaniami. Przypomina to trochę TDD, ale nie do końca, ponieważ tutaj już mamy gotowe testy jednostkowe. Celem gry jest odgadnięcie i napisanie implementacji, która zapali wszystkie testy jednostkowe na zielono.

Kodu testów jednostkowych nie znamy. W zamian mamy tabelkę, w której są oczekiwane wartości wyjściowe dla zadanych wartości wejściowych. Sztuczka polega na tym, aby kod, który napiszemy, zwracał takie same wartości jak te oczekiwane w tabelce.

Continue reading →

Zakleszczenie wątków: lock (lockA) { lock (lockB) { } }

Zakleszczenie, to taka sytuacja gdzie jeden wątek czeka na zakończenie drugiego wątku, aby otrzymać dostęp do sekcji krytycznej, a ten drugi czeka na zakończenie tego pierwszego.

Przeanalizujmy poniższy kod:

Continue reading →

Przechwytywanie wyjątków w async await

Wyjątek wewnątrz wyrażenia lambda

Jeśli powstanie wyjątek wewnątrz wyrażania lambda, która jest wywoływana wewnątrz nowego obiektu Task, wówczas nie jest możliwe przechwycenie tego wyjątku na zewnątrz, poza tym wyrażeniem lambda. Poniżej przykład takiej sytuacji.

Continue reading →