After reading that post, I was thinking... is there anything as complex as software that we as humans develop? I mean obviously there are a lot of things that are incredibly complex. But nothing as complex and yet as accessible. You don't have every Rahul, Hrishi and Dinesh developing rockets. But you do have them writing code and software applications.
And we (the four of us) have not yet even begun to fathom the complexity of large software systems. I still don't know how they have apps that are millions of lines of code and that actually work (most of the time ;-))! Windows is fast approaching 50 million. How the hell do they get it all to work?
Everytime a program (especially Microsoft software) hangs you're pissed... and you should be, but it's not like they've done it intentionally. There must have been a whole bunch of rigorous testing before release. But there is and probably never will be perfect software. There are so many different configurations of machines out there, it's essentially impossible to test it out on all of them.
As he's written, even I somehow feel that there is lack of education in this critical area of software development. Not enough focus is given to it. I find that the education of designing solid software is sorely lacking. The process is flawed. For example, at my University there are no classes for software design or testing. Why is that? There are a whole bunch of classes about theoretical bullshit. I know there is place for that and people who "get it" love it. But considering 90%+ of students will be writing code, not mathematical proofs, it's a shame that the syllabus isn't changed. I think it's the same everywhere. From what Avi's told me, it's not much different in the Indian system either.
Apart from learning about data-structures, computer (chip) architecture/orgranization, basics of OS and algorithms, which is all essential, the program should have a strong focus on software design and architecture. Testing is such an important part of software creation. And yet that is also ignored.
Even books do a poor job. They'll have some silly examples and won't use good practices in their code. A great example is something about exceptions. Yeah I know what execptions are and when to use them. But I don't want to have "try/catch" blocks dominating my code. I know there must be some system to follow so it's handled properly. I dunno if not looking at the right books or what.
I see all these classes for learning programming. Basically all they will teach you is the syntax. Any imbecile can pick that up. It's about design. And it should be a mandatory course in college along with a course on testing. See, the thing about this is that unlike learning a language like Java or C++, you need guidance here. You can't do it on your own. You have to learn from someone with experience and who's done this before.