Technical debt occurs when we knowingly or unknowingly make a decision that will require parts of our system to be reworked later. Maybe we write some messy code in the interest of rapid prototyping and iteration, or maybe we avoid updating a library because it introduces changes that will require a lot of refactoring. We […]
Code reviews are becoming more and more essential to the software development process. The days of cowboy coders building software alone in private offices with no collaboration or oversight are mostly gone. Instead, we’ve realized the value of building things with others who can point out hazards in our blind spots and spur us to […]
There are lots of ways to improve as a developer quickly—keeping track of what’s going on in the industry, reading books, maintaining outside projects, and watching talks are some of the obvious ones. But there are a few habits you can adopt in your day-to-day work that will slowly improve a different set of skills […]
Git has some popular features that make it easy to rewrite the commit history, and in some cases, this is a benefit. However, these features can be unnecessarily confusing, and if used incorrectly, they can cause data loss.
Pair programming has become popular as companies embrace the Agile approach, and everyone’s full of anecdotes and opinions about whether or not it works. But regardless of the efficacy of the practice in general, there are a few things we can all do to become better at pairing.
Lots of developers have side projects, but if you ask about them, they’ll probably say, “I’ve got a bunch of ideas and a few things in progress, but nothing I’ve finished.” It seems to be a common theme. Lots of interesting problems and big ideas, but not enough follow-through. A lot has been written about […]
Ruby makes it easy to extend its built-in classes, which can be very convenient and lead to more readable code—but it can also be dangerous. This practice, known as “monkey patching,” is common in the Ruby world, and since Ruby 2, it’s been possible to mitigate some of the risks using refinements.
A lot has been written about the benefits of functional programming, but little of it is accessible to a newcomer. Some of the benefits are easy to understand from an inexperienced perspective (e.g. “it makes concurrency easier”), but others are pretty nebulous. Chief amongst the inscrutable properties of functional programming is its “elegance.” It isn’t […]
“I hate reading other people’s code” is a common refrain among software developers of all experience levels. However, it’s a necessary skill, especially for developers rolling onto existing codebases, and if you approach it with the right perspective and the right tools, it can be an enjoyable and enlightening experience.