I’ve been developing software professionally for about 10 years.
I find software development quite difficult, in fact a struggle. My ignorance is exposed daily, there are not enough tests, the design is….suboptimal, and there’s that thing when it’s just much more difficult than it should be. I do want to get better though; improve my competence.
I believe that Software Engineering involves cutting code. In his essay What is Software Design?, Jack Reeves develops the idea that writing code is a design activity. The premise is that the source code provides the ultimate specification of the system. The compiler takes this specification and from it creates the product; the executable. The Source Code is the Design. A controversial view – perhaps.
Software clearly has a quality problem. Everybody has experience of tools which don’t install correctly, and tools which don’t work correctly. Hey, if you develop software I bet you’ve created tools like this too – I have. For me Test Driven Development (TDD) is “The Way” – the solution to this quality problem. I want all the code I write to be under automated test. This is currently only a goal though, not a reality. Understanding how to best deal with external interfaces, in particular the database and UI, represents an ongoing learning process.
My aims here are modest. I am not aiming to be a great programmer, just a competent developer.