The Degradation of Java Developers

On multiple occasions I was blogging about these legions of enterprise Java developers trained to use certain frameworks without understanding how things work under the hood. This morning I had chance to see it one more time after interviewing three job applicants in a row.

Our consulting company got a request for a well rounded Java developer with the knowledge of SQL. We have good reputation with this client, so I started screening the candidates, which I got from a recruiting agency.

First, about the resumes – each has several pages with detailed description of their work for various employers. Each resume had a list of technologies that the candidate supposedly know. Here’s the list of technical skills from a real resume:

Core Java, J2EE, JSP, JDBC, Servlets, AJAX, XML, HTML, XSLT, Web Services, CSS, JavaScript, SQL, Oracle 10g, MySQL 5.0., JMS,Eclipse, Adobe Flex Builder 3.x,UML, JDBC, SVN, JUnit, VSS, Jira, HTML, DHTML, CSS, AJAX, JavaScript, XML, MXML, Action Script, Servlet, JSP, JSTL, Hibernate 3.x, Spring 2.x, IBatis, SOAP, UDDI, WSDL, Apache Axis, Web logic Server 8.x, Apache Tomcat 5.0, Struts Framework, MVC, ANT, Maven.

Looks impressive… for those who haven’t been interviewing Java developers. I don’t want to say that this candidate is lying, but he wasn’t able to maintain a conversation about 80% of these technologies for more than 3 minutes. They’ve heard or even tried working with these technologies or tools, which is all that’s needed for adding them to the resume. What are the remaining 20% they can talk about? The frameworks. Most likely they will explain how to configure Struts or Spring, and even how to make Spring talk to Hibernate. BTW, they all love Hibernate cause it spares them from writing SQL, speaking of which, they know very little about this query language.

When I see all these Struts, Springs, and Hibernates on the resume I start with this, “Imagine, that you’re not allowed to use any frameworks. Explain in details the entire process of bringing the data from DB tables Customers and Orders to the Web page”. For most people it’s a killer proposition let alone writing some SQL queries…

One person had JQuery on the resume. I asked her, “Why did you use jQuery”…20 sec pause…”I like it, it’s nice!” That all I could pull out from her on the subject.

Two weeks ago I’ve attended a technical keynote at JavaOne in San Francisco. Brian Goetz was showing code samples of Lambda Expressions (a.k.a. closures) that will be introduced to Java 8 next year. This is a pretty advanced feature and proposed Java syntax is not for the faint of heart. I was thinking to myself, “Who’s going to use these closures in the enterprise Java world? 10% of the developers? 5%?”. Are these expressions being introduced just for fun cause it’s cool and other functional languages have them?

Software development industry is changing. It doesn’t need hackers anymore. It needs craftsmen who can configure and replace blocks of code when something stops working. Ideally, you should have in your team one Java expert who can actually understand the code of your application and can fix it not on the block level, but can drill down to a single line of the Java code. Somehow such people also know how to write a SQL outer joins, how to fix the broken build, and whatever else may come up.

A typical enterprise manager wants to increase the population of his software developers. Managing more people is the shortest way for moving up the career ladder. It is what it is. But if you are smart enterprise manager, make sure that for each dozen of framework programmers you have at least one real.

I already received a new resume for tomorrow’s 10AM interview. The resume looks the same. The only lines I read are the names of the former employers and projects. Any other written information is useless – the real picture will start developing tomorrow at 10AM.

Tomorrow’s Update. It’s 10:15AM. Yet another interview is over. The fourth wrong answer was that to send the data to the browser a servlet has to add it as an attribute to the HTTPSession object. Do you think it would be rude to stop the interview after listening to such answers for 10 minutes?

The Day After Tomorrow’s Update.I’ve added $5 to the hourly rate offered for this position. The very first candidate passed my interview with flying colors. Never thought that a lousy five bucks can open the door to the wonderful world inhabited with intelligent Java developers!

124 thoughts on “The Degradation of Java Developers

  1. Great post. The thing is writing all these java acronyms even though they know only 2% of it and worked on it maybe for a day , but *they have a higher chance of getting a interview*. Even recruiters look at these terms and shortlist. So if i honestly put only the things i really know, i have less chance of a interview. This gives incentive to people to lie slightly.

    1. This is right. Looking for a job is a game and street smart people learned the rules. All these keywords are included in the resumes to pass the first filter of recruiting agencies.

      1. But, are you as the hiring manager willing to do anything about it? The only way to combat resume bloat is to start letting people with fewer acronyms and more descriptive resumes get past the filter.That’s only going to happen if businesses and hiring managers demand it of their HR or recruiters.

      2. The genuinely smart people don’t need to “pass the first filter of recruiting agencies” because all they need to do to get a new job is announce publicly that they’re in the market, or respond to one of the emails in their archive. Companies that need to hire should, rather than going to recruiters, go to their best employees and ask them whom they should try to poach.

        1. You may be surprised, but projects are usually stuffed by very small percentage of genuinely smart people. Most of the people on any enterprise project are mid-level software developers with 4-5 years of the real or near-real experience. These people have to be filtered.

      3. What are you talking about ? There is no genuinely smart people or mid-level software developers. People are more complex than that. I’m probably considered as mid-level software developers for most managers because they all ask me to know lot of thinks on several frameworks I don’t mind. I love programming and I really know how to develop something without help of any framework. I see every days a lot of people considered as genuinely smart people because they know many frameworks unable to design a really simple database or unable to listen to the real client request.

  2. I don’t know your specific needs and you could be under a scenario where you absolutely must hire a rockstar that can come in an be perfect, but maybe you should put a priority on finding quality people that you can develop into your rockstar. Maybe you should make it a priority to provide learning opportunities for your developers so they know how things work under the hood.

    You blame it on a degradation of java developers, I blame it on an industry that no longer wants to develop people. They want their out of the box rockstars to come in and just perform.

    1. We need a contractor for our client and are not looking for hiring an employee to make him a rock star. People who market themselves as consultants should take care of their own marketability.

      The bad part is that two of four candidates I’ve interviewed were the H1B visa holders (a temp. work permit that USA grants to people because there were no such “talents” locally). Our company sponsored a couple of H1B visas too, but these are really good developers. I’m not complaining. I’m observing. The enterprise IT as it is today is not overly productive, and I don’t foresee improvements any time soon.

      1. Your proposition, “Imagine, that you’re not allowed to use any frameworks”, is almost unreal in today’s enterprise world since almost all organizations use some or the other frameworks(Open source or paid). Btw, you don’t need to know the internals of Spring or Hibernate, unless you want to debug something with the framework itself. People use frameworks since they shield us from the lower level details we have to deal with otherwise. So, ask for something that would happen in today’s enterprise world if you want to get real answers.

      2. I come from a company where your proposition was true. We were not allowed to use any frameworks, reflection or other stuff. I worked there three years. I learned a lot of think. When I decided to move on I had difficulties to find a new job because of my lack of framework knowledge. What do you want ?

    2. Man you are entirely correct! I have been saying the same thing. I’m doing an internship right now but before I found this company I would go to many interviews and it seemed to me that all these people already wanted me to be very good and knowledgeable. It felt like what they wanted was a finished product, mind you I was being interviewed for a job I wouldn’t be payed for.

      People are investments, you should respect them and see them as humans not as fucking cogs or products. I chose the company I’m currently interning in because our whole interview was lighthearted. In our interactions it felt like he knew I was a freshly minted coin, he looked at me and saw potential, he saw a little kid that could become anything with the correct environment. He didn’t look at me as a product, how much he can get out of me, how much effort he is going to have to put in me (and it better return!).

      In the old days, people would simple begin in a company, and they’d work their way up. Iv heard of people who learned programming on the job. Granted its not ideal but it illustrates the shift in paradigm.

  3. I very much empathize with you. When I interviewed .NET developers the picture was the same: long lists of technologies they worked with – but unfortunately little understanding. So we turned the recruiting upside down. We told applicants in the recruitment ad not to send any resume, but instead to fill out an online questionnaire specifically designed for the position to fill. On this questionnaire we asked them to rate their knowledge regarding only relevant stuff (tools, technologies, methods, paradigms).

    This helped a great deal deciding who to interview at all.

    But then during the interviews it turned out people misjudged their knowledge: mostly they overrated it greatly. After a few interviews we could explain this: people cannot judge themselves in an absolute way. They judge themselves by comparing their knowledge to their peers. “I know C# better than Mike, so I judge myself to be a 4 on a scale of 1..5.”

    This finding led almost discarding the questionnaires, too. Rather we posed a trivial programming exercise to be done in realtime while we were talking on the phone and using screen sharing: “Use Notepad to write a function which sums all integers in an array. Start now!”

    Then we timed how long it took them. If they finished within 45sec (or 1min at most) we wanted to interview them.

    That´s all.

    I also used this test in trainings right at the beginning to get an overview of attendee´s level of experience with programming. And believe it or not, it´s very accurate 🙂 The range of results usually is from 30sec to 2.5 min (or even not finishing at all). And usually people taking longer than 60sec have a hard time following the course of a training. They are slow in coding (and thinking along).

    So maybe you want to save yourself some time too by switching from tedious interviews to a quick screeing via skype/TeamViewer.

    PS: If I remember correctly this type of quick test was mentioned by Joel Spolsky. But I also found similar tests in other literature: speed as an indicator of general capability.

    1. Thank you, Ralf! This sounds like a good idea. Interestingly enough, last week we’ve had a presentable candidate with decent technical skills. But my colleague had a feeling that this person was a little slow. Just because of this we decided not to present him to our client to maintain our good reputation.

      1. Quick developer are not good developers. Quick developers choose easy solutions or create workarounds to solve problems. These developers prefer to choose frameworks than coding strong code. They are bugs generator but they are what clients ask today…

    2. This is one of the methods that has always boggled me. Endlessly. Surely, having to code something relatively simple in a tough spot while being timed measures something, but it will certainly not give you the best coders. Some great and analytical coders might not perform well under this type of test plus it has zero application to real life.

      There was a great article (that I could not find quicky) using an analogy of hiring a sport journalist based on how well he can answer historical sports trivia. While there needs to be a way to weed out incompetence, live coding excercises are counter productive if you are looking for genuine talent.

      1. As I said: I correlated the results of this test with other impressions I got from developers. And as it turned out, people within a certain range of performance (up to 45sec) showed markedly better overall understanding of all sorts of aspects of programming. (I only remeber one guy how performed poorly, but otherwise was very clever.)

        So I guess it’s a matter of resources: You have plenty of them? Then try to find the most accurate and fair assessment. Otherwise… well, you need to acknowledge you are never going to get he perfect guy. You just need a heuristic to quickly weed out applicants who are not likely to live up to your standards – by full well knowing that among them might be an outlier. Too bad. But it’s always a trade off.

        The explanation why high performers in terms of speed for such a simple exercise are better on average in other areas might be: who is able to recognize sth trivial as being trivial and at the same time knows the most basic tool of his trade inside out (prog language) is a) able to focus, so he’s likely to get things done, and b) smart, experienced and motivated (because otherwise he would not be so fluent in his tool).

        Sure, this is not a silver bullet. But it’s a pragmatic heuristic to lessen the effort of weeding out low performers quickly. Because even after 15min of dissatisfying conversation you might dismiss a guy, who’s a bad ass programmer – but unfortunately feels stressed easily in 1:1 situations. So my question would be: what kind of people are you looking for?

        I prefer smart and gettings done compared to top notch expert in some field and deep thinker who needs hours to become comfortable with new situations.

      2. I agree. Programming under duress isn’t the best way to find a good programmer. You can weed out candidates by having them solve a non-trivial slightly open ended coding problem on their own time. Most unqualified candidates won’t even return a submission. You can also learn a lot from the returned submission…did they hack it together in a few minutes? did they spend a lot of time on the issue and are they meticulous? Did they error check the code? etc. In addition, the choices made and/or bugs in the response are good starting point for understanding their thought process during the interview. This serves the same purpose i.e. to filter out those who can’t really code from those that are worth interviewing.

      3. Piizei, reread what was written. This was “sums all integers in an array”. That’s all. I can empathize with some candidates being nervous, but if they can’t write something that dead simple, I’d be very concerned about their skills. Yes, some candidates will freeze up, but at the end of the day, when you don’t have the perfect luxury of unlimited time and resources, you need *some* filter. I’d rather that filter actually relate to the job at hand instead of some HR person scanning for keywords on a CV.

    3. Thank you very much, this solution is really nice. For any programming language, any level of knowledge, fast and can be measured. Will run this test this Monday for developers that are working with my projects!

  4. Could you automate the initial screening process by using a quiz hosted on SurveyMonkey? In-person interviews seems like a very non-scalable way of eliminating these candidates.

  5. That resume included CSS, AJAX, js, and others twice in the technologies… I would say that is a dead giveaway.

    Although I don’t know what some of those technologies even are. I’ll stick with C and embedded systems.

  6. *Lots* of people will use Java lambdas. Many developers have been using anonymous inner classes as a poor lambda system for years. The interview candidates described are a very poor sample.

    Hibernate and its ilk had their surge of popularity years ago, but are now widely disliked and perceived as the wrong solution to the issues it addressed.

    Something like an outer join is extremely elementary SQL. If a candidate is super far off the mark, the consideration should not proceed all the way to a face to face interview.

      1. yes. JPA et al. is crap for any non trivial application. Hand writen SQL and stored procedures will outperform significantly every time. I have seen examples where using arrays as arguments to a stored procedure led to greater than 10,000 fold performance improvement over peppering the database with thousands of insert statements.

        1. Replacing SQL with a 500-page long JPA spec “to make my life easier” is not a good idea unless you really need various types of data storage. In 99% of the today’s enterprise applications it’s not needed. But my kudos to the Sun/Oracle tandem for brainwashing millions of Java developers who really believe that learning JPA is better than learning SQL.

  7. It doesn’t help matters when employers present a similar list of acronyms as absolute requirements for a position. I’ve read job posts where the prospective candidate was required to have “five to six years of experience with” a set of technologies, some of which weren’t invented five or six years ago.

    Additionally, including these things on a resume at least shows a willingness to try to engage with the pace of change in the industry. For my part, I spend a reasonable portion of my working time looking at new stuff, evaluating it’s usefulness for different sorts of problems, and adding a few things to my toolkit for more evaluation and possible use as appropriate. Hvaing someone around who’s actually keeping abreast of this stuff is also a useful thing in a small team, if only to be able to tell a manager or client why a particular flavor-of-the-month technology is _not_ appropriate for the job at hand.

  8. I would love to interview with you all one day. Not cause I need a job, but just more of a diagnostic type of venture. All in all, you should be happy, I’ve contracted at companies for Flex work where they didn’t know what questions to ask, so when I got there the code was a tangled ball of hacks and inexperience.

  9. Goto numeric recipies in C. Get Adaptavie step size Runge-Kutta 45. Adapt it for interpolating between two times. Actually, I think I set the upper time, now, but in SimStructure I exceeded my time and interpolated to maintain real-time. Basically, adaptive step size slows down when, for example, a comet is near the Sun. As I ponder a system with many particles, my clever scheme seems less clever, but I haven’t compared.

    You supply a derivative function. Physics of particles are 2nd order, so you have 6 state variables per particle. I created spring, viscious, gravity and electrostatic forces. I made a foil and tried to do aerodynamic forces, but that’s ridicuoulous. I did hydrodynamics with viscosity. I do density for boyancy and air baloons. I made-up guns with kick. I calculate how submerged a sphere is in water. I implenment a crazy 7th order spring force to handle collisions and the ground. The ground can have earthquakes and water currents.

    I made a C interpretor kind of thing. It supports IIR filters. I began matrix support but not complete.

    Just remember — I got an A in nonlinear control systems!

    1. Trick question! You need at least 4 points for Runge-Kutta interpolation to work.

      (Maybe this was was just bot-spam?)

  10. The problem is that many developers *have* actually worked with that many (and more) frameworks. I know I have. And I can only remember the specifics of the technologies i used on the last project or two.

    Did you focus on the technologies they used last ?

    1. Sure, people are using all these frameworks, and there’s nothing wrong with it. But people should be curious to know what’s under the hood. People should read blogs, buy books, watch video tutorials. These are the people I’m looking for.
      When you take a car to a repare shop here in the USA, the chances are slim that the technician knows what’s going on with your car inside. He’ll offer you to replace the expensive block, the car will be fixed, but once in a while you run into a technician that understand cars and can find an inexpensive solution that will work. These are the most valuable people. Today’s enterprise IT hires tons of inexpensive technicians and complains that there is not enough IT resources. IMO, if by some miracle, each and every enterprise application was reviewed by, say IT people from another civilization, they’d fire most of the developers and close half of the applications that are currently in prod. But it seems that I got carried away, sorry 🙂

      1. If I use a framework or a library, I don’t, don’t, don’t want to look under the hood. If I have to look under the hood, then the interfaces or the documentation sucks, and I will stop using that framework as soon as possible. Don’t make your developers poke around in framework internals. It defeats the entire point of using frameworks.

        My answer to “why did you use this framework / library / script language?” will always be “it solved a problem for me / it gave me an abstraction of the system I was working with / it’s nicer than plain js”.

        As a developer, juggling abstractions is the main thing I do. Don’t tell me that’s wrong. You wouldn’t tell me to get rid of Java and write JVM bytecode. If one of the abstractions (framework/lib) I’m using doesn’t work because it’s buggy, I just want to stop using it. Fixing it is someone else’s job. Pay someone else to do that, someone who is an “X Framework expert”, or someone who is on the dev team for that framework. They know the internals of that beast. Why do you want me to spend time on learning it – it’s not in my scope.

        1. Dear Sympathizer,

          Please calm down. I don’t want you to spend time on learning anything. You already spent enough time learning your frameworks that do what you need. Let’s keep it this way. Do whatever is in your scope. Our scopes are different – that’s all.

  11. Actually, the sad thing is that this degradation can be seen in all programming languages, not just Java. They just don’t make programmers anymore like they used to.

  12. IME, if they know Linux and have dorked with functional languages, they are worth bringing on-site. Anyone else is chancy and usually correlates with dull-mindedness.

  13. We can give you a trial account with some extra credits for VideoView so you can put together a bunch of questions and get a nice video of the applicants describing some of the topics you care about.

    I’d be very interested to see if that could help you weed out a lot of the bogus applicants…

  14. I once interviewed somebody once with 5 years MSSQL exp. When asking the 20-30 questions we had on sql it started with simple select’s then got harder to join then harder to delete with joins. Not a single question was answered.

    It isn’t any particular trend in any type of tech. These people just exist.

  15. I don’t know why Yakov is puzzled, it’s something he was telling before in his podcasts. There is 80% part of developers and 20% part. He is looking for best 20% but on interviews he mostly has mass 80% part. It’s obvious that 80 > 20 and four interviews in a row can be simply within 80% part.

    Yesterday was watching lecture of Java Dev from Odnoklasniki.ru project. They had rewritten Java Serialization for own needs, have hands-on experience invoking JVM methods, and much more, just to get better performance for this social-networking platform. As for my opinion it’s talented team, but I don’t think they all are from 20% part. The question here is in proportion. I guess one super-curious dev can drive “experienced but nothing more” team, and this team can meanwhile nurture “less experienced sub-team” and that will be a healthy project.

    Do companies actually interested for any developer to be “curious on what under the hood” guy?
    Who will do routine than?

    1. There are 24 hours in each and every day. Curious developers enjoy learning things for themselves (not for the employer) after hours.

  16. It’s a conundrum. The people who really should be using these frameworks are the ones who had previously built all functionality by hand and know why, where and how to use them. But that kind of developer is unlikely to want to work on a solved problem.

  17. I hate to give unsolicited advice without knowing all the details of your situation, but you might want to consider the source of these resumes and how you recruit to be a part of the problem.

  18. I think you can get the same situation in any of IT technologies. People wrote all known it-words in our resume. In other case, probably it requires current situation on a job market, dn. I had the same situation in Ukraine when i tried to find new person on my position.
    Thanks for the interesting post, Yakov!

  19. I’ve had so many interviewees where they couldn’t answer the simplest of questions about items on their resume. People who claimed 10/10 on sql and couldn’t tell me how to use analytic functions, or the same on languages where I know little and they claim expertise. I don’t know Ruby, just started using it, and I still blow interviewees out of the water with the simplest questions. Hiring quality developers is so hard when resumes can blow things so out of proportion. After reading their resume, then my own, I get to understanding why it is so hard to get interviews at good companies. You’d basically have to be famous first before you could demonstrate that you could hold your own at programming, the resume is mostly bullshit.

    1. Analytic functions in sql are extremely obscure and only used in pretty rare cases in specialized apps. That’s not what I’d ask a sql developer, even a senior one. Aggregate functions, sure, but not analytic ones.

    1. Mohammed, agreed, the last two developers i hired for a Java position were C++ developers interested in learning Java/web development. I specifically asked the recruiter to send C++ people. Problem solved.

      1. Talent pool of C++ developers is quite shallow too.
        Plus many companies want someone who can start working full speed strtaight away, without learning.

    1. Most of the Python devs I’ve interviewed haven’t used it for more than simple scripting and weren’t that good either. And I’ve met plenty of Ruby devs who are over reliant on gems to do anything non-trivial. So I don’t think that would help.

      Better screening up front is the only way to go. Ask them basic questions like “what is the most common cause of a stack overflow error?”. When I ask, 4/5 candidates can’t answer correctly. Thank them and move on to the next.

      1. As opposed to java devs that build everything from scratch? Reliance on community developed tools is a sign of a good programmer in my book and anyone that is looking to solve problems instead of showing off will use libraries to solve non-trivial problems. Plus, if your problem can be solved with a gem then you’re either solving the wrong problem or your problem isn’t hard enough. Too many places hire divas that won’t use anything unless it has been developed in house by them. If over reliance on gems is how you screen candidates then you’re using the wrong metric.

  20. Thanks Yakov, I really enjoyed your post. One of my favorite interview questions is “What is your favorite technical book? Why?” I’m not as interested in specific technology so much as a candidates ability to dig in and learn. If you make this a leading question, you can end a lot of interviews very early. The “recruiterfied” candidates with every tech in the world on their CV are usually guys that don’t read anything very interesting. Seriously, is “Struts for Dummies” ANYBODY’S favorite book? 😉

    1. Joel, good to hear from you. I’ll try your question tomorrow morning with yet another candidate. I started to consider having Struts on a resume as a bad thing 🙂

      On the side note: last year I had a project with a financial company in the New York City. The first thing the client told me was that to understand what they wanted to build I had to read your book about Robotlegs.

  21. class Yakov {
    public static void main(String[] args) {
    int nums[] = {1,2,3,4,5,6,7,8,9};
    System.out.println(Yakov.sum(nums));
    }
    static int sum(int[] nums) {
    int counter = 0;
    for (int i: nums)
    {
    counter += i;
    }
    return counter;
    }
    }

    I wrote this in Notepad off the top of my head, in about 20 seconds, without using Google or SO. How did I do?

    1. Brian, you did great! Now you can participate in the competitions where young speedy programmers do similar things, but first answer what are the pros/cons of using short instead of int in your example 😉

      1. Well, I am old, so I’ll pass on the competitions 🙂
        Hmmm, pros and cons of short vs. int seem pretty straightforward. I’d say that short would use much less memory and thus conserve significant space in very large arrays or wherever memory is a concern, but of course int allows you to hold much larger numbers. Most of the time, I’d say use an int, unless you only have a limited range of values to express, or you want to save space. I’ve never been a big fan of the “memory is cheap” argument, but then again, it is nice to not have to worry about word alignment and such things these days either 🙂

      2. I was curious so i ran

        javap -private -c YakovInt
        javap -private -c YakovShort

        The generated bytecode only showed that in the int case

        iastore / iaload are used

        and in the short case

        sastore / saload are used

        Which still does not tell me a lot about the performance. So i looked at the code that hotspot generates like this

        java -server -Xcomp -XX:+PrintAssembly -XX:CompileOnly=Yakov::main -XX:CompileOnly=Yakov::sum Yakov

        And it seems that in the short version of the program a lot of movswl statements are created to convert from a 16 bit values to 32 bit ones

        So i guess that while the short version of the program would use less memory it would perform worse ?

        1. I believe results should vary depending of the size of word in a CPU. If the word size is the same as int, it should perform a little better than short as the latter may need to be converted to int anyway.

  22. I’m currently a 1st going into 2nd year computing student and a friend posted this on facebook. Haha Yakov you actually make me want to change courses now, cause the degree of the quality of work you want seems so beyond the reaches I can do. I don’t really know much aside from C++, Java, C and a bit and there, soon should be getting to know more about other frameworks scripts and SQL etc. However if this is the workplace I am meant to be recruited into it seems, I must turn into a introvert. No really haha using every day of my life to my field and never spending time with friends or family. I might be over the top but thats what it feels like when you ask for almost everything in the resumes. Don’t get me wrong this position your asking for is obviously not for me who is fresh from uni, however I would think I’ll eventually be in this position haha. And so you are really making me scared haha. I picked this course thinking it was a excellent field to work within because the jobs would increase and would have a excellent future, however I did not think turning into an introvert being a book worm every day and being paid average wage (I’m guessing) would be the thought of computer science. Maybe I’m wrong and the people your asking for are people with ALOT of experience but to me it seems you are only looking for just developers, not even senior. Anyways I thought I would put in my input because this article is really scaring me and my employability, because I don’t see myself really becoming someone who sacrifices all or most his social wel-fare for a single job that pays average. But i guess this is the norm today in this economic crisis.

    1. Dave, you’re messed up. Why did you go to college majoring in this field? Because you parents said that the money is there? If this is the case get the fuck out of this college asap. Do what you like. Work hard in the field you like. It’ll take years of commitment. And then maybe, just maybe… you’ll be what you want to be.
      I definitely don’t want you for this position. I’ll tell you more. I don’t want you for any position until I see that you like OUR profession. If you don’t, I’ll never want you.
      I hate Facebook cause it turns people into fucking zombies. But if it helped you to find my blog, I may reconsider.

      1. Haha why are you angry?? Umm I don’t like Facebook as much as you do, But I use it only to keep in touch and it did help me to find your blog, because that friend is also doing computer science. Yakov I think you got me really mis-understood I did not expect a full blown angry reply over my comment about how I think computer science in the field might be like according to your requirements for a developer. BUT I FULLY DO understand your complaint with developers not knowing JACK, i mean my father is a civil engineer he is also a employer and he really doesn’t like people who don’t know even the basic. Anyways look yakov I don’t know why your angry at me, for commenting my piece of mind but I do enjoy programming alot and how computers work really fascinates me. And thus why I chose computer science over civil engineering. Its just I red this article and I was awed, because that’s how much I need to know before I’ll be a good computer developer I felt overwhelmed and wanted to talk about my piece of mind. Mind you that I think I was over the top in my comment above maybe alittle. Any who the matter of the fact is I don’t know why your mad at me, but errrrrr Yes I work hard at my field, because I had little to no background in computing I tried really hard to become a decent student at the field. I think you sort of judged me because I found this on facebook ? or I don’t know but I see you as a mature adult did not expect this though. And I may have lost respect for you 😦 but yes I understand your frustration. and don’t get me wrong I am VERY interested in the field. And I though that I would find some encouragement in some way rather then saying get the fuck out.

  23. Great post. I have seen far too many horrible resumes for contractors. All I can say is if you can’t answer questions about the tech on your resume, then it doesn’t belong there.

  24. Before judging us think twice:
    1) Thats you guys use regexp patterns for candidate search, so strings like this:

    Core Java, J2EE, JSP, JDBC, Servlets, AJAX, XML, HTML, XSLT, Web Services, CSS, JavaScript, SQL, Oracle 10g, MySQL 5.0., JMS,Eclipse, Adobe Flex Builder 3.x,UML, JDBC, SVN, JUnit, VSS, Jira, HTML, DHTML, CSS, AJAX, JavaScript, XML, MXML, Action Script, Servlet, JSP, JSTL, Hibernate 3.x, Spring 2.x, IBatis, SOAP, UDDI, WSDL, Apache Axis, Web logic Server 8.x, Apache Tomcat 5.0, Struts Framework, MVC, ANT, Maven.

    were created to make your cv parser happy, not you.

    2) Thats you guys have so small technical experience to belive that someone with 5+ years in (for example) Struts will not be able to work with Spring MVC (another example),because “omg it’s absolutely new MVC framework!”. Thats why we need to add all frameworks ever used, not because we are stupid or like it.

    3) Some words about SQL: All mainstream SQL servers today (MS, Oracle, MySQL..) turned into big fat beasts, all of them have it’s own SQL syntax and you must spend years of learning each just to write in your cv something like: PL/SQL or T-SQL. Thats why we don’t want to go far away of ORM and some ANSI SQL.
    To avoid situation like this: “I found SQL in your cv, we have the 50Tb+ oracle db with 5000+ tables and 15000+ stored procedures, you’re welcome”.

  25. I was going to comment that writing everything from scratch isn’t done anymore nowadays. Then I looked back to my college days (two months ago) and how they taught us.
    Guess what, first they taught us SQL, how to connect to a database manually in java, and then they taught us Hibernate. It’s been a long time since I wrote SQL but I COULD do it if I had to.
    So I guess that’s what you want. Not someone who can write everything from scratch but someone who understand what’s going on.

    1. Nick, there’s a DB table Customers. How long would it take you to write an SQL query that will return only those cities where more than one customer lives? If you can’t answer this question immediately then you don’t know SQL by my standards. Unfortunately, 9 out of 10 people who use Hibernate can’t answer this question.

  26. I am sick and tired of smart ass recruiters like you. The cure for developers worth their salt is to stop working for other people and become business founders themselves.
    Weeding out developers by having them loop over arrays is sheer stupidity.

    1. “business founders”. and what would their “business” be? selling development services?

      I have found, however, that ‘interviewing’ for traditional jobs vs coming in as a direct consultant for small engagements to be *vastly* different experiences, and not sure I could take going back to FTE, if only because of the interviewing processes (never say never, but…).

      Typically, you’re grilled by people who have specific answers in mind, know their architecture (and foibles) inside and out, and want to show off how smart they’ve been. Challenge them, by pointing out the alternatives or that they’re wrong in their assumptions, and you’re out. Doesn’t matter if it really affects the business or not.

      Once had someone argue with me about the syntax of a MySQL statement – I was right, as I’d just written it the night before, but they insisted I was wrong (if I ascribed more smarts to them, I might assume this was a personality test to see how I deal with being challenged).

      Anyway… going in as a consultant, talking with business owners or managers about a particular problem, developing a plan of attack, then solving the problem – wholly different experience. They don’t necessarily care if you know the specific syntax of a library – they just want the job done.

      Of course, the danger is delivering something that provides the immediate value needed, but has a long term maintenance cost (or lost opportunity cost in the future), which is very hard for most business owners/managers to vet up front.

  27. Just a quick note about endless buzzwords on the CV. Employers brought this on themselves. Completely disregarding people for not having buzzword X on the CV in the initial screening is why people put them there.

  28. there is obviously a dilemma here, I am desperately looking for job to relocate, Now even though I worked on most of the technologies mentioned above at various points in the projects I have handled, I am not a expert in all of them, but when do you call yourself an expert in a particular technology or a language., how do you know you are there? how do you where do you stand, When you are looking for a job desperately you fill your resume with everything you know so that recruiters will notice you and hope the guy interviewing you will understand your potential.

    1. You can’t be an expert in everything. Just put a level of knowledge next to each of the skills in the resume and hopefully there will be a matching position looking for experts in the disciplines you know the best.

  29. I’m a Java developer who focuses more on Core Java / Concepts rather than on frameworks. For majority of part, I worked as a permanent employee of a company. But, recently I started working as a consultant due to some situation. This is what I noticed, some companies they don’t even look at your resume, if the manager don’t see those frameworks on resume. What I don’t understand is, after doing real work and having understanding at the fundamental concepts like Servlets, AJAX, or Java, don’t you think that a candidate can pickup concepts of frameworks easily. After doing real work with different frameworks like, Struts, Hibernate, Spring, jQuery, etc, , what I realized is – it’s not at all hard to grasp the framework technologies / concepts with good knowledge of fundamentals. I think, hiring managers should understand this. Fortunately, managers who hired me so far understand that and I always kept my promise of delivering quality work.

    I think, for – “The Degradation of Java Developers” there’s problem on both sides ( candidates and hiring managers).

    1. I’m not going to disclose the numbers, but can say that this rate translates into a six-figure annual income.

      1. Fair enough. But a six figure income when you are contracting is not the same as a six figure income when you are a full time employee. No vacation, no 401k, no health insurance, etc. $50/hour will get you $100k/year (if you are lucky enough to get a contract that lasts 12 months). That is probably the equivalent of a $70k full time position. $50/hour will get you an entry level java programmer in any large city in the US and nothing more. I would suggest that your rate (unless it was much more than $50/hour) made your search ‘self selecting’. What were you expecting? I’m guessing that were going to bill this person out at around $150/hour, possibly more. I don’t blame the ‘studs’ for not replying to your want ad.

      2. WYPIWYG=What You Pay What You Get

        Interviewing at least 2-3 engineers per week I can assure you : tons qualified JAVA engineers are there (at least in SFBA) having multiple offers and cherry picking employers.

  30. What we do in our recruiting process is give people who send in their resume a small, but unfinished Java program that has unit tests and we ask them to finish it (which would take a decent coder less than an hour to finish, and a good coder just 20-30 min). Some people self-select themselves out by not sending in a solution.

    We then have two developers look over the code and decide whether to bring them in person. That helped to cut down the number of people we were getting in the door who could barely code.

    I guess I’m a bit surprised at your dismay at the quality of people you’re getting. You know that for many, being a programmer (especially these days) is a lot of copy-n-paste and smashing code together until it just barely works, without really understanding anything of what they’re doing.

    Also, it sounds like you need to use a different recruiter, if they’re passing you such inadequate candidates.

    As for Lambdas, that’s really unrelated. The copy-n-paste coders will continue to get jobs and write barely working code, and if the answer they get on Stack Overflow uses Lambdas, that’s what they’ll use. However, for the rest of us, it’ll be awesome and reduce the amount of boilerplate code and make “real” Java developers much more productive.

  31. Usually when I interview prospective developers I’m more concerned with how they would solve a particular problem than giving me the encyclopedic run down on all the present technologies. Lately I’ve found that asking them about the base core language, then sitting them down with a laptop and having them figure out a simple application is enough to convince me whether they understand the technolgies or not. As that old saying goes: “Actions speak louder than words.” And this has saved me a lot of grief later on when hiring someone for a fast paced self-resposible position on a team. To me it’s simple: either you can do it or you can’t; and if you stumble through it then it’s time to change professions. As a Team Lead you don’t have time to babysit developers unless its an intern I have a vested interest in help learn agile practices in he correct way that will benifit her and her growth for future career challenges. Let’s face it in this face paced world you have little enough time to keep up with all the pertinent technologies for your own team much less have to deal with developers that have no clue.

  32. Are you kidding? You are ‘consulting agency’. What is the reason to send resume??, I mean for developer who has real experience?

    1. 15 years ago I read Joe Selko’s “SQL for Smarties” and still have a good idea of how SQL works under the hood. I have an honor to know Joe personally. In the mid nineties my colleague showed me another small book “Optimizing Transact-SQL : Advanced Programming Techniques” describing how to use characteristic functions in SQL, which allowed us dramatically improve the performance of certain SQL queries. But I didn’t even go to any complex subjects. I was asking some basic SQL questions: find all cities where more than one customer lives. If a person can’t answer this question – he doesn’t know basic SQL.

  33. I don’t think people are trying to flat out be dishonest. It’s possible to work on an application that uses JSP, Hibernate, Spring, JDBC, and a lot of the other frameworks without really knowing much about them. Obviously if a person says they’re a Hibenate expert then they better know everything about it, but it’s completely possible to use Hibernate on a project without ever doing much more than basic queries.

    Also, there’s another side of the coin. A lot of companies fill their job requests with meaningless requirements, too. I can’t count the number of times I’ve seen job openings requiring the canidate know Java, C++, Perl, JSP, Ruby, … Are all of those *really* going to be used on the job? Not very likely.

    The game seems to be, “List every technology under the sun so somebody notices you, then hope they only question the few things you really know.”

  34. I know this pain all to well! Hiring .Net developers is just as fraught with these issues.

    A while back I decided that I’d boil down the interviews to a few questions depending on the level of developer we needed. The ability to answer these questions in their own words is what determines my ability to know that they know what they are talking about.

    Graduate Developers: What is the difference between an instance method and a static method?

    This question cuts right to the heart of whether they have a decent grasp of object orientation. If I get a satisfactory answer I follow up with “In what circumstance would you use a static method”? If a graduate/junior developer can answer these questions in their own words (i.e. not reeling off memorised textbook) then I can teach them everything else they need to know.

    Developers: What is .Net?

    This is a deceptively simple question and maybe 80% of the people I’ve interviewed can’t answer it. They know how to open up Visual Studio and start a project and write code that does stuff, but they don’t understand what it all sits on. I think of these people as being “configurers”, people who know how to use a tool. I asked this to a junior dev who came from more java oriented background, he couldn’t explain .Net but because he could explain how Java works he got the job.

    Is a string a value type or a reference type? (Followed up with) Why is it that type?

    This seperates the men from the boys. I’ve had a few good answers but still long for the day someone mentions interned pools and the mememto pattern.

    These questions are what I use to measure their level of understanding and depth of knowledge. Just because someone can’t answer them doesn’t mean they don’t get the job it just lets me know what level they are at. Problem solving and logical thinking are still the skills I value above all else and if I can find someone with them I’m happy to teach them the rest.

    1. I like asking questions like “What do you think about so and so tool/framework/architecture”. It doesn’t matter if the candidate’s opinion is the same as mine. Actually, it’s even better if s/he has different opinion and can explain why. As long as the person has an opinion – s/he cares.

      1. It always ask questions related to candidate’s previous projects. Questions like: “Why did you choose particular technology/solution?”, “If you have a chance to re-design it, what would you do and why?”
        Works very well, you can easily see who has genuine interest in what he/she is doing or lack of such interest.

  35. On the contrary, many and may interviews need a programmer to tell them he knows as many as frameworks they may ever heard, even maybe no one knows what can these frameworks do benefit to the real application. In my opinion, programmer should know how to write codes, be proficient in the syntax and libraries of Java language, and know what style of codes is good. Familiar with some frameworks is a plus, but these may not be difficult for an experienced programmers to understand how to use it, even how to fix some potential bugs in it. So, I think, U want to know if a person is a good programmer, just let him write some small applications, for example: An algorithm on solving 24-point game?

  36. Yes,I’m a finance worker. But I gotta admit that even the interest to Java has led me to acknowledge the priciple of SQL or hibernate or struts, what the hell are those ITers thinking?I really don’t get it.

  37. Software development in large companies for multi million lines of code systems is really just factory work on the conveyer belt placed in some “Science Park” in India. We only need a few smart guys here in Europe or the US that do framework development and the factory workers just perform their trick. What you are describing is the industrialisation of software development. Soon we don’t need that many coders anymore and we will have true automated software factories with robots, aka. code generators, and that is a good thing in my opinion. There will always be a need for the craftsmen with highly specialised skills in niche sectors, or pro’s who built the sofwtare robots, and automate the factory. I know J2EE developers who can’t write JavaScript, and think this is quite normal. I fell from my chair, recovered, and moved to a better location. But face it, If the smart guys built really good frameworks and toolchains then we don’t need highly skilled, expensive people, to do menial coding work. It’s just sound economics that is driving down prices for al acceptable quality. This has nothing to do with Java as a language or platform. This platform just enables industrial scale computing and should be treated as such and not as a surgical knife such as C++. C++ is a fundamentally different technology for a different class of problems. I wouldn’t be comfortable with having our online banking platform in C++ developed in India. All the frameworks and breaks in the JVM are there to cover up for poor programming skill and to increase productivity.

  38. “Software development in large companies for multi million lines of code systems is really just factory work on the conveyer belt placed in some “Science Park” in India.”

    The things are worse than this. American corporations are forced to use “assigned computer belts from India”. The are not free to use the talent that could find in a free market. This reminds me the situation with the unions here in the united states. If you don’t belong to a specific union you can’t repare the electricity in this corporate building.

    This situation toom the ugliest form during the recent hurricane Sandy. I live in New Jersey and we had a lot of damages of the power lines. The crews from other states were sent to help our electric companies, which is great. But… several day into disaster I was reading the news that from that day independent electrical contractor got the permission to do required repairs in the places where only union workers were allowed to work.

    Does it take some kind of an IT-Sandy storm to bend corporate IT rules and allow hiring the right people for the job?

  39. ” I was thinking to myself, “Who’s going to use these closures in the enterprise Java world? 10% of the developers? 5%?”

    I was talking to my project architect yesterday. And I told him that it would be very difficult for a mediocre java developer to just copy-paste piece of code that uses lambda expressions. Interviewers should start asking functional programming questions to weed out average developers.

  40. i am a python engineer from china
    i used to like to wrote sql directly, sql to RDBMS manipulation is just like regex to string manipulation.
    but recently i am learning own python version ORM framework sqlalchemy
    althought i might feel really sucks while using it, it actually solved my 80% works , maybe 90%, quickly

    you cant just blame those programmer , its not their problem but the requirement driven them to do massive CURD or other filtering job, in my previous company, i first wrote sql by manual, soon, i found i am bored of those repeate CURD and filtering job, so i do metaprogramming by writing code generoting sql express, it makes the sql flexiable and my jobs done quickly, the problem is python’s lack of macro support, so alghouth my code mostly share the same pattern in the part of generating sql express(this problem would be solved after my learning clojure :]), at that time, i think i need an ORM as my framework for DRY

    Web industry change quickly and require more, if you are building a service for LAN, you could ignore those features request sometimes. but if its for internet, i dont think you could if you arent in company like 37signals

    besides, in morden web developing,i couldnt image that you use only sql db, you always use other storage or cache services like memcache, redis, mongodb, etc, its a problem when you want to migrate your record scheme to these different services. so an ORM framework is necessary.

    Its interesting, now our group all treate sql as an backend storage service and use redis heavily, the sql express still attracts me

  41. I think it’s a normal process and it is necessary. To develop fast a stable and complex system it’s necessary to start on a higher abstraction level – you don’t want to use Assembler…
    For this reason bigger companies distinguish developers between framework developers and application developers.

    1. I’d say it’s can be normal in a well balanced community, where mostly simple problems occur. Take the auto-motive services. Here in the United States if something get broken in your automobile, you go to a closest repair shop, they open up one of these thick books with spare parts and tomorrow (if not in two hours) a delivery man bring the needed replacement piece, and a mediocre mechanic fixes the problem. But if you have a not-so-obvious problem (e.g. something weird is happening in the electrical system or a transmission is making a jerky movement once in a while) – you’re stuck. You’ll be taking your car from one repair shop to another, but the problem won’t be addressed until you’ll find a guy who “knows how to use Assembler”.

      People who know Assembler are not needed in the world of perfect frameworks, but we don’t live in this world just yet.

      1. Hi Yakov,
        your example was a very good metaphor! I really like it very much 😉
        Of course we also need experts who are able to know the details under the hood. But I think not everybody has to know all the details. As you wrote:

        “But if you are smart enterprise manager, make sure that for each dozen of framework programmers you have at least one real.”

        Probably it’s difficult to hire a clever guy that works together with 12 not so clever guys and has also fun at his work.

        If you hire only very good developers, you will have to pay a bigger salary. But this will increase the costs of your software products/projects.

        A doom loop 🙂

        I wish you good luck for hiring the right guys!

        Best wishes, Matthias

  42. I found this article quite amusing and I completely agree with you that being able to use the Spring, Hibernate and jQuery hammers for most problem nails isn’t necessarily the key skill to many projects. Then again, many projects are dull and boring most of the time, and need people who are willing to perform the repetitive tasks. It’s about finding the right balance (which is what many other commenters have said). Think about it this way. Are you ready to keep boring tasks from your top shot SQL / assembler / troubleshooter / build-fixers’ daily workload because you don’t have one of those frameworkey guys on your team anymore?

    If you’re looking for a Java developer with SQL knowledge, maybe you should scan for CVs with tools like jOOQ (http://www.jooq.org) or MyBatis (http://www.mybatis.org) on them. Or ask them already before that interview about their opinion on Hibernate’s impedance mismatch and when to bypass Hibernate to execute plain SQL. And what window functions are, and how grouping sets work. It doesn’t matter if they already know. But it matters if they can find an answer.

    And Java 8 is totally going to rock, also in enterprise Java software, even if extension methods could’ve been permitted to be “final” or “static” and without the need for an irregular “default” keyword 🙂

  43. Here is the irony of being a honest contractor.
    Yesterday I’ve submitted my profile to a job opening, through a vendor, part of which says “84 months of experience in IBM RAD(Rational Application Developer) and IBM WAS(Websphere Application server)” . And my resume was not selected/submitted to client . The reason is – ” You’ve only 44 months of experience in IBM RAD and WAS, so you’re not eligible” – OMG are you kidding me? This is how the vendors are these days.

    Do you think working 40 more months on a basic IDE like RAD makes any difference(I have more that 8 years working on various Eclipse IDE’s) with the cheapest billing rate he is providing. At least if the billing rate is high for the experience he was asking , I would have shut my mouth. But this is how UGLY the VENDORs marketing is these days.

    Lesson learnt: “Never be so honest,you can’t survive in this ugly market unless client themselves are marketing for the position”

  44. What the hell is wrong with you people? You keep coming up with newer methods to “evaluate” your candidates, none of which really work. Do you really think that your 15 minute question session, or 2 hour interview or whatever, will give you a more reliable evaluation than for example 4-6 years of college and 4-5 years of work experience? Are you that dumb, really?

Leave a comment