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.
24. 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();
26. 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!"
27. 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);
}
}
}
}
28. 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);
}
}
}
}
31. Code is niet vanzelfsprekend
Is het weloverwogen en doelbewust
geschreven?
32. 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)
38. 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/
44. 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
48. Verbeter jezelf
•Learn software development
•Learn how to solve problems
•Learn how to be a coach
•Teach!
Always remain curious, authentic and creative!
50. 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