-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
executable file
·242 lines (242 loc) · 10.8 KB
/
index.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
<!DOCTYPE doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>
Clean Code
</title>
<meta content="A framework for easily creating beautiful presentations using HTML" name="description">
<meta content="Hakim El Hattab" name="author">
<meta content="yes" name="apple-mobile-web-app-capable"/>
<meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"/>
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui" name="viewport">
<link href="css/reveal.css" rel="stylesheet">
<link href="css/theme/league.css" id="theme" rel="stylesheet">
<!-- Code syntax highlighting -->
<link href="lib/css/zenburn.css" rel="stylesheet">
<!-- 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 ) ? 'css/print/pdf.css' : 'css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<style type="text/css">
</style>
<!--[if lt IE 9]>
<script src="lib/js/html5shiv.js"></script>
<![endif]-->
</link>
</link>
</link>
</meta>
</meta>
</meta>
</meta>
</head>
<body>
<div class="reveal">
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
<!-- Home Page -->
<section>
<h1>
Clean Code
</h1>
<aside class="notes">
课程的回顾,本次的内容
程序的两个消费者,计算机和人,机器对代码的clean程度没要求,只有作为代码的作者和维护者的人才提出了clean code要求
机器可以使用无法理解的命名,深层嵌套
</aside>
</section>
<section>
<p>
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
</p>
<image src="images/mf.jpg" width="150px"/>
<aside class="notes">
所以,当我们要给出clean code定义的时候,我们一般会有两个角度:
可读性,也即是容易理解
修改的难以程度(可维护性、可扩展性),也就是添加新功能是的难易程度
</aside>
</section>
<section>
<image src="images/read_write_ratio.jpg" width="1200px"/>
</section>
<section>
<image src="images/coc_clean_code.png" width="900px"/>
</section>
<section>
<p>
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
</p>
<p>
- Martin Golding
</p>
<aside class="notes">
同team的人在对这一段垃圾代码咆哮的时候,
完了又git blame时,
写代码不知关乎项目,还可能关乎人身安全
如何写clean code? 一些大家都了解的,比如magic number, duplication, small method, small class
这里列了几个high level的guideline
</aside>
</section>
<section>
<h3>
General Guideline
</h3>
<ul>
<li>
Follow Standard Conventions
</li>
<li>
Keep It Simple and Stupid
</li>
<li>
Boy Scout Rule(童子军规则)
</li>
<li>
Root Cause Analysis
</li>
</ul>
</section>
<section>
<section>
<h3>
Follow Standard Conventions
</h3>
<ul>
<li>Architecture Styles</li>
<li>Design Patterns</li>
<li>Analysis Patterns</li>
<li>Languge Conventions</li>
<li>...</li>
</ul>
<aside class="notes">
模式的定义
</aside>
</section>
<section>
<h3>
Lambda Architecture - example 1
</h3>
<image src="images/lambda_architecture.png" width="1200px"/>
</section>
<section>
<h3>
MVC based folder structure - example 2
</h3>
<image src="images/mvc_rails.png" style="float:right" width="300px"/>
<image src="images/mvc_aspnet.jpg" style="float:left" width="300px"/>
</section>
<section>
<h3>
Role Based Access Control - example 3
</h3>
<ul>
<li>
Authentication
</li>
<li>
Authorization
</li>
<li>
User
</li>
<li>
Group
</li>
<li>
Role
</li>
<li>
Permission
</li>
</ul>
</section>
</section>
<section>
<section>
<h3>
Keep It Simple and Stupid
</h3>
</section>
<section>
<image src="images/simplicity.jpg"/>
</section>
<section>
<ul>
<li>Use Intention-Revealing Names</li>
<li>Small method/class</li>
<li>No nested control structure</li>
<li>Avoid double negative</li>
<li>Limit number of parameters to a method</li>
<li>Command Query Separation</li>
<li>Do one thing</li>
<li>...</li>
</ul>
</section>
</section>
<section>
<section>
<h3>
Boy Scout Rule(童子军规则)
</h3>
<ul>
<li>
Always leave the campground cleaner than you found it.
</li>
<li>
让营地比你刚来时更干净。
</li>
</ul>
</section>
<section>
<image src="images/coc_clean_code.png" width="800px"/>
</section>
</section>
<section>
<h3>
Root Cause Analysis
</h3>
</section>
<section>
<h3>Books</h3>
<image src="images/art_of_readable_code.jpg" style="float:left" height="400px"/>
<image src="images/clean_code_book.png" style="float:right" height="400px"/>
</section>
<section>
<h1>
Thanks
</h1>
</section>
</div>
</div>
<script src="lib/js/head.min.js">
</script>
<script src="js/reveal.js">
</script>
<script>
// Full list of configuration options available at:
// https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
showNotes: true,
progress: true,
history: true,
center: true,
transition: 'slide', // none/fade/slide/convex/concave/zoom
// Optional reveal.js plugins
dependencies: [
{ src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'plugin/highlight/highlight.js', async: true, condition: function() { return !!document.querySelector( 'pre code' ); }, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: 'plugin/zoom-js/zoom.js', async: true },
{ src: 'plugin/notes/notes.js', async: true }
]
});
</script>
</body>
</html>