SlideShare a Scribd company logo
1 of 50
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 lopende band met
99% betrouwbaarheid/zekerheid.
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 option!
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 exposed to.”
Kathy Sierra
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);
}
a.forEach(function (e) {
document.write(e + e);
});
Voorbeeld: Moeilijk te vinden
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 Clear();
bool Remove(T item);
(…)
}
Abstracties
Voorbeeld: Kan specifieker (3)
public interface ICollection<T>
{
int Count { get; }
void Add(T item);
void Clear();
bool Remove(T item);
(…)
}
Abstracties
•Investeer tijd in het abstraheren van code.
Refactor!
De weg naar flexibeler code die op de toekomst in
voorbereid!
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+C
function DoA() {}
function DoB() {}
function DoC() {}
DoA();
DoB();
DoC();
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;
change(b);
document.write(a.test); // result: "No longer hola!"
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);
}
}
}
}
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);
}
}
}
}
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
• Methode = functie + state
• Overerving = type + type
• Imperatieve loops = wat + hoe
• Frameworks = jouw code + framework (mogelijk)
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. rechtstreekse aanroepen
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
•Informatietheorie: Entropie = 0
Genereer tests
public static int Negate(int value)
{
return -value;
}
Voorbeeld
// Int.MaxValue = 2147483647;
// Int.MinValue = -2147483648;
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/
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 wat de dynamiek van software
development is
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 curious, authentic and creative!
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
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

More Related Content

Similar to Niet onderhoudbare software in 10 makkelijke stappen

Techdays 2012 - Better code through reviews and tools
Techdays 2012 - Better code through reviews and toolsTechdays 2012 - Better code through reviews and tools
Techdays 2012 - Better code through reviews and toolsJesse Houwing
 
Projectpaas drupaljam 2013 rotterdam
Projectpaas drupaljam 2013 rotterdamProjectpaas drupaljam 2013 rotterdam
Projectpaas drupaljam 2013 rotterdamBert Boerland
 
Workshop BI/DWH AGILE TESTING Zwitserleven Dutch
Workshop BI/DWH AGILE TESTING Zwitserleven DutchWorkshop BI/DWH AGILE TESTING Zwitserleven Dutch
Workshop BI/DWH AGILE TESTING Zwitserleven DutchMarcus Drost
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Developmentroelofr
 
Devnology Community Day
Devnology Community DayDevnology Community Day
Devnology Community Dayboonzaai
 
Hoe releasen minder pijnlijk werd bij de ANWB Alarmcentrale
Hoe releasen minder pijnlijk werd bij de ANWB AlarmcentraleHoe releasen minder pijnlijk werd bij de ANWB Alarmcentrale
Hoe releasen minder pijnlijk werd bij de ANWB AlarmcentraleSjoerd Hemminga
 
Enterprise Architectuur - terug naar de essentie
Enterprise Architectuur - terug naar de essentieEnterprise Architectuur - terug naar de essentie
Enterprise Architectuur - terug naar de essentieDanny Greefhorst
 
DIWUG February 2020 - Microsoft Teams & Governance
DIWUG February 2020 - Microsoft Teams & GovernanceDIWUG February 2020 - Microsoft Teams & Governance
DIWUG February 2020 - Microsoft Teams & GovernanceJasper Oosterveld
 
2016 11-15 - nvrb - software betrouwbaarheid
2016 11-15 - nvrb - software betrouwbaarheid2016 11-15 - nvrb - software betrouwbaarheid
2016 11-15 - nvrb - software betrouwbaarheidJaap van Ekris
 
Application lifecycle management wat betekent dat nou eigenlijk
Application lifecycle management wat betekent dat nou eigenlijkApplication lifecycle management wat betekent dat nou eigenlijk
Application lifecycle management wat betekent dat nou eigenlijkHenk Beekhuis
 
Verbeter uw conversie en ux dankzij usability onderzoek
Verbeter uw conversie en ux dankzij usability onderzoekVerbeter uw conversie en ux dankzij usability onderzoek
Verbeter uw conversie en ux dankzij usability onderzoekvalantic NL
 
embedded Linux, van Black Tot QA
embedded Linux, van Black Tot QAembedded Linux, van Black Tot QA
embedded Linux, van Black Tot QAAlbert Mietus
 
Robot framework en ci v2
Robot framework en ci v2Robot framework en ci v2
Robot framework en ci v2christiantester
 
Agile software ontwikkeling met continuous delivery
Agile software ontwikkeling met continuous deliveryAgile software ontwikkeling met continuous delivery
Agile software ontwikkeling met continuous deliveryWillem Meints
 
WordPress plugin development
WordPress plugin developmentWordPress plugin development
WordPress plugin developmentLuc De Brouwer
 
Complexe e-commerce concepten op basis van open source
Complexe e-commerce concepten op basis van open sourceComplexe e-commerce concepten op basis van open source
Complexe e-commerce concepten op basis van open sourcewebwinkelvakdag
 
Past het testvak nog in de nieuwe IT-wereld?
Past het testvak nog in de nieuwe IT-wereld?Past het testvak nog in de nieuwe IT-wereld?
Past het testvak nog in de nieuwe IT-wereld?Rik Marselis
 

Similar to Niet onderhoudbare software in 10 makkelijke stappen (20)

Techdays 2012 - Better code through reviews and tools
Techdays 2012 - Better code through reviews and toolsTechdays 2012 - Better code through reviews and tools
Techdays 2012 - Better code through reviews and tools
 
Projectpaas drupaljam 2013 rotterdam
Projectpaas drupaljam 2013 rotterdamProjectpaas drupaljam 2013 rotterdam
Projectpaas drupaljam 2013 rotterdam
 
Workshop BI/DWH AGILE TESTING Zwitserleven Dutch
Workshop BI/DWH AGILE TESTING Zwitserleven DutchWorkshop BI/DWH AGILE TESTING Zwitserleven Dutch
Workshop BI/DWH AGILE TESTING Zwitserleven Dutch
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
DevOps presentatie
DevOps presentatieDevOps presentatie
DevOps presentatie
 
Devnology Community Day
Devnology Community DayDevnology Community Day
Devnology Community Day
 
Hoe releasen minder pijnlijk werd bij de ANWB Alarmcentrale
Hoe releasen minder pijnlijk werd bij de ANWB AlarmcentraleHoe releasen minder pijnlijk werd bij de ANWB Alarmcentrale
Hoe releasen minder pijnlijk werd bij de ANWB Alarmcentrale
 
Enterprise Architectuur - terug naar de essentie
Enterprise Architectuur - terug naar de essentieEnterprise Architectuur - terug naar de essentie
Enterprise Architectuur - terug naar de essentie
 
Drupal Ncrv
Drupal NcrvDrupal Ncrv
Drupal Ncrv
 
DIWUG February 2020 - Microsoft Teams & Governance
DIWUG February 2020 - Microsoft Teams & GovernanceDIWUG February 2020 - Microsoft Teams & Governance
DIWUG February 2020 - Microsoft Teams & Governance
 
Veilig programmeren intro
Veilig programmeren introVeilig programmeren intro
Veilig programmeren intro
 
2016 11-15 - nvrb - software betrouwbaarheid
2016 11-15 - nvrb - software betrouwbaarheid2016 11-15 - nvrb - software betrouwbaarheid
2016 11-15 - nvrb - software betrouwbaarheid
 
Application lifecycle management wat betekent dat nou eigenlijk
Application lifecycle management wat betekent dat nou eigenlijkApplication lifecycle management wat betekent dat nou eigenlijk
Application lifecycle management wat betekent dat nou eigenlijk
 
Verbeter uw conversie en ux dankzij usability onderzoek
Verbeter uw conversie en ux dankzij usability onderzoekVerbeter uw conversie en ux dankzij usability onderzoek
Verbeter uw conversie en ux dankzij usability onderzoek
 
embedded Linux, van Black Tot QA
embedded Linux, van Black Tot QAembedded Linux, van Black Tot QA
embedded Linux, van Black Tot QA
 
Robot framework en ci v2
Robot framework en ci v2Robot framework en ci v2
Robot framework en ci v2
 
Agile software ontwikkeling met continuous delivery
Agile software ontwikkeling met continuous deliveryAgile software ontwikkeling met continuous delivery
Agile software ontwikkeling met continuous delivery
 
WordPress plugin development
WordPress plugin developmentWordPress plugin development
WordPress plugin development
 
Complexe e-commerce concepten op basis van open source
Complexe e-commerce concepten op basis van open sourceComplexe e-commerce concepten op basis van open source
Complexe e-commerce concepten op basis van open source
 
Past het testvak nog in de nieuwe IT-wereld?
Past het testvak nog in de nieuwe IT-wereld?Past het testvak nog in de nieuwe IT-wereld?
Past het testvak nog in de nieuwe IT-wereld?
 

More from Rick Beerendonk

JavaScript 2016 for C# Developers
JavaScript 2016 for C# DevelopersJavaScript 2016 for C# Developers
JavaScript 2016 for C# DevelopersRick Beerendonk
 
Perform like an Olympian
Perform like an OlympianPerform like an Olympian
Perform like an OlympianRick Beerendonk
 
JavaScript innovaties: ECMAScript 6 & 7
JavaScript innovaties: ECMAScript 6 & 7JavaScript innovaties: ECMAScript 6 & 7
JavaScript innovaties: ECMAScript 6 & 7Rick Beerendonk
 
C# - Raise the bar with functional & immutable constructs (Dutch)
C# - Raise the bar with functional & immutable constructs (Dutch)C# - Raise the bar with functional & immutable constructs (Dutch)
C# - Raise the bar with functional & immutable constructs (Dutch)Rick Beerendonk
 
ReactJS.NET - Fast and Scalable Single Page Applications
ReactJS.NET - Fast and Scalable Single Page ApplicationsReactJS.NET - Fast and Scalable Single Page Applications
ReactJS.NET - Fast and Scalable Single Page ApplicationsRick Beerendonk
 
ReactJS maakt het web eenvoudig
ReactJS maakt het web eenvoudigReactJS maakt het web eenvoudig
ReactJS maakt het web eenvoudigRick Beerendonk
 

More from Rick Beerendonk (6)

JavaScript 2016 for C# Developers
JavaScript 2016 for C# DevelopersJavaScript 2016 for C# Developers
JavaScript 2016 for C# Developers
 
Perform like an Olympian
Perform like an OlympianPerform like an Olympian
Perform like an Olympian
 
JavaScript innovaties: ECMAScript 6 & 7
JavaScript innovaties: ECMAScript 6 & 7JavaScript innovaties: ECMAScript 6 & 7
JavaScript innovaties: ECMAScript 6 & 7
 
C# - Raise the bar with functional & immutable constructs (Dutch)
C# - Raise the bar with functional & immutable constructs (Dutch)C# - Raise the bar with functional & immutable constructs (Dutch)
C# - Raise the bar with functional & immutable constructs (Dutch)
 
ReactJS.NET - Fast and Scalable Single Page Applications
ReactJS.NET - Fast and Scalable Single Page ApplicationsReactJS.NET - Fast and Scalable Single Page Applications
ReactJS.NET - Fast and Scalable Single Page Applications
 
ReactJS maakt het web eenvoudig
ReactJS maakt het web eenvoudigReactJS maakt het web eenvoudig
ReactJS maakt het web eenvoudig
 

Niet onderhoudbare software in 10 makkelijke stappen

Editor's Notes

  1. Yardsvs Meters. Fahrenheit vs Celsius.