Paul Chiusano

Functional programming, UX, tech


About my book

My book, Functional Programming in Scala, uses Scala as a vehicle for teaching FP. Read what people are saying about it.

Popular links

Unison: a friendly programming language from the future the worldwide elastic computer (coming soon)
Type systems and UX: an example
CSS is unnecessary

A happier angle on internet debates about programming tech

[   tech   programming   ]            

I’ve been contemplating internet debates and discussions on programming technology and I think the music composers really have the right idea:

Alice: I woke up this morning with this gorgeous melody in my head. I just can’t stop thinking about it. It’s going to sound amazing for solo cello!

Bob: Wow, cool!! I can’t want to hear it.

Meanwhile, if Bob were a programmer

Bob: Wait, another piece of cello music? Alice, you know, Bach wrote a bunch of cello pieces hundreds of years ago. How is yours going to be different?

Alice: … What, er… Well, um, I guess it’ll be different notes, in different order and duration?

Bob: Okay, sure, some of the notes will be different, but I’m sure it will employ many of the same techniques. Will it have a perfect fifth in it? A major third?

Alice: Well, sure…

Bob: Yeah, see, Bach’s stuff did that too! Seems like pretty much the same thing. Honestly, why even bother? It’s been done before.

Alice: recalling the melody You know what, Bob, it hasn’t been done before you reductionist dweeb, and I’m not going to let you discourage me!

Here’s another variation

Bob: Oh, really? You know, Carol has been writing some stuff for cello, how does your stuff compare?

Alice: Carol’s stuff is pretty nice and I really like her Opus 17 a lot!

Bob: You and Carol should really collaborate since you’re both writing stuff for cello and so you’re both basically working on the same sort of thing.

Alice: Er, well, the thing I have in mind is a bit different than what Carol’s doing.

Bob: I mean, maybe it’s a little different, but it’s just really inefficient to have two people writing separate pieces of cello music, when we could just combine those efforts into one and get cello music that was twice as good!!

Alice: [Takes a breath] Listen, Bob, I really respect what Carol is doing and maybe it would be fun to collaborate together on a piece one day. But right now I want to do my own thing. Also, where did this reductionist idea come from that all these disparate creative efforts can just be combined like amoeba merging into one larger amoeba? It doesn’t work that way! What’s wrong with just being inspired by and having mutual respect for other’s work while still working on our own projects?

Bob: It sounds like you actually think your music is going to be better than Carol’s and that’s really what’s going on here!

Alice: What? If my 5-year old niece draws a picture that she likes, is she doing that because she thinks her drawing skills are better than anyone else? No, that does not even enter into it! She’s creating something that she likes. She doesn’t presume that her feelings about the matter are universal nor that she must convince other people to share her tastes. Some people may share her tastes, others may not, and the world goes round. We don’t need to view every endeavor in this competitive way, like we’re still cavepeople fighting over scraps of meat!

I just want to create

With music, everyone understands there’s an infinite space of possibilities, and it doesn’t really matter if you can concoct some metric which ranks two pieces of music as similar. People can listen to whatever music resonates with them, and we don’t all need to agree. It’s all good!

But with programming artifacts, we aren’t quite sure what to make of them. Programming languages, libraries, and tools are simultaneously creative tools for human expression (think: a paint brush or a violin) but also practical artifacts (think: an I-beam or reinforced concrete).

Bob: I think you’ve hit the nail on the head here. I’m uncomfortable with this wooly “everyone’s perspective is equally valid” take on creative tools. If you are building a skyscraper, you need to choose materials that are up the task and not build it out of toothpicks and marshmallows because just because you like those materials better!!

Alice: Of course. But I’d say programmer culture has this problem that the human expression aspect of programming is barely acknowledged and we therefore feel that decisions MUST be justified in terms of objective and universal statements of fact. Why can’t we just say “I prefer using XYZ and it makes me happy” once in a while?

Bob: Because that way lies madness and vagueness and all that icky liberal arts stuff! Also, how do I justify that to my boss?

Alice: Oh, gosh. It’s like you can’t acknowledge to your boss that you’re a human and part artist, you just have to pretend like you’re this hyperefficient and purely rational machine that will obey any command without thoughts or feelings! The role we have accepted for ourselves is like those badly written Hollywood sci-fi robots that can (somehow) predict exact probabilities of events out to 8 significant digits… because AI. Your happiness and motivation matters and is important… even an unfeeling boss who cared about nothing other than workers’ productivity (sounds dystopian to me) must understand that in a creative and mentally challenging endeavor such as programming it’s better for productivity when people are working with tools they like and which help them find joy in their work!

Alice (cont): And on that subject of vagueness you find uncomfortable, let me try to break down it mathematically for you. If we are being objective about it, most programming tech has a collosal number attributes and different individuals can (quite rationally) place different emphasis on these attributes. We can view this as a partial order where there is not one unique maximal element but many, none of which dominates the others, so there is only a set of tradeoffs. But not only that, because the number of attributes is collosal it is quite difficult to even study this space and come to definitive conclusions about it. People will, quite rightly, tend to make decisions by gut feel. It’s fine to embrace our uncertainty (tell that to your boss). We just don’t need to (nor can we) make definitive universal statements.

Bob: Okay okay, but come on, there ARE some objective statements you can make. Why shy away from that?

Alice: Yes, okay, there are things I believe and that I think have some rationale behind them, but life is just too short to spend time arguing with people about this stuff. If certain ideas really are “the right ones”, I’d rather just build cool things using those ideas and share my enthusiasm in the process. If that draws other people to these same ideas then that’s cool. But also if not that’s no big deal. And it could totally work the other way—maybe I’ll change how I think of things by seeing the cool work that others are doing! Basically, I don’t care about winning internet arguments with people, I just want to create and have fun, and I think it’s great that others are doing the same.


Programmers are humans, not maximally productive robots. We like certain things, have different tastes and preferences, and some ideas we just find beautiful or inspiring or motivating or they just give us joy, even independent of practical benefits! Gosh darnit, let’s embrace that and be accepting of our humanity.

Down with internet debates on programming tech!!

comments powered by Disqus