The thinking and problem solving required in programming is not taught enough at universities in North America, nor overseas.
Having been an undergrad, grad student, TA and instructor in two Computer Science departments in the US, I have to disagree. Good CS programs stress problem solving, and I think the US does indeed have good CS programs.
I won't disagree with you either. Nor will I reply with my academic credentials. There are exceptions to every norm.
I have hired CS undergrads, graduates, TA's and instructors as employees.
I do believe, based on what I've seen, that not enough institutions teach problem solving in general enough of a way to be applicable to building applications.
Understanding how all the pieces of algorithms, propositional logic, technologies come together in a solution that means something to the end user is something that our CS education fails in many ways on in too many programs.
Instead of strategic, spatial thinking, we are taught to focus on the same algorithms over and over in a dozen or two languages. That teaches us coding, not programming, let alone software development. Too many just learn to recognize the design patterns, let their eyes glaze over and get it done.
I'm not knocking education, I had some of my greatest memories and years and experiences in Academia. It just didn't prepare me for the real working world of finding the dots, and connecting them in the way that doesn't douse or kill the business. I didn't learn to communicate with different business units in CS. I didn't learn to help people communicate what they need in a clearer enough way. I wasn't taught to market or sell my ideas to the other stakeholders in my workplace, and instead consider just having fits of rage relating to Dilbert or XSCD (?) cartoons. This is all the responsibility of my formal education; to help prepare me for the real world, and it didn't. I was given a limited set of tools to interact and interface with the real working world. But man, I sure know what an O(n) function looks like.
Understanding how those details work, fit, and come together to amplify an organizations' competitive advantage, instead of dousing it in cold water is something we know far too many programmers, CS grads included, really, truly, suck at. CS grads have to go and learn that in the real world.
I wasn't taught when to use agile (when the outcome is unknown) and when to let waterfall in a little (when you're doing something very familiar, standard and predictable to reach your goal).
A system is really the data. No software system has any meaning, purpose, value, or impact without the data it works on. Teaching a data-centric and an experience centric approach to software development, in addition to what is already taught is critical, and I'm afraid it's simply not happening enough from the false positives from the people I've tried to hire in my business.
I think it's not just a matter of "exceptions to every norm." There are significant differences in the teaching philosophies of different countries, and this article argues that India's priorities are even worse than those in the US with regards to encouraging creativity and the like.
I moved to the US at a fairly young age, but talking to many friends and family members in India, I'd tend to agree.
I do believe, based on what I've seen, that not enough institutions teach problem solving in general enough of a way to be applicable to building applications.
That's a different statement than your original. Your complaint is that people aren't leaving school as fully trained software engineers. I think you will find the same is true in all engineering disciplines: school teaches you the fundamentals, but you have to learn on the job how to be a practicing engineer.
Also, none of my programming projects were anything like focusing "on the same algorithms over and over in a dozen or two languages." Programming intensive courses focused on how to design programs, while introducing new concepts that allowed us to design a larger set of programs.
Having been an undergrad, grad student, TA and instructor in two Computer Science departments in the US, I have to disagree. Good CS programs stress problem solving, and I think the US does indeed have good CS programs.