Niet onderhoudbare
software in 10
makkelijke stappen
Rick Beerendonk (NForza)
@rickbeerendonk
rick@nforza.nl
Wat is
ononderhoudbaar?
We zijn niet voorbereid op deze situatie
Waarom is
onderhoudbare
software belangrijk?
Onderhoudbaar
==
Productief
Maximaliseer bezettingsgraad.
Planning
Maximaliseer bezettingsgraad.
Beperk queue-size!
Software Development is geen lopen...
Maximaliseer bezettingsgraad
Wachtrij calculator
M/M/1 wachtrij
Afstemming
Wetenschap neemt een vlucht zodra gekozen
wordt voor standaard namen een eenheden.
Naamgeving
•Beschrijf wat het doet
•Uitspreekbaar
•Zoekbaar
Code layout
•Kies er één
Limit yourself!
Exchange current flexibility for future flexibility.
Real Options
1. Options have value
2. Options expire
3. Never commit early unless you know why
Technical Debt is a sold op...
Design patterns
Houden opties open
“We know brains are brilliant
at detecting patterns. So we
should be reeeeeallly careful
about the patterns we
were/are ex...
Abstracties
Hoe specifieker de interface hoe generieker het
gebruik
Abstracties
•Zelfde namen
•Zelfde layout
•Zelfde volgorde
•Single Responsibility
Hoe te herkennen?
Abstracties
var a = [1, 2, 3, 4, 5, 6];
for (var i = 0; i < a.length; i++) {
var double = 2 * a[i]; document.write(double)...
Abstracties
Voorbeeld: Kan specifieker (1)
public interface IEnumerable<out T>
{
IEnumerator<T> GetEnumerator();
}
Abstracties
Voorbeeld: Kan specifieker (2)
public interface ICollection<T>
{
int Count { get; }
void Add(T item);
void Cle...
Abstracties
Voorbeeld: Kan specifieker (3)
public interface ICollection<T>
{
int Count { get; }
void Add(T item);
void Cle...
Abstracties
•Investeer tijd in het abstraheren van code.
Refactor!
De weg naar flexibeler code die op de toekomst in
voorb...
Makkelijk
Geriefelijk, geen inspanning kostend
(geen leercurve, snelle installatie, bekend)
Subjectief
Eenvoudig
Één rol, taak, concept of dimensie
Objectief
Simple vs Easy
Easy: A+B+C
function DoAll() {
DoA code;
DoB code;
DoC code;
}
DoAll();
Simple:
A, B, C, A+B, A+C, B+C, A+B...
Immutable state
OO o o o…
Feiten veranderen niet. Waarom wel in onze
software?
Is mutable state eenvoudig?
function change(obj) {
obj.test = "No longer hola!";
}
var a = { test: "hola"};
var b = a;
cha...
Mutable example
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
nam...
Immutable example
using System;
using System.Collections.Generic;
using System.Collections.Immutable; // NuGet: Microsoft ...
Mutable state
•Copy strategy
•Locking strategy
•Thread safe objects
•One big fat DB query
“70ies problems solutions”
Neem niks aan
Blijf zelf nadenken
Code is niet vanzelfsprekend
Is het weloverwogen en doelbewust
geschreven?
Eenvoudig?
• State = waarde + tijd (zie “var”)
• Alles wat state aanraakt wordt verbonden
• Object = state + identiteit
• ...
Separation of
Concerns
Maakt redeneren over code mogelijk.
Limiteert de dingen die je moet onthouden.
Verkleint de scope.
Separation of Concerns
•Gebruik modules
•Minimaliseer Coupling
•Gebruik Dependency Injection
•Gebruik Queues i.p.v. rechts...
Tests
Compileert het?
Start het programma op?
Werkt het zoals bedoeld?
Unit tests
•Hebben waarde tijdens wijzigen van code
•Kosten veel tijd om te schrijven
•Bemoeilijken refactoring
•Informati...
Genereer tests
public static int Negate(int value)
{
return -value;
}
Voorbeeld
// Int.MaxValue = 2147483647;
// Int.MinVa...
Not enough
• Unit testing isn’t enough. You need static typing too.
• Static typing isn’t enough. You need contracts too.
...
Reviews
Bugs vroeg onderkennen.
Verbeteren van design.
Bevorderen samenwerking.
Reviews
•Formeel of informeel
•Laat de ontwikkelaar de code uitleggen
•Wees aardig
Hoe?
Automatiseer
Builds
Deployments
Continues Integration
Team
Hou ‘t klein.
Opt-in, intrinsieke motivatie.
Gedrag, accepteer falen.
"Productivity is a
by-product of
feeling good"
Daniel Mezick
Team & de buitenwereld
•Heb duidelijke grenzen en bewaak ze
•Geef snelle feedback
•Wees eerlijk en voorspelbaar
•Leg uit w...
Coaching
Coach
•Slechte coach: Verbetert resultaat
•Middelmatige coach: Verbetert oorzaak
•Goede coach: Verbetert de pupil
Coaching
•Ask (listen), don’t tell
•Richt je op mensen, niet op taken
•Laat mensen zichzelf coachen en verbeteren
Verbeter jezelf
•Learn software development
•Learn how to solve problems
•Learn how to be a coach
•Teach!
Always remain cu...
Aanpassers
Flexibele mensen zijn het best voorbereid op de
toekomst.
Kick out de betweters.
Laat ons weten wat u vindt van deze sessie! Vul de evaluatie
in via www.techdaysapp.nl en maak kans op een van de 20
prijz...
Niet onderhoudbare software in 10 makkelijke stappen
Upcoming SlideShare
Loading in …5
×

Niet onderhoudbare software in 10 makkelijke stappen

673 views

Published on

Ontwikkelde software eindigt vaker dan ons lief is in moeilijk te onderhouden code en een minder productieve organisatie. Ondanks goede intenties blijken simpele wensen moeilijker te implementeren dan nodig. Er ontstaan meer problemen dan verwacht. In het begin ging het allemaal nog zo snel, makkelijk en foutloos. Waar ging het mis? In deze sessie gaan we die vraag beantwoorden door onderscheid te maken tussen wat makkelijk lijkt en wat eenvoudig is. We behandelen bewezen technieken alsmede veelbelovende ontwikkelingen. Uiteraard kijken we verder dan het coderen, want software ontwikkeling blijft mensenwerk.

Published in: Software
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
673
On SlideShare
0
From Embeds
0
Number of Embeds
60
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Yardsvs Meters. Fahrenheit vs Celsius.
  • Niet onderhoudbare software in 10 makkelijke stappen

    1. 1. Niet onderhoudbare software in 10 makkelijke stappen Rick Beerendonk (NForza) @rickbeerendonk rick@nforza.nl
    2. 2. Wat is ononderhoudbaar? We zijn niet voorbereid op deze situatie
    3. 3. Waarom is onderhoudbare software belangrijk?
    4. 4. Onderhoudbaar == Productief
    5. 5. Maximaliseer bezettingsgraad. Planning Maximaliseer bezettingsgraad. Beperk queue-size! Software Development is geen lopende band met 99% betrouwbaarheid/zekerheid.
    6. 6. Maximaliseer bezettingsgraad Wachtrij calculator M/M/1 wachtrij
    7. 7. Afstemming Wetenschap neemt een vlucht zodra gekozen wordt voor standaard namen een eenheden.
    8. 8. Naamgeving •Beschrijf wat het doet •Uitspreekbaar •Zoekbaar
    9. 9. Code layout •Kies er één
    10. 10. Limit yourself! Exchange current flexibility for future flexibility.
    11. 11. Real Options 1. Options have value 2. Options expire 3. Never commit early unless you know why Technical Debt is a sold option!
    12. 12. Design patterns Houden opties open
    13. 13. “We know brains are brilliant at detecting patterns. So we should be reeeeeallly careful about the patterns we were/are exposed to.” Kathy Sierra
    14. 14. Abstracties Hoe specifieker de interface hoe generieker het gebruik
    15. 15. Abstracties •Zelfde namen •Zelfde layout •Zelfde volgorde •Single Responsibility Hoe te herkennen?
    16. 16. Abstracties var a = [1, 2, 3, 4, 5, 6]; for (var i = 0; i < a.length; i++) { var double = 2 * a[i]; document.write(double); } a.forEach(function (e) { document.write(e + e); }); Voorbeeld: Moeilijk te vinden
    17. 17. Abstracties Voorbeeld: Kan specifieker (1) public interface IEnumerable<out T> { IEnumerator<T> GetEnumerator(); }
    18. 18. Abstracties Voorbeeld: Kan specifieker (2) public interface ICollection<T> { int Count { get; } void Add(T item); void Clear(); bool Remove(T item); (…) }
    19. 19. Abstracties Voorbeeld: Kan specifieker (3) public interface ICollection<T> { int Count { get; } void Add(T item); void Clear(); bool Remove(T item); (…) }
    20. 20. Abstracties •Investeer tijd in het abstraheren van code. Refactor! De weg naar flexibeler code die op de toekomst in voorbereid!
    21. 21. Makkelijk Geriefelijk, geen inspanning kostend (geen leercurve, snelle installatie, bekend) Subjectief
    22. 22. Eenvoudig Één rol, taak, concept of dimensie Objectief
    23. 23. Simple vs Easy Easy: A+B+C function DoAll() { DoA code; DoB code; DoC code; } DoAll(); Simple: A, B, C, A+B, A+C, B+C, A+B+C function DoA() {} function DoB() {} function DoC() {} DoA(); DoB(); DoC();
    24. 24. Immutable state OO o o o… Feiten veranderen niet. Waarom wel in onze software?
    25. 25. Is mutable state eenvoudig? function change(obj) { obj.test = "No longer hola!"; } var a = { test: "hola"}; var b = a; change(b); document.write(a.test); // result: "No longer hola!"
    26. 26. Mutable example using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; namespace MutableApp { class Program { static void Main(string[] args) { ICollection<string> nforza = new List<string> { "Ronald", "Thomas", "Esther", "Hendrika" }; int nforza2012Count = nforza.Count(); IEnumerable<string> nforza2012 = nforza; //.ToList(); nforza.Add("Rick"); Console.WriteLine(nforza2012Count); foreach (var item in nforza2012) { Console.WriteLine(item); } } } }
    27. 27. Immutable example using System; using System.Collections.Generic; using System.Collections.Immutable; // NuGet: Microsoft Immutable Collections using System.Linq; namespace ImmutableApp { class Program { static void Main(string[] args) { IImmutableList<string> nforza = ImmutableList.Create<string>("Ronald", "Thomas", "Esther", "Hendrika"); int nforza2012Count = nforza.Count(); IEnumerable<string> nforza2012 = nforza; nforza = nforza.Add("Rick"); Console.WriteLine(nforza2012Count); foreach (var item in nforza2012) { Console.WriteLine(item); } } } }
    28. 28. Mutable state •Copy strategy •Locking strategy •Thread safe objects •One big fat DB query “70ies problems solutions”
    29. 29. Neem niks aan Blijf zelf nadenken
    30. 30. Code is niet vanzelfsprekend Is het weloverwogen en doelbewust geschreven?
    31. 31. Eenvoudig? • State = waarde + tijd (zie “var”) • Alles wat state aanraakt wordt verbonden • Object = state + identiteit • Methode = functie + state • Overerving = type + type • Imperatieve loops = wat + hoe • Frameworks = jouw code + framework (mogelijk)
    32. 32. Separation of Concerns Maakt redeneren over code mogelijk. Limiteert de dingen die je moet onthouden. Verkleint de scope.
    33. 33. Separation of Concerns •Gebruik modules •Minimaliseer Coupling •Gebruik Dependency Injection •Gebruik Queues i.p.v. rechtstreekse aanroepen
    34. 34. Tests Compileert het? Start het programma op? Werkt het zoals bedoeld?
    35. 35. Unit tests •Hebben waarde tijdens wijzigen van code •Kosten veel tijd om te schrijven •Bemoeilijken refactoring •Informatietheorie: Entropie = 0
    36. 36. Genereer tests public static int Negate(int value) { return -value; } Voorbeeld // Int.MaxValue = 2147483647; // Int.MinValue = -2147483648;
    37. 37. Not enough • Unit testing isn’t enough. You need static typing too. • Static typing isn’t enough. You need contracts too. • Contracts are not enough. You need generative testing too. • Generative testing is not enough. You need simulation testing too. • Simulation testing is not enough. You need fuzzing too. • Fuzzing is not enough. You need luck too. • Luck is not enough. You need user testing too. In software development, no one thing will save your ass Bron: http://blog.fogus.me/2012/06/20/not-enough/
    38. 38. Reviews Bugs vroeg onderkennen. Verbeteren van design. Bevorderen samenwerking.
    39. 39. Reviews •Formeel of informeel •Laat de ontwikkelaar de code uitleggen •Wees aardig Hoe?
    40. 40. Automatiseer Builds Deployments Continues Integration
    41. 41. Team Hou ‘t klein. Opt-in, intrinsieke motivatie. Gedrag, accepteer falen.
    42. 42. "Productivity is a by-product of feeling good" Daniel Mezick
    43. 43. Team & de buitenwereld •Heb duidelijke grenzen en bewaak ze •Geef snelle feedback •Wees eerlijk en voorspelbaar •Leg uit wat de dynamiek van software development is
    44. 44. Coaching
    45. 45. Coach •Slechte coach: Verbetert resultaat •Middelmatige coach: Verbetert oorzaak •Goede coach: Verbetert de pupil
    46. 46. Coaching •Ask (listen), don’t tell •Richt je op mensen, niet op taken •Laat mensen zichzelf coachen en verbeteren
    47. 47. Verbeter jezelf •Learn software development •Learn how to solve problems •Learn how to be a coach •Teach! Always remain curious, authentic and creative!
    48. 48. Aanpassers Flexibele mensen zijn het best voorbereid op de toekomst. Kick out de betweters.
    49. 49. Laat ons weten wat u vindt van deze sessie! Vul de evaluatie in via www.techdaysapp.nl en maak kans op een van de 20 prijzen*. Prijswinnaars worden bekend gemaakt via Twitter (#TechDaysNL). Gebruik hiervoor de code op uw badge. Let us know how you feel about this session! Give your feedback via www.techdaysapp.nl and possibly win one of the 20 prizes*. Winners will be announced via Twitter (#TechDaysNL). Use your personal code on your badge. * Over de uitslag kan niet worden gecorrespondeerd, prijzen zijn voorbeelden – All results are final, prizes are examples

    ×