docs/unix-phil

annotate unix-phil-slides.ms @ 45:ade392f024aa

a lot of rework throughout the whole document
author meillo@marmaro.de
date Mon, 12 Apr 2010 09:33:01 +0200
parents e8adc3571e8c
children
rev   line source
meillo@24 1 .TL
meillo@24 2 \fR\s-6Why\s0\fP
meillo@24 3 .br
meillo@24 4 the Unix Philosophy
meillo@24 5 .br
meillo@24 6 .vs -4
meillo@26 7 \fR\s-6still matters\s0\fP
meillo@24 8 .AU
meillo@24 9 .ft R
meillo@24 10 .sp 1.2i
meillo@24 11 .ps 11
meillo@24 12 markus schnalke <meillo@marmaro.de>
meillo@24 13
meillo@24 14
meillo@27 15 .S "Goals of this talk
meillo@24 16 .I
meillo@27 17 Introduce the Unix Phil
meillo@24 18 .I
meillo@27 19 Show that most modern software is crap
meillo@24 20 .I
meillo@28 21 Explain why the Unix Phil leads to good/better software
meillo@24 22 .I
meillo@27 23 Convince you that good software is of matter
meillo@24 24 .sp 2
meillo@24 25 .I
meillo@27 26 Make you think
meillo@24 27
meillo@24 28
meillo@27 29 .S "Roadmap
meillo@24 30 .I
meillo@28 31 Background
meillo@24 32 .I
meillo@27 33 What is the Unix Phil?
meillo@24 34 .I
meillo@24 35 The Unix Phil after Gancarz
meillo@24 36 .I
meillo@28 37 Real world examples
meillo@24 38 .I
meillo@28 39 Final thoughts
meillo@24 40
meillo@24 41
meillo@24 42
meillo@28 43
meillo@28 44 .P "Background
meillo@28 45
meillo@28 46
meillo@28 47
meillo@28 48 .S "How I met the Unix Phil
meillo@24 49 .LP
meillo@27 50 First contact through dwm (suckless project)
meillo@24 51 .LP
meillo@24 52 ``cat -v Considered Harmful''
meillo@24 53 .LP
meillo@24 54 ``The Unix and the Echo''
meillo@24 55 .LP
meillo@24 56 ``The Unix Programming Environment''
meillo@28 57 .LP
meillo@24 58 .sp 1
meillo@27 59 Better understanding through digging in the past
meillo@24 60
meillo@24 61
meillo@27 62 .S "Historical background
meillo@27 63 .LP
meillo@27 64 The late 60s and early 70s
meillo@27 65 .LP
meillo@27 66 Operating systems are complex
meillo@27 67 .LP
meillo@24 68 Brooks' ``The Mythical Man-Month''
meillo@27 69 .LP
meillo@27 70 MULTICS had just failed
meillo@27 71 .LP
meillo@27 72 A lot of different hardware
meillo@27 73 .LP
meillo@27 74 Limited computing power
meillo@27 75 .LP
meillo@27 76 Textual input and output (line printers)
meillo@24 77
meillo@24 78
meillo@27 79 .S "Everything is a file
meillo@24 80 .LP
meillo@27 81 Is the(?) basic concept in Unix (and even more in Plan9)
meillo@24 82 .LP
meillo@27 83 Made simple operating systems possible
meillo@24 84 .LP
meillo@27 85 It is not covered by the Unix Phil
meillo@27 86 .br
meillo@27 87 The Unix Phil is on a different level
meillo@28 88 .LP
meillo@24 89 .sp 2
meillo@24 90 Unix is mainly two things:
meillo@24 91 .I
meillo@27 92 An operating system (system calls)
meillo@24 93 .I
meillo@27 94 A toolchest (coreutils)
meillo@24 95
meillo@24 96
meillo@24 97
meillo@27 98 .P "What is the Unix Phil?
meillo@24 99
meillo@24 100
meillo@24 101
meillo@24 102 .S "What is the Unix Phil *itself*?
meillo@24 103 .LP
meillo@24 104 ``The Unix philosophy is a set of cultural norms and philosophical
meillo@24 105 approaches to developing software based on the experience of
meillo@24 106 leading developers of the Unix operating system.''
meillo@24 107 (wikipedia)
meillo@24 108 .sp 2
meillo@24 109 .LP
meillo@24 110 How the inventors of Unix write software.
meillo@24 111 .LP
meillo@24 112 Common things of classic Unix tools.
meillo@24 113 .sp 2
meillo@24 114 .LP
meillo@27 115 Difficult to define
meillo@24 116
meillo@24 117
meillo@24 118 .S "Unix Phil vs. SW dev processes
meillo@24 119 .LP
meillo@27 120 The Unix Phil
meillo@24 121 .I
meillo@24 122 much: *what* to program
meillo@24 123 .I
meillo@24 124 few: *how* to program
meillo@24 125
meillo@24 126 .LP
meillo@24 127 Software developments processes:
meillo@24 128 .I
meillo@24 129 few: *what* to program
meillo@24 130 .I
meillo@24 131 much: *how* to program
meillo@24 132
meillo@24 133 .sp 2
meillo@24 134 .LP
meillo@24 135 Extreme Programming is like the Unix Phil
meillo@24 136 but with more *how* than *what*,
meillo@24 137 and with formalisms
meillo@24 138
meillo@24 139
meillo@24 140
meillo@24 141
meillo@24 142
meillo@24 143 .S "What is the Unix Phil?
meillo@24 144 .I
meillo@24 145 Doug McIlroy (1978)
meillo@24 146 .I
meillo@24 147 Mike Gancarz: ``The Unix Philosophy'' (1994)
meillo@24 148 .I
meillo@24 149 Eric S. Raymond: ``The Art of Unix Programming'' (2003)
meillo@24 150 .sp 2
meillo@24 151 .I
meillo@24 152 Richard Gabriel: ``Worse is Better'' (1989)
meillo@24 153
meillo@24 154
meillo@24 155 .S "Doug McIlroy
meillo@24 156 .LP
meillo@24 157 This is the Unix philosophy:
meillo@24 158 .I
meillo@24 159 Write programs that do one thing and do it well.
meillo@24 160 .I
meillo@24 161 Write programs to work together.
meillo@24 162 .I
meillo@24 163 Write programs to handle text streams, because that is a universal interface.
meillo@24 164
meillo@24 165
meillo@24 166 .S "Mike Gancarz: ``The Unix Philosophy''
meillo@24 167 .I
meillo@24 168 Small is beautiful.
meillo@24 169 .I
meillo@24 170 Make each program do one thing well.
meillo@24 171 .I
meillo@24 172 Build a prototype as soon as possible.
meillo@24 173 .I
meillo@24 174 Choose portability over efficiency.
meillo@24 175 .I
meillo@24 176 Store data in flat text files.
meillo@24 177 .I
meillo@24 178 Use software leverage to your advantage.
meillo@24 179 .I
meillo@24 180 Use shell scripts to increase leverage and portability.
meillo@24 181 .I
meillo@24 182 Avoid captive user interfaces.
meillo@24 183 .I
meillo@24 184 Make every program a filter.
meillo@24 185 .sp 1
meillo@24 186 .LP
meillo@27 187 Plus ten lesser tenets
meillo@24 188
meillo@24 189
meillo@24 190
meillo@24 191
meillo@24 192 .P "The Unix Phil after Gancarz
meillo@24 193
meillo@25 194
meillo@25 195
meillo@25 196 .S "Small is beautiful
meillo@27 197 .LP
meillo@27 198 Small software is easier to understand, write, maintain
meillo@27 199 .LP
meillo@27 200 Less lines of code contain less bugs
meillo@27 201 .LP
meillo@27 202 Monsters are large
meillo@25 203
meillo@25 204
meillo@25 205 .S "Make each program do one thing well
meillo@27 206 .LP
meillo@27 207 Programs with many functions are large
meillo@27 208 .LP
meillo@27 209 One thing is easier to understand
meillo@27 210 .LP
meillo@27 211 Often straight forward to implement
meillo@27 212 .LP
meillo@28 213 Toolchests
meillo@28 214 .LP
meillo@27 215 Reusable
meillo@25 216
meillo@25 217
meillo@25 218 .S "Build a prototype as soon as possible
meillo@27 219 .LP
meillo@27 220 Shows the quality of the design
meillo@27 221 .LP
meillo@27 222 Shows the problems of the software
meillo@27 223 .LP
meillo@27 224 The best way to shape a software
meillo@27 225 .LP
meillo@27 226 Users find bugs
meillo@28 227 .LP
meillo@28 228 Incremental development
meillo@25 229
meillo@25 230
meillo@25 231 .S "Choose portability over efficiency
meillo@27 232 .LP
meillo@27 233 (Originates in a lot of incompatible hardware in history)
meillo@27 234 .LP
meillo@27 235 Use is most important
meillo@27 236 .LP
meillo@27 237 Availability
meillo@27 238 .LP
meillo@27 239 Only needs to be fast enough
meillo@25 240
meillo@25 241
meillo@25 242 .S "Store data in flat text files
meillo@24 243 .LP
meillo@28 244 (originally: ``Store numerical data in flat ASCII files'')
meillo@28 245 .LP
meillo@27 246 Binary data is machine-dependent
meillo@25 247 .LP
meillo@27 248 Human readable data is:
meillo@25 249 .I
meillo@27 250 As generic as possible
meillo@25 251 .I
meillo@27 252 Is very likely supported
meillo@25 253 .I
meillo@27 254 Many tools work on it (Unix toolchest)
meillo@25 255 .I
meillo@27 256 Directly editable by humans
meillo@25 257 .LP
meillo@27 258 Processing needs only to be fast enough
meillo@24 259
meillo@24 260
meillo@25 261 .S "Use software leverage to your advantage
meillo@24 262 .LP
meillo@27 263 What do we have computers for?
meillo@25 264 .LP
meillo@27 265 Make best use of computing power
meillo@25 266 .LP
meillo@27 267 Reduce development effort
meillo@28 268 .LP
meillo@28 269 Toolchests and a powerful shell
meillo@24 270
meillo@24 271
meillo@25 272 .S "Use shell scripts to increase leverage and portability
meillo@24 273 .LP
meillo@27 274 Was very important in history
meillo@25 275 .LP
meillo@27 276 High level languages
meillo@25 277 .LP
meillo@27 278 Prototyping
meillo@25 279 .LP
meillo@27 280 Quick hacks
meillo@28 281 .LP
meillo@28 282 Users are ``programmers''
meillo@24 283
meillo@24 284
meillo@25 285 .S "Avoid captive user interfaces
meillo@24 286 .LP
meillo@27 287 Don't assume the user to be human
meillo@25 288 .LP
meillo@27 289 Exclude the user whenever possible
meillo@25 290 .LP
meillo@27 291 Automate
meillo@28 292 .LP
meillo@28 293 How does it scale?
meillo@28 294 .LP
meillo@28 295 Bloat
meillo@24 296
meillo@24 297
meillo@25 298 .S "Make every program a filter
meillo@24 299 .LP
meillo@27 300 Programs transform data
meillo@25 301 .LP
meillo@27 302 Combine programs
meillo@25 303 .LP
meillo@27 304 Have one common interface
meillo@28 305 .LP
meillo@28 306 Toolchests
meillo@24 307
meillo@24 308
meillo@24 309
meillo@24 310 .P "real world examples
meillo@24 311
meillo@24 312
meillo@24 313 .S "find -printf
meillo@24 314 .LP
meillo@24 315 How to reformat the output of find(1) to have ``FILENAME PATH''
meillo@24 316 instead of ``PATH/FILENAME''?
meillo@24 317 .LP
meillo@27 318 The ``easy'' way:
meillo@24 319 \f(CWfind /dir -printf "%P %h\en"\fP
meillo@24 320 .LP
meillo@27 321 The ``good'' way:
meillo@24 322 .br
meillo@24 323 .CW "\s-1find /dir | sed 's,\e(.*\e)/\e(.*\e),\e2 \e1,'
meillo@24 324 .LP
meillo@24 325 The difference shows off when one wants, for instance,
meillo@24 326 the path to be manipulated further.
meillo@28 327 .LP
meillo@28 328 .sp 3
meillo@28 329 Source (in German):
meillo@28 330 .CW "\s-1http://debianforum.de/forum/viewtopic.php?t=117683
meillo@24 331
meillo@24 332
meillo@28 333 .S "Various
meillo@27 334 .LP
meillo@27 335 Who uses
meillo@27 336 .CW "grep -R
meillo@27 337 ?
meillo@27 338 .sp 1
meillo@27 339 .LP
meillo@27 340 .CW "cat -v
meillo@27 341
meillo@27 342 .sp 1
meillo@27 343 .LP
meillo@27 344 Pagers are taken for granted
meillo@27 345
meillo@27 346 .sp 1
meillo@27 347 .LP
meillo@27 348 What about the readline?
meillo@27 349
meillo@27 350
meillo@27 351
meillo@24 352 .S "MH / nmh
meillo@24 353 .LP
meillo@27 354 A Mail User Agent (MUA)
meillo@25 355 .LP
meillo@27 356 Is a toolchest
meillo@25 357 .LP
meillo@27 358 Work with mails like with generic files
meillo@25 359 .LP
meillo@27 360 The only(?) MUA that follows the Unix Phil
meillo@25 361 .LP
meillo@27 362 Has a very special feeling
meillo@24 363
meillo@24 364
meillo@24 365 .S "uzbl
meillo@24 366 .LP
meillo@27 367 A web browser that adheres to the Unix Phil
meillo@25 368 .LP
meillo@27 369 A young project (about 1 year)
meillo@25 370 .LP
meillo@27 371 Central question:
meillo@27 372 .br
meillo@27 373 What is the one task a web browser covers?
meillo@25 374 .LP
meillo@27 375 Makes very visible use of software leverage
meillo@25 376 .LP
meillo@27 377 Suffers hard from our broken web
meillo@24 378
meillo@24 379
meillo@24 380
meillo@24 381
meillo@24 382
meillo@28 383 .P "Final thoughts
meillo@24 384
meillo@24 385
meillo@28 386 .S "Say no
meillo@25 387 .LP
meillo@28 388 In today's computer world, following the Unix Phil means often asceticism
meillo@25 389 .LP
meillo@27 390 One needs to abjure a lot of ``nice'' features
meillo@27 391 .LP
meillo@28 392 Actually, it is abjuring the *bad* features
meillo@25 393 .LP
meillo@28 394 Leads to a valuable attitude, IMO
meillo@27 395 .LP
meillo@27 396 .sp 2
meillo@27 397 Transfer it to your everyday life
meillo@25 398
meillo@25 399
meillo@27 400 .S "Avoid complexity
meillo@25 401 .LP
meillo@27 402 Avoid complexity first and foremost
meillo@25 403 .LP
meillo@27 404 Complexity is the ``boss enemy'', software developers fight against
meillo@25 405 .LP
meillo@27 406 Strive for simplicity, clarity, generality
meillo@27 407 .LP
meillo@27 408 .sp 2
meillo@27 409 Transfer it to your everyday life
meillo@25 410
meillo@25 411
meillo@27 412 .S "Good solutions
meillo@25 413 .LP
meillo@27 414 We don't need just solutions, we need good ones
meillo@25 415 .LP
meillo@27 416 Today, we can make almost everything possible,
meillo@26 417 but we still cannot make it good
meillo@27 418 .LP
meillo@27 419 .sp 2
meillo@27 420 Transfer it to your everyday life
meillo@25 421
meillo@25 422
meillo@28 423 .S "Live it
meillo@25 424 .LP
meillo@28 425 The Unix Phil is more than just a few guidelines
meillo@25 426 .LP
meillo@28 427 You cannot follow only some of the tenets
meillo@25 428 .LP
meillo@28 429 To understand the Unix Phil, you need to engage with it
meillo@25 430 .LP
meillo@28 431 .sp 4
meillo@25 432 .ce
meillo@28 433 .B
meillo@27 434 It's a philosophy \(en live it!
meillo@24 435
meillo@24 436
meillo@24 437
meillo@28 438
meillo@28 439
meillo@28 440 .P "References
meillo@24 441
meillo@24 442
meillo@27 443 .S Literature
meillo@24 444 .I
meillo@26 445 ``\fBThe Unix Philosophy\fP''
meillo@26 446 by Mike Gancarz
meillo@26 447 .br
meillo@26 448 Go and get it!
meillo@24 449 .I
meillo@26 450 ``\fBThe Unix Programming Environment\fP''
meillo@26 451 by Kernighan and Pike
meillo@26 452 .br
meillo@26 453 A Bible for Unix-lovers.
meillo@24 454 .I
meillo@26 455 ``\fBThe Mythical Man-Month\fP''
meillo@28 456 and ``\fBNo Silver Bullet\fP''
meillo@26 457 by Fred Brooks
meillo@26 458 .br
meillo@28 459 About complexity in software development.
meillo@26 460 .I
meillo@26 461 ``\fBThe Practice of Programming\fP''
meillo@26 462 by Kernighan and Pike
meillo@26 463 .br
meillo@26 464 How good code should look like.
meillo@26 465 .I
meillo@26 466 ``\fBcat -v Considered Harmful\fP''
meillo@26 467 by Pike and Kernighan
meillo@26 468 .CW \s-2http://harmful.cat-v.org/cat-v/\s+2
meillo@26 469 .br
meillo@26 470 A must-read.
meillo@24 471
meillo@24 472
meillo@24 473 .S
meillo@24 474 .LP
meillo@27 475 This talk was prepared using tools of the Heirloom project:
meillo@24 476 .CW \s-2http://heirloom.sf.net\s+2
meillo@24 477 .LP
meillo@27 478 The slides macros are based on
meillo@24 479 .br
meillo@24 480 .CW \s-2http://repo.cat-v.org/troff-slider/\s+2
meillo@24 481 .sp
meillo@24 482
meillo@24 483 .LP
meillo@27 484 The slides are available on my website
meillo@24 485 .CW \s-2http://marmaro.de/docs\s+2
meillo@24 486 and on
meillo@24 487 .CW \s-2http://ulm.ccc.de/ChaosSeminar/\s+2
meillo@24 488 .sp
meillo@27 489 .LP
meillo@27 490 See my paper on the topic, too.
meillo@24 491
meillo@27 492 .sp 2
meillo@24 493 2010-03-08