My only skill is debugging. I have worked as a programmer — software engineer, software developer, or whatever you want to call it — for many years.

I possess only this one skill. It is the only skill I have required.

I: Building Blocks of Debugging

In 2007 I was unemployed and living with a friend in my college hometown. The room I rented was shared with my roommate’s pet rabbit. I had an old suitcase with some clothes and toiletries, some books, and a cheap laptop.

I had a college degree, but I did not have a plan. The more salient issue is that…

1. Write As Little Code As Possible

The best code is no code at all. If we can complete our project requirements by pressing a button, we should do it. If this button does not exist, we must write code.

The temptation of all developers is to redesign systems with no concrete payoff. This is because developers are clever and enjoy building things.

The skill of developing software therefore lies in the code we don’t write.

2. Time Is A Limited Resource

In the game of software development, time is the most limited resource. …

Since the early days of the internet, we have had two broad categories of software people: application developers, those entrusted to develop new products and features to existing products; and operations, those tasked with keeping the live system running and healthy.

The reason for this division is simple. Organizations that develop and manage software need to do two things simultaneously: a) maintain a working system that customers or internal users depend on, and b) change that system in novel and unpredictable ways.

Right away, we can see a conflict. These two mandates are completely at odds because making any change…

If you’re the kind of person who works with a computer at a desk then you’ve no doubt spent some time endlessly tweaking and tuning your setup to achieve the right feeling.

Having a nice desk setup can create a soothing sense of feng shui. You feel more productive, even if you aren’t actually getting any more work done.

I’ve gone through many variations of my setup. Some have been clear improvements. After years of writing at a cheap Ikea table with a kitchen chair I finally invested in an ergonomic chair and a proper desk. …

Photo: Michele Tantussi/Stringer/Getty Images

If you have used the internet at any point in the last 10 years, you’re probably aware that companies are collecting data for advertising purposes. The major players in this market are Google, Facebook, and a handful of startups and small data brokers looking at the new frontiers of data, such as connected appliances and energy grids.

It’s all part of the collection side of the data economy. Targeted advertising requires a high-resolution view of consumer activity in order to build more accurate models for advertisers. …

I’ve seen a lot of posts online from college students or career changers asking questions about what it takes to become a software engineer. Typically, these questions focus around what languages to learn, how to get into a particular company, and how to navigate the various paths to get there.

I wanted to write a rebuttal of sorts to these types of requests to clear up some misconceptions and perhaps offer some advice for the aspirational.

Software Engineers Aren’t Paid To Write Code

Inherent in the question about the “best” language to learn is an assumption that a software engineer is someone who gets paid to write…

At this point I think most people know that there are companies that buy and sell data online for the purposes of advertising. But you may not realize how the system works or what it looks like under the covers.

In this article, I will take a look at the systems and companies involved in targeted advertising. I’ll also walk through how and why this system developed, as well as exploring some issues with this system.

How We Got Here

In the late 90’s, the web was a simpler place. Advertising existed online from the very beginning, but it was closer to billboard ads…

Photo by Lewis Ngugi on Unsplash

All organizational problems in software development can be traced back to the erroneous assumption that developing software systems is like developing other large, complex things, like buildings or cars.

In a company producing cars, for example, the process is divided into two roles, broadly speaking. There are people who design the cars, creating blueprints and specifications as to how the engine components and various features will fit together functionally — let’s call them designers — and then there are the people who actually assemble the cars — let’s call them assemblers.

The assemblers need specialized skills to operate the various…

Software design is hard to talk about. We often rely on metaphors from structural engineering and other disciplines to describe this process. We might use terms like “architecture” to describe the components of our system, how they fit together, and why we put them together that way.

In general, we can say that software design is the process of putting together working systems with repeatable patterns in a way that results in a flexible system.

Software Is Flexible

“Architecture” is actually a terrible name for what we mean when we talk about our process of designing software. …

Photo by Charles on Unsplash

Long ago, Perl creator Larry Wall named three tongue-in-cheek virtues of programmers: laziness, impatience, and hubris.

Before you go trying to learn the latest programming languages and trendy frameworks to improve your craft, take a look at these three “virtues” and try to incorporate them in your daily work.

Just don’t take them literally!

Virtue #1: Laziness

It’s telling that computer science is the only field where “lazy” is a technical term.

Programmers have a lot of work to get done. …

Robert Quinlivan

Robert is a writer and software engineer. -

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store