This talk is about software and the design of software. It is in the domain of visualization, but about software design. Mike Bostock. UCSD Design Lab. Spring 2016. youtube
blog ![]()
YOUTUBE XowhTotAIpA
This talk is about software and the design of software. It is in the domain of visualization, but about software design. Mike Bostock. UCSD Design Lab. Spring 2016. youtube
blog ![]()
I love to help people. It is a valuable thing for me to do with my time because I learn a lot about what they struggle with.
What qualities of software lead people to succeed or fail?
Can you articulate your guiding principals? Thinking about something is a very different activity than articulating it.
We should evaluate code, like any tool, not merely on whether it performs its intended task, but whether it is easy to become proficient, and whether using it is efficient and enjoyable.
On the subject of undervaluing the human aspect of design, hear Dieter Rams: "Indifference towards people and the reality in which they live is actually the one and only cardinal sin in design." wikipedia ![]()
Good documentation does not excuse bad design. The clarity of examples, and the software’s decipherability and debuggability in the real world, are likely far more important. Form must communicate function.
# What Is The Purpose of Good Software?
Humans have powerful but limited cognitive capacity. Many [demands] compete for that capacity. Most importantly, humans learn. I hope my examples showed how the design of programming interfaces has a strong effect on whether humans can understand code and by extension whether they can learn to be proficient.
But learning goes beyond proficiency with a given tool. If you can take what you learn in one domain and apply it to other domains, that knowledge is much more valuable.
I don’t want you to learn D3 for the sake of D3. I want you to learn how to explore data and communicate insights effectively.
# Good software is approachable.
It can be understood completely in independent, easy pieces. You don’t need to understand everything before you can understand anything.
# Good software is consistent.
It lets you take what you’ve learned about one part and extrapolate it to the rest. It doesn’t self-contradict. It is parsimonious, avoiding superfluous elements.
# Good software explains itself.
It has affordances for learning and discovery. It is role-expressive and minimizes hidden magic.
# Good software teaches.
It doesn’t just automate an existing task, but provides insight or imparts knowledge, such as a best practice or a new perspective on a problem.
# Good software is for humans.
It is cognizant of people and the reality in which they live. It does not expect elaborate and arbitrary rules to be memorized. It anticipates the need for learning and debugging.