Do smarter compilers, languages, and frameworks make dumber programmers? [closed]

StackOverflow https://stackoverflow.com/questions/428571

  •  06-07-2019
  •  | 
  •  

Question

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?

Was it helpful?

Solution

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.

OTHER TIPS

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

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 ;).

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.

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

No,

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

s/make/allow/

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.

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.

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.

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

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.

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.

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.

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.

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.

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.

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 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

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.

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.

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.

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 :)

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.

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.

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.

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++?

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

I know this is an old thread but still would like to throw my opinion on here...

They do make us dumber, most of you people here who react already KNOW how to program in a decent way. And why? Cause you come from an era that frameworks hardly were used.

In the education system more and more frameworks are used in classes,...and in classes where no framework is used, its not encouraging to start programming. Learn ALL this code, while in the back of your head you know there is a tool that does it all for you. You know in the field/workfloor you have to use frameworks to go fast. So why spend all this time learning the code.

SO: In the short run, for all you people already knowing the languages, no...it doesn't make you dumber

On the long run....you will see the low-lvld programmers become better and the good programmers become worse in lvl.

Mark my words!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top