The trouble with computer science undergraduate education...
...is that it is precisely computer science oriented. In all of the CS departments I've seen, undergrads are only required to turn in proof of concept programs of the topic being studied, in the form of assignments or term projects.
In the real world, the prototype is the very first release in the lifecycle of a system. It is never used in a production environment, to solve a real problem. Starting with the prototype/proof of concept, the professional software team adds to the system all the software qualities required for it to be put to good use. Qualities including robustness, scalability, security, extensibility, manageability. And the system keeps getting upgraded throughout its lifetime as a result of interaction with the real world. The undergrad student never experiences any of these stages, and only gets exposed to them theoretically through the "Software Engineering" course. The practice of the engineering discipline is almost never offered, except perhaps through internships of dubious benefit.
This raises the question about the focus of CS education in general. As is obvious in the professional world, it takes many roles for a software team to deliver a system, including analysis, design, documentation, construction, auditing and management. The roles of the software team are well-defined, yet there are no obvious counterparts for them in undergraduate CS education. Is it the responsibility of the University to prepare all these roles? I would say so.
Are we expecting too much?
A quick glance at the stats regarding the success rates of software projects makes one believe that even beyond university, things don't get better. Prototypes just evolve into more complex ones in most cases, especially in the corporate world.
My job for the last 4 years was to help struggling projects and provide answers to them that could correct their doomed paths. What I came to realize is that I don't tell them to do anything they don't already know, coz I simply tell them to have some common sense and to make rational choices when it comes to implementation, design, and OA&M.
These are things no university can teach you.
Knowing you Karim, I can understand your frustration, but you have to understand that you are by far an almost extinct species. Someone who knows software like yourself is really hard to come by these days.