Archiwa tagu: uczenie

Test-Driven Development na MIMUWie

W semestrze zimowym 2010/2011 miałem przyjemność prowadzić zajęcia z Test-Driven Development na MIMUWie (Wydziale Matematyki, Informatyki i Mechaniki Uniwersytetu Warszawskiego). W ramach przedmiotu Języki i Narzędzia Programowania grupa 15 studentów poznawała i ćwiczyła tworzenie oprogramowania sterowane testami. Tematyka zahaczała również o bliskie TDD zagadnienia, jak refaktoryzacja, zasady projektowania obiektowego, Mock Objects.

Nie słyszałem, żeby ktoś wcześniej w Polsce prowadził zajęcia akademickie w całości poświęcone TDD. Co sprawia, że czuję się pionierem na tym polu. Owszem, jest pan Lech Madeyski z Uniwersytetu Wrocławskiego, który badał TDD w sposób naukowy i opublikował potężne opracowanie na ten temat, ale to jednak co innego niż nauczanie.

Jakim doświadczeniem były dla mnie te zajęcia? Bardzo pozytywnym, pozwalającym wiele się nauczyć.

Dużo frajdy sprawiło mi uczenie studentów, którzy szybko łapali o co chodzi. I zadawali celne, nieraz trudne pytania.

Przekonałem się, że w prowadzeniu zajęć akademickich ogromnym kosztem jest przygotowanie. Zjada o wiele więcej czasu niż oczekiwałem. Owszem, wcześniej prowadziłem szkolenia z TDD, miałem prezentacje na ten temat. Stwierdziłem jednak, że format cotygodniowych 1,5-godzinnych zajęć wymaga innego rozłożenia tematów. Chciałem też sprawdzić nowe pomysły na przygotowywanie prezentacji. Z paru rzeczy jestem zadowolony. Prezentacje są dostępne publicznie, więc zobaczcie sami.

Trudno nauczyć TDD bez ćwiczenia. Dlatego też podczas zajęć wprowadzałem elementy warsztatowe. Najczęściej w formie kodowania w parach. Były także pokazy i Prime Factors Kata na początku.

Zaliczenie też było praktyczne.

Część pierwsza to wykonanie małego projektu za pomocą TDD w domu i prezentacja powstałego kodu na zajęciach. Dzięki temu mogliśmy obejrzeć kod, ocenić, zrefaktoryzować coś na gorąco. Myślę, że dzięki temu uczestnicy mogli się zorientować, na co warto zwracać uwagę przy pisaniu kodu (unikanie duplikacji, dobre nazwy). Być może też dla niektórych było to przełamanie oporu przed publiczną prezentacją swojego kodu (a podczas pracy zawodowej nasz kod będą ciągle oglądać i oceniać inni, zwłaszcza w Agile’owych zespołach praktykujących współwłasność kodu).

W celu uzyskania wymarzonej pozytywnej oceny każdy student miał za zadanie przygotować jeszcze dwa screencasty. Jeden z nich, krótki, ilustrujący jakieś omówione na zadaniach zagadnienie, miał być formą wprawki. Drugi, dłuższy, to nagranie rozwiązania jakiegoś zadania programistycznego za pomocą TDD. Miał na celu zaprezentowanie warsztatu, jaki udało się w trakcie zajęć wypracować.

Ponieważ pozwoliłem obydwa screencasty oddawać do końca semestru, część osób nagrywała dwa naraz. Zatem celu ze screencastową wprawką nie udało mi się zrealizować. Cóż, następnym razem będę wiedział lepiej.

Nie udało mi się znaleźć w internecie screencastów TDD po polsku. Pomyślałem więc, że być może studenci zechcieliby się podzielić swoją pracą, udostępniając ją publicznie. Rzeczywiście, wielu z nich się zgodziło. Część screencastów zaprezentuję zatem na tym blogu w najbliższym czasie.

Trudne momenty? Poza bolesnym (bo niezwykle czasochłonnym) przygotowywaniem zajęć, trudne było dla mnie małe natężenie feedbacku. Ponieważ prowadziłem takie zajęcia po raz pierwszy i mówiłem o istotności informacji zwrotnych w przypadku TDD, postanowiłem prosić uczestników o takowe na poziomie zajęć. Trochę ich dostałem, skorzystałem z nich, ale miałem ochotę na jeszcze więcej. Może pomyślę nad inną formą (teraz była to ankieta google docs).

Ciężko było też zmieścić w tak krótkim czasie satysfakcjonującą mnie ilość zajęć warsztatowych. Może trzeba zrobić cały przedmiot za 4 ECTSy z wykładem i ćwiczeniami? 🙂

Mam nadzieję, że jeśli ktoś z moich studentów zdecyduje się pracować w zespole wytwarzającym oprogramowanie, to uczestnictwo w zajęciach z TDD będzie miało wpływ na to, jak będzie pracował. Może dzięki temu będzie nieco więcej czystego kodu na tym świecie 🙂