1. 程式人生 > >What Makes Software Good?

What Makes Software Good?

What Makes Software Good?

As someone who creates open-source software, I spend a lot of time thinking about how to make software better.

This is unavoidable: there’s an unending stream of pleas for help on Stack Overflow, in GitHub issues and Slack mentions, in emails and direct messages. Fortunately, you also see people succeed and make fantastic things beyond your imagination, and knowing you helped is a powerful motivation to keep at it.

So you wonder: what qualities of software lead people to succeed or fail? How can I improve my software and empower more people to be successful? Can I articulate any guiding principles, or do I just have intuition that I apply on a case-by-case basis? (Thinking about something and externalizing — articulating — that thought are two very different activities.) Perhaps something like

Dieter Ram’s principles for good design, tailored for software?

Good design is innovative.
Good design makes a product useful.
Good design is aesthetic.
Good design makes a product understandable.
Good design is unobtrusive.
Good design is honest.
Good design is long-lasting.
Good design is thorough down to the last detail.
Good design is environmentally-friendly.
Good design is as little design as possible.

I’ve tried in the past to talk about big picture stuff. Things like finding the smallest interesting problem, identifying and minimizing harmful biases in tools, or leveraging related technologies and standards.

The big picture is important — probably more important than what I’m writing about today — but I can’t help but feel that big picture advice is sometimes impractical or impossible to apply. Or worse, truisms. Like saying, “Make it as simple as possible, but no simpler.” Well, duh. We all want things to be simpler. But we may not know what to sacrifice in order to achieve that goal.

And even if you get the big picture right, there’s no guarantee your design will be successful. The execution of an idea matters as much as the idea itself. The devil is in the details.

If I can’t offer actionable big picture advice, perhaps there’s lesser advice that would be useful. A practical inspiration is Green & Petre, whose “cognitive dimensions” framework defines a set of “discussion tools” to “raise the level of discourse” about the usability of “information artifacts” such as code.

Abstraction gradient
Closeness of mapping
Consistency
Diffuseness
Error-proneness
Hard mental operations
Hidden dependencies
Premature commitment
Progressive evaluation
Role-expressiveness
Secondary notation
Viscosity
Visibility

It’s not perfect; no framework is. It was conceived to study visual programming environments, and sometimes feels specific to that application. (Consider visibility, which refers to seeing all the code simultaneously. Is any software today small enough to be visible in its entirety on a single screen? Perhaps modularity would be better?) I find it difficult to assign some usability problems to one dimension or another. (Both hidden dependencies and role-expressiveness suggest I thought the code would do something other than what it did.) Still, it’s a good starting point for thinking about the “cognitive consequences” of software design.

I won’t be defining a general framework. But I do have some observations I’d like to share, and this is as good a time as any to perform a post hoc rationalization of the last year or so I’ve spent on D3 4.0.

I’m not revisiting the “big picture” design of D3. I’m quite happy with concepts like the data join, scales, and layouts decoupled from visual representation. There’s interesting research here, of course, but it hasn’t been my recent focus.

I’m breaking D3 into modules — to make it usable in more applications, easier for others to extend, and more fun to develop — but I’m also identifying and fixing a surprising number of quirks and flaws in the API. Stuff that’s easily overlooked, but that I believe causes real pain and limits what people can do.

I worry sometimes that the changes are trivial, especially when taken individually. I hope to convince you that they are not. I worry because I think we (that is, people who write software) tend to undervalue the usability of programming interfaces, instead considering more objective qualities that are easier to measure: functionality, performance, correctness.

Those qualities matter, but poor usability has a real cost. Just ask anyone who has struggled to decipher a confusing block of code, or pulled their hair out fighting the debugger. We need to get better at evaluating usability sooner, and better at making software usable in the first place.

相關推薦

What Makes Software Good?

What Makes Software Good?As someone who creates open-source software, I spend a lot of time thinking about how to make software better.This is unavoidable:

What makes a good feature

import numpy as np import matplotlib.pyplot as plt greyhounds = 500 # 灰獵犬500只 labs = 500 # 拉布拉多犬500只 # 灰獵犬的身高高於拉布拉多犬 grey_height = 28 + 4 * np.random.ran

What Makes a Good Programmer?

What makes a good programmer? It’s an interesting question to ask yourself. It makes you reflect on the craft of software development. It is also a go

What Makes a Good Metric?

Over the last nine years, I’ve spent a lot of my time thinking about audience, metrics, culture, and journalism. In that period one thing has remained a co

Google Testing:Testing on the Toilet: What Makes a Good End-to-End Test?

by Adam BenderThis article was adapted from a GoogleTesting on the Toilet (TotT) episode. You can download a printer-friendlyvers

Ask HN: What makes great real-time, turn-by-turn navigation software?

There are a handful of examples of open source, real-time, turn-by-turn navigation software out there. For example, https://github.com/valhalla/valhalla gi

What Makes Good Leaders Great?

What Makes Good Leaders Great?“It’s a lack of clarity that creates chaos and frustration. Those emotions are poison to any living goal.” -Steve MaraboliLea

Inner Functions - What Are They Good For?

algorithm enca type rms app turned business integer about Reference: https://realpython.com/blog/python/inner-functions-what-are-they-goo

Ask HN: What is a good alternative to Confluence?

There are lots of wiki systems, but most of them have poor usability, strange markup languages and very few social functionality (comments, alerts ...). An

Ask HN: What are some good video resources to learn Object Oriented Programming

Hi, my cousin is studying CS as minor in university but he is having some hard time grasping the OOP concepts. Videos are his preferred way of learning ins

What Makes a World-Class Engineer?

As an engineering manager at Creative Market, my entire job description can be summarized in one statement: build a world-class engineering team. We want t

What Makes a Programmer?

Anarchistic [at most, hacking governments or other private entities; at least, decentralizing money, education]Independent [able to accomplish without help

Ask HN: What are some good books that explain political/economic systems?

I'd like to learn about capitalism, communism, socialism and all other variants of ruling that existed in the recent history. About their pros and cons, it

Ask HN: What makes a GREAT hackathon?

I'm helping organize the next hackathon where I work. We have something like 30-50 people participating across technical frontend and backend teams, includ

What makes a development roadmap so useful?

What makes a development roadmap so useful?Credit: Pablo Garcia SaldanaA development roadmap defines the goals of your project and the tasks needed to comp

What is a good application?

I recently applied for a position at my current corporation and one of the questions I was asked was “what is a good application?”. I never thought of it

Marginally Interesting: What is streamdrill good for?

Tweet A few weeks ago, we released the beta (oh, sorry, the “β”) of str

What Makes Bitcoin a Store of Value?

What Makes Bitcoin a Store of Value?A recent tweet-poll from Vinny Lingham reveals that, at least on Twitter, 57% of respondents will continue believing th

Ask HN: What makes a great domain name registrar?

Following the recent zoho.com downtime, an interesting discussion emerged about choosing a registrar. I always assumed registrars were "just" middlemen bet

Ask HN: What's a good “History of Technology” book

I have read a few tangential books- The Information - What does technology want - Robot Mere machine to transcend mind - Zeroand a bunch of other books in