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
- 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
- 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.
- The story of Mel
- A great short story about a real programmer.
- How to be a
- Eric S. Raymond's explanation for what it takes to be a great
- 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.
- 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.
- 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.
- Schneier on Security
- The most valuable blog on security that I know of. It is worth spending time in the archives.
- Reflections on
- A short and easy read that changed my perspective on technology. (Also read Schneier's summary of how to counter the attack.)
- A modal programmer's editor. It will change how you think about interfaces.
- GNU Emacs
- A powerful programmers editor.
- The best cross-platform desktop toolkit around.
Languages and Standards
- HTML + CSS
- Bash + Unix tools (check out ZSH)
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
- Optimization / Profiling
- Aspect Oriented Programming
- Functional Programming
- Declarative Programming
- Formal Proofs
- Computational Theory
- State Machines / Turing Machines / Halting Problem
- Regular Expressions
Here are references to learn about them:
- WikiWikiWeb at C2.com
- The first wiki on the Internet, contains loads of great computer science
- The articles on computer science topics at Wikipedia are outstanding.
- W3 Schools
- An excellent resource for general HMTL, CSS, and SQL.
- IRC, especially at Freenode
- Internet Relay Chat is a great way to get help and mentor others. I wrote a blog post to help you get started.
- ActiveState ActivePython
- If you are stuck on Windows, get your Python from ActiveState.
- My favorite web development framework. Using it makes me smarter.
- Pyramid Web Framework
- Used to by Pylons. Lighter-weight than Django. Worth playing with.
- My favorite cross-platform GUI toolkit.
- Might be even better than PyQt. License is more liberal.
- The Zen of Python
- Words to live by.
- The Python Tutorial
- The official tutorial is a great way to learn the language if you are already comfortable with the basics of programming.
- Learn Python The Hard Way
- My friends with no previous coding experience learned a lot from this book.
- Think Python: How to Think Like a Computer Scientist
- A good problem-based introduction.
- Dive Into Python
- A python quick start for developers.
- Thinking in Python
- Taking Python to the next level.
- Advanced Linux Programming
- A great introduction. If the site is down, a copy is here.
- UNIX-HATERS Handbook
- A historical look at what is wrong with Unix-like systems. If the site is down, a copy is here. The site says "Feel free to mirror it where ever you want".
- The Code
- A documentary covering the history of Linux from 1991 to 2001.
- Revolution OS
- Another documentary about Linux. Not freely available.