Learning Software Engineering
I am regularly asked for advice on learning to be a software developer, or becoming a better software engineer. This page is a list of my favorite resources. There is a lot here for beginners, and a lot for bringing your skills up to another level.
If you see a broken link, please email me.
Attitudes and Best Practices
Web Sites
- The Zen of Python
- Words to live by.
- How to be a Programmer
- Robert Read's excellent discussion of a variety of important topics in software engineering.
- Joel on Software
- Reflections on software by a very successful technical entrepreneur. Worth reading the archives.
- Coding Horror
- Jeff Atwood's blog. Great advice, and worth reading the archives.
- Paul Graham's Essays
- Another technology entrepreneur writes about what it takes to be great.
- Rands in Repose
- A blog about managing teams of software engineers.
Posts, Articles, and Lectures
Books
- The Pragramatic Programmer: From Journeyman to Master by Hunt and Thomas
- No better payoff for the time invested than reading this book: short, easy, valuable. Good for anyone who manages an engineer.
- Code Complete 2nd Edition by Steve McConnell
- The most complete reference of best practices I know of.
- The Mythical Man-Month by Frederick Brooks
- Seminal collection of wisdom on running a software project.
- Scrum and XP from the Trenches by Henrik Kniberg
- Quick and easy guide to using agile methodologies on your software project.
- Peopleware: Productive Projects and Teams by DeMarco and Lister
- A research driven look at how to have a productive engineering team.
- The Design of Everyday Things by Donald A. Norman
-
- It changes the way you think about how everything is made, so that hopefully you will make better things.
- The Inmates are Running the Asylum by Alan Cooper
- Introduces interaction design as an approach to user interface design. The ideas are solid, even if they are obscured by the extreme rhetoric.
- The Visual Display of Quantitative Information by Edward Tufte
- I haven't read this book, but I am convinced that I need to. His other two books are also supposed to be excellent.
Hacker Culture
- The story of Mel
- A great short story about a real programmer.
- How to be a
Hacker
- Eric S. Raymond's explanation for what it takes to be a great
developer.
- Jargon File
- Programmer terms with funny definitions. Not all are Mormon friendly.
- Laziness, Impatience, and Hubris
- A wiki discussion of the three great virtues of a programmer.
- Perl, the first postmodern computer language
- The philosophy behind Perl is an approach to life.
- The Lisp Curse
- How culture interacts with technical tools, and a look at one of the great languages.
Free Software and Open Source Philosophy
- Free as in Freedom
- A very readable history of Richard Stallman.
- Philosophy of the GNU Project
- Essays and resources maintained by the Free Software Foundation.
- The Cathedral and the Bazaar
- Eric S. Raymond's explanation of why open source is a superior engineering methodology.
History
- Triumph of the Nerds
- Watching this documentary as a kid is why I got excited about computers. The video doesn't appear to be freely available, but the transcripts are.
- Codebreaker
- A film about Alan Turing. Not freely available.
- The Mother of All Demos
- A historic demo by Douglas Engelbart, done in 1968, which first capture what computers could do for regular workers.
Security
- Schneier on Security
- The most valuable blog on security that I know of. It is worth spending time in the archives.
- Reflections on
Trusting Trust
- A short and easy read that changed my perspective on technology. (Also read Schneier's summary of how to counter the attack.)
Tools
- Vim
- A modal programmer's editor. It will change how you think about interfaces.
- GNU Emacs
- A powerful programmers editor.
- Qt
- The best cross-platform desktop toolkit around.
Languages and Standards
- Lisp
- C
- C++
- C#.NET
- Python
- Javascript
- HTML + CSS
- Bash + Unix tools (check out ZSH)
- SQL
- CMIS
Concepts
- The story of Mel
- A great short story about a real programmer.
- How to be a Hacker
- Eric S. Raymond's explanation for what it takes to be a great developer.
- Jargon File
- Programmer terms with funny definitions. Not all are Mormon friendly.
- Laziness, Impatience, and Hubris
- A wiki discussion of the three great virtues of a programmer.
- Perl, the first postmodern computer language
- The philosophy behind Perl is an approach to life.
- The Lisp Curse
- How culture interacts with technical tools, and a look at one of the great languages.
Free Software and Open Source Philosophy
- Free as in Freedom
- A very readable history of Richard Stallman.
- Philosophy of the GNU Project
- Essays and resources maintained by the Free Software Foundation.
- The Cathedral and the Bazaar
- Eric S. Raymond's explanation of why open source is a superior engineering methodology.
History
- Triumph of the Nerds
- Watching this documentary as a kid is why I got excited about computers. The video doesn't appear to be freely available, but the transcripts are.
- Codebreaker
- A film about Alan Turing. Not freely available.
- The Mother of All Demos
- A historic demo by Douglas Engelbart, done in 1968, which first capture what computers could do for regular workers.
Security
- Schneier on Security
- The most valuable blog on security that I know of. It is worth spending time in the archives.
- Reflections on
Trusting Trust
- A short and easy read that changed my perspective on technology. (Also read Schneier's summary of how to counter the attack.)
Tools
- Vim
- A modal programmer's editor. It will change how you think about interfaces.
- GNU Emacs
- A powerful programmers editor.
- Qt
- The best cross-platform desktop toolkit around.
Languages and Standards
- Lisp
- C
- C++
- C#.NET
- Python
- Javascript
- HTML + CSS
- Bash + Unix tools (check out ZSH)
- SQL
- CMIS
Concepts
- Triumph of the Nerds
- Watching this documentary as a kid is why I got excited about computers. The video doesn't appear to be freely available, but the transcripts are.
- Codebreaker
- A film about Alan Turing. Not freely available.
- The Mother of All Demos
- A historic demo by Douglas Engelbart, done in 1968, which first capture what computers could do for regular workers.
Security
- Schneier on Security
- The most valuable blog on security that I know of. It is worth spending time in the archives.
- Reflections on
Trusting Trust
- A short and easy read that changed my perspective on technology. (Also read Schneier's summary of how to counter the attack.)
Tools
- Vim
- A modal programmer's editor. It will change how you think about interfaces.
- GNU Emacs
- A powerful programmers editor.
- Qt
- The best cross-platform desktop toolkit around.
Languages and Standards
- Lisp
- C
- C++
- C#.NET
- Python
- Javascript
- HTML + CSS
- Bash + Unix tools (check out ZSH)
- SQL
- CMIS
Concepts
- Vim
- A modal programmer's editor. It will change how you think about interfaces.
- GNU Emacs
- A powerful programmers editor.
- Qt
- The best cross-platform desktop toolkit around.
Languages and Standards
- Lisp
- C
- C++
- C#.NET
- Python
- Javascript
- HTML + CSS
- Bash + Unix tools (check out ZSH)
- SQL
- CMIS
Concepts
You should be able to describe each of these:
- Pass By Value vs Pass By Reference
- Memory Management
- Computer Architecture
- Event Driven Programming
- Model View Controller Architecture
- Unit testing
- Design Patterns
- Localization / Internationalization / Encoding
- Security
- Cryptography
- Optimization / Profiling
- Aspect Oriented Programming
- Functional Programming
- Declarative Programming
- Formal Proofs
- Computational Theory
- State Machines / Turing Machines / Halting Problem
- Regular Expressions
- REST
- ACID
Here are references to learn about them:
- WikiWikiWeb at C2.com
- The first wiki on the Internet, contains loads of great computer science discussion.
- Wikipedia
- The articles on computer science topics at Wikipedia are outstanding.