Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

With all of the frameworks available these days, ORMs, dependency injection (DI), Inversion of control (IoC), etc., I find that many programmers are losing or don't have the problem solving skills needed to solve difficult issues. Many times, I've seen unexpected behaviour creep into applications and the developers unable to really dig in and find the issues. It seems to me that deep understanding of what's going on under the hood is being lost.

Don't get me wrong, I'm not suggesting these frameworks aren't good and haven't moved the industry forward, only asking if, as a unintended consequence, developers aren't gaining the knowledge and skill needed for deep understanding of systems.

share|improve this question
    
Here's a good article I remembered from a few years ago that relates to your question. In particular, the author cites the lack of something akin to BASIC as a learning platform as a problem. salon.com/technology/feature/2006/09/14/basic –  GrandmasterB Sep 20 '10 at 19:15
    
We train the problem solving skills needed to choose the proper framework from a tons of "yet another" frameworks. –  systempuntoout Sep 20 '10 at 21:16
2  
1  
What does it mean to dumb a group of people down? –  Randall Schulz Sep 24 '10 at 23:32
add comment

closed as not constructive by gnat, Walter, Yannis Rizos Apr 5 '12 at 17:24

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

14 Answers

up vote 18 down vote accepted

Agreed. I presently work on a software package that is so encumbered by frameworks it makes it quite nearly impossible to understand the business. Once frameworks remove you from actually solving business problems instead of just solving MVC, it has gone too far. As you state, IMO many programmers try and architect/program to solve the ORM and MVC, and they rarely ask if that actually helps in any way to solve the problem the software is there for in the first place.


Yeah, I know seeing some raw SQL in a JSP page is a "no-no", but if you're a field consultant, where does this fit a specific solution? And no, that doesn't mean that the framework is not right, not all customers have $20k sitting around at every turn to ensure that a minor data point is projected on the page.

share|improve this answer
4  
+1 ...just solving MVC, it has gone too far. –  Talvi Watia Sep 20 '10 at 16:24
2  
I find it funny that Gratzy accepted this answer rather than the community voted best answer to his subjective question (which says the opposite). It seems he was fishing for an answer, rather than asking a question. –  Craige Apr 5 '12 at 17:44
1  
@Craige - are you implying that the right answer is always the most popular answer? –  Xepoch Apr 5 '12 at 18:11
1  
@Xepoch - Not at all. As a subjective question, I feel this question has no real answer to begin with. I just find it interesting that he selected the answer that says the opposite of most of the other answers on this page. I think he found the one answer that mirrored what he suggested in his question, and decided it was correct because it was in-line with his beliefs. –  Craige Apr 6 '12 at 3:32
add comment

This is an argument that pops up regularly, in many fields and in many forms.

The general form of this argument is:

Does having [x:tool/technology] make people worse at [y:function affected by x]?

For example:

  • Does CAD software make for worse engineers?
  • Do calculators in high school make students worse at math?
  • Does social software stunt people's in-person social skills?
  • Does accounting software produce worse accountants?

From memory, the ubiquitous answer is almost always: not really. You'll always have people that are good and bad at doing [y] but now they're just bad at a different facet of the skill.

A deeper understanding of the fundamentals with any job is going to help, no matter what you do - even jobs that are considered 'remedial'. Knowledge always helps.

share|improve this answer
    
Do bigger rackets require less skill from tennis players worse? –  systemovich Mar 10 '11 at 1:36
add comment

Abstraction is a key concept of computer programming and frameworks help programmers achieve this. This is a good thing. I doubt many us would like to develop complex systems in assembly language! The problem comes, I think, when programmers have little idea of what the abstraction layer is masking. In other words, you need to have some idea of what goes on under the hood, even if you don't directly interact or interface with it.

I remember developing some of the first dynamic websites back in the mid 90's, using C and CGI (at a time when the majority of websites were still static HTML). There weren't really any mature server-side scripting languages (like PHP or ASP) and very few libraries, so you had to write out the entire HTTP response stream to the server with every page. Parsing GET and POST parameters required writing your own library. It was tedious, slow, hard-work and very error prone. I don't miss it one bit!

However, I also feel frameworks like ASP.NET web-forms abstract the whole stateless nature of the web to a point where many new web developers have little clue of what actually is going on under the hood. This leads to inefficient, bloated code that performs poorly because the developer is plumbing components together using a "drag'n'drop" methodology without realising what is going on at the HTTP level.

So, I believe frameworks are essential for developing high-level software, but they don't absolve developers of having some understanding of what is being abstracted away. Yes, frameworks can make you dumb, but only if you fail to understand them.

share|improve this answer
    
Couldn't agree more with "ASP.NET web-forms abstract the whole stateless nature of the web" there have been so many times I've met developers who don't understand what's happening underneath and causing silly problems with IsPostBack –  billy.bob Apr 5 '12 at 12:48
add comment

Does automatic transmission or rain-sensing windshield wipers make us worse drivers?

I don't think coding without frameworks necessarily implies a better understanding of underlying systems. This is evidenced by employers having to ask simple coding questions at interviews just to make sure the candidate can pull a coherent method together.

Ultimately it's up to the developer to learn. Good ones do, bad ones don't.

And in a similar vein, picking a framework just because it's there without actually analyzing its capabilities and pros/cons is also a sign of poor development practices.

share|improve this answer
11  
Automatic tranny does make a worse driver :) –  Xepoch Sep 20 '10 at 16:22
3  
I don't disagree only asking if frameworks are enabling more bad developers? –  Gratzy Sep 20 '10 at 16:23
2  
@Gratzy: I don't think so. I think the same bad developers would still thrive without frameworks, just in different ways. –  Anna Lear Sep 20 '10 at 16:34
3  
I disagree with Anna. Without frameworks even lazy programmers had to widen their knowledge. Frameworks are actually increasing (maybe just slightly) the number of bad programmers. –  Wizard Sep 20 '10 at 18:40
1  
To counter the automatic tranny argument: many professional drivers don't drive manual cars, and many more are going to flappy paddle shifting which is generally computer controlled. –  Steve Evers Sep 20 '10 at 22:29
show 4 more comments

I think the problem is that new programmers are starting off at higher and higher levels of abstraction, and thus don't get exposed to the bits and bytes of things 'under the hood'. So they aren't learning some of the really basic coding fundamentals that would be the first things learned in years past.

I shake my head every time on here when an obviously new programmer is asking something about, say, storing some data, and everyone immediately tells them to use an ORM tool. No, no, no, no, no... they need to learn how to do it themselves first.

share|improve this answer
4  
Where does the "you need to do it yourself" mentality stop? Does every programmer need to write their own compiler before using one? –  mipadi Sep 20 '10 at 19:28
2  
It doesnt stop. Programmers should always be learning. Not all programmers need to write a compiler. But I doubt there's many great programmers who go through their entire careers so uncurious about their craft that they dont at some point try to make one. –  GrandmasterB Sep 20 '10 at 20:42
6  
Under the logic of not using an ORM tool until you've "done it yourself" first, I probably also shouldn't use a database abstraction layer until I've written calls to the database directly? Or actually, I shouldn't use a database until I've written a storage system using the filesystem? Well, the filesystem is an abstraction, too... Where do I start? For each generation, they are going to start at a higher level of abstraction, or in order get more interesting things done in less time. –  RationalGeek Sep 20 '10 at 20:50
2  
I think if a programmer stays at the higher levels of abstraction, they can be a perfectly competent programmer and create perfectly functional business apps from their pefectly functional cubicles. But I doubt they'd be the ones to create the next must-use programming language, or the one to create the next innovation in databases, or write the next innovative game that pushes graphics technology to the edge. –  GrandmasterB Sep 20 '10 at 21:31
2  
@jkohlhepp: In every significant project I've ever attempted, the abstraction provided has always leaked. If I hadn't had the drive to understand the deep things of what's going on, I'd have been lost and unproductive. If you ever want to do interesting things, you must know everything. –  Paul Nathan Sep 20 '10 at 22:35
show 4 more comments

Perhaps the distribution of "dumbness" hasn't really changed, and we're instead simply handing out bigger and more complicated ways for developers to shoot themselves in the foot?

share|improve this answer
add comment

It's not the frameworks that dumb down programmers. Dumb programmers will be dumb whether they use frameworks or not.

It's certainly true that understanding the low-level work that a tool or framework helps you to streamline makes you a better user of the tools and frameworks. You can also debug problems more easily, and work around the tools' inevitable gaps in functionality.

For example, I took a class in Compiler Design in college, where we coded an LR parser from scratch in C, before learning to use parser generators like lex and yacc. It was very educational, and since then I've had a better understanding and appreciation for all programming languages I used.

But I'm not saying every programmer is required to toil away waxing Mr. Miyagi's car for years and years before they can be permitted to work at a high level. A lot of programming work is intellectual, deciding what the software needs to do, not the mechanical work of coding in a particular language or tool.

That intellectual work is where smartness vs. dumbness is even more important.

share|improve this answer
add comment

Quoting from James Larus's excellent "Spending Moore's Dividend" (emphasis added):

Thirty years ago, Bill Gates changed the prompt in Altair Basic from “READY” to “OK” to save 5 bytes of memory. Today, it is inconceivable that developers would be aware of this level of detail of their program, let alone concerned about it, and rightly so, since a change of this magnitude is today unnoticeable... There is no way we could produce today’s systems using the artisan, handcrafted practices that were possible (necessary) on machines with 4K of memory.

I think it's probably misleading to say that frameworks let you avoid the skills necessary to solve difficult issues or let you avoid deep understanding. Instead, the only reason we're able to build today's complex systems (whose complexity can generate difficult issues and defy deep understanding) is because we have frameworks (and high-level OO garbage-collected languages, and IDEs with context-sensitive help and on-the-fly syntax checking, and all of the other software development advances that are sometimes criticized as dumbing down programmers).

share|improve this answer
add comment

Frameworks are great. But you have to know what’s under the hood. So the problem is that programmers rely too much on the frameworks, without having enough knowledge of the underlying system.

A somewhat outdated example is MFC: a programmer could save a lot of time by using MFC instead of the Windows API, but without knowledge of the API (which means having a background of real work with the raw API), they would often be stuck. It almost never happended, because a typical MFC programmer had Windows API knowledge.

However, with Windows Forms on .NET, thanks to the better encapsulation and better object model, a programmer can almost ignore that he is using just another Windows API wrapper. So there are less chances of being stuck, but when it happens, it may hurt.

Unfortunately, time to market is always shorter and projects are increasingly complex, so programmers don’t have the time to go deep. That’s the sad state of the software industry...

share|improve this answer
add comment

It puts the smarts where it needs to be. One does not need to understand quantum mechanics and Newtonian physics to set up a mechanism that drops a ball from the top of a building. Every new layer in software should build upon the last and remove the boilerplate from the construction of useful applications.

Those who need or want to know the "stuff" behind the framework will study and investigate by hook or crook.

share|improve this answer
add comment

No, absolutely not. Frameworks are, at their core, a combination of a subroutine library and a template, two tried-and-true programmer tools. 'Tis a poor workman blames his tools...

...and there are a lot of poor workmen using and blaming frameworks.

share|improve this answer
    
I think you might be missing the point of the question I'm not suggesting that frameworks aren't good tools its since there are so many tools out there providing so much abstraction is it enabling more people to blame thier tool. –  Gratzy Sep 20 '10 at 21:43
3  
@Gratzy: well, sure. The more people use a tool, the more bitch about it. When computers were huge, expensive and rare, only a handful of people in the world could complain about how hard they were to use - now everyone does. Similarly, frameworks don't have to make programmers any dumber - they just happen to attract lots and lots of dumb programmers. –  Shog9 Sep 20 '10 at 21:51
add comment

When building software, frameworks save time. When learning to build software, frameworks get in the way of understanding.

I think the problem is mainly one of computers having gotten too powerful. For most programmers there's no sensible reason anymore to "get down to basics". It just takes more time to do the same stuff, and at run time there's no meaningful difference. The only way to solve that is to introduce artificial restrictions, the way competitions like js1k do.

Maybe schools should have a dedicated subject "optimized design" where you have to build programs under strong space and time restrictions?

share|improve this answer
add comment

No, learning the frameworks improves the skills of a programmer. Framework is the extension of a programming language. Some languages are already framework based. I work with both PHP and Java. PHP needs a framework like template engine (sometimes). Java don't need a framework (most times), it already has many methods and libraries.

Most Frameworks will have functions that programmers use again and again.

share|improve this answer
    
Aww, you couldn't be more wrong with your answer. –  N.B. Apr 6 '12 at 10:37
add comment

To seemingly play the devil's advocate here, I think frameworks ("good" ones, anyway) can actually go a long way toward furthering a programmer's education. A well-engineered framework will solve a lot of problems, and by using the framework, the programmer can come to understand what problems are being solved, and how. In my mind, a framework is (/should be) a crystallization of programming best-practices, and can teach a programmer by example.

share|improve this answer
    
Why the downvote? Simply because you disagree? Boo. –  chrisallenlane Apr 26 '12 at 15:22
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.