The development process of a good program may often seem strange for an outsider. One can expect the development process to consist of planning, development and testing. A simple linear way to get from design to final product. In most commercial scenarios this is also how its done. Forcing an application from idea through design, programming and testing to the final product. And this is right, because in almost every case a program is design to do a specific task. There are rarely and demands on how the code looks or how secure it is. The application will be serving 1, 2 or 50 people for 2-3 years with little modifications once its has been developed.
However when a programmer who loves to code is sitting at home developing something the process is very different. Programs are rarely finished, they are often only 70-80% done before scrapped and a new one is started. Debugging has been done during development, and the program is likely to contain lots of bugs. Because the program was not written for the purpose of being used. It was a practice… A practice in architecture, algorithms, API’s and objects. The next time the a program is written the past experience is put into that program, and its slightly better. It’s all about understanding the architectures and algorithms. Therefore, in search for the “perfect code”, you find developers rewriting their applications – time after time. Sometimes it’s major restructuring, sometimes major rewrites. Learning how to plan for change, so that you don’t need to plan.
Do I need to say more? nah.