PurelyFunctional.tv Newsletter 408: 3 stakeholders of programming

Sign up for weekly Clojure tips, software design, and a Clojure coding challenge.

Issue 408 - December 28, 2020 ยท Archives ยท Subscribe

Design Tip ๐Ÿ’ก

3 stakeholders of programming

Last time I was on the defn podcast, Vijay mentioned the 3 tribes of programming. In the article, the author specifies three archetypes of programmer:

  1. Poet mathematician
  2. Hacker
  3. Maker

Vijay noted that I was self-identifying as the "poet mathematician" because I liked the idea of programming as self-reflection. It's a good article and you should read it.

I was looking for the article a few months later and searched for "three types of programmer" to find it. It was there, but so were three other articles classifying programmers into three types. Wow! The thing is, none of them cite each other, and all four of them have similar but different categories. Here are the other articles on the front page of Google search results:

The middle one in that list has the most different categories. It categorizes them based on intelligence and effectiveness, while the others deal with their perspective on programming. I still think the one I was originally cited, the "3 tribes", is the best categorization of all of them.

Now, something is going on here. People like threes. And people like to seek categories. That's easily explainable. What's harder to explain is why the categories are so similar.

If you've followed this newsletter long enough, you'll probably guess that I've gone a little deeper into this mystery than the average blog post reader. Let's analyze what's going on below the surface.

In modern software, there are three stakeholders:

  1. Users
  2. Programmers
  3. Computers

Our software needs to address all three of these concerns. We write software to run on computers. Your code has to compile into something meaningful to the computers. But we also write software for programmers (us and our coworkers). We have to understand it later. But the software also has to do something useful for the users. Otherwise, they won't use it!

If we look at these stakeholders, we can see the three tribes poking their heads up. The poet mathematician is focused on the expression of ideas in code, which is clearly most useful for other programmers. Hackers like the mechanism of software, that is, how it runs on a computer. Their focus is the computer. Finally, the maker is concerned mostly on the user and the value they derive from the software.

Now, of course the focus isn't exclusive. A Hacker programmer could claim that the efficiency of execution they care about it obviously valuable to the user. And the poet programmer could claim that a clear and correct domain model is also useful for the users.

I think there's a rich vein of ideas here. For instance, we could ask "how does each tribe address the needs of the three stakeholders?" Or "how does each tribe fail the two non-focus stakeholders?" I'm also interested in the consequences of lowered cost of computing (execution and memory) on the triad. What do you think?

Book update โœ๏ธ

I just got back from vacation. Before I left, I reviewed half of the copyedits. I hope to finish the rest this week.

I also want to announce something here for the first time. Exclusive!

Are you ready?

I'm super excited about it.

I hope you are, too.

Ready?

Here it is:

I have two people writing forewords for my book.

But that's not the exciting part.

Are you ready for the exciting part?

Okay. Here it is:

Guy Steele and Jessica Kerr.

Those are the two authors!

I'm so excited that they took their time and attention to really understand the book and share their very personal forewords.

You can buy Grokking Simplicity and use the coupon code TSSIMPLICITY for 50% off. You can buy it now and it will be shipped to you when it's printed. Thanks to those of you who have already purchased ๐Ÿ˜˜

Keynote ๐Ÿ“ข

Using the magic of editing, David Harrigan made the recording of my keynote at re:Clojure much better. Check it out!

Quarantine update ๐Ÿ˜ท

I know a lot of people are going through tougher times than I am. If you, for any reason, can't afford my courses, and you think the courses will help you, please hit reply and I will set you up. It's a small gesture I can make, but it might help.

I don't want to shame you or anybody that we should be using this time to work on our skills. The number one priority is your health and safety. I know I haven't been able to work very much, let alone learn some new skill. But if learning Clojure is important to you, and you can't afford it, just hit reply and I'll set you up. Keeping busy can keep us sane.

Also, if you just want to subscribe for a paid membership, I have opened them back up for the moment. Register here.

Stay healthy. Wash your hands. Wear a mask. Take care of loved ones.

Clojure Challenge ๐Ÿค”

Last issue's challenge

Issue 407

Please do participate in the discussion at the submission links above. It's active and it's a great way to get comments on your code.

This week's challenge

Consecutive numbers

Write a function that takes a string of digits. Try to break up the digits into consecutive integers. If you can, return them, otherwise, return nil.

Examples

(consec "121314") ;=> [12 13 14]
(consec "121315") ;=> nil
(consec "444445") ;=> [444 445]
(consec "12") ;=> [1 2]
(consec "1") ; throws error

Thanks to this site for the challenge idea where it is considered Expert in JavaScript.

Please submit your design process as comments to this gist. Discussion is welcome.

Rock on!
Eric Normand