TrainingConferencesAbout UsContact UsAdvertiseSQE.comRSS Feed

StickyMinds.com: brain food for building better software

Log In
 Clarify Your Search Criteria

Tips on Using Our Search Feature(s)
 
StickyMinds.com Home
ResourcesTopicsCommunityPowerPass
Home  >  Detail: The Joy of Unlearning



A StickyMinds.com Original
Article Picture
The Joy of Unlearning

By Andy Hunt

Send This Content to a FriendGet a Short Link to This ContentPrint This ContentSee User Comments About This Content

Summary: There's more to a car than just a horseless carriage; you can't approach new technology with old habits. In this week's column, Andy Hunt explains more about the unlearning process and how rewiring your brain isn't as hard as you might think it is.


Rally Software Development
One of the foundations of Agile development is coping with change. But despite change being so constant and pervasive, you may find yourself applying the same old techniques and approaches you've always used. As important as learning is, remember that you'll need to do some unlearning along the way as well.

As technology advances, once important things may fall by the wayside. Not only are they no longer useful, they can actually harm your effectiveness. When I began programming, memory overlays were a big deal. You often couldn't fit the whole program in main memory (48K or so) at once, so you had to split your program into chunks. When one chunk was swapped in, another chunk had to be swapped out, and you couldn't call functions in one chunk from the other. That sort of constraint dramatically affects your design and coding techniques.

Not long ago, much effort was spent wringing extra cycles out of the processor by hand-tuning the assembly language output of the compiler. Think of that in the context of writing some JavaScript or a piece of J2EE code. For most business applications, the technology has changed extensively from the days of limited memory footprints, manual overlays, and hand-tuned assembly language (although this may still be the case in embedded systems development). But some developers never unlearn their old habits.

Once Upon a Time
I was once shown a piece of code that contained a single large for-loop written in C. The code inside the loop went on for sixty printed pages. The author "didn't trust" compiler optimizations and decided to do loop unrolling and other "tricks," by hand. Once upon a time, that might have been an acceptable tradeoff. Machines and CPU cycles were expensive, but now they are common. Developer time has become the scarce and expensive resource, and that fact is slowly but surely dawning on people.

We've seen ten-man-year J2EE projects go down in flames, only to be replaced with a month-long hack in PHP that delivers most of the necessary features. Growing interest in languages like PHP and Web frameworks like Ruby on Rails shows that developers are realizing that the old ways may not cut it anymore.

But unlearning can be hard--corporately as well as individually. Many a team has floundered because the management refused to spend $500 on a build machine, choosing instead to waste tens of thousands of dollars on programmers’ time chasing down problems that shouldn't have even come up. That may have been the right answer years ago, but not now.

Old Habits Die Hard
When learning a new technology, ask yourself if you're projecting too much of the old attitudes and approaches onto it. For instance, learning to program in an object-oriented language is fundamentally different from programming in a procedural language. It's pretty easy to spot someone writing C code in Java, for instance, or VB in C#. When that happens, you're losing the very advantage you hoped to gain by moving to the new technology.

Old habits are hard to break, and even harder to notice. The first step to unlearning--and the hardest part--is to realize that you're using an outdated approach. The next hardest part is actually letting go. Mental models and patterns of thought are built and refined at great cost, and one doesn't discard them lightly. It takes awareness, conscious effort, and hard work.

Taking the time to transition completely to the new environment can help. For instance, when learning a new programming language, use the new IDE that comes with it instead of the plug in that works with your old IDE. Write a completely different kind of application from the kind you usually write. It's easier to form new associations and new habits when there's less baggage from the old habits lying around.

When learning something new, unlearn the old that it replaces. After all, there's a lot more to a car than just a "horseless carriage."

About the Author
Andy Hunt partners with Dave Thomas in The Pragmatic Programmers, LLC, specializing in helping people find better ways to develop software. They helped author the now-famous Agile Manifesto, and speak internationally on new ways of producing software. From their best-selling book, The Pragmatic Programmer, to the new titles from their Pragmatic Bookshelf publishing company, Andy and Dave are there to help programmers stay on top of their game. Andy is a regular contributor to StickyMinds.com. Contact him via www.pragmaticprogrammer.com.

Back to Top
 
 


Member Comments
Add Your CommentExpand Comments
 
Comment:    
by Mike Whittaker 1/6/2006

Perhaps "unlearning" is not the most appropriate phrase - after all, you still retain your knowledge and experience in (say) overlay techniques, and may even recognise a "design pattern" and solution by analogy with "outdated" skills which can help with a current problem. I would rather think of learning new habits for a new context. After all, a habit is just a behavioural shortcut to avoid having to explicitly think about everything each time. But be aware that you are using them !

 
 
Comment:    
by Andrew Raybould 12/28/2005

Andy, as with most other things in computing, abstraction helps in sorting things out. Fundamental and general principles, such as 'measure before optimizing', tend to be abstract, widely applicable, and long-lasting. Specific techniques, such as overlaying, are contingent on specific circumstances (in this case, on having programs larger than physical memory and no virtual memory), and are likely to become obsolete. If you understand that your knowledge can be looked at in this way, you can use general principles to help decide which techniques are applicable to your circumstances. Unfortunately, IT tends to under-value generalized,...Read On

 
 
Comment:    
by Diane Albert 12/27/2005

Nice summarization Andy. I am partnering with another colleague to develop our engineering methodology, centered around the end-user experience, but in doing so trying not to alienate our developers and instead understanding what they must go through to create solutions. Traditionally, our philosophy has been total customer focus, which to IT means get it out there quickly. For me, total customer focus means creating what the customer wants and doing that with minimal defects. It's been an uphill climb to convince IT (unlearning) that the (non-technical) user's mental model is not going to be the same as someone who has much more...Read On

 
Back to Top


Marketplace

BugSplat - Automatic Crash Analysis
Fast online exception analysis. Capture customer crash data online.

Villanova University Six Sigma & IT Certificate Programs
100% Online programs in Six Sigma, IS Security, CISSP Prep, Business Analysis, Proj. Mgmt. and more!

Census: Web-based Bug Tracking and Defect Tracking
Track software bugs, defects, enhancements, support calls, and more. Issue tracking software that is scaleable, fully customizable and integrated with VSS. Includes e-mail notifications, role-based workflow, change history, and Crystal reporting.

Web based bug tracking - AdminiTrack.com
AdminiTrack offers an effective web-based bug tracking system designed for professional software development teams.

Need Agile Test Cases?
Create statistically complete test cases simply and quickly.

Get your product or service listed here.
Subscribe to Better Software Magazine
Subscribe to Better Software Magazine

First Name:

Last Name:

Email Address:


Home   |   Resources   |   Topics   |   Community   |   PowerPass



© 2008 StickyMinds.com. All rights reserved.
StickyMinds.com is a division of Software Quality Engineering.
Privacy Policy    Terms & Conditions    Link to StickyMinds.com    Feedback


Software Quality Engineering

Hexaware



STARWEST 2008

 
Agile Development Conference 2008