PurelyFunctional.tv Newsletter 439: How to invent the future
Sign up for weekly Clojure tips, software design, and a Clojure coding challenge.
Deep thoughts 🤔
After my essay last week about making programming tangible, several people pointed me to Dynamic Land, Bret Victor's research project to create a dynamic medium that fills a space. The users can occupy that space and manipulate real objects.
I think it's a really cool vision and I'd love to play with it. I'd love to have one in my house, even! Check it out if you haven't. Read the homepage and you'll get what they're trying to do.
They have a longterm vision of creating a space that is the medium. Meanwhile, what they have now is a way of exploring and iterating on individual components of that space. It's beautiful and I'd love to be a part of it.
Alan Kay talks about the method used at Xerox PARC: Look out 30 years and project what technology will be possible and desirable given current trends. Pull that vision back to where it should be in 10 years. Spend your way to that 10-year spot. Make it so you can iterate quickly and experiment in that future computing environment. It will start bearing fruits in 3-5 years.
I've never visited Dynamic Land, but it looks like they're following this playbook closely. The 30-year vision is fully immersive, interactively authorable holographic projections that fill a space. The 10-year point is being able to track movement and project 2D onto any surface. They set up the space with cameras and projectors and a clever system that identifies papers with colored dots in the corners. They've got a quick way to make new objects (color laser printer) and edit existing objects (web interface to edit code).
I believe what I was asking for is slightly different. In Dynamic Land, the code is Lua. You type it in a web interface and send it to the printer. The code is small because a lot of the work is done between the papers. But it's still Lua code. That's not a criticism. I think where they're at in the project, it's perfect. I'm just saying it's different from what I talked about in the last issue.
What I would like is for the construction of a program to be tangible. That is, somehow the primitives in the "language" can be put together, much like a construction toy. The question is what can those primitives be? And how can geometry be used to facilitate composition? How can the dynamics of the system be understood quickly?
I think it's a 10-year research project that I'm not prepared to embark on. And I bet Dynamic Land, ironically, is well-suited to do that exploration. Since we don't know what the primitives would be yet, we'd need a way to program them and iterate quickly, which is exactly what the Dynamic Land system gives you, even if you're writing the code in text.
Book update 📘
Grokking Simplicity is now available on Amazon! People have already been receiving their copies.
NOTE: I still can't recommend the Kindle version :( The layout is not just bad, it's unreadable.
Please, if you like the book and/or believe in its mission of starting a discussion about the practice of FP in the industry, please leave a 5-star review. Reviews will help people learn whether the book is good before they buy. I'm up to four reviews so far.
You can also get a copy of Grokking Simplicity at Manning's site. There you can use the coupon TSSIMPLICITY for 50% off.
Pandemic 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. Get vaccinated if you can. Take care of loved ones.
Clojure Challenge 🤔
Last issue's challenge
- Maximum sum - Submissions
This week's challenge
Write a function that splits English words into syllables, according to these rules.
(sylsplit "hello") ;=> ["hel" "lo"] (sylsplit "apple") ;=> ["ap" "ple"] (sylsplit "entrenched") ;=> ["en" "trenched"]
Note that this task is deliberately underspecified. The rules of English syllable splitting can get quite complicated. Take your solution as far as you like.
Please submit your solutions as comments on this gist.