<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Agile Surfing &#187; Programowanie</title>
	<atom:link href="http://agilesurfing.pl/category/programowanie/feed/" rel="self" type="application/rss+xml" />
	<link>http://agilesurfing.pl</link>
	<description>Grzegorz Dziemidowicz o Agile, Software Craftsmanship i programowaniu</description>
	<lastBuildDate>Fri, 18 May 2012 14:45:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Legacy Code Retreat Berlin</title>
		<link>http://agilesurfing.pl/2012/programowanie/legacy-code-retreat-berlin/</link>
		<comments>http://agilesurfing.pl/2012/programowanie/legacy-code-retreat-berlin/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 20:58:20 +0000</pubDate>
		<dc:creator>Grzegorz Dziemidowicz</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[berlin]]></category>
		<category><![CDATA[clean code]]></category>
		<category><![CDATA[coderetreat]]></category>
		<category><![CDATA[craftsmanship]]></category>
		<category><![CDATA[legacy code]]></category>

		<guid isPermaLink="false">http://agilesurfing.pl/?p=604</guid>
		<description><![CDATA[W ostatnią sobotę miało miejsce pierwsze berlińskie Legacy Code Retreat (w sile 16 uczestników). Pomogłem trochę w jego organizacji, głównie jednak wziąłem w nim udział jako uczestnik. W tym poście opiszę swoje wrażenia. Format Format Legacy Code Retreat został zaproponowany przez  J. B. Rainsbergera i jest podobny do &#8222;normalnego&#8221; Code Retreat &#8211; składa się z 6 [...]]]></description>
			<content:encoded><![CDATA[<p>W ostatnią sobotę miało miejsce pierwsze<a href="http://www.coderetreat-berlin.de/2012/" target="_blank"> berlińskie Legacy Code Retreat</a> (w sile 16 uczestników). Pomogłem trochę w jego organizacji, głównie jednak wziąłem w nim udział jako uczestnik. W tym poście opiszę swoje wrażenia.</p>
<p><img class="aligncenter" src="https://lh5.googleusercontent.com/-eLXBMyg6D8c/T4nev2eAwfI/AAAAAAAACaM/x6MbhvBnT7I/s833/DSC_5753.JPG" alt="" width="415" height="270" /></p>
<h2>Format</h2>
<p>Format <a href="http://www.legacycoderetreat.com/" target="_blank">Legacy Code Retrea</a>t został zaproponowany przez  J. B. Rainsbergera i jest podobny do &#8222;normalnego&#8221; Code Retreat &#8211; składa się z 6 sesji, w których pracujemy w parach i po każdej sesji kasujemy nasz kod. W przeciwieństwie jednak do normalnego Code Retreat nie zaczynamy od zera pisać &#8222;Grę w życie&#8221; a <strong>pracujemy już<a href="https://github.com/jbrains/trivia" target="_blank"> z dostarczonym kodem gry Trivi</a>a i naszym celem jest jego zrozumienie i bezpieczne zrefaktoryzowanie.</strong></p>
<div></div>
<p>Nasz event poprowadzony został przez Martina Klose, który świetnie spisał się w roli facylitatora. Rozpoczęliśmy od krótkiego wprowadzenia, gdzie Martin omówił <strong>&#8222;<a href="http://c2.com/cgi/wiki?XpSimplicityRules" target="_blank">4 rules of simple design</a></strong>&#8221; i <strong><a href="http://www.renaissancesoftware.net/blog/archives/27" target="_blank">algorytm refaktoryzacji legacy kodu</a>.</strong> Z ciekawostek, event prowadzony był po angielsku, z czego bardzo się cieszę, jako że byłem jedyną osobą która nie potrafiłaby pracować po niemiecku..</p>
<div></div>
<p>Fajnym motywem podczas rozpoczęcia dnia było ćwiczenie, które wykonaliśmy by &#8222;szybko się poznać&#8221; w grupie. Martin polecił nam ustawić się w szeregu, gdzie na jednym końcu były osoby, które uważały się za wymiataczy w TDD a na drugim końcu, osoby, które dopiero rozpoczynały swoją przygodę z TDD. Następnie Martin zasugerował by osoby początkujące pracowały w ciągu dnia z osobami doświadczonymi.</p>
<div>
<ul>
<li>Sesja 1 &#8211; Zapoznanie z kodem</li>
<ul>
<li style="text-align: left;">Pierwsze starcie z kodem. W tej sesji rozpoczęliśmy pisanie testu charakteryzacyjnego i zajęło nam to praktycznie cały dostępny czas (przy czym prawie 10 minut zmarnowaliśmy na skonfigurowanie JUnita, który z jakiegoś powodu nie chciał dodać się do projektu, ech&#8230;). Dev z którym pracowałem w parze nigdy nie pisał w Javie, także trochę czasu spędziliśmy również na wytłumaczenie podstawowych rzeczy na temat Javy.</li>
</ul>
<li>Sesja 2</li>
<ul>
<li>Martin sugeruje wszystkim zastosowanie<strong> techniki <a href="http://www.lucbos.net/2011/12/legacy-code-retreat.html" target="_blank">Golden Master</a></strong>. Sprowadza się to mniej więcej do tego co robiłem w poprzedniej sesji, więc z moim nowym dev partnerem ruszamy do kodowania. Po parunastu minutach mamy już gotowy test, który porównuje wykonanie programu z naszą &#8222;złotą kopią&#8221;. Jesteśmy pewni siebie i wtedy pojawia się Martin z pytaniem &#8222;<strong>Skąd wiecie, że wasz test jest wystarczający</strong>?&#8221; &#8222;Jaką macie pewność, że pokrywa on wszystko to, co robi kod?&#8221;. Jako stary wyjadacz &#8222;<a href="http://pl.wikipedia.org/wiki/Testowanie_mutacyjne" target="_blank">testowania mutacyjnego</a>&#8221; nie daję się zbić z tropu i przystępujemy do &#8222;testowania&#8221; naszego testu poprzez celowe wprowadzanie błędów do kodu produkcyjnego i obserwowanie czy nasz test to wykrywa. Martin miał rację.. Są pewne modyfikacje, których nasz test nie wyłapuje. Resztę sesji spędzamy na udoskonalaniu naszego testu.</li>
</ul>
<li>Sesja 3</li>
<ul>
<li>W tej sesji skupiliśmy się na refakoryzacji kodu. Konkretnie<strong> poprawialiśmy czytelność (łatwość zrozumienia) instrukcji warunkowych</strong>, np. &#8222;<em>if (roll % 2 != 0)</em>&#8221; na &#8222;if(canLeavePenatlyBoxAfter(roll)&#8221;</li>
</ul>
</ul>
<ul>
<li>Sesja 4</li>
<ul>
<li><strong>Refaktoryzacja kodu małymi kroczkami</strong>. Reguły: Ustaw timer na 2 minuty. Pracuj z kodem i wrzucaj swoje zmiany do repozytorium kodu. Jeśli w ciągu 2 minut nie zdążysz wrzucić niczego do repo, cofnij swoje zmiany do momentu ostatniego commitu w repo i rozpocznij od nowa. Po drugim razie, gdy dopadł nasz timer, pracowaliśmy w naprawdę malutkich kroczkach i w sumie daliśmy radę! Generalnie, im częściej wrzucamy nasze zmiany do repo tym lepiej (mniej konfliktów, częstszy feedback), także myślę że ćwiczenie wykonane w tej sesji było wartościowe.</li>
</ul>
<li>Sesja 5</li>
<ul>
<li>Celem tej sesji było zidentyfikowanie fragmentów kodu, które dało się zamienić w <strong>&#8222;<a href="http://en.wikipedia.org/wiki/Pure_function">pure functions</a>&#8222;.</strong> Podczas tej sesji pracowałem w Rubym (wszystkie poprzednie były w Javie) i odczułem na własnej skórze, jak wspaniałe wsparcie do refactoringu ma Java.. (Np. IDE w Javie było dużo sprytniejsze w znajdywaniu duplikacji w kodzie). Jedną z zalet &#8222;wyciąganych&#8221; przez nas funkcji było to, że można je było stosunkowo łatwo przetestować.</li>
</ul>
<li>Sesja 6</li>
<ul>
<li>W czasie tej sesji, po zidentyfikowaniu i stworzeniu kilku &#8222;pure functions&#8221; mieliśmy przyjrzeć się im bliżej i zastanowić się, gdzie można by je przenieść &#8211; jednym słowem,<strong> zaczęliśmy &#8222;wyciągać klasy&#8221;.</strong> Cały schemat refactoringu można opisać mniej więcej tak:</li>
<ul>
<li>Extract method</li>
<li>Replace fields with parameters to the method</li>
<li>Make method static</li>
<li>Test the method</li>
<li>Find a new home for the method, move to (and maybe create) new class</li>
</ul>
<li>Alternatywnym sposobem, wypróbowanym przez niektórych uczestników było zastosowanie refaktoringu &#8222;pull up&#8221; i przeciągnięcie pewnych funkcjonalności do &#8222;nowej&#8221; klasy bazowej, a następnie zastosowanie refakoryzacji &#8222;replace inheritance with delegation&#8221; &#8211; coś, co mam w najbliższym czasie przetestować.</li>
</ul>
</ul>
<div><img class="aligncenter" src="https://lh5.googleusercontent.com/-BLidQBIMc90/T4ne4pLp1oI/AAAAAAAACZ0/XdKSB47acPk/s833/DSC_5762.JPG" alt="" width="413" height="274" /></div>
<h2>Scala</h2>
<p>Po trzeciej sesji mieliśmy długi lunch, w czasie którego rozmawiałem o Scali. Temat, który mnie interesował to<strong> testowanie i jak w podejściu funkcyjnym radzimy sobie z problematycznymi zależnościami kodu</strong>, takimi jak baza danych czy odwołania do innych systemów. W podejściu obiektowym, używamy w tym celu &#8222;mocków&#8217;. Z tego co zrozumiałem, w Scali ważnym pojęciem jest kompozycja funkcji, i właśnie odpowiednio korzystając z kompozycji możemy &#8222;wstrzykiwać&#8221; albo prawdziwą funkcję, która pobiera dane z bazy danych, albo funkcję &#8222;testową&#8221;, która tylko udaję bazę danych. I tak testowanie takiego systemu sprowadza się do przetestowania funkcji, z których składa się nasz system na poziomie jednostkowym, a następnie przetestowanie całego systemu (złożonej funkcji), gdzie być może niektóre funkcje zastąpione są zmienikami na potrzeby testów.</p>
<h2>Organizacja</h2>
</div>
<p>Jeśli chodzi o organizację tym razem kupiliśmy małe śniadanie w piekarni a na obiad poszliśmy do restauracji &#8211; wyszło to dużo taniej niż zamawianie kateringu.</p>
<p>Generalnie, bardzo nam się podobało i już myślimy o kolejnym evencie, może w czerwcu?</p>
<p><strong>Zachęcam Cię do organizacji Legacy Code Retreat w swoim mieście!</strong></p>
<p>Ps. Zdjęcia z wczoraj można zobaczyć<strong> <a href="https://plus.google.com/photos/110885273550512513483/albums/5731356448757883889" target="_blank">tutaj</a>..</strong></p>
<p>&nbsp;</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-6050"></div></div><p><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2012%2Fprogramowanie%2Flegacy-code-retreat-berlin%2F&amp;linkname=Legacy%20Code%20Retreat%20Berlin" title="Facebook" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2012%2Fprogramowanie%2Flegacy-code-retreat-berlin%2F&amp;linkname=Legacy%20Code%20Retreat%20Berlin" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2012%2Fprogramowanie%2Flegacy-code-retreat-berlin%2F&amp;linkname=Legacy%20Code%20Retreat%20Berlin" title="Digg" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2012%2Fprogramowanie%2Flegacy-code-retreat-berlin%2F&amp;linkname=Legacy%20Code%20Retreat%20Berlin" title="Twitter" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2012%2Fprogramowanie%2Flegacy-code-retreat-berlin%2F&amp;linkname=Legacy%20Code%20Retreat%20Berlin" title="Google Reader" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fagilesurfing.pl%2F2012%2Fprogramowanie%2Flegacy-code-retreat-berlin%2F&amp;title=Legacy%20Code%20Retreat%20Berlin" id="wpa2a_2">Daj znać innym</a></p>]]></content:encoded>
			<wfw:commentRss>http://agilesurfing.pl/2012/programowanie/legacy-code-retreat-berlin/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Strategia testowania projektu</title>
		<link>http://agilesurfing.pl/2012/programowanie/strategia-testowania-projektu/</link>
		<comments>http://agilesurfing.pl/2012/programowanie/strategia-testowania-projektu/#comments</comments>
		<pubDate>Thu, 05 Apr 2012 21:46:01 +0000</pubDate>
		<dc:creator>Grzegorz Dziemidowicz</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Programowanie]]></category>

		<guid isPermaLink="false">http://agilesurfing.pl/?p=594</guid>
		<description><![CDATA[Niedawno dokumentowaliśmy w pracy strategię testowania naszej aplikacji. Przy okazji zastanowiliśmy się jak wyglądałby &#8222;idealny&#8221; proces. W tym wpisie opiszę co wymyśliliśmy. Nasz idealny proces powinien: Zapewniać szybką informację zwrotną na temat jakości. Kierować się zasadą &#8222;jakości wbudowanej w proces&#8222;. Kontekst naszego systemu: Nasza aplikacja dostarcza API wykorzystywane przez inne systemy Nasza aplikacja używa API [...]]]></description>
			<content:encoded><![CDATA[<p>Niedawno dokumentowaliśmy w pracy strategię testowania naszej aplikacji. Przy okazji zastanowiliśmy się jak wyglądałby &#8222;idealny&#8221; proces. W tym wpisie opiszę co wymyśliliśmy.</p>
<p><strong>Nasz idealny proces powinien:</strong></p>
<ul>
<li>Zapewniać <a href="http://prezi.com/urkus7bs4gqw/crazy-fast-build-times/" target="_blank">szybką</a> informację zwrotną na temat jakości.</li>
<li>Kierować się zasadą &#8222;<a href="http://www.lean-manufacturing-junction.com/quality-built-in.html" target="_blank">jakości wbudowanej w proces</a>&#8222;.</li>
</ul>
<div><strong>Kontekst naszego systemu:</strong></div>
<div>
<ul>
<li>Nasza aplikacja dostarcza API wykorzystywane przez inne systemy</li>
<li>Nasza aplikacja używa API innych systemów</li>
<li>Nasza aplikacja posiada webowy interfejs użytkownika</li>
</ul>
<div><strong>Idealny proces</strong></div>
<div>
<ul>
<li>Identyfikacja wymagań</li>
<ul>
<li>Klient, programista i tester dokumentują wymagania w postaci <a href="http://en.wikipedia.org/wiki/User_story" target="_blank">historyjek</a></li>
<li>Do historyjek dodane są<strong> kryteria akceptacji</strong>. Ponieważ programista i tester pomagali klientowi w formułowaniu tych kryteriów, zostały zadane pytania na temat wyjątkowych przypadków (n<em>p. Co system powinien zrobić jeśli szesnastolatek próbuje kupić produkt o wartości powyżej 10tyś zł</em>).</li>
</ul>
<li>Implementacja</li>
<ul>
<li><strong>Programiści pracują w parach.</strong> Dzięki temu wyłapywane jest szybko wiele &#8222;ludzkich błędów&#8221; (wynikających np. ze zmęczenia, rozproszenia etc.)</li>
<li>Stosujemy <strong>TDD</strong>, co wpływa korzystnie na <a title="Automatyczne testowanie kodu – jak to robić?" href="http://agilesurfing.pl/2011/programowanie/automatyczne-testowanie-kodu-jak-to-robic/" target="_blank">jakość wewnętrzną oprogramowania</a>.</li>
<li>W wyniku stosowania TDD mamy<strong> całkowite pokrycie kodu testami jednostkowymi</strong>. Testy te dostarczają szybką informację zwrotną, gdy programista próbuje zmienić kod w sposób, który psuje jakąś inną istniejącą funkcjonalność.</li>
<li>Funkcjonalność naszego systemu<strong> dokumentujemy w postaci automatycznych scenariuszy</strong>. Testy te sprawdzają działanie całego naszego systemu,<strong> natomiast nie testują systemów z którymi nasz system się integruje</strong>. Jeśli nasz system A używa systemu B, to nasze testy nie będą korzystały z prawdziwego systemu B. Zamiast tego, napiszemy &#8222;sztuczną&#8221; wersję systemu B, która będzie działać w pamięci. Dzięki temu będzie wykonywać się szybko. (Dodatkowo, jeśli system B to system do płatności, to nie chcemy żeby w rezultacie wykonania naszych testów obciążone zostały prawdziwe karty kredytowe).</li>
<li>Jeśli implementowana przez nas funkcjonalność wymaga usług systemu zewnętrznego, to tworzymy sztuczną wersję tego systemu działającą w pamięci. <strong>By mieć pewność, że ta sztuczna wersja zachowuje się tak samo jak prawdziwy system tworzymy testy <a href="http://martinfowler.com/articles/consumerDrivenContracts.html" target="_blank">CDC</a></strong>. Testy te dokumentują kontrakt, jaki oczekujemy że system zewnętrzny nam dostarczy. Testy CDC powinny być włączone do systemu ciągłej integracji i powinny testować prawdziwy zewnętrzny system oraz naszą sztuczną wersję. Tworzony przez nas testy CDC są przydatne dla programistów tworzących systemy, z których usług korzystamy, ponieważ informują one ich gdy ich nowe zmiany nie są zgodne z kontraktem, który nasz system oczekuje względem ich systemu.</li>
<li>Po skończeniu implementacji para zaprosi kogoś z zespołu i pokaże mu działającą funkcjonalność (mini demo). W tym kroku mogą zostać szybko wykryte ewentualne braki lub błędy, które zostaną natychmiast poprawione.</li>
</ul>
<li>Ciągła integracja</li>
<ul>
<li>Po każdym commicie do repozytorium kodu uruchamiane są wszystkie testy jednostkowe, automatyczne scenariusze, testy CDC. W poprzednim kroku dowiedliśmy, że system działał na maszynie konkretnego programisty. Teraz mamy pewność że działa on również na innych komputerach (a więc wszystko co jest potrzebne do poprawnego działania systemu zostało dodane do repozytorium kodu).</li>
<li>Nasz system dostarcza usług innych systemom. Inne zespoły dostarczyły nam ich testy CDC i w ramach ciągłej integracji zostaną one również uruchomione. W ten sposób wiemy, że &#8222;nie psujemy&#8221; innych systemów.</li>
</ul>
<li>Środowisko testowe &#8211; klon środowiska produkcyjnego</li>
<ul>
<li>Te środowisko jest maksymalnie zbliżone w konfiguracji do środowiska produkcyjnego. Jeśli na produkcji nasza aplikacja jest zreplikowana na kilku serwerach, to tutaj również będzie to miało miejsce. Również jeśli nasza aplikacja korzysta z systemów zewnętrznych, to w tym środowisku będziemy używać ich &#8222;prawdziwych&#8221; (testowych) wersji. A propo wersji, wersje tych systemów będą takie same jak aktualnie na produkcji.</li>
<li>Nowa wersja naszej aplikacji będzie wgrywana w sposób automatyczny i w taki sam sposób w jaki będzie to miało miejsce na produkcji. Oznacza to, że w tym kroku przetestujemy naszą procedurę aktualizacji do nowej wersji.</li>
<li>By pomóc w automatycznej weryfikacji poprzedniego kroku użyjemy &#8222;<a href="http://searchwindevelopment.techtarget.com/definition/smoke-testing" target="_blank">testów dymnych</a>&#8222;. Np. szybki automatyczny test sprawdzający, że jesteśmy w stanie się zalogować.</li>
<li>Na tym środowisku odbędą się manualne <a href="http://en.wikipedia.org/wiki/Exploratory_testing" target="_blank">testy eksploracyjne</a>. W przypadku znalezienia jakiś problemów wrócimy do kroku implementacji, gdzie dodamy brakujące testy jednostkowe lub scenariusze dokumentujące problem a następnie go naprawimy. Testy eksploracyjne skupiają się na &#8222;szukaniu dziury w całym&#8221; (głównie) w nowej funkcjonalności. Nie są to &#8222;nudne, powtarzalne&#8221; testy manualny, te zostały zautomatyzowane.</li>
<li>Gdy zespół uważa, że historyjka jest gotowa i działa, zostanie ona zaprezentowana klientowi.</li>
</ul>
<li>Produkcja</li>
<ul>
<li>W poprzednich krokach przeszły wszystkie testy automatyczne, zespół wykonał testy eksploracyjne a klient jest zadowolony. <a href="http://www.thoughtworks-studios.com/go-agile-release-management" target="_blank">Za pomocą jednego kliknięcia </a>wrzucamy naszą nową wersję na produkcję. W ramach tego kliknięcia jeszcze raz wykonają się automatyczne &#8222;testy dymne&#8221;.</li>
<li>Nasz zespół działa w modelu <a href="http://en.wikipedia.org/wiki/DevOps" target="_blank">devops</a> i  jesteśmy współodpowiedzialni za poprawne działania naszego systemu na produkcji.</li>
<li>W pokoju zespołu stoją monitory wyświetlające aktualny stan produkcji (np. natężenie ruchu). Nasz system potrafi sam się badać (health check) i sygnalizuje problem np. gdy nie może uzyskać połączenia z bazą danych.</li>
<li>Dodatkowo, co dziennie / raz na tydzień wysyłane są specjalne raporty, dokumentujące użycie systemu. Wszelkie anomalie pozwalają wychwycić ewentualne subtelne problemy.</li>
<li>Mamy stały dostęp do logów naszego systemu oraz automatyczny raport, który wyłapuje wszelkie &#8222;wyjątki&#8221; w logach.</li>
</ul>
<li>Środowisko testowe dla zespołów integrujących się z naszym systemem</li>
<ul>
<li>Poprzednio opisałem środowisko do testów eksploracyjnych. Inne zespoły również muszą testować ich systemy w zestawieniu z naszym systemem. Dostarczamy im wersję naszego systemu, która jest taka sama jak wersja aktualnie znajdującą się na produkcji. Dzięki temu inne zespoły nie mają potrzeby testowania &#8222;na produkcji&#8221;.</li>
</ul>
</ul>
<div><strong>Jak szybko możemy wrzucić prostą zmianę na produkcję?</strong></div>
<div>Wyobraźmy sobie, że nasz system akceptował tylko rejestracje od użytkowników powyżej 21 roku życia. Klient chce to zmienić na 18 lat. Jak szybko w &#8222;bezpieczny&#8221; sposób możemy to zmianę wprowadzić? Korzystając z procesu powyżej mogłoby to wyglądać tak:</div>
<div>
<ul>
<li>Klient tworzy historyjkę &#8222;Jako nowy użytkownik systemu chcę mieć możliwość zarejestrowania się gdy mam 18 lat&#8221;. Tester i programista nie widzą problemów. Czas trwania, 10 minut.</li>
<li>Dwóch programistów od razu zabiera się do pracy. Zmiana w jednym miejscu z 21 na 18. Czas trwania 10 minut, w tym uaktualnienie testów jednostkowych i scenariuszy.</li>
<li>Po wrzuceniu zmiany do repozytorium kodu uruchomienie wszystkich testów i scenariuszy. Czas trwania 5 minut.</li>
<li>Wrzucenie na środowisko testowe. Demo dla klienta. Czas trwania, 10 minut. Klient jest zadowolony.</li>
<li>Wrzucenie na produkcję za pomocą jednego kliknięcia. Czas trwania, poniżej 1 minuty.</li>
</ul>
<div>Czas trwania od pomysłu do wersji używanej przez użytkowników &#8211; <strong>mniej niż 40 minut! </strong>Mniej niż godzina w aplikacji która integruje się z innymi systemami i jest używana przez inne systemy! Ponieważ nasz proces stworzył sieć bezpieczeństwa (np. testy CDC) i mamy tak duży stopień automatyzacji, proste zmiany jesteśmy wprowadzać w sposób bezpieczny fenomenalnie szybko!</div>
</div>
<div></div>
<div>To co opisałem powyżej &#8222;to nasz wymarzony&#8221; proces. Jak bardzo proces rzeczywisty różni się od tego powyżej? Nie aż tak bardzo.. Usprawnienia musimy wprowadzić:</div>
<div>
<ul>
<li>na etapie &#8222;środowiska testowego&#8221; (bardziej je zautomatyzować i upodobnić do produkcyjnego)</li>
<li>Mamy dodatkową fazę testów &#8222;end-to-end&#8221; wykonywaną przez zewnętrzny zespół testerów. Z tej fazy chcemy zupełnie zrezygnować (zastąpiona przez automatyczne testy CDC i testy eksploracyjne wykonywane przez nasz zespół).</li>
<li>Położyć większy nacisk na testy CDC, w tym zachęcić naszych klientów do dostarczenia takowych.</li>
</ul>
</div>
</div>
</div>
<div>Ciekaw jestem, czy u Ciebie proces wygląda podobnie do opisanego powyżej? A może jest zupełnie inny?</div>
<p>Ps. Jakiś czas temu opisałem na tym blogu różne <a title="Automatyczne testowanie kodu – jak to robić?" href="http://agilesurfing.pl/2011/programowanie/automatyczne-testowanie-kodu-jak-to-robic/" target="_blank">rodzaje testów automatycznych</a>.</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-5950"></div></div><p><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2012%2Fprogramowanie%2Fstrategia-testowania-projektu%2F&amp;linkname=Strategia%20testowania%20projektu" title="Facebook" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2012%2Fprogramowanie%2Fstrategia-testowania-projektu%2F&amp;linkname=Strategia%20testowania%20projektu" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2012%2Fprogramowanie%2Fstrategia-testowania-projektu%2F&amp;linkname=Strategia%20testowania%20projektu" title="Digg" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2012%2Fprogramowanie%2Fstrategia-testowania-projektu%2F&amp;linkname=Strategia%20testowania%20projektu" title="Twitter" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2012%2Fprogramowanie%2Fstrategia-testowania-projektu%2F&amp;linkname=Strategia%20testowania%20projektu" title="Google Reader" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fagilesurfing.pl%2F2012%2Fprogramowanie%2Fstrategia-testowania-projektu%2F&amp;title=Strategia%20testowania%20projektu" id="wpa2a_4">Daj znać innym</a></p>]]></content:encoded>
			<wfw:commentRss>http://agilesurfing.pl/2012/programowanie/strategia-testowania-projektu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Refaktoryzując test do String Kalkulatora</title>
		<link>http://agilesurfing.pl/2011/programowanie/refaktoryzujac-test-do-string-kalkulatora/</link>
		<comments>http://agilesurfing.pl/2011/programowanie/refaktoryzujac-test-do-string-kalkulatora/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 14:23:41 +0000</pubDate>
		<dc:creator>Grzegorz Dziemidowicz</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://agilesurfing.pl/?p=554</guid>
		<description><![CDATA[W ramach eksperymentu nagrałem wideo, w który refactoruje test do String Kalkulatora. Wideo można zobaczyć tutaj: Refactoring of test Filmik trwa 5 minut podczas których: Rozbijam jeden duży test na kilka mniejszych (by testy były łatwiejsze do zrozumienia, a gdy nie przechodzą by dokładnie było wiadomo co nie działa) Zamieniam assertEquals na assertThat (naturalniej się czyta) Zastępuje komentarze [...]]]></description>
			<content:encoded><![CDATA[<p>W ramach eksperymentu nagrałem wideo, w który refactoruje test do String Kalkulatora.</p>
<p>Wideo można zobaczyć tutaj: <a href="http://www.youtube.com/watch?v=koMg8TlYbvs&amp;feature=youtu.be">Refactoring of test</a></p>
<p>Filmik trwa 5 minut podczas których:</p>
<ol>
<li>Rozbijam jeden duży test na kilka mniejszych (by testy były łatwiejsze do zrozumienia, a gdy nie przechodzą by dokładnie było wiadomo co nie działa)</li>
<li>Zamieniam assertEquals na assertThat (naturalniej się czyta)</li>
<li>Zastępuje komentarze opisowymi nazwami testów (by samo zerknięcie do raportu w ciągłej integracji wystarczyło do zorientowania się, co się dzieje)</li>
</ol>
<div>Klika używanych skrótów:</div>
<div>
<ul>
<li><strong>ctrl+y</strong> &#8211; usuwa aktualną linie</li>
<li><strong>ctrl+c</strong> &#8211; gdy nic nie jest zaznaczone, kopiuje aktualną linię</li>
<li><strong>alt+ctrl+v</strong> &#8211; wyciąga zaznaczone wyrażenie do zmiennej</li>
<li><strong>ctrl+shift+f10</strong> &#8211; odpala testy</li>
<li><strong>ctrl+w &#8211; </strong>rozszerzające się zaznaczenie (naciśnij kilka razy, a zaznaczony obszar będzie rósł)</li>
</ul>
<div>Kod który refaktoryzuję, pochodzi z mojego innego wpisu (<a title="Refactor my code step by step!" href="http://agilesurfing.pl/2011/programowanie/refactor-my-code-step-by-step/">Refactor my code step by step</a>).</div>
</div>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-5550"></div></div><p><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Frefaktoryzujac-test-do-string-kalkulatora%2F&amp;linkname=Refaktoryzuj%C4%85c%20test%20do%20String%20Kalkulatora" title="Facebook" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Frefaktoryzujac-test-do-string-kalkulatora%2F&amp;linkname=Refaktoryzuj%C4%85c%20test%20do%20String%20Kalkulatora" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Frefaktoryzujac-test-do-string-kalkulatora%2F&amp;linkname=Refaktoryzuj%C4%85c%20test%20do%20String%20Kalkulatora" title="Digg" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Frefaktoryzujac-test-do-string-kalkulatora%2F&amp;linkname=Refaktoryzuj%C4%85c%20test%20do%20String%20Kalkulatora" title="Twitter" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Frefaktoryzujac-test-do-string-kalkulatora%2F&amp;linkname=Refaktoryzuj%C4%85c%20test%20do%20String%20Kalkulatora" title="Google Reader" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Frefaktoryzujac-test-do-string-kalkulatora%2F&amp;title=Refaktoryzuj%C4%85c%20test%20do%20String%20Kalkulatora" id="wpa2a_6">Daj znać innym</a></p>]]></content:encoded>
			<wfw:commentRss>http://agilesurfing.pl/2011/programowanie/refaktoryzujac-test-do-string-kalkulatora/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Refactor my code step by step!</title>
		<link>http://agilesurfing.pl/2011/programowanie/refactor-my-code-step-by-step/</link>
		<comments>http://agilesurfing.pl/2011/programowanie/refactor-my-code-step-by-step/#comments</comments>
		<pubDate>Sun, 27 Nov 2011 18:06:29 +0000</pubDate>
		<dc:creator>Grzegorz Dziemidowicz</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[software craftsmanship]]></category>

		<guid isPermaLink="false">http://agilesurfing.pl/?p=525</guid>
		<description><![CDATA[Niedawno rozmyślałem nad skryptem w Ruby, który napisałem. Nie byłem z niego zadowolony. Co prawda działał, ale był dość &#8222;brzydki&#8221;. Pomyślałem, super by było, gdyby ktoś mi pokazał jak napisać to lepiej.. &#8222;Refactor my code&#8221;.. Po krótkim googlowaniu okazało się, że jest już taki serwis: http://refactormycode.com/ O ile nazwa jest już zajęta .. to mój pomysł [...]]]></description>
			<content:encoded><![CDATA[<p>Niedawno rozmyślałem nad skryptem w Ruby, który napisałem. Nie byłem z niego zadowolony. Co prawda działał, ale był dość &#8222;brzydki&#8221;.</p>
<p>Pomyślałem, super by było, gdyby ktoś mi pokazał jak napisać to lepiej.. &#8222;Refactor my code&#8221;.. Po krótkim googlowaniu okazało się, że jest już taki serwis: <a href="http://refactormycode.com/">http://refactormycode.com/</a></p>
<p>O ile nazwa jest już zajęta <img src='http://agilesurfing.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  .. to mój pomysł miał jeszcze jeden istotny składnik. Założyłem, że ważne jest by &#8222;mój&#8221; kod nie tylko został poprawiony, ale żeby został poprawiony w małych kroczkach z wytłumaczeniem &#8222;dlaczego&#8221;, tak bym mógł się nauczyć i następnym razem sam napisać coś porządnie..</p>
<p>W gruncie rzeczy, to marzy mi się &#8222;coding dojo&#8221; rozproszone w czasie i przestrzeni. Piszę kod, który zapewne może zostać napisany lepiej. Chciałbym abyś wziął ten kod i w małych kroczak go ulepszył. Po każdym kroczku zrób commit i wyjaśnij co i dlaczego zrobiłeś.</p>
<p>Prototyp tego co mam na myśli dość szybko udało mi się stworzyć przy pomocy githuba.</p>
<p><a href="https://github.com/dziemid/refactormycode">https://github.com/dziemid/refactormycode</a></p>
<p>Napisałem  <a href="https://github.com/dziemid/refactormycode/blob/master/java/string_calculator/src/main/java/StringCalculator.java">dość brzydką wersję String Calculatora</a> , którą następnie trochę  <a href="https://github.com/dziemid/refactormycode/blob/java_string_calculator_refactoring/java/string_calculator/src/main/java/StringCalculator.java">poprawiłem</a> .. Nie mniej wersja końcowa nie jest aż tak ciekawa jak sam proces jej tworzenia, gdzie <a href="https://github.com/dziemid/refactormycode/commit/355aad817cee712f5773c1df740e97dd39bbc4cf">każdy mały kroczek został udokumentowany</a>.</p>
<p>Pomysł został podchwycony przez Martina, która zrefaktoryzował mój kod krok po kroku (<a href="https://github.com/mklose/refactormycode/commit/61f05039f345e6482ebe07c669ab91d240dff6ec">tutaj</a> jeden z jego kroków w raz z moim komentarzem).</p>
<p><strong>Dziś wrzuciłem kolejny kod do poprawienia: <a href="https://github.com/dziemid/refactormycode/tree/master/java/game_of_life">Grę w życie</a> w Javie.</strong> Kod jest napisany średnio. Miejscami jest brzydki, niektóre klasy są w ogóle niepotrzebne, inne klasy robią rzeczy, które być może powinny być gdzie indziej.</p>
<p><strong>Zachęcam Cię do zrobienia &#8222;Fork&#8221;a i zrefaktoryzowania tego kodu krok po kroku.</strong> W każdym commicie napisz co i dlaczego robisz. W ten sposób razem stworzymy coding dojo rozproszone w czasie i przestrzeni <img src='http://agilesurfing.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-5260"></div></div><p><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Frefactor-my-code-step-by-step%2F&amp;linkname=Refactor%20my%20code%20step%20by%20step%21" title="Facebook" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Frefactor-my-code-step-by-step%2F&amp;linkname=Refactor%20my%20code%20step%20by%20step%21" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Frefactor-my-code-step-by-step%2F&amp;linkname=Refactor%20my%20code%20step%20by%20step%21" title="Digg" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Frefactor-my-code-step-by-step%2F&amp;linkname=Refactor%20my%20code%20step%20by%20step%21" title="Twitter" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Frefactor-my-code-step-by-step%2F&amp;linkname=Refactor%20my%20code%20step%20by%20step%21" title="Google Reader" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Frefactor-my-code-step-by-step%2F&amp;title=Refactor%20my%20code%20step%20by%20step%21" id="wpa2a_8">Daj znać innym</a></p>]]></content:encoded>
			<wfw:commentRss>http://agilesurfing.pl/2011/programowanie/refactor-my-code-step-by-step/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Język opcjonalnie typowany &#8211; Dart</title>
		<link>http://agilesurfing.pl/2011/programowanie/jezyk-opcjonalnie-typowany-dart/</link>
		<comments>http://agilesurfing.pl/2011/programowanie/jezyk-opcjonalnie-typowany-dart/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 19:58:15 +0000</pubDate>
		<dc:creator>Grzegorz Dziemidowicz</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[ciekawostki]]></category>
		<category><![CDATA[dart]]></category>
		<category><![CDATA[goto]]></category>

		<guid isPermaLink="false">http://agilesurfing.pl/?p=513</guid>
		<description><![CDATA[Poniższy wpis jest częścią serii opisującej moje wrażenia z konferencji GOTO Aarhus 2012. Więcej o tej konferencji.  Na otwarcie konferencji Google przygotowało niespodziankę &#8211; nowy język programowania Dart. Dokładnie, została zaprezentowana wczesna wersja języka, nad którym ciągle trwają prace. Jest to język opcjonalnie typowany. Możesz używać typów, ale nie musisz. Jeśli będziesz używał typów, kompilator pomoże Ci podpowiadając [...]]]></description>
			<content:encoded><![CDATA[<p><em>Poniższy wpis jest częścią serii opisującej moje wrażenia z konferencji GOTO Aarhus 2012. <a href="http://agilesurfing.pl/?p=479">Więcej o tej konferencji.</a> </em></p>
<p>Na otwarcie konferencji Google przygotowało niespodziankę &#8211; nowy język programowania Dart. Dokładnie, została zaprezentowana wczesna wersja języka, nad którym ciągle trwają prace.</p>
<p>Jest to język opcjonalnie typowany. Możesz używać typów, ale nie musisz. Jeśli będziesz używał typów, kompilator pomoże Ci podpowiadając co dany typ potrafi lub sugerując, że chyba używasz nie poprawnego typu. Nie mniej kompilator nie będzie Cię do niczego zmuszał &#8211; to czy Twój program będzie działał czy nie, okaże się po uruchomieniu (podobnie jak w przypadku JavaScript).</p>
<p>Po co nowy język?</p>
<ul>
<li>Dart ma być językiem, w którym &#8222;trudno&#8221; jest pisać nie wydajne programy. Google chce ułatwić swoim programistom pisanie aplikacji, które działają szybko.</li>
<li>Dart kompilowany jest do JavaScriptu, więc może działać na większości &#8222;nowoczesnych&#8221; przeglądarek. Trwają również prace nad maszyną wirtualną Darta, która będzie częścią przeglądarki Chrome. Jedna z ciekawszych opcji: &#8222;snapshot&#8221; kodu (kod może zostać prekompilowany i dostarczony do przeglądarki w postaci gotowej do wczytania do pamięci), ułatwiający bardzo szybki i wydajny start aplikacji.</li>
<li>Model konkurencji zaczerpnięty z języka Erlang. Izolaty na wzór aktorów.</li>
<li>Przemawia do ludzi z dwóch obozów (języki dynamiczne (JavaScript), języki silnie typowane(Java)</li>
<li>Być może zastąpi Javę na platformie Android?</li>
</ul>
<div>Materiały</div>
<div>
<ul>
<li><a href="http://try.dartlang.org/">http://try.dartlang.org/</a></li>
<li><a href="http://www.dartlang.org/">http://www.dartlang.org/</a></li>
<li><a href="http://dartinside.com/">http://dartinside.com/</a></li>
</ul>
<div>Język wydaje się fajny. Na następnym <a href="http://agilesurfing.pl/2011/programowanie/coding-dojo/" target="_blank">dojo</a> zaproponuje, by rozwiązać w nim jakiś problem. Ciebie również zachęcam do poeksperymentowania <img src='http://agilesurfing.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </div>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-5140"></div></div><p><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fjezyk-opcjonalnie-typowany-dart%2F&amp;linkname=J%C4%99zyk%20opcjonalnie%20typowany%20%E2%80%93%20Dart" title="Facebook" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fjezyk-opcjonalnie-typowany-dart%2F&amp;linkname=J%C4%99zyk%20opcjonalnie%20typowany%20%E2%80%93%20Dart" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fjezyk-opcjonalnie-typowany-dart%2F&amp;linkname=J%C4%99zyk%20opcjonalnie%20typowany%20%E2%80%93%20Dart" title="Digg" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fjezyk-opcjonalnie-typowany-dart%2F&amp;linkname=J%C4%99zyk%20opcjonalnie%20typowany%20%E2%80%93%20Dart" title="Twitter" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fjezyk-opcjonalnie-typowany-dart%2F&amp;linkname=J%C4%99zyk%20opcjonalnie%20typowany%20%E2%80%93%20Dart" title="Google Reader" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fjezyk-opcjonalnie-typowany-dart%2F&amp;title=J%C4%99zyk%20opcjonalnie%20typowany%20%E2%80%93%20Dart" id="wpa2a_10">Daj znać innym</a></p>]]></content:encoded>
			<wfw:commentRss>http://agilesurfing.pl/2011/programowanie/jezyk-opcjonalnie-typowany-dart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GOTO Aarhus 2011</title>
		<link>http://agilesurfing.pl/2011/programowanie/goto-aarhus-2011/</link>
		<comments>http://agilesurfing.pl/2011/programowanie/goto-aarhus-2011/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 19:23:18 +0000</pubDate>
		<dc:creator>Grzegorz Dziemidowicz</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[konferencje]]></category>
		<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[goto]]></category>
		<category><![CDATA[konferencja]]></category>

		<guid isPermaLink="false">http://agilesurfing.pl/?p=479</guid>
		<description><![CDATA[Drugi tydzień października spędziłem na konferencji GOTO w Aarhus. Jak zwykle było to bardzo intensywne doświadczenie W telegraficznym skrócie: Niedziela Warsztaty A user user manual z Chrisem Nodderem. Porady na temat tego jak tworzyć przyjazne i łatwe w użytkowaniu oprogramowanie + teoria na temat tego, jak zachowują się użytkownicy i dlaczego. Poniedziałek Google prezentuje nowy język [...]]]></description>
			<content:encoded><![CDATA[<p>Drugi tydzień października spędziłem na konferencji <a href="http://gotocon.com/aarhus-2011/" target="_blank">GOTO</a> w Aarhus. Jak zwykle było to bardzo intensywne doświadczenie <img src='http://agilesurfing.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>W telegraficznym skrócie:</p>
<p><strong>Niedziela</strong></p>
<ul>
<li>Warsztaty<a href="http://agilesurfing.pl/?p=486"> A user user manual z Chrisem Nodderem</a>. Porady na temat tego jak tworzyć przyjazne i łatwe w użytkowaniu oprogramowanie + teoria na temat tego, jak zachowują się użytkownicy i dlaczego.</li>
</ul>
<p><strong>Poniedziałek</strong></p>
<ul>
<li><a href="http://agilesurfing.pl/2011/programowanie/jezyk-opcjonalnie-typowany-dart/">Google prezentuje nowy język programowania &#8211; Dart</a></li>
</ul>
<p><strong>Wtorek</strong></p>
<ul>
<li>TODO</li>
</ul>
<p><strong> Środa</strong></p>
<ul>
<li>TODO</li>
</ul>
<p><strong>Czwartek</strong></p>
<ul>
<li>Warsztaty &#8222;Evolutionary Architecture &#8211; How to Make it Work&#8221; z Martinem Fowlerem i Rebeccom Parsons</li>
<li>Warsztaty &#8221;Influence Strategies for Practitioners&#8221; z Linda Rising</li>
</ul>
<p><strong>Piątek</strong></p>
<ul>
<li>Warsztaty &#8221;Maintaining and Evolving Legacy Systems&#8221; z Frankiem Buschmann</li>
</ul>
<p><strong>Ogólne komentarze i podsumowanie:</strong></p>
<p>W tym roku do materiałów konferencyjnych dołączone zostały dwie małe książeczki: &#8222;The 3 pillars of personal effectiveness&#8221; oraz &#8222;Priming Kanban&#8221; - oryginalne i fajne posunięcie.</p>
<p>I tak na przykład w &#8222;Priming Kanban&#8221; wyczytałem, co robić gdy osiągamy limit &#8222;<a href="http://agilesurfing.pl/2011/agile/wip-limits/" target="_blank">work in progress</a>&#8222;. Jest to moment na dyskusję. Do wyboru mamy albo powiększyć limit (co będzie skutkować zwiększeniem czasu, jaki jest potrzeby by historyjka przewędrowała od &#8222;koncepcji&#8221; do &#8222;wdrożenia&#8221;) albo usprawnić/wspomóc &#8222;wąskie gardło&#8221;. Np. gdy &#8222;testowanie&#8221; jest wąskim gardłem, może jako programiści możemy zautomatyzować wrzucanie nowej wersji na środowisko testowe? Tak czy inaczej, osiągnięcie limitu &#8222;work in progress&#8221; jest pretekstem do dyskusji.</p>
<p>Konferencja to również męczące wydarzenie (pełno wrażeń, codziennie integracja), nie mniej z niecierpliwością czekam na kolejną konferencję organizowaną przez Trifork, QCon 2012 w Londynie <img src='http://agilesurfing.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-4800"></div></div><p><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fgoto-aarhus-2011%2F&amp;linkname=GOTO%20Aarhus%202011" title="Facebook" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fgoto-aarhus-2011%2F&amp;linkname=GOTO%20Aarhus%202011" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fgoto-aarhus-2011%2F&amp;linkname=GOTO%20Aarhus%202011" title="Digg" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fgoto-aarhus-2011%2F&amp;linkname=GOTO%20Aarhus%202011" title="Twitter" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fgoto-aarhus-2011%2F&amp;linkname=GOTO%20Aarhus%202011" title="Google Reader" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fgoto-aarhus-2011%2F&amp;title=GOTO%20Aarhus%202011" id="wpa2a_12">Daj znać innym</a></p>]]></content:encoded>
			<wfw:commentRss>http://agilesurfing.pl/2011/programowanie/goto-aarhus-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extreme Startup zamiast wtorkowego dojo</title>
		<link>http://agilesurfing.pl/2011/programowanie/extreme-startup-zamiast-wtorkowego-dojo/</link>
		<comments>http://agilesurfing.pl/2011/programowanie/extreme-startup-zamiast-wtorkowego-dojo/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 19:23:14 +0000</pubDate>
		<dc:creator>Grzegorz Dziemidowicz</dc:creator>
				<category><![CDATA[Berlin]]></category>
		<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[Extreme Startup]]></category>
		<category><![CDATA[software craftsmanship]]></category>
		<category><![CDATA[testy jednostkowe]]></category>

		<guid isPermaLink="false">http://agilesurfing.pl/?p=465</guid>
		<description><![CDATA[Wczoraj zamiast &#8222;normalnego&#8221; dojo poprowadziłem mini warsztat Extreme Startup. Podczas tego warsztatu zadaniem uczestników jest napisanie aplikacji webowej, która odpowiadać będzie na zapytania &#8222;wirtualnych&#8221; klientów. Uczestnicy warsztatu nie wiedzą, co ich czeka i z logów serwera muszą wywnioskować, czego chcą klienci. Klienci będą między innymi pytać: Ile jest 2 + 5? Która z tych liczb [...]]]></description>
			<content:encoded><![CDATA[<p>Wczoraj zamiast &#8222;normalnego&#8221; dojo poprowadziłem mini warsztat <a href="http://chatley.com/posts/05-27-2011/extreme-startup/" target="_blank">Extreme Startup.</a></p>
<p>Podczas tego warsztatu zadaniem uczestników jest napisanie aplikacji webowej, która odpowiadać będzie na zapytania &#8222;wirtualnych&#8221; klientów. Uczestnicy warsztatu nie wiedzą, co ich czeka i z logów serwera muszą wywnioskować, czego chcą klienci.</p>
<p>Klienci będą między innymi pytać:</p>
<ul>
<li>Ile jest 2 + 5?</li>
<li>Która z tych liczb się największa: 4, 234, 2, 4?</li>
<li>Jaki kolor ma banan?</li>
</ul>
<div>Warsztat jest dość intensywny, jako że uczestnicy konkurują między sobą o to, kto zdobędzie najwięcej punktów. Na bieżąco na rzutniku wyświetlany jest aktualny ranking, co oczywiście wyzwala w uczestnikach chęć rywalizacji.</div>
<div>W zależności od pytania uczestnicy otrzymują różną ilość punktów. Gdy ich serwer odpowie źle, tracą punkty, a gdy ich serwer jest nie dostępny, tracą jeszcze więcej punktów.</div>
<p>W warsztacie wzięło 8 osób, zostały uformowane 4 pary. Zaczęliśmy o 1700 i około 50 minut zajęła nam sesja próbna, gdzie uczestnicy konfigurowali sieć tak, by<a href="https://github.com/rchatley/extreme_startup" target="_blank"> móc połączyć się z serwerem</a> i odpowiedzieć na proste zapytanie &#8222;Jak masz na imię&#8221;.</p>
<p>Około 18 zaczęliśmy &#8221;prawdziwą&#8221; rundę z normalnymi pytaniami. Niestety z braku czasu, runda trwała tylko około 45 minut. Na przyszłość, &#8222;normalna&#8221; runda powinna trwać co najmniej 90 minut. Na potrzeby warsztatu przygotowane jest 6 zestawów pytań i wczoraj dobrnęliśmy tylko do trzeciego, a tak naprawdę mało który zespół miał poprawnie zaimplementowane wszystkie pytania z 2 pierwszych zestawów.</p>
<p>Z 4 zespołów tylko jeden pisał testy. Wszystkim zespołom poszło &#8222;podobnie źle&#8221; &#8211; zdobyły po około -2000 punktów. Prawdopodobnie gdyby warsztat trwał dłużej, to w miarę implementowanie poprawnych odpowiedzi dla kolejnych pytań, pary wyszłyby na prostą.</p>
<p>Pary, które używały &#8222;cięższych&#8221; serwerów aplikacji (jak Jetty <img src='http://agilesurfing.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) traciły sporo punktów podczas redeployu aplikacji. Niestety nikt nie pokusił się o rozwiązanie z load balancerem <img src='http://agilesurfing.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Technologie jakich używali uczestnicy</p>
<ul>
<li>Scala</li>
<li>Node.js</li>
<li>Groovy</li>
<li>Smalltalk, a potem z powodu problemów Java</li>
</ul>
<div>We wszystkich zespołach/parach uczestnicy grali rolę programistów. Żaden zespół nie &#8222;wprowadził&#8221; roli Product Ownera, który analizowałby logi i priorytezował pracę programisty (np. niektóre pytania były dużo prostsze niż inne, podobnie pytania miały różną ilość punktów, czasem wystarczyło zwrócić pusty string.).</div>
<div>Ogólnie chyba się podobało <img src='http://agilesurfing.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  .. Może powtórzymy ten warsztat za jakiś czas&#8230;</div>
<div>Ps. Wczoraj wyszła książka <a href="http://theleanstartup.com/book" target="_blank">Lean Startup.</a> <strong>Polecam</strong>.</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-4660"></div></div><p><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fextreme-startup-zamiast-wtorkowego-dojo%2F&amp;linkname=Extreme%20Startup%20zamiast%20wtorkowego%20dojo" title="Facebook" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fextreme-startup-zamiast-wtorkowego-dojo%2F&amp;linkname=Extreme%20Startup%20zamiast%20wtorkowego%20dojo" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fextreme-startup-zamiast-wtorkowego-dojo%2F&amp;linkname=Extreme%20Startup%20zamiast%20wtorkowego%20dojo" title="Digg" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fextreme-startup-zamiast-wtorkowego-dojo%2F&amp;linkname=Extreme%20Startup%20zamiast%20wtorkowego%20dojo" title="Twitter" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fextreme-startup-zamiast-wtorkowego-dojo%2F&amp;linkname=Extreme%20Startup%20zamiast%20wtorkowego%20dojo" title="Google Reader" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fextreme-startup-zamiast-wtorkowego-dojo%2F&amp;title=Extreme%20Startup%20zamiast%20wtorkowego%20dojo" id="wpa2a_14">Daj znać innym</a></p>]]></content:encoded>
			<wfw:commentRss>http://agilesurfing.pl/2011/programowanie/extreme-startup-zamiast-wtorkowego-dojo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Organizując światowy dzień CodeRetreat</title>
		<link>http://agilesurfing.pl/2011/programowanie/organizujac-swiatowy-dzien-coderetreat/</link>
		<comments>http://agilesurfing.pl/2011/programowanie/organizujac-swiatowy-dzien-coderetreat/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 18:31:46 +0000</pubDate>
		<dc:creator>Grzegorz Dziemidowicz</dc:creator>
				<category><![CDATA[Berlin]]></category>
		<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[berlin]]></category>
		<category><![CDATA[clean code]]></category>
		<category><![CDATA[coderetreat]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[software craftsmanship]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://agilesurfing.pl/?p=467</guid>
		<description><![CDATA[Dziś rozpocząłem proces organizacji CodeRetreat Berlin w ramach światowego dnia CodeReteat. Na razie założyłem tylko grupę na googlach i szukam chętnych do pomocy. Przed nami &#8222;trochę pracy&#8221;. Musimy znaleźć sponsorów, salę, przeprowadzić rejestrację, zorganizować obiad i załatwić wiele innych małych rzeczy. Damy radę! Po ostatnim CodeRetreat w Berlinie, ludzie są pozytywnie nastawieni Światowy dzień CodeRetreat odbędzie się [...]]]></description>
			<content:encoded><![CDATA[<p>Dziś rozpocząłem proces organizacji CodeRetreat Berlin w ramach<a href="http://blog.coderetreat.com/global-day-of-coderetreat" target="_blank"> światowego dnia CodeReteat</a>.</p>
<p>Na razie założyłem tylko <a href="https://groups.google.com/forum/?hl=en#!forum/globaldayofcoderetreatberlin" target="_blank">grupę</a> na googlach i szukam chętnych do pomocy. Przed nami &#8222;trochę pracy&#8221;. Musimy znaleźć sponsorów, salę, przeprowadzić rejestrację, zorganizować obiad i załatwić wiele innych małych rzeczy. Damy radę! <a href="http://agilesurfing.pl/2011/agile/coderetreat-berlin/" target="_blank">Po ostatnim CodeRetreat w Berlinie</a>, ludzie są pozytywnie nastawieni <img src='http://agilesurfing.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Światowy dzień CodeRetreat odbędzie się w sobotę, 3 grudnia 2011</strong>. Na razie na <a href="https://github.com/coreyhaines/coderetreat/wiki/Cities" target="_blank">liście miast uczestniczących w projekcie</a> nie ma żadnego miasta z Polski, mam nadzieję, że wkrótce się to zmieni ;)</p>
<p>3 grudnia, przez około 32 godziny, gdzieś na świecie odbywać się będzie CodeRetreat. W czasie przerw pomiędzy iteracjami będziemy łączyć się na wideo konferencjach z innymi lokalizacjami i na bieżąco będziemy wymieniać się wrażeniami i pomysłami.</p>
<p>Czy weźmiesz udział w światowym dniu CodeRetreat? W jakim mieście?</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-4680"></div></div><p><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Forganizujac-swiatowy-dzien-coderetreat%2F&amp;linkname=Organizuj%C4%85c%20%C5%9Bwiatowy%20dzie%C5%84%20CodeRetreat" title="Facebook" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Forganizujac-swiatowy-dzien-coderetreat%2F&amp;linkname=Organizuj%C4%85c%20%C5%9Bwiatowy%20dzie%C5%84%20CodeRetreat" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Forganizujac-swiatowy-dzien-coderetreat%2F&amp;linkname=Organizuj%C4%85c%20%C5%9Bwiatowy%20dzie%C5%84%20CodeRetreat" title="Digg" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Forganizujac-swiatowy-dzien-coderetreat%2F&amp;linkname=Organizuj%C4%85c%20%C5%9Bwiatowy%20dzie%C5%84%20CodeRetreat" title="Twitter" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Forganizujac-swiatowy-dzien-coderetreat%2F&amp;linkname=Organizuj%C4%85c%20%C5%9Bwiatowy%20dzie%C5%84%20CodeRetreat" title="Google Reader" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Forganizujac-swiatowy-dzien-coderetreat%2F&amp;title=Organizuj%C4%85c%20%C5%9Bwiatowy%20dzie%C5%84%20CodeRetreat" id="wpa2a_16">Daj znać innym</a></p>]]></content:encoded>
			<wfw:commentRss>http://agilesurfing.pl/2011/programowanie/organizujac-swiatowy-dzien-coderetreat/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Coding Dojo (cz. 2)</title>
		<link>http://agilesurfing.pl/2011/programowanie/coding-dojo-cz-2/</link>
		<comments>http://agilesurfing.pl/2011/programowanie/coding-dojo-cz-2/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 17:19:54 +0000</pubDate>
		<dc:creator>Grzegorz Dziemidowicz</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[berlin]]></category>
		<category><![CDATA[clean code]]></category>
		<category><![CDATA[craftsmanship]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[software craftsmanship]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://agilesurfing.pl/?p=432</guid>
		<description><![CDATA[Ciąg dalszy informacji na temat naszego Coding Dojo.. Ostatnio eksperymentowaliśmy z innymi językami niż Java. Wypróbowaliśmy Clojure, Scale oraz Ruby. Kilka obserwacji: Dojo zaczynamy z &#8222;czystym&#8221; projektem (startujemy od zera). W przypadku Clojure i Ruby kodowaliśmy od zera. W przypadku Scali, zostało zaprezentowane i omówione gotowe rozwiązanie. Dużo bardziej podobało nam się kodowanie od zera, [...]]]></description>
			<content:encoded><![CDATA[<p>Ciąg dalszy informacji na temat naszego <a href="http://agilesurfing.pl/2011/programowanie/coding-dojo/" target="_blank">Coding Dojo</a>..</p>
<p>Ostatnio eksperymentowaliśmy z innymi językami niż Java. Wypróbowaliśmy Clojure, Scale oraz Ruby. Kilka obserwacji:</p>
<p><strong>Dojo zaczynamy z &#8222;czystym&#8221; projektem (startujemy od zera).</strong></p>
<p>W przypadku Clojure i Ruby kodowaliśmy od zera. W przypadku Scali, zostało zaprezentowane i omówione gotowe rozwiązanie. Dużo bardziej podobało nam się kodowanie od zera, gdyż każdy miał szansę zrozumieć co się dzieje (dla wielu języki były obce), a bardziej zaawansowane osoby miały szansę zobaczyć krok po kroku sposób rozwiązywania problemu przez innych.</p>
<p>Prezentowanie gotowego rozwiązania raczej się nie sprawdziło, gdyż osoby dla których język był nowy nie do końca rozumiały co się dzieje, a dla osób zaawansowanych samo finalne rozwiązanie nie było aż tak ciekawe.</p>
<p><strong>Ćwiczymy jedną rzecz na raz</strong></p>
<p>Celem Dojo jest ćwiczenie. By robić to dobrze, warto skupić się na jednej rzeczy na raz. Średnim pomysłem jest ćwiczenie rozwiązania problemu w sposób obiektowy, gdy większość grupy nie potrafi nawet programować w danym języku (w takiej sytuacji można spróbować coś takiego: ekspert w danym języku ma klawiaturę i zamienia sugestie uczestników na temat rozwiązania obiektowego w kod).</p>
<p>Ponieważ spotykamy się tylko na jedną godzinę, dobrze jest wybrać za cel ćwiczenia coś bardzo konkretnego. Poniżej kilka przykładów:</p>
<ul>
<li>Eksplorowanie  (nowego) języka (<a href="http://rubykoans.com/" target="_blank">Ruby</a>)</li>
<li>Eksplorowanie  (nowego) języka (<a href="https://github.com/rubbish/scala-koans" target="_blank">Scala</a>)</li>
<li>Ćwiczenie (szybkiego) cyklu RED, GREEN, REFACTOR w TDD (w języku, który zna grupa) (np. chcemy by cykl trwał mniej niż 3 minuty)</li>
<li>Ćwiczenie programowania obiektowego (w języku, który zna grupa) (np. chcemy by każda klasa przestrzegała zasad <a href="http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)" target="_blank">SOLID</a>)</li>
<li>Ćwiczenie nazewnictwa (chcemy, by każda nazwa ujawniała <a href="http://c2.com/cgi/wiki?IntentionRevealingNames" target="_blank">intencję</a> twórcy)</li>
<li>Ćwiczenie w pisaniu krótkich metod (np. max liczba linii to 4)</li>
<li>Ćwiczenie w obsłudze IDE (tylko s<a href="http://refcardz.dzone.com/refcardz/intellij-idea" target="_blank">króty klawiszowe</a>, refactoring)</li>
</ul>
<div>Dojo może być formą <a href="http://litemind.com/talent-myth/" target="_blank">Deliberate Practice</a>. Dlatego sugerowany format jest następujący:</div>
<div>
<ul>
<li>Jako grupa ustalamy konkretny cel na najbliższą godzinę</li>
<li>Jedna para pracuje, jej kod wyświetlany jest na rzutniku</li>
<li>Parę zmieniamy co 10 minut</li>
<li>W czasie 10 minut unikamy niepotrzebnych komentarzy, by nie rozpraszać pary. Para powinna komentować to co robi.</li>
<li>Po 10 minutach jest czas na (krótkie) pytania. Skupiamy się na naszym celu i o tym rozmawiamy (nie rozwodzimy się na temat SOLID gdy celem jest TDD).</li>
<li>Na koniec powinniśmy zrobić krótką retrospekcję: Czy osiągnęliśmy cel? Czego się nauczyliśmy? Co było fajne w formacie Dojo? Co możemy zrobić lepiej następnym razem?</li>
</ul>
</div>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-4330"></div></div><p><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fcoding-dojo-cz-2%2F&amp;linkname=Coding%20Dojo%20%28cz.%202%29" title="Facebook" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fcoding-dojo-cz-2%2F&amp;linkname=Coding%20Dojo%20%28cz.%202%29" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fcoding-dojo-cz-2%2F&amp;linkname=Coding%20Dojo%20%28cz.%202%29" title="Digg" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fcoding-dojo-cz-2%2F&amp;linkname=Coding%20Dojo%20%28cz.%202%29" title="Twitter" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fcoding-dojo-cz-2%2F&amp;linkname=Coding%20Dojo%20%28cz.%202%29" title="Google Reader" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fcoding-dojo-cz-2%2F&amp;title=Coding%20Dojo%20%28cz.%202%29" id="wpa2a_18">Daj znać innym</a></p>]]></content:encoded>
			<wfw:commentRss>http://agilesurfing.pl/2011/programowanie/coding-dojo-cz-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>IntelliJ IDEA &#8211; kolorki + szablon do testow</title>
		<link>http://agilesurfing.pl/2011/programowanie/intellij-idea-kolorki-szablon-do-testow/</link>
		<comments>http://agilesurfing.pl/2011/programowanie/intellij-idea-kolorki-szablon-do-testow/#comments</comments>
		<pubDate>Sun, 03 Jul 2011 10:35:12 +0000</pubDate>
		<dc:creator>Grzegorz Dziemidowicz</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[IntelliJ]]></category>
		<category><![CDATA[szablon]]></category>
		<category><![CDATA[testy]]></category>

		<guid isPermaLink="false">http://agilesurfing.pl/?p=417</guid>
		<description><![CDATA[Po zainstalowaniu IntelliJ IDEA, mamy do wykonania jeszcze dwie czynnosci 1) Instalacja schematu kolorow: http://tedwise.com/2009/02/26/dark-pastels-theme-for-intellij-idea/ 2) Dodanie szablonu do testow (Settings -&#62; Live templates): @Test public void should$NAME$() throws Exception { // Given $END$ // When // Then }]]></description>
			<content:encoded><![CDATA[<p>Po zainstalowaniu IntelliJ IDEA, mamy do wykonania jeszcze dwie czynnosci <img src='http://agilesurfing.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>1) Instalacja schematu kolorow: <a href="http://tedwise.com/2009/02/26/dark-pastels-theme-for-intellij-idea/">http://tedwise.com/2009/02/26/dark-pastels-theme-for-intellij-idea/</a></p>
<p>2) Dodanie szablonu do testow (Settings -&gt; Live templates):</p>
<pre>@Test
public void should$NAME$() throws Exception {
 // Given
 $END$

 // When

 // Then
}</pre>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-4180"></div></div><p><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fintellij-idea-kolorki-szablon-do-testow%2F&amp;linkname=IntelliJ%20IDEA%20%E2%80%93%20kolorki%20%2B%20szablon%20do%20testow" title="Facebook" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fintellij-idea-kolorki-szablon-do-testow%2F&amp;linkname=IntelliJ%20IDEA%20%E2%80%93%20kolorki%20%2B%20szablon%20do%20testow" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fintellij-idea-kolorki-szablon-do-testow%2F&amp;linkname=IntelliJ%20IDEA%20%E2%80%93%20kolorki%20%2B%20szablon%20do%20testow" title="Digg" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fintellij-idea-kolorki-szablon-do-testow%2F&amp;linkname=IntelliJ%20IDEA%20%E2%80%93%20kolorki%20%2B%20szablon%20do%20testow" title="Twitter" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fintellij-idea-kolorki-szablon-do-testow%2F&amp;linkname=IntelliJ%20IDEA%20%E2%80%93%20kolorki%20%2B%20szablon%20do%20testow" title="Google Reader" rel="nofollow" target="_blank"><img src="http://agilesurfing.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fagilesurfing.pl%2F2011%2Fprogramowanie%2Fintellij-idea-kolorki-szablon-do-testow%2F&amp;title=IntelliJ%20IDEA%20%E2%80%93%20kolorki%20%2B%20szablon%20do%20testow" id="wpa2a_20">Daj znać innym</a></p>]]></content:encoded>
			<wfw:commentRss>http://agilesurfing.pl/2011/programowanie/intellij-idea-kolorki-szablon-do-testow/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

