Clouds in the Canyon
SIWI : Stuff I Want on the Internet

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

  • On Being A Senior Engineer

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

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.

Learning Resources

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.

Python

Tools

ActiveState ActivePython
If you are stuck on Windows, get your Python from ActiveState.
Django
My favorite web development framework. Using it makes me smarter.
Pyramid Web Framework
Used to by Pylons. Lighter-weight than Django. Worth playing with.
PyQt
My favorite cross-platform GUI toolkit.
PySide
Might be even better than PyQt. License is more liberal.

Learning

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.

Linux

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.

Web Sites

  • Slashdot
  • Hacker News
  • The Daily WTF

Utah Communities

  • The Provo Linux Users Group
  • The Salt Lake Linux Users Group
  • #utah at Freenode.net IRC

Standard Disclaimer

The views expressed here are my own, and are not official statements of any organization. I try to be helpful and accurate, but I am going to make mistakes. Please don't get me in trouble by acting like my employer is bound by anything I say.

Menu

  • SIWI
    • SIWI Tags
    • RSS feed
    • Sitemap
  • Resume
  • Hire Me
  • Code
  • Presentations
  • Links for Learning
  • Learning Software Engineering
  • XKCD Favorites

Connect

  • G+: RichardEsplin
  • Twitter: esplinr
  • LinkedIn: richardesplin
  • Mormon.org
  • Flickr
  • YouTube

Copyright 2003-2017 Richard Esplin
The design of this site is in the public domain. The content is under a Creative Commons Attribution-ShareAlike license.
All contributions to this site are subject to deletion for any reason.