Software frequently fails to be good because its creators simply aren’t competent enough software writers. There are many qualifications to that charge, many alleviating circumstances, and a very broad definition of “competent software writer”. But it is a helpful start to accepting responsibility. And accepting responsibility is the first step to improvement.
I write poor software. I hope that someday I won’t but that is the current state I am in.
I completely understand how we ended up here. With good intentions, of course. Learning something new, like programming, is daunting. Imposter syndrome is rife. We have all sorts of reasons why we want to encourage and support everyone trying to entice grumpy computers to dance.
And we’ve succeeded to an astounding degree with those intentions. Getting started programming today has never been easier. From open source to superb books and tutorials to bootcamps, it’s a splendor.
This is in sharp contrast to the fact that programming has also never been harder to master, in both depth and breadth. There has never been more languages, more concepts, more frameworks, libraries, tools. It’s impossible to know, let alone understand it all. What an odd dichotomy.
Learning to program feels like the hardest thing I have ever done. It’s so often boring and frustrating. The resources are there to get you started – too many resources perhaps. But the feeling I have after understanding the most fundamental aspects is one of being lost. Finding a good map is difficult. Writing software that you would actually want to use is difficult.
A friend once said that learning php for him was much like learning Chinese. I see the similarities and I certainly struggled for years before I could claim fluency, but I don’t think the experience is as similar as he claimed. With Chinese you can put to use what you have learned almost immediately, which is fun, and it builds upon itself. Of course there is Hello World in Chinese as well, but that is almost useful while in iOS development at least, it is not.
Originally one of my goals was to try a career change, work remotely for someone as a junior engineer, but that idea might have been naive, at least in the time frame I had set forth. Which is just like my experience in studying Chinese. I thought just over 6 months might be enough, then 4 years went by (including almost 3 full-time), and I was only then becoming functional. Maybe programming will be the same.