The Philosopher Developer

half-sound logic, half-decent code

Carousels, context, and judgment
August 06, 2013

I recently had a brief1 online exchange with Matt Copeland, a former coworker at ThoughtWorks, about the website It’s a fun little site presenting several bullet points against the use of carousels (rotating banners) in website UIs2.

I’m no designer or UX expert. Over the years I’ve noticed that I do seem to take a greater interest in frontend-y stuff than most other developers I work with; but that’s a far cry from someone with expertise in user experience. Still, when Matt first posted a link to the carousel-bashing site I found myself responding skeptically. Of course, maybe that’s because I respond skeptically to pretty much everything that exists in this world.

Anyway, this shall be my attempt to explain my skepticism, concisely if I can (but knowing me, I probably can’t).

Judgments require context

Consider this point:

A point with no context
A point with no context

Where is it? To answer that question we need some frame of context, or reference. For example, we could define...

Read more

Problem obsession
July 11, 2013

My last course as a grad student at CMU was Entrepreneurship for Software Engineers, in which teams of students basically worked on startup ideas for one semester, sharing their progress and collecting feedback during each class session and presenting to a small group of VC reps at the end of the term. I worked on a silly little app called InstaPie–which I haven’t touched in months (mainly because I don’t have an Apple computer anymore!), though I do plan to pick it back up soon, I swear—and I remember during my presentation to the VCs, one of them asked, “What problem are you trying to solve here?”

This wasn’t my first exposure to the question, of course. We’d been taught to always keep this question in our crosshairs, to not lose sight of the goal. Identifying the problem and proposing a solution is an important part of any elevator pitch, I hear. If you can’t answer that question, then you’ve lost your way somehow. Start retracing your steps until you get back to the place where...

Read more

Hero culture vs. Borg culture
June 14, 2013

Most of us in software (and probably in other fields) know about hero culture. It’s a concept everybody loves to hate. The term refers to an environment where individuals work in isolation and thrive on receiving sole credit for their work. This is generally perceived as leading to inflated egos and poor cooperation among developers. It’s the same phenomenon you see in professional sports, when star athletes are sometimes accused of not being good “team players” and getting greedy with the ball, wanting to be the center of attention.

So there are social reasons to dislike hero culture. There are plenty of practical reasons, too. One involves a principle known as the bus factor: the more you rely on a hero, the more vulnerable you are in the event of losing him or her—e.g., if he or she is hit by a bus, or leaves for another company.

But you guys know me. If everybody else is going left, I’m going to go right (a highly predictable trait that my friend Sameer frequently reminds me of...

Read more

Introducing Lazy.js
May 31, 2013

I recently started a JavaScript project called Lazy.js that’s been getting quite a lot of attention1. Essentially the project is a utility library in a similar vein to Underscore or Lo-Dash, but with lazy evaluation (hence the name).

The reason I think the project has been piquing the interest of so many JavaScript developers is that it offers the promise of some truly solid performance, even compared to Lo-Dash (which is itself highly optimized in comparison to Underscore). This chart shows the performance of Lazy.js compared to both of those libraries for several common operations on arrays of 10 elements each on Chrome:

Lazy.js performance versus Underscore and Lo-Dash
Lazy.js performance versus Underscore and Lo-Dash

You can read more about what Lazy.js does on the project website or in the README on its GitHub page. In this blog post, I want to write a little bit about how it works, and what makes it different.

A different paradigm

Fundamentally, Lazy.js represents a paradigm shift from the model of Underscore and Lo-Dash (starting...

Read more

Rethinking priority
April 27, 2013

Looking back on some of my recent posts on this blog, I’m a bit annoyed at myself for being too hand-wavy and not saying anything all that original.

I’d like to make an effort, at least in my next few posts, to get more concrete and challenge some of the conventions I’ve observed in the software world. I’ll start with an idea that I think is not all that radical, though it would mark a sigificant departure for most teams I’ve worked on.

How we think about priority

The way most teams prioritize work seems totally sensible on the surface. Essentially, tasks are assigned some priority ranking such as “high”, “medium” or “low”; and then the highest-ranked tasks actually get assigned to people. In a perfect world this would mean that the most important things always get done, and then when there’s a surplus of time a team can “catch up” on issues that aren’t quite as urgent. In practice I think a different reality tends to emerge.

On projects I’ve been a part of, inevitably it turns...

Read more

In defense of global state
April 23, 2013

I bet you weren’t expecting any sane developer to make this argument!

Well, to be fair, the title of this post is somewhat intentionally provocative1. But anyway, you’re here now; so it served its purpose. And make no mistake: I am going to defend global state—just possibly not in quite the way you might be expecting.

What we mean by global state

First, some background. If you’re reading this, there’s a good chance you’re a developer so I probably don’t have to explain this; but I think there are at least two forms of global state that come to mind in software. One form is global variables–values that are accessible and can be changed, globally, anywhere, by all of the code in a project. The other is constants–values that may be accessible to potentially every part of a program, but cannot be changed.

These aren’t the only kinds of global state, though. I would argue that globality–apparently that’s actually a word2–is a continuous (as opposed to discrete or binary) property. Meaning...

Read more

People are not resources
April 18, 2013

I never actually worked in an environment like this, but I’ve read enough articles on The Daily WTF to have an image in my head of the old dusty, temperamental servers that companies used to have back in the 90s and early 2000s.

Ye olde server
Ye olde server

Those were dark days, from what I hear—when your business was victimized at the whim of an unpredictable piece of hardware. If the power went out, or the CPU overheated, or the hard drive failed, your site went down. It was as simple as that.

We live in a different era now, with PaaS and IaaS and all that cloudy good stuff. Your average tech-savvy business owner is going to know there’s no particularly good reason to run your own server anymore if you’re a small company. And if you’re one of the large companies providing these services like Amazon or Google, you have been on top of the hardware problem for a long time, with data centers distributed around the country (or the world) connected in a controllable and reliable way. It’s not an issue...

Read more

Risk aversion and software development
April 12, 2013

A few years ago my parents gave me and my wife this knife as a Christmas present:

The Shun Classic Utility Knife
The Shun Classic Utility Knife

We weren’t quite sure what to make of it at first, but it wasn’t long before we both loved it. It is a very sharp knife, which makes it a breeze to cut through just about anything. Unfortunately, that anything includes human flesh. I know this because a few months after receiving the knife I was cutting an avocado and the knife slipped in my hand. It was quite a bad cut.

Obviously—I still have all ten fingers—my wound healed eventually. But I do have a pretty clear memory of the incident, which makes me quite fearful of repeating it. Here are two ways I could protect myself from future self-inflicted injury:

  1. Decide the knife is too sharp. I could replace the Shun knife with a duller one, so that if my hand ever slips while cutting again the injury won’t be so bad.
  2. Decide I wasn’t careful enough. In the future I could cut more slowly and be very cautious whenever I’m using...

Read more

Charts made dead simple with HighTables
April 10, 2013

In a footnote to my post a while ago on SafeYAML1, I established a goal of writing more about my many open source projects, which I have a bad habit of not telling anyone about—sometimes even long after they’re finished!

So today I want to write about a pretty good one that’s relatively polished and full-featured. It’s called HighTables, and it’s a JavaScript library that makes adding charts to existing sites with HTML tables extremely easy.

Here, I’ll give you an example (note: this is probably not going to display properly for those of you on RSS readers; visit the website to see what I’m trying to show you!):

<table class="render-to-bar-chart">
    <th>Method of rendering a chart</th>
    <th>How easy it is (scale from 1 to 10)</th>
    <td>Using Highcharts directly</td>
    <td>Using HighTables</td>

And the result:

Method of rendering a chart How easy it is (scale from 1 to 10)
Using Highcharts...

Read more

Am I an engineer?
April 03, 2013

Most people outside of the software development profession (and even many on the inside) may not realize that there is some disagreement within the community as to whether or not software development is a form of engineering.

Let’s say you placed software developers along a spectrum, where at one end “engineering” might as well be a foreign word, and at the other end writing software is obviously a form of engineering, in much the same way that painting or sculpture is obviously a form of art.

Is software development a form of engineering?
Is software development a form of engineering?

Personally, I have worked at various points along this spectrum. My first developer job was at a trading company in Philadelphia, which would have fallen pretty close to the extreme left end. At ThoughtWorks I would say the culture was somewhere in the middle, with plenty of developers leaning in both directions (I definitely worked with self-professed “engineers” at ThoughtWorks, as well as individuals who vehemently rejected the label).

More recently...

Read more

Previous Next