A few weeks ago, I posted a review of the recent book on building connected products from O’Reilly. I also have a few more books on the shelf here that touch on this area from a slightly different angle.
The Best Interface Is No Interface
I became aware of Golden Krishna, the author of this book when I attended his panel criticizing the use of dropdowns at SXSW 2016. The content in this book predates that panel by a few years, originally presented as a keynote at SXSW 2013.
The basic thesis of the book is that it’s variously easy, lazy, and sloppy to always try to address the problems we’re solving through technology by slapping a screen-based interface on top of things. Early in the book he gives the example of a keyless entry system advertised by BMW, that requires the following 13 steps to occur between a user walking up to her car and actually opening the door:
- Walk up to my car
- Pull out my smartphone
- Wake up my phone
- Unlock my phone
- Exit my last opened app
- Exit my last opened group
- Swipe through a sea of icons, searching for the app
- Tap the app icon
- Wait for the app to load and try to find the unlock action
- Make a guess with the menu and tap “Control”
- Tap the Unlock button
- Slide the slider to unlock
- Physically open the car door (my goal)
Compare that with the obviously better sequence
- Walk up to my car
- Physically open the car door (my goal)
…which is how things behave on recent Tesla models (with the added coolness of the door handles changing from being completely recessed into the body until someone tries to open them).
The book’s 21 chapters thoroughly outline the problem, three general principles to follow in addressing the problem (“Embrace Typical Processes Instead of Screens”, “Leverage Computers Instead of Serving Them”, and “Adapt to Individuals”), and some of the challenges that make this approach to design not quite so easy.
Mining a similar vein is David Rose’s 2014 book Enchanted Objects:
Some believe the future will look like more of the same—more smartphones, tablets, screens embedded in every conceivable surface. David Rose has a different vision: technology that atomizes, combining itself with the objects that make up the very fabric of daily living. The Enchanted Objects of fairy tales and science fiction will enter real life.
The opening paragraph of the book’s prologue could almost have been extracted from somewhere in ‘The Best Interface is No Interface’:
I have a recurring nightmare. It is years into the future. All the wonderful everyday objects we once treasured have disappeared, gobbled up by an unstoppable interface: a slim slab of black glass … its face filled with tiny, inscrutible icons that now define and control our lives.
These two books work together as great complements; however, Rose’s focus on building Enchanted objects alters the tone of things quite a bit. Recurring themes and references take that idea of Enchantment quite literally, as he looks at fictional magical artifacts from the Harry Potter universe.
Besides many case studies of examples that illustrate his premises, he provides a pair of frameworks for thinking about systems that can be used as a designer of enchanted objects:
Six Human Drives
In these chapters, Rose develops dialectics between fictional enchanted objects (e.g., Dorothy’s Silver/Ruby slippers) and an analogous real one (in this case, the Nike+ shoes). He delineates six human drives that can be augmented or addressed through enchanted objects:
The Design of Enchantment
This set of chapters discusses opportunities and techniques for engaging more of our users’ senses through system design, rather than requiring the user to focus on a glass slab. He calls for a careful use of ‘subtle and subliminal phenomena’. He calls these out as the ‘Seven Abilities of Enchantment’:
Optimism and Humanism
Especially when considered as a pair, even though there’s much in these books that’s deeply and sometimes harshly critical of products that have been widely lauded, I see these books as extremely optimisitic visions of the future than not only should be, but that actually can be.
I’m not sure which will prove to be more difficult in practice:
- Learning to put these kinds of approaches and principles into practice when desiging systems
- Convincing the stakeholders on our projects that we can use these ideas to build better systems that adapt to their human users instead of continuing to require the opposite.
One could say that the ideas behind these ideas go back a long time, popping up in books like Donald Norman’s classic “The Design of Everyday Things”, “User Centered System Design”, or Jef Raskin’s “The Humane Interface,” but those were all written in an era when the idea of tiny battery-powered computing devices that are orders of magnitude more powerful than desktop/workstation machines of the era was still purely speculative.
The future is finally getting here, let’s try not to mess this part of it up.
Put your credit card back in your wallet — I’ve found some really good software development books that are available for free, and will keep you busy until the end of the year, at least.
The Nature of Code by Daniel Shiffman
Daniel Shiffman is a professor at NYU’s ITP program, where he teaches “a course entitled Introduction to Computational Media. In this course, the students learn the basics of programming (variables, conditionals, loops, objects, arrays) as well as a survey of applications related to making interactive projects (images, pixels, computer vision, networking, data, 3D).”
So, on the one hand, this is a book targeting beginners (or near beginners..) but quickly dives into topics like working with particle systems, physics libraries, and neural networks. I’ve been writing code for a living for a long time now, and I learned a ton from reading this book. It’s available for purchase in either PDF, or print formats, but it’s far more useful in its online form.
Online version (and links to paid versions) available here.
The Mature Optimization Handbook by Carlos Bueno
Carlos Bueno is an engineer at Facebook, and has written a book that came out of an internal training class he taught there. Thorough, and brings an interesting spin on the idea of when it’s even worth your time to optimize heavily:
“Unlike testing or bug-fixing, performance work can often be deferred until just before or even after the program has shipped. In my experience, it makes most sense on mature systems whose architectures have settled down. New code is almost by definition slow code, but it’s also likely to be ripped out and replaced as a young program slouches towards beta-test. Unless your optimizations are going to stick around long enough to pay for the time you spend making them, plus the opportunity cost of not doing something else, it’s a net loss.”
Available in ePub, Mobi, and PDF formats here.
Mathematics for Computer Science, by Lehman, Leighton, and Meyer
876 page text from the 6.042 class at MIT’s Computer Science and Artificial Intelligence Lab. Even if you already know all of what’s in this book (hint: you probably don’t), it’s an amazing reference. If you’re going to learn something from the book, a little poking around on the CSAIL website will lead you to the problem sets that are used in that class.
PDF format available here.
It’s been a long time since I’ve done a link dump here. The recurring (but not exclusive!) theme today is that specialization is for insects. (more…)
I’d like to expand on Brett’s post a bit with some more recent books that I’ve enjoyed. And another which is perhaps a few clicks off the maintained trail.
The Algorithm Design Manual (Steven Skiena)
I’ll kick this discussion off with the fact that I don’t have a Computer Science degree. There, I said it. No degree. Ask me and I’ll give you the info: There’s no Computer Science degree here. Anyway. As a pure practitioner, I love books that usher out-of-reach concepts into the realm of real-world applicability, and this one does exactly that. This book is one part catalog of algorithms, the other part a series of “war stories” — real problems the author has tackled during his career using variations of the algorithms presented.
The Little Schemer (Matthias Felleisen, Daniel P. Friedman)
This book taught me a conscious way to write recursive routines. Prior to reading, I’d hammer the keyboard with a gloved hand and hope for the best. The preface mentions that this book is itself derived from a course taught by the authors on Scheme programming — to non-technical public affairs students. Yes, so you might imagine that the presentation inside is not your typical c0d3rz manual. I’ve dispatched this book to a couple of my non-technical friends, and the consensus is that this book is a gem.
Hacker’s Delight (Henry S. Warren, Jr.)
Count 1-bits in a word. Reverse bits in a byte. Transpose a 32×32 bit matrix. This book is a catalog of interesting passages of low level bit-twiddling code. Thanks to modern day tools, I haven’t needed to reach for many of the tactics described in this book, but it is an enjoyable and mind-contorting swim through the ether of machine words and switch flippery. Looks like I need to pick up the recently released second edition.