Programming is hard. Learning to do it well requires above average logical thinking and a significant amount of study. Good use of OO, FP, pointers, recursion, data structures and concurrency are all hard. Most people here will have limited experience with something on that list and will likely consider it hard.
The idea that programming is not hard or that X will save us from the fact that it's hard, where X is OO, FP, structured programming, DSLs or even Lisp is an insult to the trade. Worse, it applies pressure to stop advancing - after all, X is going to make this easy any day now.
Agreed with everyone. Programming is hard. Computers are hard. Just ask my nana.
I suppose I should revise my question a bit. What I really meant to understand was what was it is about OO that makes it a focus of conversation as a hard technique, when compared to all these other programming techniques you hear little no arguments about.
For all its usefulness, you don't see too many blog posts vehemently defending or refuting recursion. It's simply another way to write some code. You don't hear joel or jeff going on about whether or not data structures are useful or on the whole a degradation to programming communities. These are all just different techniques used to accomplish the same thing; in some cases, those techniques make achieving a goal easier or the code more elegant.
I do hear these things about OO programming, and yet, OO is just another one of these techniques! So, my question now becomes - not what is so hard about OO - but instead - what is so arguable about OO, that people feel the need to call it hard, useless, or revolutionary, while leaving the other techniques like poor recursion out in the cold?
Programming is easy. But most people are not interested in learning it because they have other things they would rather do. But of those interested in learning it, they come forward quite quickly. As opposed to those trying to learn physics or math, both of which are hard subjects.
Programming is neither harder nor easier than mathematics: like mathematics, the difficulty is in the problems attacked. In both, the big advances come from asking new questions, and finding the right abstraction to deal with the new question. (Many people would say that programming <em>is</em> mathematics, albeit a new and in many ways distinct branch of mathematics).
Well, that is true, but you are forgetting that the "other things" are what the program is for. Physicists may write dodgy FORTRAN but that's fine, because the programs are only a side-effect of doing their real work. I would go so far as to say most of the people writing code (if not most of the code that exists) was written by people who aren't programmers.
The idea that programming is not hard or that X will save us from the fact that it's hard, where X is OO, FP, structured programming, DSLs or even Lisp is an insult to the trade. Worse, it applies pressure to stop advancing - after all, X is going to make this easy any day now.