Wprowadzenie do JUGademy

Adam Dudczak / @maneo

Politechnika Poznańska, Poznań, 01.03.2017



Czym jest JUGademy?

Otwarte

Bezpłatne

Spotkania w czasie których dzielimy się wiedzą

O czym trzeba pamiętać?

  • Spotykamy się co trzy tygodnie
  • Informacja o spotkaniu na meetupie Poznań JUG
  • Na każdym spotkaniu minimum 2 wykłady/warsztaty
  • Lista tematów znajduje się tutaj

O czym trzeba nie pamiętać?

  • Po każdym spotkaniu poprosimy o feedback dla prelegentów
  • Jeżeli szukasz informacji o tym z czego się uczyć, zajrzyj na listę mailingową JUG Poznań

Kilka rzeczy

o których nie było na studiach

Adam Dudczak / @maneo

Politechnika Poznańska, Poznań, 01.03.2017



Who am I?

Legacy code

Source code inherited from someone else and source code inherited from an older version of the software.

Przed tym nie uciekniesz

Na 90% - traficie do projektu w którym będziecie mieli do czynienia z kodem odziedziczonym.


  • Na studiach na 90% nie będzie pracy z takim kodem.

Dlaczego to jest istotne?

Każdy kod staje się prędzej czy później kodem odziedziczonym

To tylko prototyp...

"Prowizorka jest jednym z najtrwalszych stanów materii"


Wyniki twojej pracy zawsze mogą stać się podstawą czegoś większego, wbrew temu co mówi klient/szef.


Gdy kod ma być dalej rozwijany kluczowe są: czytelność, spójność i... testy.


Artist or Craftsman?

"The Railway Crossing", Fernand Léger

Pisanie kodu to chyba jednak nie to samo co sztuka

Czy raczej dziennikarz?

Nikt nie patrzy w kod

Dla klienta liczy się funkcjonalność! (dla klienta tak)

Software Craftsmanship!
Etos programisty w praktyce.

So, what about this Legacy code?

Code review - bardzo pomaga!


Wytyczanie granic i tworzenie fasad dla starego systemu


Tworzenie tzw. testów uczących/eksploracyjnych.

So, what about this Legacy code?

Tak naprawde nie ma czegoś takiego jak "legacy code" ;-)


Jeżeli coś przynosi kasę, to jest po prostu kod z którym musimy pracować.


A jeżeli nie przynosi -- to trzeba go zaorać!

Testy automatyczne?

Testy automatyczne?


Nigdy nie robiłem tego na studiach - nikt tego nie wymagał!


Dodatkowa robota, za którą nikt nie daje lepszych ocen


"Przecież i tak nic nie będe robił z tym kodem"


Test Driven Development

There have been lots of controversial blogs and articles written about TDD over the years and there still are. In the early days they were serious attempts at critique and understanding. Nowadays, however, they are just rants. The bottom line is that TDD works, and everybody needs to get over it

Robert Martin, "Clean Coder"

TDD cycle

Source: http://www.javacodegeeks.com

Benefits of TDD

Lista korzyści z książki "Clean coder", Roberta Martina

  1. Pewność, że działa i będzie działać
  2. Szybki feedback dla programisty
  3. Redukcja liczby błędów
  4. Testy to najlepsza dokumentacja
  5. TDD pozwala na projektowanie przejrzystych API

How to start with TDD?

@mfloryan: TDD is a bit like chess, it's easy to learn the moves but that doesn't win you a game.

Source: http://longstreet.typepad.com/

How to start with TDD?


Kiedy nie stosowac TDD?

Nie atakuj dwóch problemów naraz.

On the other hand...

I get paid for code that works, not for tests, so my philosophy is to test as little as possible to reach a given level of confidence

Kent Beck


Testy to narzędzie dla nas, niekoniecznie dla klienta

3rd party Libraries/Frameworks

Source: http://www.testically.org/

External dependencies

  1. W większości projektów pojawiają się prędzej czy później zewnętrzne zależności.
  2. Wybór szkieletu aplikacyjnego dla nowego projektu


Jak wybrać dobrze?

Good 3rd party libs

  1. Jest dokumentacja
  2. Jest dostęp do źródeł
  3. Duża aktywność w projekcie
  4. Tylko jeden commiter
  5. src/test/java nie jest puste
  6. Jasno określona licencja (uwaga na GPL!)

Przydatne zasoby

Stack overflow - http://stackoverflow.com/

Przydatne zasoby (2)

Spotkania techniczne i konferencje - http://www.jug.poznan.pl/

Zanim wybierzesz

  • Uwaga na marketing produktów programistycznych!
  • Uwaga na zbyt świeże rzeczy
  • Uwaga na conference-driven development
  • Obojętnie czego byś nie wybrał zawsze będą problemy ;-)

Tools are not enough


  • Rozwiązywanie problemów
    • zagadki logiczne, konkursy programistyczne
  • Wiedza na temat algorytmów, złożoności
Co ręka fachowca, to nie torba narzędzi

Tomasz Jacyków

The root of all evil

Aa... Uciekajcie programiści nadchodzą użytkownicy!!!!

Let's meet users

Warto pamiętać, że soft robimy dla użytkowników

"Ja myślałem, że po to żeby przećwiczyć wykorzystanie Technologii X" ;-)

Soft powinien rozwiązywać problemy użytkowników

A nie tworzyć nowe

Let's meet users (2)

Oczywista prawda jest jednak taka, że użytkownicy nie zawsze wiedzą czego chcą


Więc trzeba z nimi rozmawiać (często)


Komunikacja z użytkownikiem i gotowość do dokonywania zmian to jedne z podstaw rewolucji Agile

But it is not ready!?!

"Zanim pokaże to użytkownikom, musze poprawić jeszcze to .... i to .... Jak mogę pokazać to użytkownikom, skoro nie jest jeszcze gotowe?"


If you're not embarrassed by the first version of product you've launched, you've launched too late

Reid Hoffman w książce "Launch Pad"

The Minimum Viable Product is that version of a new product which allows a team to collect the maximum amount of validated learning about customers with the least effort.

Eric Reis w książce "Lean Startup"


You cannot control what you cannot measure

Tom DeMarco w książce "Mythical Man-Month"

Measure everything!

Source: blog.vessel.io

Praktyka

Krótkie interacje i częste kontakty z użytkownikami/klientem


Zbieranie obiektywnych statystyk o wykorzystaniu określonych funkcji (validated learning)

Team

@viktorklang:"Real winners don't compete – they collaborate."

Why we work in teams?

Dlaczego? Bo to o wiele fajniejsze niż praca w pojedynkę

"Umiem pracować w grupie, ale wolę sam"


Given enough eyeballs, all bugs are shallow

Linus's Law

Why we work in teams? (2)

Jakiego wsparcia mogą Ci udzielić koledzy/koleżanki?


Wysłuchać i posłużyć parą oczu

code reviews, programowanie parami

Pomóc w szacowaniu

Jak poker to tylko planistyczne ;-)

Sharpening the saw

Source: http://www.improvementprograms.com/

Books worth reading - Java

Books worth reading - Craft

Books worth reading - Products

Spotkania i konferencje

A single conversation with a wise man is better than ten years of study.

Chinese proverb

Spotkania user groups



Komplet aktywnych znajdziesz na meetup.com ;-)

Konferencje

Konferencje



I wiele, wiele innych
Devoxx, Polyconf, Berlin Buzzwords, InfoShare, 4Developers, JDD....

Koniec

Dziękuję za uwagę.



adam (at) dudczak.info / @maneo

"Think for yourself and question authority" ;-)

23-24 marca 2017

Braincode Hackathon

http://allegro.tech/braincode/