Our open source team at Puppet Labs has two interns this summer. It turns out that I will be managing/mentoring them while we refactor Facter.
More than anything, this is a note to myself of things that I want to impart to them.
- Software Engineering is a balance of business and Computer Science
- Learn to talk your users’ language
- Tests accelerate development
- Software development is a team sport
- Know whose problem you’re solving
- Your code has to be maintained by someone half as smart
Software Engineering is a balance of business and Computer Science
Software Engineering is just as much about the business side of what you have time to do, what you’ve negotiated to do, and the realities of shipping software as it is about interesting Computer Science problems. Fortunately, Puppet Labs has both.
Learn to talk your users’ language
Even if you don’t have direct interactions with your users, learning their jargon and language is invaluable. If for no other reason than you don’t have to do the mental translation between what something is called in the code and what something is called in the UI.
Tests accelerate development
Tests help you know if you’ve broken something, but only if you’ve written them and they’re good. A written test is almost always better than an unwritten one, even if it’s the “wrong kind,” i.e. integration instead of unit, acceptance instead of integration.
Software development is a team sport
Developers have to work with other people, that’s just how it is. Other developers, QA, marketing, sales, support, customers, managers, etc.
Know whose problem you’re solving
Solving the right problem for the wrong type of user (or worse, for you) can be devastating to your software. Have some empathy, get inside their head, understand their motivation.
Your code has to be maintained by someone half as smart
It’s usually you, sleep-deprived and under a severe time-crunch. Don’t be overly clever. Later you’ll say, “Who the hell wrote this crap? Oh yeah, me…”