Very Good Article on Software design and project management
http://software.intel.com/en-us/blogs/2013/04/22/the-software-manifesto-9-principles-for-higher-level-coding-0
minifesto.org/
"......
http://software.intel.com/en-us/blogs/2013/04/22/the-software-manifesto-9-principles-for-higher-level-coding-0
minifesto.org/
"......
There’s an interesting link being passed around today titled “Manifesto for Minimalist Software Engineers”.
It’s a list of nine basic principles to keep in mind when developing
good software and it’s definitely worth a read whether or not you’re in
the developing industry. Ranging from “fight for Pareto” to “think
different”, these simple, thoughtful guidelines are a higher level look
at the nuts and bolts of everyday coding. We’re going to look at just a
few of these helpful thoughts here.
The 80/20 law
There’s a business principle called Pareto’s law; it’s basically the
same thing as K.I.S.S (keep it simple stupid). A more elegant
explanation can be found below:
“The Pareto principle (also known as the 80–20 rule, the law of the vital few, and the principle of factor sparsity)
states that, for many events, roughly 80% of the effects come from 20%
of the causes. Business-management consultant Joseph M. Juran suggested
the principle and named it after Italian economist Vilfredo Pareto, who
observed in 1906 that 80% of the land in Italy was owned by 20% of the
population; he developed the principle by observing that 20% of the pea
pods in his garden contained 80% of the peas. It is a common rule of
thumb in business; e.g., "80% of your sales come from 20% of your
clients". – Wikipedia, “Pareto’s Law”
When this principle is applied to creating great apps, the manifesto has this to say:
“Best engineers are those who can estimate the effort of
new requirements and they are the only with enough information to
refuse the 80% that is not in the optimal next scope…..The worst code you've ever written is the code that is no longer used. Is called YAGNI (You Are Not Gonna Use It). The best code you've ever written is the code you didn't write, simply because it's the only that never fails.”
Priorities
When you have a lot to do, it can be difficult to figure out what to
tackle first. This is especially true for developers, especially when
faced with a slew of bugs or errors or projects that, of course, are all
due at about the same time. When faced with a long to-do list, some
people stick their heads in the sand and procrastinate, while others
attack on multiple fronts, while still others resolve issues in order of
importance:
“Minimalism is not about not doing things but about focusing first in the most important.”
This is a thought echoed by productivity guru Leo Baubata, who writes the popular blog ZenHabits:
“Our work day is made up of an endless list of work tasks. If you
simply try to knock off all the tasks on your to-do list, you’ll never
get everything done, and worse yet, you’ll never get the important stuff
done. Focus on the essential tasks and eliminate the rest….. – ZenHabits.net, “Simple Living Manifest: 72 Ideas to Simplify Your Life”
It’s about the process
One of the strongest enemies of true progress is the quest for
perfection. If it has to be perfect from the start, how will you ever be
able to take a step forward?
“Look for perfection, but not yet. Iteration is that friend that gives you the right advises at the right time. First do it, then do it right, then do it better.”
This is something we observed over the course of seven weeks in the
Ultimate Coder Challenge. Seven coder teams took on a seemingly
impossible challenge – build a working perceptual computing app with a
brand new computer, a brand new SDK, and technology that nobody really
knows anything about. Instead of running away screaming (which any sane
coder might have chosen to do), these seven teams pulled up to the table
and dug in. From one of the Challengers:
“As I write this, there is no app, no design and no code. I have a
blank sheet of paper and a few blog videos. The six developers I am
competing against are established, seasoned and look extremely
dangerous. My chances of success are laughable, so given
this humorous outcome, I'm just going to close my eyes and start typing.
When I open them in seven weeks, I'll either have an amazing app or an
amazing lemon.” – Lee Bamber, Ultimate Coder Challenge: Going Perceptual
As we prepare to crown the winner in this Challenge, it’s interesting to note that all the
contestants had about this same attitude: it’s not necessarily about
the destination, but the journey. Starting out with perfection as your
ultimate goal is certainly admirable, but it doesn’t allow for the
learning opportunities that are no doubt going to be dropping into your
lap along the way.
Simplicity
With the popularity of touch designs in form factors, one of the
issues that developers have to contend with is figuring out how to do
more with less. The old adage of “keep it simple silly” certainly
applies to touch. It’s an input method that forces simplification; you
have to decide which actions are most important, what stays on the
screen and what goes away. It can be a difficult process, but you end up
with software that is easier to understand and therefore much easier to
use. Users need input methods that are streamlined, non-fussy as
possible, and effective. In order to get people to interact with touch,
developers have to design for predominately direct manipulation; i.e.,
you have to use your fingers to interact with the content. The content
is the user interface, making a change from the graphic interface.
Distance has effectively been reduced in touch, in other words, extra
“stuff” like icons, fiddly little toolbars, and pointers just get in the
way. Simple is best:
“We have to write code for humans, not machines and
synthesis is the key of communication. A good example is the Pasteaurs's
quotation "If I Had More Time, I Would Have Written a Shorter Letter".
Try to keep methods as short as possible, classes with a single
responsibility, few parameters, avoid redundant comments… The work is
finished when you have nothing to take away.”
Simplicity in coding is easier said than done, but it can serve a
dual purpose of providing a better user experience and a more powerful
application:
“Remember that beautiful doesn’t always equal usable. Heavyweight
designs often don’t serve the purpose of the user; they may be created
to please the eye rather than to facilitate functionality. Treat
accessibility and usability as top priorities….Simplicity is achieved by
thoughtful reduction. When reducing, be mindful of your organization.
Even if you are dealing with a large number of UI elements or a great
deal of code, a proper hierarchy and structure can convey the feeling of
simplicity.” – Adobe.com, “The Pursuit of Simplicity”
Seeing the forest for the trees
When you’re in the midst of a development project, it can be easy to
lose perspective, focusing on all the myriad details that need to be
accomplished rather than seeing the bigger picture. These nine
principles for software developers are good reminders to keep that
higher level thinking engaged in order to see a project through to its’
greatest potential.
Would you add to this list? What would your personal software
development manifesto include – and why? Let us know your thoughts in
the comments...."
No comments:
Post a Comment