Why software is hard ?
Automating complex tasks with software has indeed helped humans move forward worrying about other things in life.
Behind every complex piece of software is endless hours, often tiresome and fatigue inducing, mind numbing work of Engineers.
Like a complex novel cannot be written linearly with perfection, a working piece of software cannot be created so easily as it looks when it is working for its users.
If you have tried your hands constructing a Rube Goldberg machine, I have not, but I have watched my 12 y.o do it patiently again and again. If you touch one part of it, there are other parts that will react badly.
Even a simple 3 screen App you make can be a million times worse in terms of one part of the code reacting badly to other parts. This is very true when your logic mixes with user interface which mixes with network data and local database updates. You have thousand things going on to ruin your life.
The way asynchronous events from network are handled or some user clicking on a button on the screen triggers a network fetch or update resulting in other parts of the screen reflecting that is all nothing but insanity to code.
It is easy when you write linear programs that affects memory. When you have non-linear ones, event driven, that ends up refreshing the UI or updating local or remote databases, you can never get your code to be traceable, debuggable anymore easily.
It is clear that the language designers, especially the JS or the Android Java folks have failed in making this simple. There is a huge gap between what you as a programmer want to do and how you end up doing with these tools.
Every complex App you see out there, say a twitter or a linked in or others, need some clever hackers with programming skills to keep the thing working. May be directly or indirectly they employ hundreds or thousands of programmers to keep the code from breaking.
The irony is we automate things with machines that need to be handled by more clever humans who need the support of a whole lot of other humans doing less clever things. Hmmm.
All because we couldn’t think of finding simpler ways to model asynchronous programming around user interfaces . Today you can’t do something without it getting wired and messy.
The worst thing is, when you add a new feature, even a simple button, the time taken to verify if it didn’t break other parts is exponentially harder as the code grows.
We read so many articles on various aspects of how people solved their problems on the Web. We read great articles from renowned people on design patterns and stuff. But all of them brush aside the fact that when you sit down to write your code, it is incredibly hard and you are on your own.
The fact that we have new languages and frameworks every other day tells that we haven’t solved this.