Mercurial > docs > unix-phil
comparison unix-phil-slides.ms @ 24:2335f5658fca
added poster and slides
author | meillo@marmaro.de |
---|---|
date | Fri, 05 Mar 2010 23:56:48 +0100 |
parents | |
children | e6ac51dc18bf |
comparison
equal
deleted
inserted
replaced
23:f0511a56416e | 24:2335f5658fca |
---|---|
1 .TL | |
2 \fR\s-6Why\s0\fP | |
3 .br | |
4 the Unix Philosophy | |
5 .br | |
6 .vs -4 | |
7 \fR\s-6(still) matters\s0\fP | |
8 .AU | |
9 .ft R | |
10 .sp 1.2i | |
11 .ps 11 | |
12 markus schnalke <meillo@marmaro.de> | |
13 | |
14 | |
15 .S "goals of this talk | |
16 .I | |
17 introduce the Unix Phil | |
18 .I | |
19 explain why most modern software is crap | |
20 .I | |
21 explain why the Unix Phil leads to better software | |
22 .I | |
23 convince you that good software is of matter | |
24 .sp 2 | |
25 .I | |
26 make you think | |
27 | |
28 | |
29 .S "roadmap | |
30 .I | |
31 Historical background | |
32 .I | |
33 What is the Unix Philosophy? | |
34 .I | |
35 The Unix Phil after Gancarz | |
36 .I | |
37 Discussion on real world examples | |
38 .I | |
39 The Unix Phil is more than software dev guidelines | |
40 | |
41 | |
42 | |
43 .S "me and the UP | |
44 .LP | |
45 first contact: through the suckless project | |
46 .LP | |
47 ``cat -v Considered Harmful'' | |
48 .LP | |
49 ``The Unix and the Echo'' | |
50 .LP | |
51 ``The Unix Programming Environment'' | |
52 .sp 1 | |
53 .LP | |
54 better understanding through digging in the past | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 .P "historical background | |
61 | |
62 | |
63 | |
64 | |
65 .S "historical background | |
66 .I | |
67 the late 60s and early 70s | |
68 .I | |
69 operating systems are complex | |
70 .I | |
71 MULTICS just failed | |
72 .I | |
73 Brooks' ``The Mythical Man-Month'' | |
74 .I | |
75 a lot of different hardware | |
76 .I | |
77 limited computing power | |
78 .I | |
79 textual input and output (line printers) | |
80 | |
81 | |
82 .S "everything is a file | |
83 .LP | |
84 is the(?) basic concept in Unix (and even more in Plan9) | |
85 .LP | |
86 made simple operating systems possible | |
87 .LP | |
88 it is not covered by the Unix Phil; the Unix Phil is on a different level | |
89 .sp 2 | |
90 .LP | |
91 Unix is mainly two things: | |
92 .I | |
93 an operating system (system calls) | |
94 .I | |
95 a toolchest (coreutils) | |
96 | |
97 | |
98 | |
99 .P "What is the Unix Phil | |
100 | |
101 | |
102 | |
103 .S "What is the Unix Phil *itself*? | |
104 .LP | |
105 ``The Unix philosophy is a set of cultural norms and philosophical | |
106 approaches to developing software based on the experience of | |
107 leading developers of the Unix operating system.'' | |
108 (wikipedia) | |
109 .sp 2 | |
110 .LP | |
111 How the inventors of Unix write software. | |
112 .LP | |
113 Common things of classic Unix tools. | |
114 .sp 2 | |
115 .LP | |
116 difficult to define | |
117 | |
118 | |
119 .S "Unix Phil vs. SW dev processes | |
120 .LP | |
121 the Unix Phil | |
122 .I | |
123 much: *what* to program | |
124 .I | |
125 few: *how* to program | |
126 | |
127 .LP | |
128 Software developments processes: | |
129 .I | |
130 few: *what* to program | |
131 .I | |
132 much: *how* to program | |
133 | |
134 .sp 2 | |
135 .LP | |
136 Extreme Programming is like the Unix Phil | |
137 but with more *how* than *what*, | |
138 and with formalisms | |
139 | |
140 | |
141 | |
142 | |
143 | |
144 .S "What is the Unix Phil? | |
145 .I | |
146 Doug McIlroy (1978) | |
147 .I | |
148 Mike Gancarz: ``The Unix Philosophy'' (1994) | |
149 .I | |
150 Eric S. Raymond: ``The Art of Unix Programming'' (2003) | |
151 .sp 2 | |
152 .I | |
153 Richard Gabriel: ``Worse is Better'' (1989) | |
154 | |
155 | |
156 .S "Doug McIlroy | |
157 .LP | |
158 This is the Unix philosophy: | |
159 .I | |
160 Write programs that do one thing and do it well. | |
161 .I | |
162 Write programs to work together. | |
163 .I | |
164 Write programs to handle text streams, because that is a universal interface. | |
165 | |
166 | |
167 .S "Mike Gancarz: ``The Unix Philosophy'' | |
168 .I | |
169 Small is beautiful. | |
170 .I | |
171 Make each program do one thing well. | |
172 .I | |
173 Build a prototype as soon as possible. | |
174 .I | |
175 Choose portability over efficiency. | |
176 .I | |
177 Store data in flat text files. | |
178 .I | |
179 Use software leverage to your advantage. | |
180 .I | |
181 Use shell scripts to increase leverage and portability. | |
182 .I | |
183 Avoid captive user interfaces. | |
184 .I | |
185 Make every program a filter. | |
186 .sp 1 | |
187 .LP | |
188 plus ten lesser tenets | |
189 | |
190 | |
191 | |
192 | |
193 .P "The Unix Phil after Gancarz | |
194 | |
195 .S "Small is beautiful. | |
196 .LP | |
197 foo | |
198 | |
199 | |
200 .S "Make each program do one thing well. | |
201 .LP | |
202 foo | |
203 | |
204 | |
205 .S "Build a prototype as soon as possible. | |
206 .LP | |
207 foo | |
208 | |
209 | |
210 .S "Choose portability over efficiency. | |
211 .LP | |
212 foo | |
213 | |
214 | |
215 .S "Store data in flat text files. | |
216 .LP | |
217 foo | |
218 | |
219 | |
220 .S "Use software leverage to your advantage. | |
221 .LP | |
222 foo | |
223 | |
224 | |
225 .S "Use shell scripts to increase leverage and portability. | |
226 .LP | |
227 foo | |
228 | |
229 | |
230 .S "Avoid captive user interfaces. | |
231 .LP | |
232 foo | |
233 | |
234 | |
235 .S "Make every program a filter. | |
236 .LP | |
237 foo | |
238 | |
239 | |
240 | |
241 | |
242 | |
243 .P "real world examples | |
244 | |
245 | |
246 .S "various | |
247 .LP | |
248 who uses | |
249 .CW "grep -R | |
250 ? | |
251 | |
252 .sp 1 | |
253 .LP | |
254 .CW "cat -v | |
255 | |
256 .sp 1 | |
257 .LP | |
258 pagers are taken for granted | |
259 | |
260 .sp 1 | |
261 .LP | |
262 what about the readline? | |
263 | |
264 | |
265 | |
266 .S "find -printf | |
267 .LP | |
268 How to reformat the output of find(1) to have ``FILENAME PATH'' | |
269 instead of ``PATH/FILENAME''? | |
270 | |
271 .LP | |
272 the ``easy'' way: | |
273 \f(CWfind /dir -printf "%P %h\en"\fP | |
274 | |
275 .LP | |
276 the ``good'' way: | |
277 .br | |
278 .CW "\s-1find /dir | sed 's,\e(.*\e)/\e(.*\e),\e2 \e1,' | |
279 | |
280 .LP | |
281 The difference shows off when one wants, for instance, | |
282 the path to be manipulated further. | |
283 | |
284 | |
285 .S "MH / nmh | |
286 .LP | |
287 a Mail User Agent (MUA) | |
288 | |
289 | |
290 .S "uzbl | |
291 .LP | |
292 a web browser that adheres to the Unix Phil | |
293 | |
294 | |
295 | |
296 | |
297 | |
298 .P "more than software dev guidelines | |
299 | |
300 | |
301 | |
302 | |
303 | |
304 .P "literature | |
305 | |
306 | |
307 .S literature | |
308 .I | |
309 ``\fBText Processing and Typesetting with Unix\fP'' | |
310 by Barron and Rees | |
311 explains everything pretty good (focus on | |
312 .CW nroff ) | |
313 .I | |
314 ``\fBHeirloom Documentation Tools Nroff/Troff User's Manual\fP'' | |
315 by Ossanna, Kernighan, and Ritter | |
316 is more a technical reference | |
317 .I | |
318 Various documents collected on | |
319 .CW \s-2http://troff.org\s+2 | |
320 | |
321 | |
322 .S | |
323 .LP | |
324 this talk was prepared using tools of the Heirloom project: | |
325 .CW \s-2http://heirloom.sf.net\s+2 | |
326 .LP | |
327 the slides macros are based on | |
328 .br | |
329 .CW \s-2http://repo.cat-v.org/troff-slider/\s+2 | |
330 .sp | |
331 | |
332 .LP | |
333 the slides are available on my website | |
334 .CW \s-2http://marmaro.de/docs\s+2 | |
335 and on | |
336 .CW \s-2http://ulm.ccc.de/ChaosSeminar/\s+2 | |
337 .sp | |
338 | |
339 2010-03-08 |