In last week’s post on the Coding Craze, I referred to the continuing
reduction in the need for low level coding – even as what is defined as
low level continues to rise and be more abstract, more separated from
the machines that the software controls. I even noted the work in
artificial intelligence to create programs that can program.
All
of this is a reflection of the fact that pure coding itself is only a
small part of what makes software successful – something that many
coding courses don’t discuss.
Many years ago in the programming
world, there was a relatively popular methodology named after its two
creators – Yourdon and DeMarco. While it has been mostly been
remembered for its use of data flow diagrams, there was something else that it taught which too many coders don’t realize.
There
is a difference between what is logically or conceptually going on in a
business and the particular way it is implemented. Yourdon asks
software designers to first figure out what is essential or as he put it:
“The
essential system model is a model of what the system must do in order
to satisfy the user’s requirements, with as little as possible (and
ideally nothing) said about how the system will be implemented. … this
means that our system model assumes that we have perfect technology
available and that it can be readily obtained at zero cost. [Note: this is a lot closer to reality today than it was when he wrote about zero cost.]“Specifically,
this means that when the systems analyst talks with the user about the
requirements of the system, the analyst should avoid describing specific
implementations of processes … he or she should not show the system
functions being carried out by humans or an existing computer system. …
these are arbitrary choices of how the system might be implemented; but
this is a decision that should be delayed until the systems design
activity has begun.”
Thinking this way about the world operates
and how you want it to operate is the start of software design.
Software design really has two, related, meanings – like C++
overloading.
First, there is the design of the architecture of
the software and overall solution. Diving into coding without doing
this design is what leads to persistent and embarrassing bugs in
software. The internal design is also necessary to avoid spaghetti code
that is hard to fix and to improve performance, even in these days of a
supposed abundance of compute resources.
Second, there is the design of the interface that the user sees –
with all the things to worry about that we associate with the “design
thinking” movement.
(One way of planning software is to imagine
the software designer is a playwright, who is responsible for all the
parts of the play aside from one, the user’s part. I guess this is more
like improv than a play, but you get the idea 🙂 )
So maybe in
addition to the coding class, the wanna-be software developer should go
to improv or drama school. That’s a more likely path to knowing how to
generate the WOW! reaction from users that makes for software success.
© 2016 Norman Jacknis, All Rights Reserved
[http://njacknis.tumblr.com/post/141545808566/beyond-the-craze-about-coding
]