meillo@56: .ps 11 meillo@56: .ce meillo@56: Seminar ``Software Analysis'' meillo@56: .TL meillo@56: \fR\s-6Why\s0\fP meillo@56: .br meillo@56: the Unix Philosophy meillo@56: .br meillo@56: .vs -4 meillo@56: \fR\s-6still matters\s0\fP meillo@56: .AU meillo@56: .ft R meillo@56: .sp .5i meillo@56: .sp .5i meillo@56: .ps 11 meillo@56: markus schnalke meillo@56: meillo@56: meillo@58: meillo@56: .S "Software design meillo@56: .rs meillo@56: .sp meillo@56: .LP meillo@56: \&... is about quality meillo@56: .I meillo@56: Good design \(-> good quality meillo@56: .I meillo@56: Bad design \(-> problems meillo@56: .sp meillo@56: .LP meillo@56: \&... and consistency meillo@56: .LP meillo@56: .sp 2 meillo@56: Unix Phil = guidelines for good design meillo@56: meillo@56: meillo@56: meillo@58: .S "Unix Phil and Software dev processes meillo@58: .rs meillo@58: .sp meillo@58: .LP meillo@58: The Unix Phil: meillo@58: .I meillo@58: mostly *what* meillo@58: .sp meillo@58: .LP meillo@58: Software dev processes: meillo@58: .I meillo@58: mostly *how* meillo@58: .sp 2 meillo@58: .LP meillo@58: Extreme Programming and the Unix Phil meillo@58: are good friends meillo@58: meillo@58: meillo@58: meillo@56: .S "The Unix Phil *itself* meillo@56: .rs meillo@56: .sp meillo@56: .LP meillo@56: Wikipedia: meillo@56: .ce 99 meillo@56: .sp meillo@56: The Unix philosophy is meillo@56: a set of cultural norms and philosophical approaches meillo@56: to developing software meillo@56: based on the experience meillo@56: of leading developers of the Unix operating system. meillo@56: .sp meillo@56: meillo@56: meillo@58: meillo@58: .S Motivation meillo@56: .rs meillo@56: .sp meillo@56: .LP meillo@58: .ce meillo@58: Write the best possible programs for yourself meillo@58: .sp 3 meillo@56: .LP meillo@58: .ce meillo@58: Avoid \fBcomplexity\fP first and foremost! meillo@56: .LP meillo@58: .ce meillo@58: Exploit software \fBleverage\fP! meillo@56: meillo@56: meillo@56: meillo@56: .S "The Unix Phil by Doug McIlroy (1978) meillo@56: .rs meillo@56: .sp meillo@56: .LP meillo@56: This is the Unix philosophy: meillo@56: .I meillo@56: Write programs that do one thing and do it well. meillo@56: .I meillo@56: Write programs to work together. meillo@56: .I meillo@56: Write programs to handle text streams, because that is a universal interface. meillo@56: meillo@56: meillo@58: meillo@56: .S "The Unix Phil by Mike Gancarz (1995) meillo@56: .rs meillo@56: .sp .2v meillo@56: .I meillo@56: Small is beautiful. meillo@56: .I meillo@56: Make each program do one thing well. meillo@56: .I meillo@56: Build a prototype as soon as possible. meillo@56: .I meillo@56: Choose portability over efficiency. meillo@56: .I meillo@56: Store data in flat text files. meillo@56: .I meillo@56: Use software leverage to your advantage. meillo@56: .I meillo@56: Use shell scripts to increase leverage and portability. meillo@56: .I meillo@56: Avoid captive user interfaces. meillo@56: .I meillo@56: Make every program a filter. meillo@56: .sp 1 meillo@56: .LP meillo@56: Plus ten lesser tenets meillo@56: meillo@56: meillo@56: meillo@56: .S "Case studies meillo@56: .LP meillo@56: .B "MH / nmh meillo@56: .LP meillo@56: The only MUA that is a toolchest meillo@56: .LP meillo@56: Makes use of the powerful shell meillo@56: .LP meillo@56: Great example of applied Unix Phil meillo@58: .sp meillo@56: .LP meillo@56: .B uzbl meillo@56: .LP meillo@56: A web browser that adheres to the Unix Phil meillo@56: .LP meillo@56: Central question: meillo@56: .br meillo@56: What is the one thing a web browser should do well? meillo@56: .LP meillo@56: Makes very visible use of software leverage meillo@56: meillo@56: meillo@56: meillo@56: .S "Why? meillo@56: .rs meillo@56: .sp meillo@56: .LP meillo@56: .ce meillo@56: We don't need just any solutions, we need good ones meillo@56: .sp 3 meillo@56: .LP meillo@56: .ce meillo@58: \fBComplexity\fP is the ``boss enemy'' of software developers meillo@56: .LP meillo@56: .ce meillo@58: \fBLeverage\fP is the largest unique benefit of software meillo@58: meillo@56: meillo@56: meillo@56: .S "Further reading meillo@56: .LP meillo@56: The paper to the slides meillo@56: .sp meillo@56: .LP meillo@56: My talk on this topic at the ChaosSeminar of CCC Ulm meillo@56: .CW \s-2http://ulm.ccc.de/ChaosSeminar/2010/03_UnixPhil\s0 meillo@56: .sp meillo@56: .LP meillo@56: Mike Gancarz' book meillo@56: \fI``The Unix Philosophy''\fP meillo@56: .sp meillo@56: .LP meillo@56: \fI``cat -v Considered Harmful''\fP meillo@56: by Pike and Kernighan meillo@56: .CW \s-2http://harmful.cat-v.org/cat-v/\s+2 meillo@56: meillo@56: meillo@58: meillo@56: .S Colophon meillo@56: .LP meillo@56: The paper and slides were prepared with: meillo@56: .br meillo@56: .CW "vi sed awk refer troff dpost spell make hg meillo@56: .sp meillo@56: .LP meillo@56: Most of the tools are from meillo@56: .CW \s-2http://heirloom.sf.net\s0 meillo@56: .LP meillo@56: The `slides' macros are based on meillo@56: .br meillo@56: .CW \s-2http://repo.cat-v.org/troff-slider/\s0 meillo@56: .sp 2 meillo@56: .LP meillo@56: The paper, the slides, and the complete sources are available on my website meillo@56: .CW \s-2http://marmaro.de/docs\s+2 meillo@56: .sp 3 meillo@56: 2010-04-16