selected readings

The Emperor's Old Clothes C.A.R. Hoare
Software: Barrier or Frontier? C.A.R. Hoare

The humble programmer Edsger W. Dijkstra

No Silver Bullet: Essence and Accidents of Software Engineering Frederick P. Brooks, Jr.

Hints for Computer System Design Butler Lampson
Interconnecting Computers: Architecture, Technology, and Economics Butler Lampson
Software Components: Only The Giants Survive Butler Lampson

Teaching Concurrency Leslie Lamport
How to Tell a Program from an Automobile Leslie Lamport
The Future of Computing: Logic or Biology Leslie Lamport
State the Problem Before Describing the Solution Leslie Lamport
An interview with Leslie Lamport
DS Online: A Discussion with Leslie Lamport

On the Criteria To Be Used in Decomposing Systems into Modules David L. Parnas (see also Information Hiding David M. Weiss)
Software Engineering: An Unconsummated Marriage David L. Parnas
Software Aging David L. Parnas
The Professional Responsibilities of Software Engineers David L. Parnas
ACM SIGSOFT SEN Interview with David Parnas

Some Basic Tenets of Description Michael Jackson
Where, Exactly, Is Software Development? Michael Jackson
Why Software Writing Is Difficult and Will Remain So Michael Jackson

The Five-Minute Rule Ten Years Later, and Other Computer Storage Rules of Thumb Jim Gray, Goetze Graefe
Rules of Thumb in Data Engineering Jim Gray, Prashant Shenoy

On Building Systems That Will Fail Fernando J. Corbató
A Managerial View of the Multics System Development F.J. Corbató and C.T. Clingen

End-to-End Arguments in System Design Jerome H. Saltzer, David P. Reed, David D. Clark
The End of the End-to-End Argument David P. Reed
Can the End-to-End Principle Survive? Phil Karn
The Dawn of the Stupid Network David S. Isenberg
Circuits: the search for a cure Van Jacobson

Complexity Revisited Jerome H. Saltzer (see also Coping with complexity Michael Ernst)
The Design of Design Frederick P. Brooks, Jr. (pdf) (mpeg webcast)
The Failure of Personalities to Generalize Brett D. Fleisch

High-Pressure Steam Engines and Computer Software Nancy G. Leveson
From Bridges and Rockets, Lessons for Software Systems C. Michael Holloway
The "Bug" Heard 'Round the World Jack Garman
Therac-25 Accidents Nancy G. Leveson
ARIANE 5 - Flight 501 Failure
Personal Observations on Reliability of Shuttle Richard P. Feynman (Volume 2: Appendix F of full report)

The Good, the Bad, and the Ugly: The Unix Legacy Rob Pike
UNIX Style, or cat -v Considered Harmful Rob Pike
More Taste: Less Greed? or Sending UNIX to the Fat Farm C H Forsyth
Unix and Beyond: An Interview with Ken Thompson

Development of a Spelling List M. D. McIlroy
Regular Expression Matching Can Be Simple And Fast (but is slow in Java, Perl, PHP, Python, Ruby, ...) Russ Cox
What does it mean to "Measure Performance"? Alistair Moffat, Justin Zobel
In Search of Reliable Retrieval Experiments William Webber, Alistair Moffat

Web Search for a Planet: The Google Cluster Architecture Luiz Barroso, Jeffrey Dean, Urs Hölzle
Software Engineering Advice from Building Large-Scale Distributed Systems Jeff Dean
The Datacenter as a Computer Luiz André Barroso and Urs Hölzle

On the Naming and Binding of Network Destinations Jerome H. Saltzer
The Hideous Name Rob Pike, P.J. Weinberger
The Use of Name Spaces in Plan 9 Rob Pike, Dave Presotto, Ken Thompson, Howard Trickey, Phil Winterbottom
The Styx Architecture for Distributed Systems Rob Pike, Dennis M. Ritchie (pdf local copy)

Computer Security in the Real World Butler Lampson
Why Information Security is Hard - An Economic Perspective Ross Anderson
Why Cryptosystems Fail Ross Anderson
Reflections on Trusting Trust Ken Thompson
The Manchurian Printer Simson L. Garfinkel
Virology 101 M. Douglas McIlroy

Disruptive Programming Language Technologies Todd Proebsting (RealPlayer webcast)
The Role of the Study of Programming Languages in the Education of a Programmer Daniel P. Friedman
Scripting: Higher Level Programming for the 21st Century John Ousterhout (see also additional info)
Beating the Averages Paul Graham

Concurrency Oriented Programming in Erlang Joe Armstrong (slides from LL2) (RealPlayer webcast)
Concurrency Oriented Programming in Erlang Joe Armstrong (paper from FFG2003)
Erlang: Bits of History, Words of Advice Joe Armstrong
Making reliable distributed systems in the presence of software errors Joe Armstrong
Concurrent Functional Programming for Telecommunications: A Case Study of Technology Introduction Bjarne Däcker
Four-fold Increase in Productivity and Quality Ulf Wiger

Systems Software Research is Irrelevant Rob Pike
Latency Lags Bandwidth David Patterson
Proebsting's Law Todd Proebsting (see also On Proebsting's Law Kevin Scott)
Is Code Optimization Research Relevant? Bill Pugh

The Eight Fallacies of Distributed Computing L. Peter Deutsch (de-uglified local copy)
The King And The Toaster (local copy)
It's the Latency, Stupid Stuart Cheshire
The Evolution of Language
On Being the Bearer of Bad News Philip Koopman
Nobody loves the bearer of good news Joe Armstrong
Don't Let Architecture Astronauts Scare You Joel Spolsky
How to help someone use a computer Phil Agre

How Did They Get to the Moon Without PowerPoint? Mordechai Ben-Ari
The Concorde Doesn't Fly Anymore Mordechai Ben-Ari


some non-mainstream stuff

Plan 9 · Inferno · Plan 9 from User Space · Bell Labs and CSP Threads · Libtask: a Coroutine Library for C and Unix
Erlang/OTP · Yaws · Apache vs. Yaws · Performance Measurements of Threads in Java and Processes in Erlang
Lua · LuaJIT · Coroutines in Lua (see also Revisiting Coroutines) · The Implementation of Lua 5.0 · The Evolution of Lua
TLA/TLA+/PlusCal · Spin · Alloy