I have been programming for 6 years. I spend most of my time either programming or thinking about programming. I have come to realize that I am not particularly good at it and what’s more, I don’t think I understand it all that well.
Don’t get me wrong, I have written programs that are in production use today. My programs work (for different degrees of the word ‘work’), they sometimes fail, as programs do.
What I am talking about here goes beyond the simple notion of, does a program work? I am talking about the elegance of the solution. To me, programming is more than just automating a task.
As a developer, it is my job to fully understand the business domain I am working in. Blaming the business users users because they didn’t describe the problem correctly or asked for a solution which didn’t solve the problem is a cop out.
Imagine if a doctor asked you to perform a self-diagnosis and then prescribed you medication based on your diagnosis. He wouldn’t be much of a doctor now, would he?
Asking your customers, what they want is only a part of the process of understanding the problem. You have to treat their inputs as symptoms and then research the domain and dive deeper to understand the root cause of the problem.
tl;dr version: There is more to programming than converting spec into code.
Full Stack Web Developer
I have been working towards being a better full stack web developer. Learning to write good programs is a continuous process. It does not have an end state. Being good at software development means understanding your problem domain and having a deep understanding of all aspects of the software stack that are being used to build the application.
As you might imagine, this requires an understanding of a number of technologies.
In the day to day process of software development, you only use a very small subset of a particular technology. Very often this results in using language constructs & concepts that you have become comfortable with over time. These constructs & concepts might not represent the best way to solve a problem.
My goal is to learn the right way of thinking about and building software. This is my attempt to rise above the daily fray and sharpen my saw.
Why blog about this?
I have found that writing things down helps me organize my thoughts & think clearly. Also, learning to write well is part of the process of becoming a good developer. Learning to write concisely and clearly is critical, and as you can see from the length and verbosity of this post, I have a long way to go.