Avoid lines longer than 80 characters

No Gravatar

En del av Oracles kodkonvention är idag, 2013, denna:

Avoid lines longer than 80 characters, since they’re not handled well by many terminals and tools.

Jag är mycket kritisk till denna begränsning. Jag möter väldigt få skärmar som inte kan visa åtminstone 120 tecken per rad. I min mening ligger logiken på höjden och därför vill man se så mycket på höjden som möjligt i meningen: radbryt inte för att koden skall se vacker ut om man skulle skriva ut den på papper. Jag ser oftast kod som att varje rad har ett syfte, en uppgift. När en uppgift börjar ta upp 7-8 rader pga en kodkonvention från 1990-talet så känns det som en suboptimering.

Jag skickade nyligen följande mail (ett utdrag), som svar till förslaget “låt oss köra på Eclipse standardformatering, den är ju ändå standard”.

Radbredd påverkar läsning, och som
välbekant sitter vi och läser kod mån-
ga gånger fler än vi sitter och skriver.
Därför är det intressant att hitta den
modell som de flesta är bekväma
med – så att man får så få överrask-
ningar som möjligt i det dagliga
arbetet.

Mer intressant vore det att införa
en riktlinje i antal rader per metod,
och per klass, och se hur påverkar
läsbarheten och hur underhållsvän-
lig koden blir!

Övningar på dessa lite svårare frågor -
frågor som kan bli “religiösa” och på-
verka teamkänsla uppåt och nedåt -
är något jag kört de senaste två åren
med 9 andra bolag, men inte XXX.

Software Craftmanship handlar om:
* det är människor som läser källkod
* den stora flaskhalsen är inte pre-
standa i form av CPU- och minnesåt-
gång (XYZ undantaget) – de flesta
kämpar med att få ut mer features
ur sina projekttimmar. För att lyckas
med detta behövs inte bättre algo-
ritmer, det behövs bättre arbetssätt
inom team. Se därför till att optime-
ra de mänskliga aktiviteterna, såsom
minska kodlästid genom bättre
namngivning, mindre klumpar kod
och så få överraskningar som möj-
ligt (vilket ju blir per team).

Så, nu har jag delgett några tankar
och visat hur annorlunda det är att
begränsa radbredd på ett så snävt
sätt som Eclipse built-in code form-
atter gör. Jag hoppas detta upp-
fattas lagom rebelliskt. :-)

Med omtanke om människan, och
därmed organisationen,

Fredrik

Det finns en hög med brasklappar man kan slänga ut här (merge-scenario t ex), men avstår för att inte föregå en eventuell diskussion.

Spaning från konferensen SDC.

No Gravatar

Agila team är mer inne än någonsin och mer norm än undantag. Men det pratas inte så mycket SCRUM utan det är en mix av SCRUM, Lean och XP där det gäller att hitta sin egen implementation för framgång. När det gäller att få delarna i företagen utanför utvecklingsteamen med på det agila spåret så börjar det hända en hel del, men många har fortfarande samma problem som tidigare. Maktstrukturer rubbas och ansvarsområden förändras när team och projekt skall ta egna beslut. Men det är en livsnödvändig förändring för de företag som vill hänga med i den allt snabbare utvecklings- och förändringstakt som är på marknaden.
En talare sa att dagens stora komplexa system kräver att man jobbar i grupp för att kunna lösa uppgifter tillsammans, en hjärna räcker helt enkelt inte till för att tänka ut ett helt system, och det är de som kan utnyttja dynamiken och kreativiteten i teamen bäst som är vinnarna.

Nyckelbegrepp att fördjupa sig i:

  • Små agila team som är sjävvalda, självgående och väljer sina egna uppgifter ur backloggen.
  • Satsa på hög utvecklingstakt, så kommer teamen själva att vilja effektivisera arbetet.
  • Tänk alltid; Användaren i fokus! Jobba med UX.
    Ingen har råd att bygga något användarna inte vill ha!
  • Test ofta
  • Satsa på kontinuerliga releaser hela vägen till slutanvändarna, då följer automatisk en satsning på “Continuous Integration” och kvalité.

 

En samling med collection

No Gravatar

Jämför

HashMap<K,ArrayList<V>> things = new HashMap<K,ArrayList<V>>();
private void add(K key, V thing) {
  ArrayList<V> thingsForKey = things.get(key);
  if (!things.containsKey(key)) {
    thingsForKey = new ArrayList<V>();
    things.put(key, thingsForKey);
  }
  thingsForKey.add(thing);
}

med
HashMap<K,ArrayList<V>> things = new HashMap<K,ArrayList<V>>();
private void add_New_Style(K key, V thing) {
  if (!things.containsKey(key)) {
    things.put(key, new ArrayList<V>());
  }
  things.get(key).add(thing);
}

Den första varianten ser man ofta, och jag har själv använt den. Häromdagen upptäckte en kollega och jag att vi, utan att tänka på det, skrivit variant 2. (Vi arbetade testdrivet just där). Snyggare och enklare tycker jag. Ingen stor skillnad iofs, men ändå.

Återkoppling från en Coding Dojo

No Gravatar

Det är otroligt kul och inspirerande att se Coding Dojos tas emot så väl ute bland de företag jag besöker. Att det är väl mottaget bland utvecklare är uppenbart och kan bl a förklaras med “Code wins arguments”. I “gamla” inkörda team där diskussioner gått i stå och nötts länge kan helt plötsligt helt ny dynamik uppstå. De “gamla” argumenten som gått fram och tillbaka men bara varit abstrakta och teoretiska skall helt plötsligt omsättas i kod, med/inför kollegorna och “helt plötsligt” går det från abstrakt till konkret och inte bara fåtalet engagerar sig och har en uppfattning, utan flertalet.

De Coding Dojos jag driver hos kunder är just detta – praktiska övningar med ett mål eller en poäng. Ingen föreläsningsserie man sitter och nickar igenom och sedan släpper vind för våg. Med riktiga övningar, där alla deltar och skriver kod själva ökar deltagandet, engagemanget och det kritiska granskandet.

Eftersom det ofta uppstår diskussioner med uttryck som “jag brukar göra såhär”, “oj, så har jag aldrig gjort, eller tänkt” så är det viktigt att det inte finns lönesättande chef(er) på plats. Om deltagarna är rädda för att säga fel och börjar väga sin ord så försvinner en stor poäng med dojon. Jag försöker få alla att vara spontana med hur de tänker, att exponera hur de jobbar utanför dojon så att de kan få konstruktiv feedback på sitt arbetssätt. Lönesättande chef och/eller beställer behöver givetvis återkoppling också. Här följer ett exempel från förra veckan.

Hej Kund!

Efter lite hackiga, trevande steg med första övningen tyckte jag mig se en enorm skillnad till tillfälle två. Det märks att flera utvecklare försökt sig på det vi övade i vardagen! Jag tror mig se att så gott som alla utvecklare har fått en ny infallsvinkel till hur de ser på sin kodskrivning och den synen utvecklade vi med en mer realistisk övning ihop med mockning. Det var mycket bra frågor som dök upp, vilket tyder på att de är engagerade, intresserade, verkligen försöker anamma en annan kodordning och har en sund kritisk inställning till vad de gör själva (det är ju inte jag som skriver koden under övningen – jag bara guidar och ger tips)!

Övning 1:

Vi tog en enkel basövning (String calculator).
Vi introducerade red-green-refactor, Arrange/Act/Assert, bottom-up.
Vi tog baby steps bokstavligen med 1 minut som tidkrav att gå från röd till grön.
Vi såg triangulering som ett sätt att driva fram funktionalitet.
Grå zon: “täcker testen all funktionalitet? om inte, har vi använt test-driven utveckling?”

Övning 2:

Vi tog in en ny, ganska stor uppgift som är mycket mer realistisk (tagen från produktionskod).
Vi lade på ett nytt moment/tanke i form av en “testbacklog”. (Verkade vara en ny idé – diskuterade VAB-scenariot och vikten av att kunna dela kod ofta.)
Vi lade på mockning med Mockito. (En del var redan bekanta med Mockito.)
Grå zon: “ett par antydningar till att ändra kod utan att testen uttrycker den funktionella ändringen i koden”.
Vi refaktorerade kod lite oortodoxt (utan test, utan undo/bortkommentering).

Det var mycket motiverande för min del att se utvecklingen i teamet, det var en helt annan “mognad” i TDD-tänket och ett bra driv/bra dialoger. Parprogrammeringen såg bitvis fullständigt klanderfri ut – mycket kul att se! Nästan all kod drevs fram från test (två, tre tillfällen fanns antydan till att skriva kod som inte var testdriven/täckt av test).

Utvärderingen i slutet bjöd mer på kod- och designdiskussioner (jag vill aldrig avbryta sådant) så vi hann inte “utvärdera” så mycket, men på tavlan skrev jag upp:

+ bra frågor
+ bra övning
! refactoring gjorde koden mycket mer läsbar
! smidigt med @Mock
? Använda TestNG nästa gång

Mitt förslag är att vi nästa gång utvecklar i flera par parallellt (en dator per par med Eclipse är vad som behövs), lägger på Clean Code-aspekter och använder samma uppgift och ser hur vi kan få koden att se ut på olika sätt.

Squeed bjuder på mat och kompetens till CV:t

No Gravatar

Att behärska testdriven utveckling (TDD) och clean code, och att kunna skriva med det i CV:t och visa på praktiska kunskaper – det ökar krasst anställningsbarheten på de flesta studenter (och redan anställda) med en rejäl faktor. En tydlig “anledning” till att företag ute på marknaden köper in Coding Dojo-hjälp från Squeed är just att för få utvecklare faktiskt vet hur man skriver kod som blir möjlig att underhålla och leva med. Kass kod = kasst projekt och ännu sämre kod = ännu sämre möjlighet att rädda projekten. En annan faktor är givetvis det ännu mer kortsiktiga i att buggar som upptäcks tidigt är många gånger billigare att upptäcka och rätta än de som upptäcks senare i kedjan. Att ha utvecklare som jobbar testdrivet är helt enkelt ett sätt att få ned totalkostnaden.

Att kunna skriva bra kod är alltså alltför sällsynt och därför väldigt attraktivt. Detta tycker vi på Squeed är hemskt synd. För att motverka detta anordnar vi bl a Javaforum och nforum (nästa gång 24 november), håller i den öppna Coding Dojon JDojo@Gbg utöver att vi givetvis erbjuder professionell hjälp (konsulting).

Nyligen besökte vi dessutom DatE-IT och låter nu 16 studenter få ta del av detta kompetenspaket (plus mat). Utöver detta har Squeed också försökt få in fler kvalitativa utvecklare på banan genom att gå som lärare på KYH:s Agile Web Developer-utbildning och lägga grunden för deras utveckling.

Bidra till communityn?

Ja, vi tror att vi bidrar till branschen och communityn i Göteborg på detta sätt. Vi tror att det är ett sätt inte bara stötta de enskilda individer som går/får utbildning, utan även att det höjer ribban i branschen. Om du har idéer på andra saker vi kan eller bör göra tas detta emot med varm hand.

JavaForum 2011Q2

Igår var det JavaForum 2011Q2 som denna gång hölls på Ullevi Konferenscenter – en lokal jag tyckte funkade mycket bra. Jag hade anmält mig som talare på ämnet Clean Code med förhoppning om att få till lite diskussion – det är ändå inget jättenytt eller kontroversiellt ämne.

Jag hade 30 minuter och använde 21 av dem till att agitera med presentationen nedan. Övriga 9 minuter höll jag tyst bäst jag kunde för att få lite diskussion och det gick – det var olika deltagare som ställde frågor och svarade. Ett par småskratt och målet med kvällen nåddes.

Kanske kommer någon in och betygar min prestation på Speakerrate?

Finns också som PDF.