Simple Code
-
Upload
rui-carvalho -
Category
Technology
-
view
419 -
download
2
description
Transcript of Simple Code
![Page 2: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/2.jpg)
2
I’m Agile, Should I care?
![Page 3: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/3.jpg)
3
Agile Cats
![Page 4: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/4.jpg)
4
follow XP rules
Agile Cats
![Page 5: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/5.jpg)
5
Complexity is Everywhere
![Page 6: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/6.jpg)
6
Complexity is Everywhere
and making things simple is hard!
![Page 7: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/7.jpg)
7
The Domain Complexity
![Page 8: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/8.jpg)
Customer needs ‘Foo’
8
![Page 9: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/9.jpg)
…You think schema ‘Bar’
9
![Page 10: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/10.jpg)
Wrong models cause massive accidental complexity
Greg Young10
![Page 11: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/11.jpg)
11
Solving the wrong problem
![Page 12: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/12.jpg)
12
« It should go faster ! »
![Page 13: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/13.jpg)
13
Change the Engine, problem solved!
![Page 14: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/14.jpg)
14
Hidden Technical Complexity
![Page 15: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/15.jpg)
15
Frameworks?
![Page 16: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/16.jpg)
16
![Page 17: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/17.jpg)
17
![Page 18: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/18.jpg)
18
How big ?
![Page 19: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/19.jpg)
19
Config > Domain
![Page 20: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/20.jpg)
A framework …
= calls you20
![Page 21: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/21.jpg)
21
You
Call
the Library
![Page 22: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/22.jpg)
all that matters!
Bad Understanding Poor design No design
Technology locking
22
} Generates Complexity !
![Page 23: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/23.jpg)
23
Technical debt is watching you!
![Page 24: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/24.jpg)
24
![Page 25: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/25.jpg)
25
Start simplicity now before it blows you!
![Page 26: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/26.jpg)
26
How to start ?
![Page 27: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/27.jpg)
27
Remember Agile Principles?
![Page 28: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/28.jpg)
the 4 XP Simplicity Rules
• Runs all the tests.• Expresses every idea that we need to express.• Says everything Once And Only Once.• Has no superfluous parts.
28Kent Beck
![Page 29: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/29.jpg)
the 4 elements of Simple design
• Passes its tests• Minimizes duplication• Maximizes clarity• Has fewer elements
29
![Page 30: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/30.jpg)
2 final rules
Developing strong skills of detecting duplication, removing duplication,
identifying naming problems, and fixing naming problems equates to learning
everything ever written about object-oriented
30
JbRains
![Page 31: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/31.jpg)
31
Simple Design Dynamo
(c) jbrains 2013
![Page 32: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/32.jpg)
32
What else ?
![Page 33: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/33.jpg)
Better Naming
Iterate & refactor 33
Remove Duplication
![Page 34: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/34.jpg)
What problem are trying to solve?
Always!34
![Page 35: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/35.jpg)
Avoid coupling
everywhere, from classes to libraries
35
![Page 36: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/36.jpg)
Be Consistent
Readability, Rules, Conventions36
![Page 37: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/37.jpg)
Be functional!
Be declarative, Immutable, use lambdas
37
![Page 38: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/38.jpg)
Practice !
Practice, Practice, Practice ! …
38
![Page 39: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/39.jpg)
Get more Fun
39
![Page 40: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/40.jpg)
All you need…http://c2.com/cgi/wiki?
ExtremeProgrammingRoadmap
40
http://blog.thecodewhisperer.com/2013/12/07/putting-an-age-old-battle-to-rest/
Simple Design Dynamo
![Page 41: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/41.jpg)
Hand written sketches are by me and can be reused under Creative Commons licence, other images are owned by their authors and I really
would like to thank them if I found all credits …41
@rhwy
![Page 42: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/42.jpg)
42
Add-on:
lambda refactoring
![Page 43: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/43.jpg)
43The Silence of the Lambas
![Page 44: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/44.jpg)
44
interface IPriceCalculator {double GetPrice(string productReference)
}class Basket {
IPriceCalculator calculator;public Basket(IPriceCalculator calculator) {
this.calculator = calculator;}public Result AddProduct(
Product product, int quantity) {Price = calculator.GetPrice(product.Reference);//other magic here
}}
![Page 45: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/45.jpg)
45
class UserPriceCalculator : IPriceCalculator{
public double GetPrice(string productReference){ //do some magic stuff here
return price;}
}
var basket = new Basket(new UserPriceCalculator());basket.AddProduct(theProduct, 2);
![Page 46: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/46.jpg)
46
class Basket {public Result AddProduct(
Product product, int quantity,Func<string,double> calculator) {
Price = calculator(product.Reference);//other magic
}}
var basket = new Basket();basket.AddProduct(theProduct, 2, x=>x.rawPrice*0,85 );
![Page 47: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/47.jpg)
47
Add-on:
More quotes
![Page 48: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/48.jpg)
There is no good
but some of them are useful
48
{ Model | Architecture | persistance }
![Page 49: Simple Code](https://reader035.fdocuments.net/reader035/viewer/2022062313/557d60ded8b42aba3d8b503a/html5/thumbnails/49.jpg)
49
“Templates, patterns, frameworks don’t solve anything”
they are just tools to start faster