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?

+11  A: 

Are farmers dumber because they use automated machines to plant, harvest, and maintain crops?

Good task automation simply makes programmers more effective, not dumber.

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?

A calculator is a tool that allows you to perform certain tasks. Sure you can do complex math and multivariable integration, but without learning math, how would you know you NEED to perform that task at a given time?

Same thing with programming and SDKs, you can throw in a lot of bells and whistles using predefined code, but when the time comes that you need to write something to SOLVE a problem, all the tools and automation in the world won't help you there (AI isn't that advanced yet anyway ;).

I'm so tempted to make the obvious lol statment "yes", but I know this ain't true ;). +1
Kent Fredric
But I would say that farmers 50 years ago were much more knowledgeable about the finer details of farming than their grandsons who use completely automated systems.
What kind of analogy is that? Programmers use their brain to produce code, which is closely relative to their smartness or dumbness, respectively, while farmers use their hands to do their job. You simply can't generalize like this.
The details have changed, the the farmers knowledge of them hasn't. Most successful farmers today have collage degrees.
Jim Blizard
Exactly, my brother a farmer by profession knows about the tens of different species, strains, fertilizers, bio-fertilizers, pesticides and biological agents (like fungus, insects, animals) he can leverage to improve his crops. I doubt this was common knowledge 100 years ago.
Esteban Brenes
Bad analogy. Farmers 50 years ago had stronger *backs*, not brains. No one here should be offended that the *average* programmer intelligence has dropped in recent years. Better tools make the barrier to entry lower. The best are still just as smart, just the low end keeps dropping.
Bill the Lizard
farmers 50 years ago didn't have packets of fertiliser and pesticides, they had to understand how to manage their crops better. Now they just dump chemicals all over everything. I'm still not sure the analogy is a good one to use though.
Hello, who is comparing farmers today to farmers 50 years ago? The analogy is to compare farmers who do use machines to those that don't. Those that do not use machines work much harder to get lesser results, but that says nothing about their intelligence, nor should it.
+4  A: 


Smart compilers let the smart programmers focus on things that really mater, like designing good software.

+27  A: 

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.

Mehrdad Afshari
+1 This is a GREAT point! exactly what I was trying to insinuate.
Ultimately this implies that the average programmer is getting dumber. Sad, in some way.
"Dumber people" just lower IQ? What is being said here? -1
I think the case could be made that people in general are getting dumber on average, not just programmers. At least technology and science continuing to march forward suggests that the smart people are getting smarter.
Mehrdad Afshari
-1 Being less good at programming does not in any way equate to being dumb, in the same way the lack of expertise in any subject does not equate to stupidity.
Shane MacLaughlin
@smacl: I think that fits in my definition of "dumb". What I meant is not lack of IQ. I define dumb programmers as programmers who can't write good software AND they can't improve (so absolutely, beginners are another story).
Mehrdad Afshari
I would say the public as a whole is getting smarter. It wasn't so long ago that a highschool diploma was a rare thing. That being said, I don't think the average person is keeping up with the pace of change in science and technology.
I see no reliable evidence that people are on the whole getting dumber. If you compare people in general today with what you know about people a hundred years ago, you've got a selection bias, not a real comparison. Who studies the dolts of 1900?
David Thornley
People are completely unaware of how computers work, even though they use them every day. Contrast that to farmers 80 years ago. They probably had a deep understanding how each of their tools worked, along with how to repair them.
There is such an advancement in total world knowledge, that most people seem to have a very small grasp on anything.
@Mehrdad Afshari, Most people who use computers don't do it out of a desire for self improvement or enlightenment, they just want to get a job done. The computer is a tool to enable this and no more. Dumb is an inflammatory and potentially insulting term that should be used with caution.
Shane MacLaughlin
@smacl: I didn't say "if you don't know how computers work then you are dumb". I used dumb because it was specifically mentioned in the question and I think the point is obvious and it's not insulting. By the way, the question is about programmers, not normal users.
Mehrdad Afshari
@Mehrdad Afshari, point taken, but as per my post below, the line between programmers and normal users is becoming less well defined. I have alot of engineering users who write their own scripts to perform repetitive tasks. IMO, this is smart use of the computer even if it is inexpert programming.
Shane MacLaughlin
smacl: True, but they are not called "programmers" in my opinion. I'm talking about those who classify themselves as developers (either as a job or serious hobby).
Mehrdad Afshari
@Mehrdad Afshari, don't you find it amusing that these dumb programmers "crappy software that works somehow (due to existence of good tools)" while so called programming experts are failing to write software that works at all. Do i detect a bit of elitism here?
Shane MacLaughlin
@Mehrdad Afshari, as you say, software quality assesment is complex, and having immersed myself in this particular domain over the last number of years, I'd say it is poorly understood by many programmers, both dumb and perfect ;)
Shane MacLaughlin
@smacl: I think I couldn't really tell what I mean and this is surely a subjective topic. Software quality assessment is another story. I say "bosses can't evaluate software quality" and won't understand the true difference between a crap that some people write and good software.
Mehrdad Afshari
@Mehrdad Afshari, you're right of course, it is highly subjective and also weighted questions. If you think about it, anyone that answers is automatically including themselves in the group that is not dumb, and they in turn are referring to the group that is dumb. This provides a feelgood factor.
Shane MacLaughlin
@Mherdad Afshari, fwiw the Wiktionary definition of dumb is '(informal, pejorative) Of or pertaining to something, especially a person, that is extremely stupid.' Is that how you are intending to refer to people? I would guess not.
Shane MacLaughlin
smacl: You are right about this of course. Nobody considers himself dumb. What I said was generic though. An example: I have worked on a project in which the database designer had put junction tables in all _one_ to many relationships and said it's "standard"! His software worked but was a crap.
Mehrdad Afshari
smacl: No I don't. I said my definition of dumb in this question above in comments.
Mehrdad Afshari

They make for more efficient programmers.

+1  A: 

No, But it does make for better programs and code.

I would say the skills are different at higher level languages, you need to think about abstractions a lot more, there are a lot more APIs to worry about and people expect a higher level of quality in their software. As a result of the above a programmer faces different challenges, and the tools are keeping up with those challenges.

+13  A: 

I think they allow dumber programmers, they don't make dumber programmers.

Jim Blizard
Exactly. Lowering the barrier to entry doesn't make smart people dumb, it just brings down the average.
Bill the Lizard

I don't think so. More sophisticated tools just frees our minds concentrate on more interesting problems.


For those of us who have learned to do said tasks or learned about said intricacies in the past, I believe it just makes us more efficient. We're freer to worry about other/more important things. We may tend to either forget about "how hard it was back then" or complain how lucky new programmers are today.

For those of us who are just starting out and haven't learned such details, I believe it simply makes us a different breed. Not dumber, just that we look at different problems in different light.

It does, however, lower the entry hurdle, and thus is making programming more accessible to the masses. Whether that is a good or bad thing is debatable.

VB brought programming to the masses. The result was bitter/sweet. Loads of non-programmers got useful stuff done. Loads of good VB programmers got abuse from their 'superio'r C++ contempories.
+2  A: 

It makes it easier for less skilled programmers to enter the field, is all. It doesn't make a good programmer dumber. They'd be dumb if they ignored tools that could potentially increase their efficiency.

Kent Boogaart
+7  A: 

On average, yes. :)

They don't make us dumber programmers. What they do is allow there to be more dumb programmers (which I suppose means that, on average, we are dumber.) Having better tools means that someone with little experience and a shady understanding of the concepts of CS can still crank out code that eventually works and does something useful. That isn't possible when writing in assembly, but it is when writing in, say, VB. (Of course, there's a greater chance of eventual WTF-style catastrophes when a less experienced person is writing big apps that eventually collapse under the weight of their poor architecture.)

Admittedly, "dumb" is an inflammatory word to use here. Just because someone knows less doesn't make them stupid, it just means they're less experienced. But the point is understood.

Ian Varley
+2  A: 

Computers are reinforcing devices. So dumb become dumber and smart become smarter.

Jakub Šturc
+5  A: 

I think faster machines make programmers worse.... these days most programmers spend very little time writing optimal code. Compilers can't optimise bad code into good code.

Fast machines mean that bad programmers can get away with bad code because no one knows its bad. In the old days code had to be worked at and refined so it would run fast enough to actually work in an acceptable fashion.


Tony Lambert
Seconded. I wish I could write programs that work fine on Win '95, P166 w/16Mb RAM...
Dmitri Nesteruk
Who cares? If a programmer is defined as good if he or she can come up with a good application reasonably fast, what does it matter whether the code is efficient as long as it is efficient enough?
David Thornley
bad code is like rot.... a little bit is easy to fix, a lot and you're better off starting again.
Tony Lambert
Why is an application "good" if it runs well on hardware nobody uses but "bad" if it does things that hardware could never dream of?
+1  A: 

Only if you allow them to.

If you learned on something hard and finicky (such as my Tandy 102 laptop), you still think in that mode even with smarter tools.

Certainly it's easy to rely on the tools to do your job, and for a lot of that, I'm grateful.

For example, you don't teach people how to do woodworking with table saws and drill presses - you start with hand saws and augers or small hand drills. THat way when you move to power tools, you don't do Something Stupid(tm).

Relying on the tool is great - but knowing how to do it without the tool is important, too.


Yes, but it doesn't matter. 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?

You should know how things work, The better programmer, or anything else, you want to be, the more you should know. But there are only so many hours in day.

Better tools make us better. The trade off is we lose little control over the process.

Jim C

In a way

For example, I do not know or care about how to write operator overloads because I have tools that make them for me. I don't have to even remember how P/invoke works because a tool I have would automatically create a C++ dll project, and a [DllImport] in my C# project. I don't have to write an auto-updater for my project because ClickOnce is pretty much it. (And I have no clue how it works 'under the hood'.)

So yeah, I'm less smarter because I have no clue about a lot of low-level stuff that C++ programmer know. But still I reckon I'm on the winning side, because I can get more done. I can spend more time on presentation, quality control, and those features that customers really want to have. Also, digging deep in the .NET framework does require some learning, so it's a bit of a tradeoff.

Dmitri Nesteruk
"less smarter" ? I think you really mean "less smart".

I wouldn't say they make programmers dumber necessarily, but what I would say is this. For people starting out in development in today's day and age, don't have a full appreciation for just how much stuff is going on behind the scenes that's being done for us. There are so many libraries built into the platforms these days, that people starting out today have no concept of how this all had to be done by hand at one point or another.

I will say however, I can never going back to writing a single line of code without Intellisense :)

+6  A: 

Does Visual Studio Rot the Mind? -- Charles Petzold

Ed Guiness
This was a great talk he gave - many valid points.
Greg Hurlman
+3  A: 

Being a little less glib: They're tools. Tools don't make anything, and they don't make any craftsman better or worse. Powerful tools don't either - they merely act as a lever, amplifying a particular craftsman's competence (or lack thereof).

Some programming tools have had the effect of lowering barriers to entry, if not to the software engineering profession, then at least to getting an app running. Shortening the amount of thought that has to go into producing a working (or "working") app cuts both ways: Competent experts are freed from scut work and may do great things, but fumbling novices will sometimes get bad code into production that they never would have gotten working without the "smart" tools. The latter effect has probably had a greater impact than the former in shaping the reputations of BASIC, VB, PHP, and the recent spate of MVC rapid-development frameworks for the web - and indeed on the notion of such tools in general.

+1  A: 

They do not necessarily make dumber programmers, but they can make programmers lazy. I have found myself doing this sometimes just rushing through some code and relying on the compiler to help me find all of my mistakes instead of doing it right in the first place.

By the way this is not the recommended way of doing things. It normally takes much longer.


I think it's necessary to have smarter tools so we can have layers of abstraction from the complexity. But I think that we must be able to change have access to those layers of abstractions. I think the programmers will be more productive but easily will loose the notion of many basic concepts. It's a trade off... The good programmers will be the ones that continue to understand the basics of programming. The others will be "copy-and-paste"'s and Lego players.

+1  A: 

Ok, the first two computers I owned, I built myself. That was smart then, I'm not so sure it would be a good use of my time now. I programmed in a mix of assembler and BASIC in the early 80s, again smart then, not so smart now.

What I'm getting at here is that the context has changed, and in computing we have had to exchange depth of knowldge for breadth of knowldge, with the necessary 'dumbing down' which that entails. In order to support the massive complexity and breadth of applications covered by 'todays computing', we are also forced to work at much higher levels of abstraction. On one hand, we see domain application specialists using highly abstracted tools to provide very good solutions, and on the other hand we see computing technology / programming experts producing superb code that has the capacity to bring the whole computing industry forward. Calling either side dumb is inflammatory, and probably the only dumb bit in the debate.

Dumbing down in this context is merely allowing a larger audience make use of the effective tools that modern computers are. This is a good thing, and hard core programmers should not feel threatened by it, it is after all their baby.

Shane MacLaughlin
+1  A: 

On average, yes they make programmers dumber. But that's only because they make programming more approachable to people who aren't as smart as us, which lowers the average "smartness".


A smart programmer who decries the convenience of modern development environments is probably not really all that smart.

Paul Lefebvre

On the contrary, smarter compilers mean you're fighting with the computer less and get to give more thought about how you are trying to do something.

If you're struggling with assembler you will almost never bother with anonymous methods.

+1  A: 

By smarter you mean automated. Doing a repetitive job doesn't make anyone smarter, so the answer is no.

Let me expand by using the calculator example. The technique for calculating a square root with pen and paper is merely a process that can be learned. It doesn't make you smarter to know this process, it just enables you to calculate square roots in the absence of a calculator.

Now, if you discovered an algorithm to calculate square roots, now that makes you smart.

Same thing with our programming tools. A language which does memory management for you doesn't make you stupid, nor being able to do memory management by yourself makes you smarter.

+1  A: 

Dumber? Not necessarily. As has been said before, having smarter tools allows the developer to focus on more important things, like making the application function properly. A relevant anecdote from my own career:

I'm not a skilled mathematician. I flunked out of pre-calculus (ok, granted, it was because I never did my homework) and am even a little rusty on some really basic formulas of physics (calculating friction, for example). This is because I am disparately out of practice, which is simply because I never use it.

Take, for example, the derivative. If you asked me to find the derivative of a function, I would reach for my TI-89 because I haven't the fuzziest clue how to do that. However - and I maintain that this is more important - I know how to use it. I know where it's useful, why it should be used, etc. The dot product is another example. I know how to use it to compute the specular of a surface in 3D space, but I don't know how to calculate by hand it because I never need to.

I wouldn't call myself dumber for it. Out of practice maybe, but just as capable.

Sean Edwards

No, it's something similar to steroids (and other performance enhancing drugs) - they make a great athlete even better, but they can't make someone like me run 100m under 10s even if I ate a whole pharmacy of drugs. So, god IDE, language or framework can make you a better programmer, but if you're only relying on it to do the work, you're in trouble.


I'd say no.

Smarter programing systems (I'm thinking higher levels of abstraction not things like tools that would automatically fix your code) IMNSHO are actually harder to use. The analogy I have come up with is that they act as a long lever; you push really hard on the short end, move it a tiny amount and huge changes take place.

It's harder to figure out what needs to be done, but it's also a lot harder to mess it up when you finally do it.

+1  A: 

I think no, but there are many people (very wise ones) that thinks different

I really recommend this lecture, it's a very interesting opinion and very good essay


Smarter languages, compilers, and frameworks make programming possible. I mean, could you imagine the state of programming if we were still restricted to using Assembly language? Heck, scratch that. Could you imagine the state of programming if we were restricted to C or C++?

Jason Baker
yes, actually - look at for some tools written in assembler, they're small and fast. Obviously I wouldn't want to do it, but then I've gotten lazy over the years and prefer to just slap code together instead of designing and coding it carefully in a disciplined way. :)

Improvements in compilers, languages and frameworks makes programmers more effective, assuming they have a sound academic background or good semantic understanding.

Henrik Hartz