PurelyFunctional.tv Newsletter 418: Clojure's buzz

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

Issue 418 - March 15, 2021 ยท Archives ยท Subscribe

Clojure's buzz ๐Ÿ

Hi Clojurists!

I took the first big step in a year-long plan to migrate my entire platform. My courses are now hosted on Podia, and all of the existing purchasers have been imported. Thanks for your patience throughout this process. I think Podia will give you a smoother, more reliable experience. But transitions can be rough.

Note that you can still access everything on the old site at PurelyFunctional.tv if you are a customer. And memberships are being phased out, so they have not migrated. The last thing I need to do is migrating team licenses over, which should happen this week.

Thanks so much for being a part of this amazing journey.

Today I've been thinking about the size and growth of the Clojure community. As JavaScript seems to grow and take up all the air in the room, I wonder about the health of the Clojure community. I'm confident that Clojure is not going anywhere. There's too much code already written at important companies. And Clojure itself is now supported directly by one of them.

However, I'll often talk to people outside the community who think it's dead. Like, not dying, but dead. Why? Because they don't hear anything about it. There's no news, so it doesn't exist. To the larger programmer community, news, churn, features, deprecations, and perhaps even scandals are a sign of thriving. That's the metric of a pop culture, just like music.

I'm turning 40 this year. I've seen some things come and go. I know that just because everyone is talking about XYZ.js today, doesn't mean it will have any impact in 5 years. Buzz does not count, in my mind, and I think to people who like Clojure, it doesn't count for them, either. What I've tried to learn over the years is to look below the surface. What problems does this thing actually solve? Most of the buzzworthy "technologies" don't even pass this basic sniff test.

Clojure doesn't have the sheer quantity of novelty and experimentation to prove that it's alive by the pop culture metric. But perhaps we could supplement that? I've often wondered if we could create press releases about old features. Imagine these headlines "Clojure library still works after 7 years with no commits," or "JS Community release 17 new frameworks last year, Rich Hickey evaluated 180 design approaches in his head last week while laying in a hammock."

It's a joke! But it points to a greater truth: Clojure's stability and slow, steady pace are features that won't get talked about. That has serious consequences. I don't expect Clojure to get as popular as Scala or anything. But I would love for Clojure's growth to be higher for my own interests (more customers :).

Well, I don't have anything more interesting to say. I don't have any good ideas about how to drive growth. If you do, please let me know. Just hit reply, as always.

Book update โœ๏ธ

Grokking Simplicity is working its way through production at Manning. I just reviewed the frontmatter (preface, forward by Guy Steele and Jessi Kerr, table of contents, etc) and the index. Those are the two slices of bread that sandwich the content. Next up is a review of the complete print-ready proof. I am very anxious to get this book done!

Grokking Simplicity is available for pre-order on Amazon. One day I will ask you for a favor: a review on Amazon.

However, you can buy Grokking Simplicity on Manning's site today 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. Meanwhile, you can read the PDF version today!

Thanks to those of you who have already purchased ๐Ÿ˜˜

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.

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

Clojure Challenge ๐Ÿค”

Last issue's challenge

Issue 417

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

Index map

A vector can be seen as a mapping of index to value. However, we want a mapping from value to indexes. Write a function that takes a sequence and returns a map where the elements of the sequence are the keys and the values are sets of the indexes where the value is found.

Examples

(index-map []) ;=> {}
(index-map [1 2 3]) ;=> {1 #{0} 2 #{1} 3 #{2}}
(index-map [1 1 1]) ;=> {1 #{0 1 2}}
(index-map [1 2 1 2 1]) ;=> {1 #{0 2 4} 2 #{1 3}}

Bonus: Write the inverse function that takes one of the returned maps and turns it into a sequence.

Thanks to this site for the challenge idea where it is considered Hard in Ruby. The problem has been modified from the original.

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

Rock on!
Eric Normand