The more and more advanced compilers, languages, and frameworks we have that either automate tasks, or hide certain intricacies from us, do they ultimately make us dumber programmers?
Jim C gives the following analogy of a calculator:
Any one extract a square root lately, by using paper and pencil? We use a calculator or simple call a function in our favorite programming language. How many of us know what the calculator does or even the function?
So why don’t we all just tell our kids to forget learning math, that’s what we have calculators for? Wouldn’t that inherently make our kids dumber?
They don’t make good programmers dumber, they make them more productive; but they make dumber people be able to program and think they are great programmers.
Clarification: I don’t have a precise definition for being dumb. From dumb I mean a general thing that is people who shouldn’t really be programmers or should try to learn important things. I have seen lots of people who can’t really code and just copy stuff from here and there. Software quality assessment is not an easy thing. They finally build a crappy software that works somehow (due to existence of good tools) so they don’t lose their jobs and they think they are good programmers and therefore, should never try to learn anything. Believe me, there is one thing I’ve seen in every good developer: ‘They never stop learning, and they don’t go to learn just the piece of code they need to complete their job.’ Those people I talked about never try to learn anything beyond what they need and great tools reduce this ‘need’.
This doesn’t mean IDEs are bad. I love them and think they should be developed as much as possible.