When starting the next version of a project there are 2 ways to proceed; you can modify and extend your existing application or you can big bang it. For the greatest continuity (confidence and reliability) the only real choice is to extend your existing application.
To big bang a project is to acknowledge it’s demise even before it’s started. There have been big bang successes in the past but they are greatly out numbered by those successes which have developed one step at a time. After all, why do you think it’s called development?(not original with me see http://www.paulgraham.com/ and http://www.joelonsoftware.com/)
But why do it? Developers have often been stereotyped as those people with the the most optimistic estimates for new work. This is often true, especially of entry level developers who may lack the real world experience to know that their estimates must be padded. At the same time even the most senior developer can become over confident, especially after a series of successes.
In general it comes down to an issue of pride (that greatest of sins). As developers we want to make the world in our image and this is our ‘big break’. The world must stand up and take notice! We are an awesome engineer and we can code circles around the next guy…. yeah right.
The reality is that we have not taken the time to understand the existing application and all it does. As a result we undervalue the existing work and we underestimate the time it will take to replace it. I blame mental laziness. Don’t let it happen to you.
Big Bang Evil
Concurrency???s growing importance
The growing importance of concurrency in software development can not be over stated.
Background
Thanks to Weiqi Gao’s blog I recently found my self listening to a great lecture on the topic of concurrency by Herb Sutter. At the moment I am reading “The Singularity Is Near
” by Ray Kurzweill and found many of the ideas mesh very well with what Mr. Sutter had to say.
Kurzweill predicts that Moore’s law will continue for the foreseeable future but it may not be in the way we might first think. Just like Sutter he agrees that we will see more transistors per chip but much of his focus is on the point in the future when we will have enough computational power to simulate human brains.
In order to achieve believable simulated humans with simulated neurons that truly fire in parallel we must begin developing more concurrent systems today and expand our expertise in this area of computer science. This lines up well with the physics limitations that Sutter points out in his paper that prevent us from further dramatic increases in the clock speed. In the past we have always enjoyed faster clock speeds with each new generation of CPU’s, in the future we will see CPU’s continue to grow in complexity and power but it will come in the form of more parallel instructions and multiple cores.
We are already seeing these prognostications coming to fruition in the commercial sector with the introduction of multi-core CPU’s by major manufacturers. Quad-core CPU’s are less than a year away from both AMD and Intel. Based on Moore’s law we should expect 8 core CPU’s 18 months later and 16 cores shortly after that.
Implications
Developing excellent concurrent solutions is a very valuable skill that will serve you increasingly well over the years. Typical software that may only use a few threads or even be single threaded will not see significant performance gains as they are run on the next generation of CPU’s. Software must be redesigned to take advantage of the massively parallel capabilities that will be provided by tomorrows hardware. To this end it’s in our best interest to study up on the topic of concurrency in software development.
Herb Sutter envisions a day when our programming languages can handle concurrent engineering in much more elegant ways than they can today. Threads and locks are too primitive therefore we need more abstract ways to describe tasks that must be done in parallel. My hope is that we will see these new idioms sooner so we can become more efficient with our time but the reality is such that we will be forced to use the tools at hand.
To help you become more excellent in your development skills this post marks the beginning of a series on the topic of concurrency. To see all the posts on this topic click on the Concurrency Series link under CATEGORIES: on the left.
Stay tuned for more. If you are not subscribed to this RSS feed please add this link to your favorite reader.
Need more time? Find it here.
Great tips on squeezing a few more hours out of every day.
How to Have a 36 Hour Day
Rock Star Programmer
Here are some great tips from JavaLobby.org on how to become a Rock Star Programmer:
Top Ten Tips on how to become a Rock Star Programmer
All of this advice will help you to stand the test of time. All is change and that change occurs in internet time, you can’t be an excellent developer if you do not keep up.
My summary: Keep up with the the latest in hardware and books, keep up by writing quality code that will not need to be redone as things change, and keep up by focusing on those few long term skills that will still be needed many years from now.
Happy New Year
It’s time to evaluate what you have done in 2005 and what you would like to accomplish in 2006. Goal setting is critical for the success of any non trivial endeavor. Setting goals is even more important than completing them. Without any goals there is no way to know if you are improving or growing in any way.
As 2006 progresses you may find that your goals need to be adjusted. This is normal, you can never foresee the unexpected events that will happen in your life. When unexpected events do come be sure to re-evaluate your goals.
As you modify your goals for the upcoming year keep your long term goals in mind and remain flexible with the rest. I normally keep a goal or two targeting each of these time frames 20 years, 5 years, 1 year, and 3 months. The near term goals help me achieve my longer term goals. When the unexpected happens I will adjust my near term goals as needed to keep on track to meet those long term goals.
The beginning of the new year is a great time to evaluate your goals but a much more excellent way is to evaluate them once a quarter.
buy acompliacompare viagra cialisviagra prescriptioncheap vpxlvpxl onlinecheap levitra professionalbuy levitra professionalpurchase levitraorder levitrabuy levitra order cialis jellybuy cialis jellyorder cialis soft tabsbuy cialis soft tabsorder cialis super activebuy cialis super activeorder generic cialisbuy generic cialispurchase cialis professionalbuy cialis professionaldiscount brand cialisbrand cialis onlinepurchase cialisorder cialisbuy cialisdiscount brand viagracheap brand viagracheap viagra jellybuy viagra jellyorder viagra soft tabscheap viagra soft tabsorder viagra super activebuy viagra super activeorder generic viagrabuy generic viagraorder viagra professionalbuy viagra professionalpurchase viagraorder viagraviagra online