How do you recognize good programmers if you’re a business guy? It’s not as easy as it sounds. CV experience is only of limited use here, because great programmers don’t always have the “official” experience to demonstrate that they’re great. In fact, a lot of that CV experience can be misleading. Yet there are a number of subtle cues that you can get, even from the CV, to figure out whether someone’s a great programmer. More here.
If someone who is a ‘programmer’ does not have a Computer Science degree or Certifications in that field I would pass them on by. Some may say that is not very smart but I can tell you the biggest difference is one that is certified does it by the book and it makes sense and you have supported platform.
The other cluster you can get yourself into is someone who ‘claims’ to be a programmer that can rig stuff up and gets a company over a barrel with a hot wired mess.
Just my opinion because I have seen it from both sides, the depth of knowledge that comes with a degree and certifications holds water. Because you have put the effort into learning the procedures and the CORRECT way to perform functions in your job. Not something that can get you by or this will work with some rigging with this script that dies half the time that requires constant intervention.
I am cleaning up behind a person that rigged up stuff and it is a disaster. Also that environment is going away to a new structured/supported environment. If it not by the book, (I know there are several ways to do things), however the difference in doing it right and half-way means a lot when you inherit some garbage to work with.
I dunno about programming certs, but when it comes to MCSE and the like, a lot of people can pass the exams just by reading braindumps. I know from personal experience I’d rather have somebody who has real-world experience and has gotten their hands dirty in the field.
And what does the guy mean by ‘fluent’ in many technologies? When you say fluent, does that mean you’re an expert at it, or you just know enough to be dangerous? For one to be fluent in .NET alone, we’re talking ADO, ASP, Linq, WPF, WCF, etc etc. That is a LOT of class libraries to be familiar with. I don’t see someone versed in all of the above having much time to study much else.
IMHO, unless you’re autistic or something and/or have a photographic memory, it seems the most you can do is be fluent with aspects of any one technology or framework. It’s pretty much impossible these days for mere mortals to be generalists.
Edited 2008-02-05 02:08 UTC
From working in the IT field now for about 10 years in a Enterprise Production environment. Anyone can claim to be anything they want and getting your hands dirty means nothing if not with a degree in the related field. I have spent a LOT of time cleaning up behind this ‘would be’ systems people and they did not last.
I have seen the ‘so called programmers to systems (self-taught’ people come and go. Believe me I was happy to see them go after the disasters they leave or make in their short tenure……
Lastly, if someone wants to tout certifications are easy step right up and take the RHCE…
Also, I think in my opinion the lame excuse of certifications mean nothing what type of people are you talking about? If a company is investing the $3000+ and the air trip/hotel another $1000+ for a certification I hardly believe they view it has useless…
Edited 2008-02-05 02:17 UTC
Just because some hiring company/current employer thinks certifications aren’t useless doesn’t mean much in practice: you can get all sorts of people that manage to remember just enough for the testing, and can’t actually apply it in real-world conditions when pressed, because they study for the test, and that’s the extent of that: they’re merely highly-evolved parrots with a piece of paper. This also goes, too, for a lot of computer science/IT type degree earners: that means they’ve put in enough time and effort to earn the piece of paper, but it doesn’t mean the paper has any real-world value once they’re having to produce things in real life. Many of those with a degree (and not just in computer science) see it as a means to an end, and think as soon as they’ve got that, they’re golden, and many think they’re the cat’s pajamas, too, and lord it over self-taught people or those that didn’t attend as almighty an institution as they did. Really, the most useful thing to get out of a college education is to learn the art of learning, because all college and a degree are truly good for are getting your feet wet, and giving you a clue about how and what to look for in a given field, and some of the basics: it isn’t a long-term solution that never needs updating, if you’re serious about your pursuits.
So, a combination of real-world experience, combined with some sample of what they’ve done (via references, actual code example or products as appropriate) combined with sufficiently probing questions can reveal those that are competent from those that are not, and more often than not, those that are self-educated to some degree (surely you don’t believe that a college-educated person should stop there!) are of far more value than those that went through some formal program, got a piece of paper, and were content with that. There’s far too much required towards the mastery of any field for any college degree or formal certifications afterwards to ever say much about how good you are: it can only state how much time, energy and money were involved in getting you a longer CV/resume. I’ve noticed many college graduates that were worthless, even though they got good grades in school.
You are certainly right in a way. Many certificates let you do just that. However, you can’t really pass the better ones, like SCJD, without actually being able to apply your knowledge to practical problems.
Also, even though I am not a fan of certification myself, I believe that if someone took the time to prepare and take the exams for one, it means that he takes his job / himself seriously. And in my eyes, that is a good seller.
Spot on and +1. By the time most of us get to our mid 20s, we’ve all encountered our share of “mediocre graduates”. As you say, anyone truly talented will use their degree as a springboard to a life of learning, not an end.
Have you ever noticed that the most hopeless graduates seem to be the ones who think they know it all because they have a degree?
I don’t agree. I was working as a team lead for a bunch of Java developers – average one has a CS degree or Master’s Degree in CS and some MS/Sun certification. One of them wrote a differential equation textbook.
I have only 1 year of University done in ex-Eastern Europe and I am programming since I was 12 (1984). I speak 4 languages, had successfull consulting career on 3 continents (Europe, North and South America). Have a track of delivering enterprise projects on time, my team and clients like to work with me. I worked in banking, telecom, insurance and airline industries, and still, I didn’t create any disaster anywhere.
On other side, I interviewed CS graduates (for a Java developer position) who didn’t know to explain static variable. It is sad.
So I don’t understand your point – you shouldn’t generalize your bad experience.
I was going to say the same (tho I am in the .NET/Microsoft Arena); the truth is if you say this, it looks like we are trying to defend our “lack” of degree. On the other hand, those who have a degree, are likely going to defend it. It’s obvious. It’s not easy nor cheap to get a degree or cert, but not everybody has the chance or the time to do it.
I myself founded a very sucessfully company and I haven’t seen major “disasters” in my product; however, I have had “hands-dirty experience” in all my previous jobs. Just like Jeff Atwood says: “You don’t want to be the smartest guy in the room”.
All in all, I think that a degree helps to establish a minimum level of social experience. To get a CS you need to attend some kind of college, that means: new people, studying, working in there, etc. A guy who -like me- has no degree in Computer Science, didn’t live the full College experience.
I attended three years to the University. But then I had to start working.
I might have not designed a CPU, but I know how it works and I don’t feel like I need to know that by now.
In the end it all sounds like a defensive position for both parties; and it is. I’d love to have a CS degree if I could, just for the sake of simplicity. If you don’t have it, lots of people will close your doors before even asking your name. A shame, but that’s the way it is.
I have another degree, but has nothing to do with computers.
Edited 2008-02-05 10:09 UTC
“Also, I think in my opinion the lame excuse of certifications mean nothing what type of people are you talking about? If a company is investing the $3000+ and the air trip/hotel another $1000+ for a certification I hardly believe they view it has useless…”
Too bad most companies won’t pay for certifications. Those come out of your own pocket.
I’m self-taught and tend to get paid 125USD/hr when I work on my own client stuff. I don’t see where you’re coming from, though I spend most of my free time reading books and playing with new code.
I think its important not to overlook all self-taught programmers/sysadmins, and generally is a good idea to see if they know what they’re talking about. When I talk to various tech people, who have or don’t have a degree, I’ll throw them a dummy question to see if they know what they’re talking about or are leading me.
I don’t think many jobs apply to me, since I specialize in writing cross platform database applications in Python. Most of my work is based on WxWidgets or Django, and I usually work for medium to large businesses.
I also tend to do tech repair for fun, if I didn’t programming might drive me insane. I’m a person which my ADD is really apparent if you’re around me, so I try to focus on different tasks and activities. Probably another reason I wouldn’t do well in school without figuring out first which drugs I need to focus. I’m a better do’er than a person who studies.
Personally, I call professional arrogance, since there are so many great techs and people who run medium to large companies who do NOT have a degree.
I hope to be a proud example and become one of the better businesses out there. Personally, I’ve 1 FT job as a system admin, also a couple PT jobs working for the city and as a contractor for a friend doing tech work. I’ve a good deal where I live, I get to do other work outside of the FT job if everything is done and/or on schedule.
Edited 2008-02-05 08:29 UTC
I’d agree with that if we’re just looking for “good” programmers. But, the reason most companies don’t bother interviewing non-degree weilding candidates is simply because it takes a lot of time (and therefore money) to give each candidate brought in a thorough look. And the simple fact of the matter is that you’ll eliminate a lot of poor candidates that will waste your time by ignoring the self-taught types.
Most people won’t argue that there are a lot of good or even great self-taught programmers out there, it’s just finding them that’s the problem. There are hordes of guys who picked up a PHP book, made a few websites, and now think they’re ready for prime time. If you really are a great programmer, you probably realize this and are smart enough to see to distinguishing yourself from these guys.
This is a good example of one of the problems of self-taught programmers. Not to say this applies to you in particular, but a formal education gives you the fundamental understanding that lets you pick up any language or framework. A self-taught hack just knows how to do specific stuff with what he’s used to. Someone that paid attention in their compsci classes has enough base understanding to pick up a new language in a week.
It used to be that people with ADD were just called stupid. Being able to pay attention to things is part of what is generally considered “intelligence”. Maybe we should also cater to people with “memory deficit disorders” and “positive attitude deficit disorders” because it’s not their fault!
I’ve actually never been interviewed, people come to me and ask me to program or debug code far as programming goes.
The simple solution to this problem, “Show me the code”. Works every time, even with fresh people coming out of college.
No, I don’t believe it does apply to me. I’m one who had access to books when I was young from people who were going to a university for EE and CS, so I had plenty of material and reading time. I’ve read most books on algos, compiler design, os design, and have even taken some time to work through problems in the books, if any. The only book I didn’t understand what the point of reading was the dragon book. I don’t think anyone really knows.
So you’re calling anyone, with or without a degree, who is a specialist “stupid”? Excuse me, there are people who have degrees in CS, EE, and just about any other field who do nothing but specialize in a specific topic. This is why people pay me what price I want. I’m not saying I’m “stuck on python”, I could just as well use Ruby, C, C++, or Java. I’ve used a great deal of languages, however after programming so many years you begin to realize trying to juggle so many makes you slow because you end up not remembering APIs or even worse, you start typing code which you should be using in another lanugage.
Specialists are generally paid more than just normal programmers, and its because how they work/what they do on projects. You haven’t a clue if you’re just outright attacking on the facts of using one language and frame work predominantly over others. Knowing SQL thoughly is a large part of database programming, even if you’re using a ORM. I tend to write several functions and utilize the SQL server, whichever it may be, to the fullest potential.
By the way, you’re also slamming on people who do nothing but Cisco, telcom hardware, voip, or other specialists. You need to get your facts straight because making any claim specialists are somehow less intelligent just because they’re not people who spread their jelly, minds in this case, too thin.
I shall repeat this again, since you seem to be stuck on slamming people with non-degrees.
People with degrees will also become specialists and not bother using every language in the world unless the need arises.
So, you’re calling people who are savants stupid as well? What if they can calculate large equations on their own, and without having any type of degree?
This is this type of arrogance I’m talking about. Jealous “professionals” who attack others over qualifications when they don’t get the job or feel threatened by others who are more successful than they are in their chosen field.
There’s your problem.
Probably because you didn’t have the faintest idea who was being recruited, and you never talked with them once about what was required and talked about their past experience and development.
Ergo, you’re the problem because you are not qualified to recruit anyone.
You’re in an Enterprise Development Environment. What did you expect? If you give them guidance then you’ll get what you want. If you don’t give them guidance, and change the requirements umpteen times, they’ll hack it together, take the money and run.
Because you can only learn by doing, and that’s particularly the case with certifications and five day training courses.
They got ripped off by a training consultant who told them that they needed to re-train all their mainframe people in object-oriented development, .Net and Java in five days. You’re in an enterprise environment, remember?
The biggest problem here is ejits working as IT managers and recruitment people who haven’t got the faintest idea what’s involved. IT is still a technical discipline, regardless of what anyone says, and woe betide anyone who thinks that isn’t the case.
I agree with you to some extent, but for a different reason. I think it is entirely possible to be great at several different languages at the same time. The problem isn’t one of ability, but rather one of practice.
Most programmers today (and I’d go as far as to say every decision-making, worthless turd in middle management) tend to say, “We’re a Microsoft shop”, or “We’re a PHP shop”. So, programmers go there and work for a few years and they get quite rusty in any technologies they knew before.
Most jobs I’ve had have been one language shops, but when I worked at Novell, I was on a team that provided engineering consulting services to all the other development teams, so I worked regularly with C, C++, Java, Python, PHP, Perl, and BASH; some more regularly than others. When I was laid off from Novell, I easily landed a job and could have done so using any of those languages. In fact, I left my layoff meeting at 8:30 in the morning and had started a new job before noon.
At my current job, however, I use Python almost exclusively (a little Java, but not much), so I’m quite rusty on the other languages. So, from personal experience, I think the problem isn’t one of my brain’s abilities, but simply practice and motivation (mostly motivation though).
I like Python and Ruby a lot and use them for personal projects all the time, I don’t like C# and Java much at all, so I am good at those only when I have a job that requires them because other than money, I have no motivation to keep up on those languages.
I was referring more to frameworks rather than languages. Sure, learning multiple languages isn’t really that hard once you’ve learned one. But if you know C++, if somebody stuck a Win32 MFC app in front of your face, would you know what to do with it? What about one built with wxwidgets, QT, or GTK+? Sure, if you didn’t know them, maybe you could read the docs for a few hours and hack your way through it. But that’s not exactly what I would consider to be ‘fluent’ in that particular thing.
Then you’d be passing on many of the top Software Engineers from NeXT and later Apple. Most of the guys, including myself, have degrees ranging from Mechanical Engineering, Astrophysics, Pure and Applied Mathematics, Linguistics, Graphic Arts, Electrical Engineering, Physics, etc. Sure we may have done work towards a CS degree [myself included] but we put that down to work in Silicon Valley.
For myself, the person who lacks imagination for topics outside of the industry is dead in the water if I’m doing the interview. If you can’t see how other facets of life influence and motivate you to use a “tool” to create a product/service then you’re in the wrong field(s).
You’ve hit on an excellent point: I’ve been telling people for many years that in 20-30 years, the only people that will know how to do something that has been automated with computers are those that write the software to begin with, because to truly write great software requires that you know how to solve the problem without the computer in the first place. In other words, you need to be able to be a domain expert, or at least be able to learn all that’s necessary to support all the needed functionality of the task you’re automating. If you can’t understand the task you’re trying to automate, you’re most likely going to produce the worst crapware available for that task, and you’ll succeed at taking up a lot of manpower and time doing it, because you have to keep on fixing stupid things that would be rather obvious to someone that understood the problem they were trying to solve in the first place.
Now, that’s where the astrophysicist, Mathematician, etc. come in: they may not be the best-versed in code and software, but they can learn that readily enough to be sufficiently competent, sometimes even expert, but their greatest value is their problem domain and how they can apply it to solving the problem at hand. Quite often, there’s some background understanding of some theory or standard practice in their field that they’ve been taught formally or picked up by experience that makes the crucial difference, that a straight computer science major or other “Certified” developer will be clueless about.
A great solution is to do this: get someone that can code that is also one of the domain experts, and pair them up (maybe a 1:n or n:1 relationship) with someone that’s also solid on the pure computer science portion to keep them from screwing things up, such as overall structure of the application, dependencies, etc. with the domain expert keeping the pure computer science person honest in solving the correct problem.
It’s important to remember that the earlier in the SDLC a mistake is made, the more expensive often by a factor of 10 it gets to correct it at each stage later: if a pure computer science person doesn’t know enough about the task to structure the design accordingly, that may be far more expensive to rectify than the imperfect code generated by the domain expert. After all, a computer science person should be able to notice when there are bad coding practices used and use their brains and manually find them and fix them, or use various tools, as needed.
That’s how Bell Labs did it in its heyday: around the time I got my doctorate, it was something of scandal how Bell Labs did their hiring: they went after (experienced) associate professors in mathematics, making the academic-employment situation rather “interesting.” Their claim was that it’s much more important to know how to think, and to learn than to have specific domain knowledge. You can teach the latter, but not the former.
Edited 2008-02-05 12:33 UTC
I think it’s safe to say that I expect a candidate to have a college degree in some technical concentration (Computer Science, Engineering, Science, etc). It doesn’t have to be CS, but it does require something technical. People will argue about the necessity of a college degree but, to me, it demonstrates that someone can (a) start and finish something, and (b) has a certain fundamental level of knowledge (however defined). Don’t get me wrong: I’ve met more than my fair share of brilliant, self-taught programmers, but I’ve also encountered quite a few who lacked DEPTH; many of them lacked the depth to understand what they DON’T KNOW. That’s not to say that I would exclude someone who lacks a college degree. But, with all other factors being equal except for a degree, I’d go with the candidate who has the degree. Of course, where I live, the unemployment rate for programmers is close to 0%, so many people are hiring practically anybody they can get who has a pulse, so perhaps the point is moot … 😉
I would probably give some one with a degree (anything really) preference over someone without a degree, given similar experience or interview experience. It shows they can finish something. If its a degree in what I’m hiring for thats even better.
I agree with you on this. Many, but not all, IT certifications can be obtained through one or more ‘boot camps’ and alike. A University degree is something that is earnt over years of very hard effort. The time it takes is, to me, a sign of persistence, drive and dedication.
Frankly, I’ve seen too many hacks that learn everything themselves and think they’re right without truly questioning themselves or thinking beyond what’s immediately in front of them (i.e. thinking about the implications to others of what they’re doing).
Lets also be honest here, that doesn’t mean all self taught people are bad, not even close. That also doesn’t mean all University degree folks are the best. I have seen some TERRIBLE people that come from a degree background.
Really, this is all opinion based on anecdotal evidence.
I like this part of your quote because I think it is very true. BUT I think it applies to just as many developers with diplomas.
Congratulations; you’ve just eliminated some of the world’s best known people by essentially saying “college dropouts” need not apply.
Let’s see:
* Bill Gates
* Michael Dell
* Steve Wozniak
* Steve Jobs
* Paul Allen
* Larry Ellison
…to name just a few. One of them did go on to complete their degree later in life, afaik.
Most of the people that I’ve worked with over the years that have had a degree didn’t survive or I advanced quickly past them.
In the end, a degree might open a few more doors, but employers ignore “dropouts” or people with no degree at their own risk.
Edited 2008-02-05 03:11 UTC
Sure, but did you notice that most of the people on your list (except Woz, of course) are actually known primarily for their business skills, not programming skills? Gates et al built businesses. They stopped writing code a long time ago and, I daresay, the world is a better place because of it. 😉
Yes, I know that. However, many good programmers become better known later in life as public figures. Programmers, by the nature of their job, rarely obtain notoriety without being in a position somehow related to the public.
The point is that ignoring candidates simply because of the lack of a degree will only hurt the employer ignoring them in the end and our society is a little less bright as a whole when those great people are ignored.
So what? We are hiring programmers, not people who aren’t good at programming but will be good at something else down the line.
Gates and Allen were pretty good programmers… but they quit doing that fairly early on and aren’t known for it.
Agreed. But Gates and Allen were trying to solve a different class of problems — like how to fit a BASIC interpreter into 4K of memory — and while that’s laudable, I’m not sure that I’d want to make them the architects of a modern complex, multi-tiered application. Everyone has their strengths and weaknesses. Gates and Allen had enough self-awareness (and they certainly deserve a lot of credit for it) to realize that their true strength was building a business, not writing code.
The problems Gates and Allen were solving were relevant to the time that they were programming. Obviously if they were still programming today, they would be solving today’s problems.
Ironically though, their skills from back then would give them an edge over many modern programmers. Todays application programmers rarely put as much thought into memory and disk usage in modern systems (seeing these things as cheap and infinitely upgradeable resources).
Edited 2008-02-05 23:39 UTC
And how many of those people are actually good developers ?
Woz maybe, the rest are not.
They might be able to make a lot of money, but i would not let them do the actuall software development in a company.
More appropriately, you leave out Dennis Ritchie (physics and applied mathematics), Brian Kernighan (engineering physics), and more recently Richard Stallman (physics).
Please get over to http://thedailywtf.com/ and see who screws up the systems.
True many times the problem are caused by self-taught wanna-be programmers. But when relatives are not involved (ie. hiring their cousin just on their word) the really big screw-ups are usually caused by people with what looks like the necessary certs.
The reasons should be clear, the wanna-bes do not have the skills to complete a very large project – what they touch fails early. The people with the right certs but not the skills/experience needed. They are not discovered until often only after the project is in use, at that point it can’t be canceled/started over. Instead you end up supporting a mess while trying to fix it a part at a time.
At which point management moves you to a different project or wants features added at a schedule that ensure the old design is never fixed.
Edited 2008-02-05 03:44 UTC
I’m currently having a similar issue but on the opposite side: i had a team before with three certified programmers (plus a non-cert one), and I had to let two of them go because of the crappy (bug-loaded, badly designed, unmaintainable) coding style and due to the fact that they missed all the opportunities to change.
Now my team is filled up with 2 new non-certified guys, who have all the routine needed. And thanks to them, we are reducing the maintenance time and design issues very rapidly.
What I am trying to mean: even though the systematic knowledge is definitely one of the most important points, you can not just believe that all the guys with a cert will be OK and none of the others will not be. You just have to be careful checking their actual abilities while hiring.
It takes about 20 years to become truly expert in any field whether it is chess, tennis or music. If you start learning as a young child you may be very proficient by age 20. If you study surgery you will be 40 before you are an expert because children aren’t allowed to operate. However 5 year olds are able to use computers. A 20 year old may be an advanced programmer long before commencing a degree.
Funny, I reverse that – and did so when in charge of hiring for a company.
Degrees in computer sciences – ALL OF THEM – mean exactly two things, and Jack left town. Schools cannot afford to keep up with the current technology lagging behind a decade or more, the instructors usually have NO ******* CLUE what they are doing, and in general most people with college degrees, certifications and other overpriced pieces of paper have even less clue when dumped into the workforce. Frankly, I’d not trust most of them to find their way out of a piss soaked paper back with a hole in the bottom.
The number of people I know with CS degrees in programming is beyond count – and I wouldn’t trust 90% of them to write a single line of code, much less an actual program.
Oh – and as to the article, I’d love to read it – too bad it’s gone “Server not found”
Edited 2008-02-05 17:17 UTC
All generalizations are false, and doubly so when it comes to the value of particular college degrees. 🙂
Some institutions have rigorous programs, some do not, and the BSCS programs which existed 20-25 years ago when I went through them were probably very different in focus and approach from the programs of the same name which exist today, even at the same school.
The presence or absence of a degree should be little more than a guideline as to the potential background and/or experience of an applicant, but neither one (by itself) should be a reason to interview or not interview. Experience (formal and informal) is also important, and perhaps more so depending on the nature of that experience.
FWIW, the program I went through at Mankato State was not bad at all, looking at it through almost 20 years of experience as a professional programmer/analyst. Both assembly language and team design/development courses were a hard requirement, we did at least some work on mainframe, mini, and microcomputers, and we learned about the basic of hardware logic gates as well as more detailed tidbits as we got to upper level courses (in my case it was language interfaces and OS/compiler design, since my upper class speciality within the program was “systems programming”).
I sincerely believe that I came out of my BSCS program with a clue. I might’ve had one already going in, hard to say, but the BSCS program certainly helped me to focus, to gain some experience with both good and bad design and coding practices, to learn how to work with and depend on others when forced together into a team for three months, and to learn what it’s like to work on something semi-complex when a hard deadline is present.
Not all programs present a mix of theory and practical application, which I think is a shame, but some did, and some still do.
During my life as a development manager, I would never interview anybody who had a certification in something. My experience has been that most certification wielding individuals are not that good, and therefore thought they could become more marketable if they had a third party verify that they had some knowledge. When people like Ian Murdock, Linus Torvalds, and Theo de Raadt start getting certificates, I’ll maybe put a little more stock into them.
I don’t put much stock in degrees either. The best programmers I’ve ever worked with have been those who simply love doing it. They bought a book and a computer and just dove in. They come to work and program all day, and then go home and do it all night just for the fun of it.
I’d rather have somebody who writes software for a hobby than I would somebody with a degree. Those folks are almost always the best you can find.
Many people in computer science are from non-CS background including people like W. Richard Stevens (Author of Advanced UNIX programming). I don’t think education is exactly a criteria in judging one’s programming abilities.
I faced a little bias from recruiters just because I did not have a CS degree and i worked around that by only mentioning that I have a Bachelors of Technology. Every interview I went in, i cleared it and even in companies where I was the first non-CS hire. I have worked on components ranging from networking protocols to kernel drivers and OS development.
So IMHO the degree in computer science surely helps a little bit but I think the decision whether a person is good for hire should be based on a person’s work experience and his interview.
But I think the programing before school is a bad choice. Not everyone had the option of access to systems before college. That would require parents or schools that had system available to be played with. These days maybe more likely but still.
There are also different types of good programmers and in truth you want a team with different skill sets. Sometimes you need that ugly spaghetti code to get something done or fixed and sometimes you need something well thought out and strategically planned. Usually I would think you need both.
When recruiting I find CVs to be not as useful as they could be.
My acid test is an interactive discussion about IT issues .. aspects of programming, project management or whatever is important to that role. You get a very accurate idea of someone this way. A CV, elaborate application form or impersonal testing or personality metrics give results as accurate as your astrology charts.
More to the point, CVs are being pushed to be huge lists of keywords aimed at keyword matching recruitment database searches, recruitment consultants and HR.
Recruitment Databases
There is a distinct pressure for CVs to be key-word laden just to get past the rest of the clutch and into the top 5 of the CV database searches. If you’re a candidate I would find it hard not to blame you for adding “C, C++, XML, XSLT, TCP/IP, UDP, ICMP, MS Word, MS Excel, MS Powerpoint, MS Paint” … into your CVs.
Recruitment Consultants
Most (not all) recruitment consultants don’t know what they are talking about. And as such there is a depressing pressure on candidates to add idiotic amounts of detail and phrases to their CV just to get them past these consultants. Imagine you are an expert of pre-Shakepearean English language. It is a shame to be pressured into adding “I have done English for 20 years, including written, spoken and aural” to your CV. I’ve been asked by recruiters myself the equivalent of “but have you done your ABCs … “.
HR
Again, CVs are obscured by gunk which candidates need to get their CVs past idiotic HR people. Too ofen I have, and colleages have, been frustrated by HR refusing to progress a good candidate because of HR issues. Who gave HR so much power? Personnel tasks were fine (payroll, forms, sickness) in the pre-HR days and it worked well. People who do HR are doing it because they are not rocket scientists .. and for this reason they should not be selecting/rejecting them.
Recruitment has become an industry and is making some people rich. And companies themselves are losing out by not taking enough care or effort when recruiting.
Result
In summary what has happened is that it is easy to get a “standard profile” of IT employee because the huge recruitment machinery is optimised for this case. It can’t provide you with that special employee because it doesn’t know what one is .. or doesn’t have time to find one.
Edited 2008-02-05 02:39 UTC
Tell me about it. I don’t know how HR came to prominence in so many companies, but they always seem to be the first barrier to get over in getting recruited in any organisation. If you were to fire your HR department you wouldn’t feel a thing, and things would probably improve.
There are three important things to look for when searching for a good programmer:
1. Sandles
2. Pony Tail
3. Body Oder
I’m a so-so programmer; I only pass number 3.
I think point 3 is a prerequisite to get you into university doing anything with computers. To get into the pompey university’s computing department you really need a gas mask.
Look for C and Unix administrator experience.. That’s all you need to know.
If you notice Visual basic or .NET experience, run out of your office screaming.
Makes sense right
“If you notice Visual basic or .NET experience, run out of your office screaming.”
LOL very true
A couple of years ago, I did an interview, and one of the questions I asked the guy was what “distribution” of Linux he prefered.
Do you know what he answered?
–> “Oh, I like my distributions on DVD” <–
Yes, believe it or not, that was his answer! ROTF
You know of courses that was the last question I asked him
And this was an MS[fill_in_the_blanks]/.NET certified “””programmer”””
Cheers
Sometimes one might need Visual Basic and .NET experience. Recently my Java application had to interface with .NET web service. Microsoft made sure that it is very difficult to do that without .NET tools and experience. One might say that SOAP is a standard, but what if you have to pass Microsoft specific data types and formats over it.
If I had just a little .NET experience, it would have made my life easier.
I gotta disagree with some of these criteria. I know a lot of great programmers, but only know C/C++ and bourne shell as languages. I know other programmers who who a dozen different languages, but are dumber than a pile of bricks. I know awesome kernel developers who can write device drivers in their sleep, but wouldn’t know XML if it bit them in the ass. I also know developers who can rant on and on about a several dozen new technologies, but still need a GUI IDE and an example to write a hello world program.
In short, I think the article places way too much emphasis on varietal bleeding edge knowledge, and way too little on in depth focused knowledge. There are two broad categories of great developers, and depending on your company’s needs, one may be better for you than the other. One kind of developer is like the article, who has great breadth of knowledge and intense curiosity about new stuff. The other kind has great depth of knowledge and has an intense desire to provide a high quality product. Broad but shallow, or narrow and deep?
If I can dare make some gross generalizations, I would say the two types of developers correspond to the IT and engineering departments. From the article and comments here, I think everyone else is talking about the IT department. I am talking about engineering department. During the dot.bomb, many startups made the mistake of hiring IT programmers to produce their product. Even if your product is a website, it it needs a different perspective than the typical IT member would give it. This isn’t meant to diss IT programmers, rather to recognize that different departments have different needs and emphases.
In fact, the great programmer will be the one talking your ear off about a new technology that you haven’t even heard of, explaining to you why you must use it in your business, even if none of your staff knows how to use it. Even if it’s a technology he doesn’t know how to use yet.
Bzzt… sorry, wrong answer. A good programmer knows the costs and benefits of various technologies and doesn’t jump on the language du jour just because it’s something new.
I disagree. He would be talking about a new technology that would solve a problem / cut costs / scratch an itch or open up a new market segment.
I do it all the time.
For instance, to bad JAXX isn’t more popular:
http://www.jaxxframework.org/wiki/Main_Page
You’re both right actually. I didn’t like that sentence in the article. You can explain new technologies and how they would make life easier (which you must do), but if your new prospective employer doesn’t use it and has made a really heavy investment in something else then you can’t go wading in telling them that what they’re doing is wrong.
Moreover, recommending that a project critical to the company’s success be done in a technology that you don’t know is irresponsible at best.
Sure, it’s fine to say that you should explore the possibility of using the technology, but to be an evangelist of the newest whiz-bang fun new toy shows a lack of maturity.
I think it is great if someone becomes a master programmer without going to college. However, at the same time, I wonder how good they could have been if they had been exposed to subjects that only actual geniuses are self-taught in, like abstract algebra or RF circuit design. People who claim to have been too bored by college to finish probably just didn’t challenge themselves enough.
On the other hand, it is true (at least in the USA) that college is a business, and thus degrees can be received without a whole lot of learning having been accomplished. So the possession of a degree doesn’t mean much. The important distinction is that a lack of a degree is not simply the opposite of having a degree. Since getting a degree is so easy, I am suspicious of supposedly smart people who don’t bother, unless they started making millions right out of high school. Most of the degree skeptics reading this will notice that they are not one of these people.
My point is, if you think that you are so brilliant that you can’t be improved by education, try not to whine when the rest of the world disagrees.
You can stereotype and use requirements all you want, but it won’t guarantee anything. I’ve seen great people who are self taught, and pathetic developers with degrees.
If your posting includes “Required: BS in Computer Science,” you’re still very likely to hire a mediocre developer.
The answer in almost all cases is: you won’t know until you talk to them. Maybe the person is good, just not right for the position. The only way you’ll really know is to talk to them and have them explain their past experiences and have them work through an example or two of what they’ll be doing.
A degree can be a huge benefit to the right person, but it’s absolutely no guarantee. If you’re starting a business, you are more likely to succeed if you already know/trust someone who is doing the geeky side of things, and they should be the one to say yes or no. If you don’t, you’re going to have to hire someone, and hopefully they’re the right person and can handle technical interviews.
This article boils down very quickly into the sort of trite advice that has been given to every high school student ever.
“Have personal hobbies?” “Be able to hold a conversation?” “Have the desire to do something?” I feel like I’ve read a horoscope, designed to make me feel better without saying anything directly disprovable.
I mean, by those hallmarks, even I would be a great programmer.
“even I would be a great programmer.”
Hmm.., only if the following pseudo code returns TRUE
even_I_would_be_a_great_programmer =
Have_personal_hobbies > 3 &&
Be_able_to_hold_a_conversation(bool a_Coherent_One()) &&
Have_the_desire_to_do_something(list[] what_Have_I_Done() != None)
If the software is small sized, useful, portable, multiplatform (or if not – works with wine) – the dude is good.
http://reaper.fm
Not to disagree with the word of an article.
Well, it have been there for quite some centuries and recruiting people come from the days before AD, while programmers are here for what? at most half a century plus?
In that column substitute “programming” with X and “programmer” with X-er and more-less you’ll get a generic template for any kind of professional and not just programmer – “someone who eats X, breaths X and talks X and not just claims X”.
I do interviews on monthly basis for my employer at a big company for all sorts of “programming” positions. I’ve seen a dozen of bad written CVs for a number of really good man (and vice versa). By large margin people who are being interviewed have no clue about the thing that they aren’t just replying for the tech questions like on some sort of test. What I really look at is how they answer them. It is a hard task to tell smart one from a joker but it is still possible.
And last but not least: sometimes I do not need a “programmer”, I might need a “code monkey” to fill the gap. Taking a really good man for that slot would be shame for both me and him or her. This is why for some not-so-good cases I do vote “yes”. And we hire them on short term contracts.
Edited 2008-02-05 06:49 UTC
Passion.
Ed Wood was passionate about film making.
How could you diss the stellar work that is Plan9?
(Sorry, just couldn’t help myself 😉
And he made a lot more movies than all the technically adept film makers who contented themselves to make TV commercials all their lives instead of risking something that would require organizing people and learning new skills, didn’t he?
EDIT: We can’t nest quotes? Aaaw…
Edited 2008-02-05 15:43 UTC
Sure, his work had heart but it still wasn’t any good.
It’s more correct than not, though I definitely agree with the above posters that degrees in fields outside CS can be very significant.
I myself am self-taught. I’ve participated in hobby projects and coded C++ alongside people who’ve been working for big-name companies for a while. I went to college during the bust and eventually found it too expensive to continue, but while I was there, I literally taught my university professors some new things. That, and fixed bugs and syntax errors in their slides and handout programs.
I am not the rule, and papers definitely matter. Nothing beats a skill test, however. I am currently interviewing candidates for my company where I have been programming for nearly two years now, and I put code with deliberate bugs and ask them to debug out loud. While it helps if they find the bugs, the thought processes are what interest me.
Sorry, I just had to poke at the rule-of-thumb types. There’s no substitute for actually testing someone’s skills. I’ve seen paper credentials that don’t matter and hobbyists that do. Think, don’t assume.
I can’t reach the article (dead link), but I have an opinion on this one being not to far out of the bright college years myself.
I think there were a good number of solid but unexceptional CS people at my school and a few people who really shouldn’t have a job in technology (fortunately most of them went to the financial industry). Of course there were also a couple of standouts. All but one of these excellent CS people did a significant amount of programming outside of class and some had developed a certain amount of depth in the field (such as, for instance, writing an emulator or compiler on their own). But there were also a good number of non-CS folks also at this level (I went to a pretty brilliant school). Most of these were physicists or math guys.
It’s hard to find the best candidates and most jobs probably don’t need the above people. But I think the depth of technology known is a good indicator of how good someone is likely to be on a demanding job. If you’ve done a significant project that involves ASM or embedded programming, that’s a good sign. I think college is a good baseline, but it’s important to also look at technical extraciricular activities and projects because class knowledge is just the tip of the iceberg in what makes a good programmer.
Some might dispute the value of knowing ASM. I think it’s important because of the abstractive nature of computer programming. Everything is built on hidden complexity and details of the underlying hardware and runtime. Many people get lost between abstraction layers (i.e. they just can’t get that black box to do what they want). It’s a good idea to have a cadre of people on your project who have good knowledge across the abstraction layers, so they can figure out what the compiler is doing to them or why the OS is returning an error. For instance, if you’re doing .NET, someone should at least be familiar with Win32 and Reflector.
I also think that people fresh out of college, even if they have great project experience and high IQs, should be paired with a good mentor. Perhaps they should be involved in the maintenance of a component for a bit of time before being put on something new. Code and specs should be reviewed by the mentor and then harshly (but fairly) by some other senior devs with an eye towards nipping bad habits in the bud and instilling real-world engineering discipline. I’ve definitely learned a lot from my manager and mentor over just a few months. Not so much of it is in technique, but more the general wisdom of how to approach a challenge (the usual answer is as incrementally as possible).
Edited 2008-02-05 09:47 UTC
how to recognise a good programmer
What I found very useful is to get into an informal discussion about the technology in question and to see what they rant about.
Usually only good programmers know and are passionate about the limitations and deficiencies of the technology they use.
http://209.85.173.104/search?q=cache:-PJEtsLZfV8J:www.inter-section…
Edited 2008-02-05 10:48 UTC
Really, does it matter?
You’ll probably end up boring a good programmer to desperation and s/he’ll probably leave the company because in the interview you asked all sorts of interesting questions and promised all sorts of nice projects but then put him/her in a maintenance project where changes rarely, if at all, happen.
Or you’ll get a good programmer but not want him/her to work the way s/he does, but instead you’ll value much more the fact that s/he follows your internal processes and style. All the fresh ideas and energy s/he brings will be dissipated, because you’ll want to constrain it into your organization’s model and behavior.
Or even… you actually won’t hire him/her. You’ll hire an unexperienced… oh, sorry, you call that “unspoiled” young fellow, so that you can mold him/her into what you want from the beginning. Or you’ll hire someone cheape… ahem, less qualified, because, you know, it’s just some web project or something.
Really, most of the time companies do not want a good programmer; they just want an average one (or a bunch of average ones). And it’s not only what they want, it’s what they actually need.
So, before asking yourself how to find good programmers, ask your self what for and try to have something that requires one.
Second to this one.
I am not a programmer. I downloaded Ruby recently and ‘had a go’. From that limited experience, I think ability in Logic (as part of Philosophy) should be a prerequisite.
Looking at the Wikipedia entry on Logic, I get this:
“Traditionally, logic is studied as a branch of philosophy, one part of the classical trivium, which consisted of grammar, logic, and rhetoric.”
Funnily enough, an usual amount of those I have come across at University infrastructure support level who have done programming are ex-Linguists.
I am not arguing that programing is an Art rather than a Science, but if you go back far enough, at bottom science is philosophy.
Anyway, I say bring back Logic, Rhetoric and Grammar so that people can first think and then articulate. We live in a world of telegraphic and context-laden, elliptical expression, fuelled by the visual and multimedia bent in communications.
In the beginning, though, was The Word.
People here are claiming that you need more of one than the other – both camps can’t be any more wrong.
Yes, you do need people who have the practical real world skills; a realisations that there is a fine line between ‘this is what my professor taught me’ and ‘this is how the real world operates’.
With that being said, what education does provide you is the necessary discipline and skills to take those frantic bursts of coding inspiration and putting them down on an IDE in a coherent and logical manner.
There are far too many programmers out there whose claim to fame is the fact that they can ‘hack’ away at code. Hacking away at code proves nothing, its nothing more than an attempt at ‘lets tinker and find out what happens’. Programming in a large environment can’t work that way – it creates chaos.
What people need is knowing how to design, test, implement this system – aka, the SDLC (System Development Life Cycle). I’m always surprised the number of programmers who don’t have the slightest clue of what I am going on about when I raise this issue.
The whole point is to create code that not only works, but can be maintained, not just by you, but if in 20 years time, a person can get all the documentation, read through the code, read the comments, and know exactly what the original author was thinking when the decisions were being made.
That is why so many products are so crap these days; geeks in the early days just sitting down firing code at a problem hoping that something will stick and ‘she’ll be right’ – well, we don’t need to look any further than the Windows for an example of how not to manage developing software. No controls, no designs, no documentation – all of these evident of the fact by virtue that even Microsoft have admitted that Win32 isn’t fully and properly documented; features were added without consideration of the impact on the system at large.
Oh, I’m sure I’ll get arm chair programmers here screaming that its all academic, that someone like me would never appreciate the real world. Well, I have been in the real world, and the kind if stupidity I saw there is the exact reason why I don’t work in IT any more.
Edited 2008-02-05 12:37 UTC
I think it is important to have a good mix. If you have team full of CS majors and PhDs, try to get a good non-college programmer with lots of real world experience to mix things up. He will try extra hard to show that he is just as good as the college-educated guys, and he will bring in a different approach and new ideas.
If your team consists of non college-educated hackers that get things done but think they are the best programmers in the world even though they do not know what a turing machine is, get somebody with academic credentials to humble and motivate them, and maybe to get some formal computer science knowledge into the company.
The article is about how to recognize an enthusiast, not a professional. Passion is a good thing, but it is subjected to change during persons life. It depends on personal circumstances, environment, age and other factors. Employers need steady performance the can count on, rather than bursts of inspiration.
I could be described as programming enthusiast who make living out of programming, but I disagree with the article.
It kind of annoys me when people talk about programming as if it was some kind of unified field, when it obviously isn’t.
To use a somewhat overused metaphore, it’s like building a house; you have the architect and the engineer and the site foreman and the guys laying the bricks and the guys fixing the plumbing etc. In building these are all seperate jobs with seperate education and seperare skill. They are all equally important in the sense that all of them need to do their job for the house not to suck, yet they’re not equivavlent or replaceable. No one automatically assumes that a master bricklayer will make a great architect (or vice versa). Yet that’s the assumption people keep making when it comes to programming.
So when asking what makes a grear programmer, you really need to first of all ask what kind of programming to need. Is it the programming equivalent of brick laying then insisting on a degree is probably unnecessary, experience is all that’s needed. If it’s the programming equivalent of structural engineering then yes, requiering the relevant degree is probably sensible.
Of course Universities themselves are partially to blame, in as much as many of them simply offer “Computer Science” degrees to cover everything and anything vaugly related to computers.
Basically what I’m trying to say is that if people stopped believing that ‘programmer’ was a single job description, and stopped looking for a single trait that described a ‘good programmer’ then everybody would probably be a lot better off.
The equivalent of brick laying in IT is probably a low level system administrator. There is no equivalent in programming, because all programming tasks require high level problem solving abilities. Brick laying requires the ability to learn a fixed set of techniques, and apply them over and over and over and over and over in almost identical situations.
There is a lot of programming that requires very little non-trivial problem solving (write a php frontend to this database, again). I’m also sure that there are tricky aspects to certain bricklaying problems that require both creativity and problem solving. The simple fact is that a lot of programming is rarely as hard and artistic and creative and magical as we programmers like to make it out be.
Maybe this could be a good thing to decide between good and bad. Measurement is done with “WTFs/minute”
http://www.tuco.de/home/mk/files/Valid_Code_Metric.jpg
The reason certification and education is important for a job is very simple, the employer needs a baseline skill level. It’s just not feasible to interview or take a deeper look at every single applicant, you need a way to weed out the majority that you’re not interested in. Sure, there’s collateral damage but it’s a necessary evil.
Yes, there are self taught programmers (or individuals in any field really) that are totally awesome and there are people with degrees and certificates that suck horribly. That’s not the point. The people doing the initial assessment of who to take a deeper look at won’t be computing professionals and they need a crude way to judge the skills of the applicants. It’s crude, yes, but neither you nor me nor the HR people want to personally interview large numbers of applicants who’s wrong for the job.
Besides, self taught people who are actually good usually get good jobs anyway, if they put some effort into it. Having a contact network is a wonderful thing.
Read their code. Of course, this assumes _you_ recognize good code from the stinky.
Also, here are some good questions to ask a candidate:
1. Name your #1 pet-peave when it comes to coding style. It’s amazing how many programmers do not have one. They just “git ‘r dun”.
2. Name you 3 favorite programming languages – and what feature you like and dislike about them. This weeds out the “single-tool” folks that have just learned how to work one specific IDE.
3. Give a few examples of how you modify you coding style for the sake of business programming – i.e., you are programming in a business environment, not an academic one. This one really separates those who are familiar with the real world of software development – especially with time and money constraints, and that may include many levels of programmer proficiencies. Do they simplify their coding for the sake of mantainability, cost, understanding of other team members? This weeds out the code-cowboys who love to build great edifices to their awesome depths of understanding.
I thought some people might actually be interested in how to detect good programmers vs. arguing about the size of their degrees!
What this guy said. How I code depends on the audience I expect to edit/fix the code later on.
A good programmer writes with the end user in mind. A bad programmer writes good enough make it look good when they sell the program the idiot is authorizing the purchase.
At the moment I can’t even view the article, but it sounds really interesting.
—————————-
> nmap -P0 http://www.inter-sections.net -p 80
Starting Nmap 4.20 ( http://insecure.org ) at 2008-02-05 15:13 CST
Interesting ports on bagger.kortenhoef.net (85.17.62.200):
PORT STATE SERVICE
80/tcp filtered http
—————————-
Bummer.
While I’m sitting here waiting for it to recover, folks: Please stop modding down crap just because you don’t agree with it. There are some ok points being made by both “sides” (?) in this thread.
The whole “degrees/certs are essential” vs “degrees/certs are useless” argument reminds me of one of the Nasrudin stories.
“One day, a fussy local schoolteacher hired Nasrudin to ferry him across the river in his boat. As soon as they were afloat, the scholar asked whether it was going to be rough.
‘Don’t ask me nothing about it,’ said Nasrudin.
‘Haven’t you ever studied grammar?’
‘No,’ said Nasrudin.
‘In that case, half your life has been wasted!’
Soon after, a terrible storm blew up and Nasrudin’s small boat began to fill with water. He leaned towards his companion.
‘Have you ever learnt to swim?’
‘No,’ said the pedant.
‘In that case, ALL your life is wasted, because we’re about to sink.'”
Very nice article. But I do not necessarily agree with two points. First, I think its much better when programmer knows few technologies very good, rather than basics of 10 technologies. When I interviewed people I had been looking for those who had mastered few specific things very good, since this means that such people may be more stable and don’t get bored quickly when they are about to work with, e.g., PHP for one year. At the same time, I don’t want programmers to make ‘experiments’ with new technologies during serious projects. But it does not mean I want people who are rigid, and are not able or not willing to learn new things. For me, learning ability is the most important. Sometimes, if I think that someone has a potential and is a good learner, I prefer such person over slightly more experienced one.
Secondly, I also look for people who have their so-called ‘privet live’. Sure, when you have a programmer who programs 24/7 he may be very good for your company in a short term, but if you would like to have someone stable, for long term, I thinks its better if such person does not spend to much his/hers free time on programming or IT. I think it is similar to truck drivers. You can have drivers that drive non-stop, but at the and they will crash.
Edited 2008-02-06 01:38 UTC