TEO KONKURS

Nagroda

Do zwycięzcy wyślę ładnie zapakowane 0.7 Jack’a Daniels’a i dziesięć setek Wiśniówki Lubelskiej.

Temat

Tematem konkursu jest zoptymalizowanie procesu zamiany ciągu bajtów na obiekty.

Zasady wygranej

Wygrywa ten kto napisze najszybszą wersję parsowania. Konkurs trwa do 31-12-2018 do 23:59:59.999. Wersja uznana jest za najszybszą jeśli od poprzedniej najszybszej wersji będzie szybsza o 5% w każdym z 10 powtórzeń testu.

Konkurs może skończyć się wcześniej. Nagroda zwycięscy zostaje przyznana jeśli po pull request z najszybszą wersją przez kolejne 30 dni nikt nie nadeśle szybszej wersji wówczas.

Continue reading →

Ja nie mam czasu nie pisać testów jednostkowych

Czasami (czasami często) słyszę, że:

…ktoś nie napisał testu jednostkowego bo nie miał na to czasu.

Gdy to słyszę to aż bolą mnie zęby. Jak można nie mieć czasu na sprawdzenie, czy nasz kod działa poprawnie? Wtedy zawsze staram się wyjaśnić, że:

… ja nie mam czasu nie pisać testów jednostkowych.

Continue reading →

Poziomy abstrakcji

Kilka lat temu, ucząc się programowania w języku C++, natknąłem się na ten tekst.

„Komputery są jedynie urządzeniami elektronicznymi. Nie mają pojęcia o oknach czy menu, nie znają programów ani instrukcji, a nawet nie wiedzą nic o zerach i jedynkach. W rzeczywistości jedyne zmiany, jakie zauważają, to zmiany napięcia mierzonego w odpowiednich punktach układów elektronicznych. Nawet to jest dla nich pewną abstrakcją: w rzeczywistości elektryczność jest tylko wygodną intelektualną koncepcją dla zaprezentowania działania cząstek subatomowych, które z kolei są abstrakcją dla czegoś innego.”

„C++ dla każdego” Jesse Liberty

 

Kalkulator napisany z pomocą behavior-driven development (BDD)

Postawiłem sobie za cel napisanie kalkulatora przy użyciu metody BDD a wynikami mojej pracy chcę się z wami podzielić.

Kalkulator ten będzie zachowywać się jak ten z lat dziewięćdziesiątych, pokazany poniżej na obrazku. Mam jeszcze taki sam w domu — ma już chyba 20 lat. Ten, który tutaj zaimplementuje, będzie posiadał, tak samo, jak ten oryginalny, kilka dziwnych zachowań. Na przykład, przy każdym ponownym wciśnięciu „=”, liczba na wyświetlaczu będzie się zwiększać o jeden, jeśli wcześniej wykonaliśmy działanie „1+1”.

Continue reading →

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 →