> because concepts like Iteration, functions, conditional branching, recursion, OOP (Inheritance, encapsulation, polymorphism ), etc ... are not that complex, are they?
No, but stringing them all together without making an unmaintainable mess in a reasonable amount of time, for most, is.
I agree with your idea , but:
In many programs today , you're pretty far removed from the problem domain by all kinds of technical stuff. just look at web development , when you have to learn python/JS/HTML/css/framework/scaling+deployment and write a lot of code, just to build a social networking site(which isn't a very complex domain).
It is easy to write a simple program that concatenate 2 files for examples, it is also easy to create a CRUD database application
Systems programming on the other hand is hard, because to be good at it, you need to understand how the systems work, which is hard, and by hard I mean you need to do a lot of reading and remember many details
I believe Programming is as hard & complex as the Programming Problem domain.
Programming itself is not hard, because concepts like Iteration, functions, conditional branching, recursion, OOP (Inheritance, encapsulation, polymorphism ), etc ... are not that complex, are they?