Research firm Gartner says only 32% of the 2.5 million Java developers in the world have genuine knowledge, which means there is a serious lack of high-level development skills.
Research firm Gartner says only 32% of the 2.5 million Java developers in the world have genuine knowledge, which means there is a serious lack of high-level development skills.
Preface – I interview technical candidates routinely.
My preference is that people just tell me the truth – they need and use reference manuals. When I see “mastery” of any technical skill, Java, Perl, etc on a resume, 95% of the time the claim is bogus. Particularly when the coder claims mastery of C++. I mean, if you are a C++ “master”, you should be able to have intelligent conversations with Stroustrup about its design. If you are a Perl “master” you should be up there with the active CPAN and runtime coders.
I actually appreciate it more when someone comes clean and tells me that they know about enough to know where to look things up in a reference or a tutorial, or to know good code from bad…which is basically where 99% of coders fit.
As it stands I often find that most people who have reached a mastery level are no longer interested in doing day-to-day coding in any case – they’ve already solved most of the interesting problems in their field, its all just a rehash to them.
Upon mastering space and time I learned this:
After three days life without coding is meaningless and
in the final analysis all we have to do is tend our gardens.
Agreed.
I believe I’d qualify as a C++ master (I was lucky enough to get into the language when C++ was version 1.0 so keeping up was easy). But to be honest, I’ve yet to find a company that needs a C++ master. In fact, unless your team is mostly made of C++ masters, there’s almost no way you can use advanced C++ concepts without eventually getting into trouble. In most cases, it’s best to restrict your team to a subset of simple C++ that everyone can understand, evolve, and maintain. The same goes for buzzword technologies. Including too many of these is also just begging for trouble.
IMO, what most companies need is one good chief programmer/architect that’s experienced enough to know how to make a complex project as simple and stupid as possible (but no further!). Once you have that, 99% of coders who have a good attitude and good social and team skills are able to do the job well.
I did C++ strictly for 5 years and I would consider myself just good, not expert or even very good. It’s not really the complexity of C++ of itself that is the problem, but the multi-paradigm approach that it takes and that good OO design is hard.
Part of the problem lies in management in that you know all that matters is just getting thing done. In fact, you don’t even get it “completely” done. For us, it was get it done fast even if it’s buggy. Because management philosophy was once they’re committed to it, bugs can be worked out at a later date. Note, this was custom client/server stuff where the customer wanted it yesterday, so maybe even not completely managements fault in that regard.
OO itself has been hyped to no-end and when you end up with bizarro, deep hierarchial chains and when people have the attitude that let’s just copy-n-paste some of the stuff and I’ll inherit from this class because “it’s kindof what I’m looking for” you end with messes from hell. I think it was Bjarne who said something to the effect of , In C you can shoot off your foot, in C++ you can blow off your whole leg”.
I just finished reading “Object thinking” by David West and this guy is a OO purist and a smalltalker. This guy actively encourages you to be philosophical about code and the overuse of metaphors is just plain annoying. For those that care, I would recommend “Code Complete” for a very good all around, language-agnostic software construction book.
I’m not saying that agile/XP practices and things like patterns aren’t a good thing for some stuff, but there’s so many buzzwords thrown around you get the feeling that OO is religious to some of these people. It’s kind of funny because I was recently on a project where people were using c++ for years and then started a new project where they said the hell with it and just ended up using straight c again. These guys grok c++, but decided in the end it was just more hassle than was needed.
My $0.02.
As a sysadmin at a fortune 500 firm I routinely get calls from our java developers asking me to debug their code. When something goes wrong, the VAST majority of them don’t know where to even begin troubleshooting and an equally large majority don’t even know what their code does! Can you believe that? Basically it means they cut and paste code together and hack it up until it works. Personally I think it’s criminal. I don’t know who manages these people but it’s weak that these people aren’t either sent to training or fired. And to add just one more thing, the foreign programmers (the outsourced programmers) are just as bad if not worse. Where are the good programmers!??!?!
“OO itself has been hyped to no-end and when you end up with bizarro, deep hierarchial chains and when people have the attitude that let’s just copy-n-paste some of the stuff and I’ll inherit from this class because “it’s kindof what I’m looking for” you end with messes from hell. I think it was Bjarne who said something to the effect of , In C you can shoot off your foot, in C++ you can blow off your whole leg”.”
Left or right leg? Anyway the thing to keep in mind about “hype” is to ask yourself who’s doing the hyping? Managment? The vendor? Or the people who actually have to do the work that’ll pull it all off? Anyway OOP like anything else can be abused as much as “goto” can be abused, and I find that the one’s abusing it usually don’t grok it (just enough to be dangerous).
“I just finished reading “Object thinking” by David West and this guy is a OO purist and a smalltalker. This guy actively encourages you to be philosophical about code and the overuse of metaphors is just plain annoying. For those that care, I would recommend “Code Complete” for a very good all around, language-agnostic software construction book.”
Well that partially can be because to be an effectiver “OOP’ser”, one has to bend their mind around some ideas that don’t come easy to those trained in the procedural methods.
“Objects”, “Polymorphism”. “Inheritence (singe and multiple)”, “Encapsulation”, “Messages”, etc. A good metaphor can do wonders in facilitating the process.
i value gartner like i value dog manure, actually, considering dog manure can be used to fertilize soil, that’s an insult to dog manure. Gartner always puts out “research” articles that show any lack of fundamental understanding about the technology world. They get paid by companies to conduct research, however, how did they assume that 32% of those 2.5 million java programmers could program? did they take surveys? did they examinate them? Did they include me in their survey? Who did they ask?
While, fundamentally, I do agree with the article, not the statistics. I do agree that many people don’t know how to write in any language yet hold positions such as “software engineer” or “programmer”. It’s like in the mid 90’s in silicon valley, English majors would jump into a “java in 24 [hours]” 3 day course and then go apply for a $100,000 job, as long as they knew what the acronym OO stood for, they’d be set, it didn’t matter if they knew how to use a compiler or not.
dog manure can be used to fertilize soil
Yep, if they were the Gardener Group, they would give out advice like that. Dog shit isn’t “manure”, and you shouldn’t try to fertilize soil with it. It’s more useful for tanning or for throwing at our favorite CEO…
It’s usually the advocates pimping their books and new paradigms that causes management to say “hey guys, here’s this whole new paradigm that is going to solve all of our problems. Let’s get on it”.
Well that partially can be because to be an effectiver “OOP’ser”, one has to bend their mind around some ideas that don’t come easy to those trained in the procedural methods.
“Objects”, “Polymorphism”. “Inheritence (singe and multiple)”, “Encapsulation”, “Messages”, etc. A good metaphor can do wonders in facilitating the process.
Metaphors are a good thing when used properly. The problem is usually with OO purists that don’t look at things in shades of gray in which the real world works. My opinion is that the overuse of inheritance is the single biggest cause of broken designs in OO programming. Composition should first be considered before inheritance. Enacapuslation, polymorphism, and messaging can all be done in straight c without too much extra effort. Don’t get me wrong, I think C# and to a lesser extent Java are good languages, but not necessarily because it’s OO but because of the underlying framework and being a managed environment.
Where are the good programmers!??!?!
Run over by people who fill their resumes with bogus information?
Well you see, this is exactly why its so important to conduct code reviews. So you can tell them to rewrite the code until it works. 😎
– Andrew
Redwood: As a sysadmin at a fortune 500 firm I routinely get calls from our java developers asking me to debug their code. When something goes wrong, the VAST majority of them don’t know where to even begin troubleshooting and an equally large majority don’t even know what their code does! Can you believe that? Basically it means they cut and paste code together and hack it up until it works. Personally I think it’s criminal. I don’t know who manages these people but it’s weak that these people aren’t either sent to training or fired. And to add just one more thing, the foreign programmers (the outsourced programmers) are just as bad if not worse. Where are the good programmers!??!?!
I’m a graduate student who has worked some as a teacher, assitant teacher, and a tutor to other students. One thing I can say is that alot of the programmers I know make no attempt to develop their skills outside of the classroom and frequently what they cover in class cannot even begin to make them good programmers.
I am frequently finetuning my skills in certain areas and learning new things, all of this outside of the classroom. Often times, I’ve tried to get some of the friends I’ve made to help out, but they frequently get completely and throughly lost and/or they’d rather go play computer games.
Then later, they wonder what is going on with their (usually) much much simpler programs/topics and so they need my help.
One of the biggest problems I run into is that alot of the students have a hell of a time trying to debug the code they just wrote. Honestly, I can on occasion understand such a thing, but I’m talking about people who have been through 4 years of undergraduate school working on a short little program that I would (usually) be able to finish in an afternoon or at worst a couple days and they have spent weeks on this thing and still have no idea what’s wrong.
The people I know who are a little better than that, can be at times really antisocial to such an extent that there is essentially no way at all to ever work with them.
BTW… I don’t mean that all the students I work with stink, just that alot of them do.
> The people I know who are a little better than that, can
> be at times really antisocial to such an extent that
> there is essentially no way at all to ever work with them.
Man you are so right! I believe this is the number one problem of this industry and also the main reason why I sometimes can’t believe why I even bother to get the degree…
A lot of people are spreading really bullshit opinions on the web and even in real life I constantly see people who try do dazzle others with their “knowledge”.
My way of life: I kind of stopped trying to explain stuff to people if they don’t ask questions interactively (unless it’s something you can explain in 3 minutes). I also never talk about informatics anymore to people who tried to test my knowledge (because they want to be better and such, which shouldn’t be hard if you pick the right niche -> luckily for me I always got lucky up until now and shoved it up there noses by returning the questionaire favor :p).
Typo: there noses should be their noses, sorry not native English :S.
i actually don’t believe there is such a valued person as a good programmer that these companies are thirsing after. there are three types of people in this regard:
* non-technical, non-logical
* people who can copy and paste a print statement.
these people have no understanding of what is going
on underneath
* people who do understand what’s going on underneath
note that in that last cetegory i didn’t say:
* KNOW what’s goingo n underneath
* know design patterns, trendy methodologies
* know programming language syntax in their memory
why? i would rather employ an intelligent person with common sense who is willing to look things up. i wouldn’t hire these so called masters or gurus.
there is too much money swilling about in the IT and coding project management business, and its influencing people to justify their existence or sales of their advice books. XP, pair programming, agile, visual, XML, …. what a load of old cobblers.
intelligent common sense leads naturally to clarity, simplicity, generality, documentation … you don’tneed to be told by an overpaid consultant or industry twerp
i speak as someone who understand a little of mathematics, logic, computer science and the various programming language paradigms. and has proven it over time.that’s why i speak up.
…alot of the programmers I know make no attempt to develop their skills outside of the classroom…
…but they frequently get completely and throughly lost and/or they’d rather go play computer games.
This is the experience I have at college. I started to learn programming by myself because it was interesting and I genuinly wanted to become good (C was my first lang). I must say, what I have learnt in class is about 0.001% of my programming knowledge and experience.
From what I have seen I am not the average student. People at my college think I’m some sort of l33t hacker, that I know everything, but I’m not, nowhere near, there is still so much I don’t know.
I think it’s the difference between ‘giving a toss’ or not ‘giving a toss’. Why do they even bother to enrol??? They’re wasting my time. Maybe I will have better luck at uni.
Also, a little side note. We still need to teach assembly languages (and even some clue as to how instructions are encoded). Buzzwords and high-level languages seem great, but if you don’t truly understand the machine you’re screwed. You don’t know how to optimise, how to fix your own problems, or develop your own systems. You can never become masterful or even fairly good. You really are controlled by the vendor. Objects, inheritance, polymorphism, encapsulation, message-passing, aspect oriented programming, refactoring: what does that all really mean? Compiler hacks, bits of memory and pointers. Woo big f*cking deal.
There are some people who believe they are above it all, In their high OOP towers, they blab on about how asm code is hard to read, hard to code, unmaintainable, etc, etc. But this is not the point of teaching it. I have found learning assembly liberating and insightful, I have become a much, much better programmer because of it.
As you may guess I’m not a big fan of Java & Co. I don’t understand the motive behind VMs unless there is a really big need for running binaries on loads of platforms and it isn’t possible to provide once for each. I don’t think it’s worth the effort, except for applets. But in that case an interpreted language would probably be more suited. For servers it makes no sense, except for the vendor to push more poweful (read: expensive) hardware.
heh… I have been looking for the opportunity for this little rant for a while 😉
Perhaps the magazine article did not do justice to the Gartner research, but there is not much value in just saying ” 32% of java coders are not good enough…” . I am sure there is also a percentage of C or VB or SNOBOL coders that are mediocre. First, good enough to do what? second, how does it compare to other languages/methodologies/etc? more precisely, is Java a language that, compared empirically to others (as opposed to theoretically) produce software that is more likely to be buggier or more costly or less extendable etc than others?
It always puzzles me, why to have resumes, cover letters and interviews to apply for jobs in some technical fields?
The Army, the Post Office, and of course, Colleges and Universities use standardized tests.
Would it be too hard to design examinations that truly grade your proficiency in Java? a 473 points out of 500 is a much better indicator than a cover letter or resume full of BS.
As a foreigner, I am sincerely surprised how the job market here is so irrational.
It always puzzles me, why to have resumes, cover letters and interviews to apply for jobs in some technical fields?
[…]
Would it be too hard to design examinations that truly grade your proficiency in Java? a 473 points out of 500 is a much better indicator than a cover letter or resume full of BS.
As a foreigner, I am sincerely surprised how the job market here is so irrational.
I’m not a foreigner, and I’ve been wondering the same thing for years.
I think there would probably be a lot of resistance to this idea from human resource departments, mainly because most of these people would no longer be needed.
I have the syntax down cold and can generally follow any Java that I’ve read outside of class when I’ve looked at open source apps’ code. I may not understand what an object does, but I can generally figure it out. Yet I frequently have to look up Swing methods, stuff like that. Does that make me bad? I don’t think so, it makes me better than most of my peers who memorize the Swing library, but do not understand GUI design in general.
Personally I think the best language to teach people starting out in C.S. if you’re not going to go down the assembly route (MSIL, Parrot Assembly or Java Assembly would suffice) is Python. If someone can pick up how to write good, clearly defined algorithms in Python then you know that they have the concepts down. Python can also be used for a lot of serious desktop stuff, I would go so far as to say that wxPython is far better than Swing in most areas because wxWindows is so damn good. For anyone, like myself who is or was curious about getting started at wxPython I have a sample that should run on my blog here:
http://www.blindmindseye.com/bmeblog/archives/000070.html
I think what people in the business world should realize is that toolkits change all of the time. Version 1.0 of Swing probably won’t be that close in many areas to say a version 4.0. It’ll have lot’s of behavior changes, maybe some things added/removed, a lot of changes. It’s better to have someone who says “hey boss, I don’t know, let me look that up” than someone who thinks that you should be so lucky to have their “mastery” of a language on your team. The former is willing to work harder and better because they are humble enough, but more importantly confident enough in themselves, to admit that they can learn more.
Beware the arrogant prick who thinks that he knows a language well enough that whenever he is even remotely uncertain of something that he doesn’t look it up.
“I think there would probably be a lot of resistance to this idea from human resource departments, mainly because most of these people would no longer be needed.”
You’re forgetting that someone has to administer these tests.
Also in some companies, all your resume and cover letter gets you is a first time interview(1). Then if they like you, then you come back to a second interview were someone skilled in your particular speciality conducts the interview (sometimes your immediate boss).
(1) Remember this is were you demonstrate your people skills. An area all too many “geeks” are weak in.
I wonder those who claim to have solid C++ skills understand the definition of being a proficient Java programmer? For me, a competent Java programmer should have the following skills:
1. Design and implement a reasonable GUI desktop application with MDI interfaces and standard controls such as buttons, menus, dialogue boxes, lists, tables, etc. etc. etc.
2. Understand enough about client/server technologies to design and implement a two-tier client server application with good scalability and concurrency support.
3. Knowledge of the Java serialization and data access (JDBC/JDO/Hibernate/EJB) methods.
4. Know how to debug/unit test your programs. JUnit and Log4J knowledge is a must!
5. Know your patterns. At least those that come in the Gang of Four book. Oh, and to those critics of OO design, the harm of overusing inheritance and polymorphism is well known. I don’t think Java programmers are especially prone to make design mistakes more than programmers proficient in other languages such as C++. Especially when their age and experience differentials are factored in.
5. Appreciation for the various J2EE specifications (JTA, JMS, JTAA as well as open source initiatives such as Ant, Cactus, Maven, etc. etc. etc.) , and capable of implementing design specifications. Awareness of J2EE patterns is a must for enterprise development.
6. Understand the need to document your program. If you don’t, you are a fool.
7. Expertise in different deployment environment. Basic understanding of Windows/Unix a must. Know the basics of how different databases work under different OSes is necessary (Oracle, DB2, Sybase etc.)
Hmm… did I miss anything? Please add to my list if I did. If companies list those requirements instead of “Seven years of experience in Java”, maybe they will get a pool of applicants who know what they are talking about.
You really can’t just blame the students for their lack of programming skills. It would have helped greatly if the TAs in my CS 101 class didn’t just hog the only two chicks in the class and give them 24/7 support while leaving nerds like me out to dry. I didn’t learn proper debugging skills until the second semester, and I learned assertions all on my own. BTW, in retrospect, 90% of my programming skills were acquired on my own. My school (a major university here in the States) and my classes in CS really didn’t help me that much in this respect. To be honest, I think it takes a bit of anti-social-ness to learn programming. Like poetry writing and music composition, it is essentially a highly individualistic creative medium.
You’re forgetting that someone has to administer these tests.
You’re right, of course. I think a test like this would still be more valuable than the old resume + covering letter. There is a little industry devoted to teaching people how to present themselves properly on paper. I just think that it has become to generic and it is too easy to lie. I think a test could help here.
Also in some companies, all your resume and cover letter gets you is a first time interview.
I agree completely. Skills are just one aspect, the other being your ability to work well with others, and this cannot be ignored. I just thought a test would have some value in the initial screening.
the same can be said about all the other programming languages.
Whilst I’d probably agree with most of your list, my question would be: how many people do you meet with those skills?
Is it realistic to demand that a good J2EE developer can also code sophisticated Swing apps? How many Swing Gurus know JTA thoroughly? Are the people who know enough a to implement a 2 tier (two?) C/S app. really being honest in their claim to also know JDBC, JDO, EJB and Hibernate? Shucks, let’s throw Castor in there too. And what about the databases. Would you really reject a programmer who didn’t know Sybase, despite an excellent knowledge of DB and Oracle etc. (whatever etc means)?
When I was interviewing staff I never saw anybody who had that depth and range of skills, not even a fraction of them. I suspect that this must know every Java API under the Sun mentality in Job requirements is simply encouraging applicants to lie.
And I must confess I have no idea what JTAA is, so I guess I don’t qualify for employment either.
I’m not a Java fan, but Java advocates often describe Java as a platform, not just a programming language. There are so many frameworks, so many libraries, so many approaches – can anyone seriously say they’ve mastered the Java language? (oops, I mean “platform”). Perhaps, that’s why programming often feels like a chore – we’re swamped by so much detail and complexity that often seems redundant or superflous to the problem at hand. When I think of the Java frameworks available, I think of this quote by the British Computer Scientist C.A.R Hoare:
“There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies.”
It affects all fields. The problem is, I think, the school systems and methods of examination. Most students study *in order* to pass exams. Then after that they get a job in order to make a living.
When will people realise that you don’t progress as an individual if you are always seeking the reward and not the substance.
This may sound religious but its truth:
Seek ye first the understanding and you will pass any exams and won’t have to lie on your resume, which means you’re more likely to get the job. It is not the degree which makes you a programmer. It is the skill and understanding you have developed.
Most of the programmers I know, who are self taught are very good. I think it’s because they really seek to know how to do it. They are not just trying to pass some exam. If you have the passion to understand the stuff, you’ll always be a good student.
There is a difference between knowing the syntax of a language and understanding how to solve problems using it. Similarly, I can recognize when somebody is speeking spanish or italian or German, but I don’t understand what they are saying nor can I communicate in those languages.
Techinically, Java is a platform. The JVM is essentially an instantiation of an abstract Java machine. Since you write code to target the Java machine rather than a real architecture, Java is the platform
I agree with Warthog that to be a ‘master’ at Java means to be a master of many patterns and many technoligies. I teach J2EE to older Cobol programmers looking to move into the modern languages. Well, there is just so much to learn and where are most programmers supposed to learn this? Many colleges don’t even teach anything but the core language. I can see how hard it is for my students to get up to speed on these – while still holding a job and a family.
The article reads as an ad for OptimalJ and MDA. I must admit that I don’t know anything about OptimalJ (I teach w/ JBoss and XDoclet) but I question just how well the Session beans can peform from what I presume is template code – being able to make very customized versions of Value-Objects (aka Bulk Beans) is the best way I have found to improve the performance of J2EE. In any case, it is a danger that someone new to J2EE may not understand just how to optimize network traffic – even if the tool can support this type of customization.
There are two ends of the programming graduate spectrum, and the differences between them are enormous. The first graduate only studies the language in class, struggles with assignments and achieves 55%, and the second type are passionate about the language and score around the 80% mark. Two weeks after the final exam the first student can’t even write a HelloWorld program, while the 80% student, with the help of references, will hold on to the concepts and be able to effectively program in that langauge and pick up new languages forever more. Both students get their degrees, but on a practical level, the students who scrape by are wasting everybody’s time, and don’t become programmers in any meaningful sense.
In my case, I am a Java programmer and consider myself quite good at it, although I don’t fulfill the unreasonable list or requirements posted by Warthog by a long shot – who does? However I never learnt Java at uni as they were still teaching C++ at the time. I think that self-study of Java had its advantages.