âŚback in Portland after being in London and New York City for the past
two weeks. Itâs nice to be home. :-)
I came across this interview with
Matz earlier today. It was
published almost three years ago (pre-Rails)⌠Iâm quite intrigued by
what he is advocating hereâŚ
Bill Venners: You also mentioned in your ten top tips: âBe nice to
others. Consider interface first: man-to-man, man-to-machine, and
machine-to-machine. And again remember the human factor is important.â
What do you mean by, âconsider interface first?â
Yukihiro Matsumoto: Interface is everything that we see as a user.
If my computer is doing very complex things inside, but that
complexity doesnât show up on the surface, I donât care. I donât care
if the computer works hard on the inside or not. I just want the right
result presented in a good manner. So that means the interface is
everything, for a plain computer user at least, when they are using a
computer. Thatâs why we need to focus on interface.
Some software peopleâlike weather forecasters, the number
crunchersâfeel that the inside matters most, but they are a very
limited field of computer science. Most programmers need to focus on
the surface, the interface, because thatâs the most important thing.
Bill Venners: You also mentioned machine-to-machine interfaces, so
are you just talking about interfaces for users or also for machines?
Yukihiro Matsumoto: Itâs not just user interfaces. When machines
are talking to each other via a protocol, they donât care how the
other is implemented on the inside. The important thing is the proper
output getting passed correctly via the proper protocol. Thatâs what
matters.
If you have a good interface on your system, and a budget of money and
time, you can work on your system. If your system has bugs or is too
slow, you can improve it. But if your system has a bad interface, you
basically have nothing. It wonât matter if it is a work of the highest
craftsmanship on the inside. If your system has a bad interface, no
one will use it. So the interface or surface of the system, whether to
users or other machines, is very important.
One of things that weâre really advocating with Dialogue-Driven
Development is artifact generation. Wireframes and lightweight
prototypes are great for generating constructive dialogue between
clients, users, and our team. We should make sure that we understand why
and how users will use an interface before we worry about the code that
will drive it. Too often we fall into a pattern of thinking where weâre
convinced that we can build an agnostic application that has various
interfaces to a central repository of business logic and data. While we
strive for this during development, it really should be focused on after
some initial interaction design has been planned. Of course, this is my
opinion.
So, I must ask you. When youâre working with on a new project, do you
focus on interface or code implementation first?