Saturday, August 21, 2010

Book: Pragmatic Thinking and Learning
Refactor Your Wetware

by Andy Hunt (Pragmatic Programmers)

Free chapter online:
Journey From Novice to Expert

Use the Dreyfus Model on the road to expertise:

Stage 1: Novices


Novices have little or no previous experience in this skill area. By “experience,” I mean specifically that performing this skill results in a change of thinking...
They can, however, be somewhat effective if they are given context-free rules to follow, that is, rules of the form “Whenever X happens, do Y.” In other words, they need a recipe.

Stage 2: Advanced Beginners


Once past the hurdles of the novice, one begins to see the problems from the viewpoint of the advanced beginner. Advanced beginners can start to break away from the fixed rule set a little bit. They can try tasks on their own, but they still have difficulty troubleshooting.

Stage 3: Competent


Competent practitioners can now develop conceptual models of the problem domain and work with those models effectively. They can troubleshoot problems on their own and begin to figure out how to solve novel problems—ones they haven’t faced before. They can begin to seek out and apply advice from experts and use it effectively.

Stage 4: Proficient


Proficient practitioners need the big picture. They will seek out and want to understand the larger conceptual framework around this skill. They will be very frustrated by oversimplified information.

Stage 5: Expert


Experts are the primary sources of knowledge and information in any field. They are the ones who continually look for better methods and better ways of doing things. They have a vast body of experience that they can tap into and apply in just the right context.

SW Paradigms: Waterfall, Agile, Craftsmanship

Software Manifesto Paradigm Shifts:
Waterfall, Agile, Craftsmanship

I have combined "Manifesto for Software Craftsmanship"
with "Agile Manifesto" (see both at the end of this text)
to present natural evolution of software development processes.

WaterfallAgileCraftsmanship
3. comprehensive documentation2. working software1. well-crafted software
1. following a plan4. responding to change2. steadily adding value
4. processes and tools1. individuals and interactions3. community of professionals
2. contract negotiation3. customer collaboration4. productive partnerships


In addition, I have extended the evolution metaphor
to "maturity models" (you => I => we), well known in psychology,
and popularized by book "7 Habits of highly effective people".
"Agile" principles are described in contrast with pre-Agile ("Waterfall"),
and "Craftsmanship" principles are described in contrast with Agile.

The order of principles has changed, I have added numbers in the table to show original priority. For "Waterfall" order of priorities, I am sure pre-Agile practitioners would have opinion of their own.

Now, those "levels of thinking" could be related to paradigm shifts well known in psychology, and described by Dr. Stephen Covey in his seminal book "7 Habits of Highly Effective People"
that represent maturity level of an individual or an organization.

Dependence Independence Interdependence
YOU I WE
take care of me can do it myself can do it better together

  • At the beginning, a developer behaves as a child, dependent on a bureaucratic organization to do planning, monitor every step.

  • By accepting Agile principles, a developer becomes independent, able to solve problems on his/her own in efficient way.

  • Finally, at Craftsmanship level, it accepts ultimate response-ability for Quality of the work, and is able to work in interdependent effective teams to produce worthy results in a synergistic way!
This progression is natural, and requires focused effort. It applies to all fields of human development, including software! There are no shortcuts, and focused practices help produce real professionals in the field.
By extending the metaphor, we can describe "7 Habits of Highly Effective Software Developers", almost as a tutorial how to improve on Jurney from Novice to Expert described in excellent book Pragmatic Thinking and Learning by Andy Hunt, one signers of Agile Manifesto.



Manifesto for Agile Software Development
We are uncovering better ways of developing software by doing it and helping others do it.
Through this work we have come to value:


Individuals and interactions  
over processes and tools
Working software  over comprehensive documentation
Customer collaboration  over contract negotiation
Responding to change  
over following a plan

That is, while there is value in the items on the right, we value the items on the left more. 


Manifesto for Software Craftsmanship "Raising the bar.
As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:

Not only working software, 
but also well-crafted software
Not only responding to change, but also steadily adding value
Not only individuals and interactions, but also a community of professionals
Not only customer collaboration, but also productive partnerships

That is, in pursuit of the items on the left we have found the items on the right to be indispensable."



Google makes Chrome devs dig into pockets | Reuters

The payment must be made using Google Checkout, which links payments to a credit card, effectively creating a paper trail to the developer, or at least to the billing address and phone number recorded by the credit card company.

On the plus side, Chrome extension developers will be able to charge for their wares when the Chrome Web Store opens for business later this year.

Google has set the minimum price for an add-on, theme or Web app at $1.99 -- developers can continue to give away their work if they want -- and will take a 5% cut of the purchase price, along with a 30-cent transaction fee for each download and payment. A developer who charges the minimum for an extension would then receive $1.59 per download.

Developers can charge a one-time fee or sell their software via monthly or annual subscriptions.