Are Frameworks Making Developers Dumb?
Last week I got to take interviews to hire senior Java developers
with around five years experience. But after the interview process was
over I felt like that frameworks are making developers life easier, but at the same time
making them dumb. Everyone puts almost all the new frameworks on their
resume claiming they have "Strong, working experience on Spring,
Hibernate, Web Services etc".
Here is how the interviews went on.
Me: You have used Spring in your latest project. What are the advantages of using Spring?
Interviewee: We can configure beans in XML and it will take care of instantiating and give it to us.
Me:
If Spring is for only creating objects why is it required at all, I can
directly instantiate the dependencies using "new". Why should I
configure the class names in XML and get the object from Spring?
Interviewe:
If tomorrow we want to create another implementation of our interface
we can create new implementation and update the XML configuration to use
new impl. We don't need to change Java class and compile them.
Me:
But you are writing a new Java class, so obviously you need to compile
the project. Regarding XML change, 99% of the times your XML will be
packaged in war or ear file. So you will run ANT script and create the
war with the all the new changes. Then your point of "if it is XML i
don't need to compile" is not a valid point.
Interviewe: Hmmm, But the Dependency Injection design pattern suggests to follow this way.
Me: OK. I am done with the interview. Our HR will get back to you. :-)
Interview with another guy:
Me: Can you explain about your latest project and what technologies have you used?
Interviewee: It is some XYZ System and we are using Spring, Hibernate, REST WebServices.
Me: Ok. Can you explain something about RESTful architecture?
Interviewee:
We can develop RESTful application by using
@RequestMapping(value="/url", method="POST"). And also we can use PUT,
DELETE methods.
Me: That's OK, but what is the concept of RESTful architecture?
Interviewee: That what I am explaining. If you use @RequestMapping(value="/url", method="POST") you can develop RESTful application.
Me: Ok, How good are you in Hibernate?
Interviewee: I am using Hibernate for the last 2 years. I am very good at using Hibernate.
Me: What are the advantages of using Hibernate over JDBC?
Interviewee: By using Hibernate, we don't need to write anything to interact with database, Hibernate will take care of.
Me: How does Hibernate come to know about your project requirement?
Interviewee: If we use Hibernate it will take care saving, updating and fetching data from database.
Me: Uffffffuuuuu... OK.. In your free time do you read any technology related blogs?
Interviewee: Yeah, why not. That how I learn Hibernate in-depth.
Me : Very Good, nice talking to you. Our HR will get back to you. :-)
The interview process went on like this.
I
strongly believe frameworks will increase developer productivity. But
the developers should try to understand how the framework is doing the
stuff. You need not learn all the internal working mechanisms of
frameworks.
If you are really good at Servlets and JSP then it is very easy to understand any Java Web framework like Struts, SpringMVC etc.
If you aren't good at the basics then obviously for every other question
reply would be.. "framework's annotation/xml will execute this"
I
strongly recommend the people who want to start their career as a Java
developer to work on Core Java, Servlets, JSP for sometime.
Then only one can understand the frameworks in proper way.
Reference : http://sivalabs.blogspot.com/2011/08/frameworks-making-developers-dumb.html
(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)






Comments
Mihai Dinca - P... replied on Mon, 2011/08/22 - 2:26am
Zqudlyba Navis replied on Mon, 2011/08/22 - 6:09am
I drive a car, but I don't know how it works under the hood.
I just want to get from point A to point Z.
The car is just a means to an end.
Maybe we should all go back to riding a horse and carriage.
Sivaprasadreddy... replied on Mon, 2011/08/22 - 6:19am
in response to:
Zqudlyba Navis
Hi,
My point is not that we are all have to go back and start from zero.
If I take my girl friend for a long drive in a car and If the car engine's fan belt is displaced I would feel like If i have a basic idea on how to open the banet and put the fan belt in proper position that will be safe and good :-)
Thanks,
Siva
Otengi Miloskov replied on Mon, 2011/08/22 - 6:49am
Sivaprasadreddy... replied on Mon, 2011/08/22 - 7:05am
in response to:
Otengi Miloskov
It seems my point conveyed in different way as if i said we shouldn't use any framework and we have to use core platform only. But thats not my point.
This is what I am trying to say. The interviewed candidates claims that they are very good at core java and saying that we can't add/remove elements to an ArrayList which is declared as final.
No matter whether you use frameworks or not you should know the basics of collections to say you can add/remove elements toan ArrayList declared as final.
Mikael Couzic replied on Mon, 2011/08/22 - 7:20am
You assume two things for which you provide no proof :
- Developers need to understand the general concepts implemented by the frameworks they use
- Developers need to know the inner workings of the frameworks they use
I agree with the first point, even if a "dumb" developer can make a pretty decent job if supervised by another developer/architect.But I definitely disagree with the second point. I never bother to understand the implementation of frameworks/Objects I work with. That's what I like about Object Oriented Programming, all I have to care about is the API/Interface, which I probe with a suite of discovery tests. If I need to understand a lot more than that, it means it has not been properly encapsulated.
And when something goes wrong, you can always go digging for the details, or find the guys you developed the stuff and ask !
Mark Bernard replied on Mon, 2011/08/22 - 7:30am
Fabien Bergeret replied on Mon, 2011/08/22 - 7:38am
When a young developer joins a project, he has generally few time to jave the information. He's asked to use Spring, he uses Spring. He's asked to use Hibernate, he uses Hibernate. But he won't understand the rationale.
After a while, when changing of projects and frameworks, he'll understand why Spring was used, or why this new framework ABC is so much better.
But if he has always used Spring, or always used Hibernate, it will be very difficult to explain the advantages of such and such framework.
That's why we have architects ...
As a conclusion, frameworks do not make developers dumb, they allow developers to be (at some points).
Mark Unknown replied on Mon, 2011/08/22 - 8:23am
Senior people and above, while they might not understand all the inner workings of Spring/Hibernate, for example, should understand the concepts, the values and the pros/cons. They should also understand that not all Web apps are wars/ears. ;)
But even with the best people, there is SOMETHING they don't know or understand.
Sivaprasadreddy... replied on Mon, 2011/08/22 - 8:46am
in response to:
Mikael Couzic
Mike Dzone replied on Mon, 2011/08/22 - 8:52am
I completely agree with Sivaprasadreddy. Frameworks are starting are a nightmare! And I have run into the same problem when interviewing people. They have no idea what technology they are using and even why it is important. An interview question I typically ask is if a Struts Action or Spring Controller are thread safe? Most don't know the answer and worse yet most don't even know why it is important! If you want an even better laugh, ask an interviewee about custom JSP tags! Spring exists for only 1 reason - to turn Tomcat into a hacked up Java EE server without using an EE server. Now backi in the day when all you had was Tomcat and no really viable EE servers, this might be justifiable. Nowadays, EE servers are mature and Spring needs to go away, quickly!
Personally I do not think frameworks, specifically Spring and Hibernate, make for any better or faster code. Let's explore the words "better" and "faster". Ok, so "better". Well, to get Spring or hibernate to do anything I desprately try to google and find an example (2 or 3 are better because the first ones are always for older versions of the framework which don't work anymore), I then cut and paste the example into my code, reconfigure it, and cross my fingers and hope it works. If by some miracle it does work, leave it alone! Don't want to risk breaking it. With this cut-and-paste-and-hope-for-the-best method, I really have no idea what the code is doing, but somehow this is "better"? I think not! How about "faster"? Well, let's see. Well for our project we want needed to do X and some developer gets all excited...Spring can do X! Well, ok. so we go with Spring. 2 weeks later we've got over a dozen spring configuration files (doing who knows what!) with Spring specific classes (I though Spring was suppose to be non-invasive, that's a laugh!) to cludge it all together. As an exercise after this 2 week fiasco I decided just to code it...done in 2 days.
If you like to develop code, stick with the EE API, the tools/services it gives you, and go code!
If you like to configure tools and look at xml all day, go the framework route.
Sivaprasadreddy... replied on Mon, 2011/08/22 - 9:00am
in response to:
Fabien Bergeret
Jeff Kottke replied on Mon, 2011/08/22 - 12:40pm
This thread points to one of the biggest problems in our industry. The fact that your interviewees were unable to answer specific questions about frameworks they claimed to have worked with for years was not an indication that they were dumb. They were probably very intelligent and if you would have asked them any question about the way that they utilized the framework for those years, they would have answered easily. The problem is they only learned what they needed to know to get the job done. I have seen this in every place I've worked since I started programming professionally. We are all on very tight deadlines. The orders from above are typically "Just make it work, I need it now" and that is what we do. There is very little time for designing, documenting, or testing and absolutly no time for learning. On one hand we have a new frameworking appearing, it seems, every other month. This is good. The frameworks are supposed to help us develop faster and more efficient. On the other hand we have to try and fit learning the famework in between getting the job done. The end result? We learn just enough to get the job done and try to learn more as our spare time permits. Does this make us dumb? Not by a long shot.
On the other, other hand the interviewees who have memorized every bit of the framework and can define every term you throw at them typically can not craft their way out of a paper bag. I wrote my first program in 1983. After all these years and all the different places I've worked, I still believe programming is a craft not a science. I have only ever had one interview, in all that time, that treated it way and it was the best job I ever had.
Sivaprasadreddy... replied on Mon, 2011/08/22 - 9:39pm
in response to:
Jeff Kottke
Cloves Almeida replied on Mon, 2011/08/22 - 9:46pm
The car analogy is incomplete. We're not regular drivers, we are professionals - akin to race car or truck driver. While both can't build a transmission engine, they know how they work and why it's there.
The thing is that even in mature industries, abstractions leak when pushed to the limit. If you don't know the concepts, you'll not know what to do when the leak happens. Or worse, you'll simply use the wrong tool for the job.
Bottom line, if you're using a framework, at least know why you're using it - and specially when not to use it.
Sandeep Deb replied on Mon, 2011/08/22 - 10:16pm
When you are out in the market, interviewing - you are hiring candidates against certain job profiles. Understanding the viscera of a framework is mandatory for application designers who are bestowed with the responsibility of laying down a foundation fabric by sewing down all sorts of frameworks together. They have to know the extension points, concepts of the layers below. For example, Stuts 2.x in the earlier version had very rudimentary support for resource bundle parametrization. A designer is expected to be able to know Struts 2.x internals enough to be able to provide for a more functional component with minimal API disruption. A developer is supposed to use the API's provided by the designer.
When the work comes to the developers, you don't want them to go all conceptual and kung-fuyee and play smart with the layers. Instead you give them a platform and ask them to focus on realizing the functional problem at hand.
Bottom line, let's be realistic and not expect every developer to be the last airbender.
Sivaprasadreddy... replied on Mon, 2011/08/22 - 10:42pm
Hi Sandeep,
I think you haven't read all the comments. I am not saying everyone should know the internal working mechanisms of their frameworks.
I don't know what happens to the system bus when i used 'synchronized' but i know how the application behaves when I used 'synchronized' and when to use 'synchronized'.
If you say we can hire the people who don't know basics of core java like collections but know how to google for dispatcher servlet configuration and be able copy paste the code snippets and say i am done..plz go ahead and hire them. But my company/projects want people who are aware of what they are doing and why they are doing.
Thirdy De Rivera replied on Tue, 2011/08/23 - 12:19am
Sivaprasadreddy... replied on Tue, 2011/08/23 - 1:34am
Dear Readers,
Lot of thanks for reading this post and providing your comments.
Today I googled with the title of this post and after seeing the comments in various sites i am surprised and at the sametime I am shocked.
In this post I tried to say if we have good knowledge on core concepts it would help us to write better software either using frameworks or without using frameworks.
I think the title of the post is misleading what I tried to convey.
But I don't undestand why people ignore the main point and concentrating on other aspects like which country I am belongs to, how bad my english written skills are, earlier I posted articles on Spring, Hibernate etc and now saying using framewroks makes developers dumb and the list going on..
And some other people starting turning this topic to a debate on XML versus Annotations.
Did anywhere in the post i mentioned like "STOP USING FRAMEWORKS. AND WRITE YOUR SOFTWARE IN ASSEMBLY LANGUAGE"?
I only said lean the basics like core java, servlets, jsp which would help you to better understand the frameworks.
Let me tell you why I feel like being strong in basics will help to understand and use frameworks in a better way.
At the very beginning of my career I got to work on a struts based project and I know a little bit about Struts.
I got some issue and I tried to resolve it for 2 days but I am not able to.
Finally I went to my team lead and explained about the problem.
My team lead was 9 years experienced developer who never worked on Struts earlier.
He think about the issue for a minute and gave a solution without even looking at the code.
Then I asked him how you are able to give solution without having Struts knowledge?
Then he smiled and said
"If you are good at Core Java, Servlets, JSP and have strong understand on Design Patterns you don't need to learn each n every frameworks. You can just start using them rightaway".
So I personally feel that being strong in core concepts is always good.
If you feel like one can write poems without knowing how to write words its your wish.
Thanks all for your comments.
-Siva
Iulian Stefanica replied on Tue, 2011/08/23 - 3:03am
Hi there,
I agree with Siva on the fact that a good developer should understand how basic stuff work in a computer or a specific programming language. More over, not understanding why one framework is better than another or than plain implementation can be dangerous. Sometimes you might want to do some things using a framework (e.g. Spring) and others, whereas they are available in Spring, using another framework or even plain code. The decision of what you use is done based on your knowledge of what is the real advantage given by using a specific framework (sometimes is can only be that the new team that takes over the project knows that other specific frameworks, which is doing more or less the same thing as your favourite framework - e.g. you might choose Struts as web flow framework, but keep Spring as IoC ... well, now it's even easier since Struts is already using Spring as IoC, but suppose we were a few years back).
On the other side, as Zqudlyba said, it wouldn't be a must to know exactly how Struts work or how Spring works (would be great if you do, but shouldn't be a requirement). Anyway, you should have an idea of the basic concepts used to implement those frameworks (e.g. it uses a FrontController, some filters etc). And know what the framework does for you and which of those things you really want.
I have over 10 years of Java and have been interviewing people for several companies so far. My observation is that those people who do know the basic concepts (and can generally detail not in much detail how a specific framework might work) are the ones who are both passionate about programming and who will write the cleanest code.The other developers will many times just use a framework just because it does the job, whereas the actual problem is easy to solve by applying a basic design pattern using standard Java (or maybe some other language like Python etc).
Hope this makes sense.
Sandeep Deb replied on Tue, 2011/08/23 - 4:22am
in response to:
Sivaprasadreddy Katamreddy
Also, please stop amazing people with your deductive abilities - Did I say we can hire people who don't know basics and write code by googling? How in heavens did you conclude that? Your comprehension skills seems as sharp as your deductive abilities!
btw, do you know a company which doesn't want people who are aware of what they are doing? Did you land yesterday, from Mars!!
Sivaprasadreddy... replied on Tue, 2011/08/23 - 5:36am
in response to:
Sandeep Deb
Come on Sandeep..
we are here to share our knowledge, not to fight.
If my reply looks hard to you i am sorry.
I just shared my opinion that "knowing basics would help to use frameworks in better way". Thats it.
Many people also shared their opinions.
Some people are saying when the framework is already doing what I need, why would i learn its internals..I agree.
You are saying we can't calculate the dept of understanding on concepts.
So I shouldn't ask java basics as there are plenty of frameworks and we can use to get the job done.
I shouldn't ask basics of frameworks as I can't calculate how much depth of conceptual understanding is required for a senior java developer.
So please tell me how should I interview the candidate and how to decide whether I can hire him or not?
Next month also I need to take interviews. Your suggestion would be helpful for me.
I may not know how to interview, but I am open to take suggestions on how to take interviews.
Again, we are here to share knowledge not to fight :-) Btw I am from Earth, not from Mars!!!
-Siva
Nicolas Bousquet replied on Tue, 2011/08/23 - 6:17am
The problem is not high level abstraction vs low level abstraction.
The problem is to understand what the frameworks are for, what problem they really solve in an efficient way. Spring/JEE? Use them too much and you code is unecessary complex, more difficult to understand and maintain. Really usefull for the most complex cases, increase complexity in simple cases.
Hibernate and ORMs? Work well for CRUD but tend to introduce new problems with their caching strategy and have performance problem with advanced queries. It is not uncommon to have ORM code requiring one minute of processing while the simpler equivalent 3 liners SQL perform in 100ms.
Add to this that theses technologies and frameworks are promoted by vendors that make a living on them and that many architects just blindy follow the 'standard' and apply always the same stack and you better understand why we are in such situation!
Why do we use hibernate/spring (or JEE) ? Well it's the standard, everybody does it and it look well on the CV. Nobody can't blame you for using the standard. Does it help to solve your problem? They don't have a clue. But the vendor provide lot of good powerpoint presentation that say so you can show to your boss in case of.
Sandeep Deb replied on Tue, 2011/08/23 - 11:18am
in response to:
Sivaprasadreddy Katamreddy
Alex(JAlexoid) ... replied on Tue, 2011/08/23 - 6:26pm
In short, there are a lot of code monkeys*. People that work in IT without personal involvement with technology.
A developer, as opposed to a code monkey, is expected not only to code against an API but when issues arise to identify the problems. For example, Hibernate and lazy relations is a classic problem of an excepton with "Session closed". A person that does not understand what Hibernate does and how it works will stare blankly at that issue...
* - http://en.wikipedia.org/wiki/Code_monkey
Anusorn Chaikaew replied on Tue, 2011/08/23 - 9:32pm
in response to:
Sivaprasadreddy Katamreddy
Aaron Digulla replied on Wed, 2011/08/24 - 7:00am
If you agree to this, we'll surely disagree about what "important" means. People don't understand cars because cars work. People know a whole lot about cars that break down five times a day.
How am I supposed to know why I should use Spring if I never ran into any of the problems which Spring solves? Why do I have to understand the intricate details of DI when Spring "just works" for me? Why do I have to be able to keep all this useless knowledge in my brain when I never need it? Or when I can ask the Spring Guru in my team?
Nobody expects the web designers to know the JEE spec. We all agree that each member of the team knows the spec to a different degree. Is that bad? No! We use frameworks to free our brain power from mundane, stupid tasks and knowledge so we can concentrate on the few important aspects of our work.
As for final mutables: This is a trick question. It's a nice way to have some fun with a poor, nervous sod during an interview but it only tells me whether he has memorized the Java spec - which will tell me something about him but not whether he's a good developer. Depending on my programming style, I might never use or need final at all. Does that make me good or bad? The real pain point is that nobody really knows how to create a interview which answers the basic question: Is this a good programmer?
If he's not a good programmer today, maybe he has everything I need to make him great and productive within a couple of weeks or months? Maybe he sucks at coding but he's great at answering the phone. That might do more about my productivity than any line of code he could write because it means that I can finally get some work done.
So my conclusion is that it's funny if someone doesn't know something which we deem crucial but in the end, it says more about how pedantic we are ourselves.
Chinese proverb: He who asks a question is an idiot for five minutes. He who doesn't ask dies an idiot.
Discouraging "stupid" questions makes the world dumber.
Lund Wolfe replied on Sat, 2011/08/27 - 2:56am
Unfortunately, there is a pretty wide standard for senior developer. Some believe anyone with a couple of years experience is senior, while others think senior developers, as defined by ability and maturity, are actually quite rare. I have also heard that the standards for BSCS programs in the USA were lowered some years back in order to get more people to enter and graduate. That's scary.
I prefer to ask conceptual questions and scenario questions to see how the candidate thinks and thinks through a problem rather than specific tool/technology questions. If you are hiring code monkeys or expert tool users then you should ask detailed low level questions and that is probably appropriate for many shops. I can learn the Java language in two days but should you hire me ? Certainly a senior level developer is needed to actually pick the best of breed or right tool/framework for the job, but an intelligent person can learn any new framework and learn it well fairly quickly, especially if they have experience with something similar.
Shiva Anand Red... replied on Sun, 2011/09/04 - 11:00am
I completely agree with wofly & siva, his scenario had Sr. Software engineer. The job description is to supervisor a team of new guys. It is imperative for him to be aware of techy stuff.May be we should be clear of what we are asking. Usage of framework is one thing & knowing how it does is another thing.
I'm a proud java developer, sadly not so proud when someone asks me how JVM works in the desktop.
siva, just for you. If you are looking for a guy of know-how of JEE. Just mention frameworks as nice to have ;).
I use framework to get the work quitely & quickly. Added advantage, the guy maitianing it doesn't need to know how it works. All he needs to know if how to add a fix it.