-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy patharchitecture_for_developers.html
executable file
·345 lines (275 loc) · 13.7 KB
/
architecture_for_developers.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Architecture For Developers</title>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/>
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
<link rel="stylesheet" href="reveal.js/css/reveal.css">
<!--<link rel="stylesheet" href="reveal.js/css/theme/white.css" id="theme">-->
<!--<link rel="stylesheet" href="reveal.js/css/theme/black.css" id="theme">-->
<!--<link rel="stylesheet" href="reveal.js/css/theme/night.css" id="theme">-->
<link rel="stylesheet" href="reveal.js/css/theme/simple.css" id="theme">
<!-- Code syntax highlighting -->
<link rel="stylesheet" href="reveal.js/lib/css/zenburn.css">
<style>
/*pre code {*/
/*display: block;*/
/*padding: 0.5em;*/
/*background: #FFFFFF !important;*/
/*color: #000000 !important;*/
/*}*/
.right-img {
margin-left: 10px !important;
float: right;
height: 500px;
}
.todo:before {
content: 'TODO: ';
}
.todo {
color: red !important;
}
</style>
<!-- Printing and PDF exports -->
<script>
var link = document.createElement('link');
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match(/print-pdf/gi) ? 'reveal.js/css/print/pdf.css' : 'reveal.js/css/print/paper.css';
document.getElementsByTagName('head')[0].appendChild(link);
</script>
<!--[if lt IE 9]>
<script src="reveal.js/lib/js/html5shiv.js"></script>
<![endif]-->
</head>
<body>
<div class="reveal">
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
<section class="todo">
<h2>What is Programming?</h2>
<pre>
- https://github.com/joaomilho/what-is-programming-curry-on
</pre>
</section>
<section class="todo">
<pre>
Titel: Architektur für Softwareentwickler
Untertitel: Eine kritische Auseinandersetzung mit Architektur, geschrieben für Entwickler von einem Entwickler.
Alternativer Untertitel: Was solltest du als Entwickler eigentlich über Architektur wissen?
Abstract: Jeder Entwickler macht Architektur-Arbeit und ist im Einflussbereich von Architektur-Entscheidungen. Oft passiert das gar nicht bewusst, sondern nur “irgendwie”. Dabei muss es die Rolle eines Architekten gar nicht geben. In diesem Buch wird aus der Perspektive eines Entwicklers beschreiben, was Architektur ausmacht und wie man sich als Entwickler bewusster damit auseinander setzen kann.
Zielpublikum: Entwickler, die sich (schon länger) fragen, was Architekten so machen.
Umfang: schnell & kompakt, 10-20 Abbildungen schwarz/weiß, evtl. auch Pocket-Format
Stil: So knapp wie möglich, 0% Gelaber. Wenn man etwas nicht klar ausdrücken kann, weglassen.
Gliederung in Kapiteln
Einleitung
Was ist Architektur denn überhaupt?
Ist Architektur ein Anti-Pattern?
Design oder Architektur?
Ist UML Architektur?
Wie trifft man Architektur-Entscheidungen?
Beispiele aus der Praxis
Einfluss der Unternehmensgröße auf Architekturarbeit (Alternative/Untertitel: Was ist in Deinem Projekt Architektur?)
Je nach Unternehmensgröße stellt sich Architekturarbeit unterschiedlich dar. In großen Unternehmen gibt es oft eine explizite Architekten-Rolle oder sogar eine Architektur-Abteilung. In kleinen Unternehmen gibt es häufig gar keine bewusste Vorstellung davon, dass überhaupt Architektur-Arbeit passiert. Für den Entwickler leiten sich daraus unterschiedliche Herausforderungen ab. Dieses Kapitel zeigt die Möglichkeiten, wie Architektur in diesen unterschiedlichen Projekten festgehalten wird.
Architektur im kleinen Unternehmen/Architektur im Code
Woran merkt man, dass man gerade Architekturarbeit macht?
Wie macht man Architekturarbeit im kleinen?
Architektur im mittelgroßen Unternehmen/Architektur am Flipchart/in der Gruppe
Eine gemeinsame Architektur-Vision
Passt die Architektur zu den Anforderungen?
Entscheidung nach Prinzip
Architektur im großen Unternehmen/Architektur vordefiniert in Word
Wie sieht eure Architektur aus?
In welchem Rahmen kannst du dich bewegen?
Was tust du, wenn du diesen Rahmen verlassen willst/musst?
Architektur- und Design-Prinzipien: Worauf muss man bei der Architektur-Arbeit achten?
Wir werden konkreter. Was sollte man eigentlich genauer betrachten? Hier verschwimmen die Grenzen zwischen Architektur und Design.
Bist du Producer/Maintainer oder Kunde einer Architektur?
Projekt-Arbeit vs Produkt-Entwicklung
Unterschiedliche Qualitätsansprüche
Ist Copy&Paste böse? Kohäsion vs Loose Kopplung: Was gehört zusammen?
KISS, YAGNI, SOLID, Liskov
Open/Closed-Prinzip
‘Easy things should be easy, hard things possible’ (Kay)
‘Abstractions leak. Deal with it’ (Zeigermann)
Domain-Driven-Design
Architektur-Stile
Welche Architekturen-Ansätze sind weit verbreitet, wie sehen diese aus und wo wendet man sie an? Was kann die Entscheidung für einen Stil beeinflussen? Wo sollte man aufpassen? Hier wird es greifbarer und auch ein wenig amüsant.
Monolith
Schichten
Microservices
SOA
Model-Observer
Flux
Treiber für Architekturen
Consultant-Diven-Architecture
Resumee-Driven-Architecture
Hype-Driven-Architecture
Book-Driven-Architecture (Gierke)
Company-Driven-Architekture (Conway)
Agil vs Architektur
In diesem Kapitel wird das Spannungsfeld zwischen agiler Entwicklung und Architektur beleuchtet. Scrum schließt sogar explizite Rollen, wie die eines Architekten, aus. Wer macht dann die Architektur-Arbeit?
‘In einem Unternehmen in dem es Architekten gibt fange ich gar nicht erst an!’ oder ‘Braucht man einen Architekten?’
Rollenverständnis bei Scrum
Wie viel Architektur braucht man am Anfang?
Big Design Upfront vs Iterative Architektur
Sacrificial Architecture
Micro vs Macro-Architektur (Zweistufige Architektur-Ansätze)
Anforderungen und Architektur
In diesem eher trockenen aber gerade deswegen sehr notwendigen Kapitel sprechen wir über Qualitätsmerkmale und nicht-funktionale Anforderungen an eine Architektur. Wie kommt man an diese Anforderungen? Wer kann sie einem sagen? Wie weist man auf Konflikte und Risiken hin?
Warum sind Anforderungen wichtig?
Qualitätsmerkmale nach ISO/IEC 9126
Stakeholder identifizieren
Wie nimmt man Anforderungen auf?
Stories
Vision
Konflikte zwischen Anforderungen
Risiken identifizieren
Wie wird dokumentiert
Software-Entwicklung für Architekten
In diesem abschließenden Kapitel drehen wir den Spieß noch einmal um und fragen uns, was man eigentlich über Software-Entwicklung wissen muss, um Architektur-Arbeit machen zu können. Diese Fragestellung wird noch spannender in Unternehmen, in denen es die Architekten-Rolle explizit gibt und die Architekten keinen Code mehr schreiben.
Warum Bewertungsmatrixen bei komplexen Problemen nicht taugen
Sollte ein Architekt programmieren können?
Sollte ein Architekt tatsächlich programmieren?
Wie man gut mit Entwicklern zusammenarbeiten kann
</pre>
</section>
<section class="todo">
<h2>Postmodern Programming</h2>
<pre>
- http://martinfowler.com/bliki/PostModernProgramming.html
- http://www.mcs.vuw.ac.nz/comp/Publications/CS-TR-02-9.abs.html
- https://twitter.com/DJCordhose/status/754969095024631812
- https://twitter.com/DJCordhose/status/754967032177823744
</pre>
</section>
<section>
<h2>Agile vs Architecture</h2>
<pre>
- "Large companies trying to be Agile remind me of middle aged men buying sports cars": http://allankelly.blogspot.it/2015/10/large-companies-and-fast-cars.html
</pre>
</section>
<section class="todo">
<h1>After this Point just German material to exploit</h1>
</section>
<section>
<h1>Architektur für Entwickler</h1>
<h3>Was man als Entwickler über Architektur wissen sollte</h3>
<h4>oder</h4>
<h3>Der Entwickler als Architekt</h3>
<p>
<small><a href="http://zeigermann.eu">Oliver Zeigermann</a> / <a href="http://twitter.com/djcordhose">@DJCordhose</a>
</small>
</p>
</section>
<section>
<h2>Inhalte</h2>
<ul>
<li>Meta: Was ist denn überhaupt Architektur?
<li>Meta: Welche Teile des Systems brauchen eine architektonische Betrachtung?
<li>Nach Prinzip entscheiden
<li>Anforderungen erkennen
</ul>
</section>
<section>
<h2>Meta: Welche Teile des Systems brauchen eine architektonische Betrachtung?</h2>
<p>Was sind denn die wichtigsten Fragen?</p>
<p>Woran erkennt man die wichtigsten Fragen</p>
<p>Man kann ja nicht alles im Detail klären.</p>
</section>
<section>
<h4>Beispiel: Was kann eine Architektur-Entscheidung sein?</h4>
<div><small>
<p class="fragment">Aufgabe: Nummeriere die Zeilen eines Listings mit Zeilennummern im Browser</p>
<p class="fragment">Entscheidung: CSS-Counter können das (https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Lists_and_Counters/Using_CSS_counters), also wird das mit CSS gemacht</p>
<p class="fragment">DAS ist Architektur?</p>
<p class="fragment">Neue Anforderung: Man soll am code-Element angeben können, mit welcher Zeilennummer die Nummerierung beginnt (für Fortsetzungen)</p>
<p class="fragment">CSS kann so etwas aus einem Daten-Attribut holen: https://developer.mozilla.org/de/docs/Web/Guide/HTML/Using_data_attributes</p>
<p class="fragment">Leider kann man das nicht für Counter nehmen, weil die Numbers brauchen, die Konvertierung von String-Attribut mach Number ist zwar spezifiziert, aber wird von keinem Browser unterstützt: https://developer.mozilla.org/en/docs/Web/CSS/attr</p>
<p class="fragment">Hier geht es also nicht weiter, das war also eine wichtige Entscheidung ()</p>
</small></div>
</section>
<section>
<h2>Nach Prinzip entscheiden</h2>
<p>Nicht alle Fragen immer wieder neu klären</p>
<p>Einheitliche Entscheidungen fördern</p>
</section>
<section>
<h2>Anforderungen erkennen</h2>
<p>Häufig sind Problem und Lösung oder Anforderung und Umsetzung vermischt.</p>
<p>Das erschwert klare und nachvollziehbare Entscheidungen.</p>
<p>Beides sollte klar getrennt werden</p>
<p>Häufig gar nicht so leicht zu erreichen</p>
</section>
<section>
<h2>Beispiel 1</h2>
<p class="fragment">"Die Anwendung soll als App realisiert werden"</p>
<p class="fragment">Das ist keine Anforderung, das ist eine Lösung. Was könnte die
eigentliche Anforderung sein?</p>
<p class="fragment">User Experience, Offline fähigkeit, Anwendung durch einen Klick sofort verfügbar</p>
</section>
<section>
<h2>Beispiel 2</h2>
<p class="fragment">"System X soll in Zukunft losgelöst von System Y funktionieren"</p>
<p class="fragment">Was könnte hier gemeint sein?</p>
<p class="fragment">Hier ist wohl nicht alles kopieren gemeint. Eher: es soll keine
unnatürliche Kopplung der Systeme geben. Teile, die zusammen gehören
sollen weiterhin in einer Codebasis sein.</p>
<p class="fragment">Koherenz ist gewünscht</p>
<p class="fragment">Enge Kopplung der Systeme ist nicht gewünscht</p>
</section>
<section>
<div class="todo">
<p>https://en.wikiquote.org/wiki/Alan_Kay</p>
<p>Simple things should be simple, complex things should be possible. (Alan Kay)</p>
<p>Beispiel Code line numbers mit attributen (von oben), welche API ist gut?</p>
<p>Dabei meine API angucken, die in im ruhr.js Machine-Learning-Talk ist</p>
</div>
</section>
</div>
</div>
<script src="reveal.js/lib/js/head.min.js"></script>
<script src="reveal.js/js/reveal.js"></script>
<script>
// Full list of configuration options available at:
// https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
transition: 'slide', // none/fade/slide/convex/concave/zoom
// Optional reveal.js plugins
dependencies: [
{
src: 'reveal.js/lib/js/classList.js', condition: function () {
return !document.body.classList;
}
},
{
src: 'reveal.js/plugin/markdown/marked.js', condition: function () {
return !!document.querySelector('[data-markdown]');
}
},
{
src: 'reveal.js/plugin/markdown/markdown.js', condition: function () {
return !!document.querySelector('[data-markdown]');
}
},
{
src: 'reveal.js/plugin/highlight/highlight.js', async: true, condition: function () {
return !!document.querySelector('pre code');
}, callback: function () {
hljs.initHighlightingOnLoad();
}
},
{src: 'reveal.js/plugin/zoom-js/zoom.js', async: true},
{src: 'reveal.js/plugin/notes/notes.js', async: true}
]
});
</script>
</body>
</html>