Engineering Named Things This is a cautionary tale. It's the story of an internal tool development project. We'll call it Astro, because naming things is hard, and the reasons why are very instructive.
Interviewing Culture Fit We don't evaluate candidates purely on skill. We also assess them socially. I'll explore how to do that, without falling into the trap of dismissing someone as "not a culture fit" due to bias.
Interviewing Interviewing Software Engineers Artificial white board programming tests are the wrong thing, but they're easy to assign. Doing the right thing is going to be harder. So what we really need to do is identify what we're looking for in a programmer
Interviewing Questions for your interviewer As a candidate, interviews are your chance to learn how the team works, and how the company views and treats their employees. But after enduring your own interview, it's hard to know what to ask or how to evaluate the answers. This should help.
Talks A Guide to using GitHub for Hacktoberfest If you want to participate in Hacktoberfest, but you don't have much experience with GitHub, then you've come to the right place.
C# FizzBuzz? Really? Yes, it's FizzBuzz, but without the modulo! Exploring FizzBuzz as an interview exercise, and implemented like the children's counting game that inspired it.
Social Justice Tech Is Not Neutral Those of us in the tech field like to pretend that it's neutral. We like to pretend that we're neutral. We have to stop.
Engineering Designing for Testability The same factors that make your software hard to test will also make it hard to maintain. By adding tests, you can find and fix those things, and so the simple fact of having tests will make your software projects more successful.
Personal Falsehoods programmers believe about gender (and sex) Sex and gender are complicated. If you want my advice, it's that your app probably doesn't even need to collect this information.
C# Maybe don't use StringBuilder So, should you use StringBuilder? Yes, sometimes. It depends on what your data is like, and what you're optimizing for.
Engineering Enabling Refactoring To succeed at refactoring, you need to make small, incremental improvements. It needs to be continuous. It needs to be habitual. And it needs to be proactive. Because it's not special; it's just a regular part of development. This is continuous refactoring.
Testing Unit Testing: How do I even? It hopefully seems obvious that you should test your software. And in particular that you should unit test your software. But, why? And, how? For some reason no one seems to teach this.
Engineering What language should I learn? Programming languages are tools used to solve problems, not problems themselves that need to be solved. And so learning to use them should be approached in the same way you would learn to use any other tool. Which is to say: it depends on what you're trying to build.
Personal New Year's Resolutions This list is optimistic. Maybe even naively so. I'm okay with that. This is about learning, and there's a lot to learn.
Culture The worst interview homework ever I completely get the point of interview homework. You need to assess whether a candidate can actually do the job you're hiring for. Whether they're even viable. And your time is valuable, so
Process Measuring Risk A while back, I was in a planning meeting where a whole development organization was trying to squeeze a huge and non-negotiable volume of work into a predetermined and non-negotiable release schedule. It
Process Software Engineer I am a software engineer. What I'm not is a programmer, or a developer, or a coder, or a ninja. Simply writing code is the easiest part of developing software. Anyone can write
Node.js Think twice before using async/await There is a lot to like about modern Javascript (often abbreviated as ES 2015). Static imports are great. Rest/Spread syntax is great. Destructuring assignment is pretty good. Default arguments are great. Template
Culture Some things I DO miss about big companies I previously discussed some things about working in a large organization that I was happy to be rid of. This is the other side of that coin. These things are by no means
Process A Bug's Life I've written before about useful metrics for software development organizations, and it's past time for another. The metric I'm proposing now, I call "A Bug's Life". Because who doesn't like Pixar?
Culture What I don't miss about big companies Update Sep 2017: I later wrote about some of the good parts. After you're done here, you should check that out, too. I got a new job recently. Go me! The old job
Projects A First Date With Python I started playing Endless Sky recently. It has a lot to recommend it; if you like 4X games, it's worth checking out. One of its features is a fairly rich array of ships
Projects Request-as-promise I've been working on a small node.js project lately to promise-ify request. I'm calling it request-as-promise. You can install it via npm with npm i --save request-as-promise. Why The short version is