PurelyFunctional.tv Newsletter 281: Intelligence Augmentation, Complexity, Game Engines
Sign up for weekly Clojure tips, software design, and a Clojure coding challenge.
This week I received a gift from one of my members who had recently gotten his first job in Clojure. I was very touched. It is nice to be able to help people like that.
I also discovered Learn Reagent. It's a series of video tutorials by Jacek Schae. Please check it out if you'd like to learn how to develop apps with Reagent.
Please enjoy the issue.
PS Want to get this in your email? Subscribe!
I've been thinking a lot about Clojure error messages. I came to a realization that really helped me understand why the messages are the way they are, some of Cognitect's messaging, and the role Spec can play. I wrote this to share those ideas.
Kent Beck's advice for writing software that is too complex to keep in your head.
Jason Steinhauser gives a great introduction to the idea of Property-Based testing. What is it? Why would we use it? How do we use it? I think Property-Based testing is awesome and should be used more, in all languages. I hope it will be in Clojure with Spec's deep integration with it.
Nicky Case has a new article in MIT's Journal of Design and Science. It's about Intelligence Augmentation. It argues that we don't need to fear AI because humans working with machines will always be smarter than a machine by itself. Check out the other articles in this issue of the journal.
The Ultimate Guide to Clojure Concurrency PurelyFunctional.tv
About a year ago, I published this ~40 page guide to Clojure concurrency. It talks about the meaning of concurrency, discusses how best to approach concurrency problems, and lists a catalog of concurrency primitives available in Clojure, with examples. Thanks to the suggestions of my readers, it has become an awesome resource and a model for the kinds of written guides I'd like to have on PurelyFunctional.tv. There's also a video course about the same topic.
Alex Miller wrote about the variety of abstractions that make up the collections library in Clojure. In most languages, the collections are presented as a way to store multiple values, perhaps for use in an algorithm. But I really appreciate how they are laid out in Clojure. They're organized based on what abstractions make sense for them to implement.
This difference in perspective is hard to articulate. I was talking to someone the other day about sets (the collection type). He said, 'When I think sets, I think "store values with no duplicates".' However, when I think sets, I think 'idempotence, containment checks, intersections, unordered iterative access'. Clojure taught me to see at a richer level of detail.
Defold is a pretty cool game engine. And it's super cool that the editor is written in Clojure. This article talks about why they chose Clojure. It's not super in-depth. It also points to some Clojure tutorial videos they made.
Arne Brasseur treats us to a year in review over at Lambda Island. Arne is such a nice, generous person that I can't help but love his work.
Data Modeling in Clojure Video Course
Modeling a domain in Clojure usually involves using collections and functions. If you enjoyed my collections guide, you will like watching me analyze and develop several models. I use the game of Solitaire as an example domain. We explore different ways to model different aspects of the game, including functions, tuples, and maps.