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.

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
14

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.

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.
–
CraigeApr 5 '12 at 17:44

1

@Craige - are you implying that the right answer is always the most popular answer?
–
XepochApr 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.
–
CraigeApr 6 '12 at 3:32

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.

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.bobApr 5 '12 at 12:48

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.

I don't disagree only asking if frameworks are enabling more bad developers?
–
GratzySep 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.
–
WizardSep 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 EversSep 20 '10 at 22:29

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.

Where does the "you need to do it yourself" mentality stop? Does every programmer need to write their own compiler before using one?
–
mipadiSep 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.
–
GrandmasterBSep 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.
–
RationalGeekSep 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.
–
GrandmasterBSep 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 NathanSep 20 '10 at 22:35

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.

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

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

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.

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.
–
GratzySep 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

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?

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.

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.