Or maybe you do? How about your favourite programming language? What does it take to say that one “knows” it?
When exactly do you “know” a language?
There’s a gradient of choices to pick from.
So what does it take for a programming language to make it onto a resume? Apparently not much, if you are a student. “Know” is more like “know of”. Though perhaps that is fair enough. A lot of skills are transferable, and it’s quite easy to pick up on new languages with similar paradigms. I’ve done this myself before:
Even though I had no experience with PHP or Oracle, I was fairly familiar with Ruby and MySQL. My job offer relied on the claim that such web development is logistically similar, having substituted Ruby documentation for PHP.
Dan agrees.
I don’t think “knowing” a language is any where close to as important as knowing the concepts of computer science and software engineering. Once you have a good grasp of the basic and more advanced concepts, changing languages is trival and becomes easier with the more experience you have.
So perhaps it would be more honest to focus on what really matters — algorithms, design patterns, etc. Memorizing the syntax / API will let one type out that bubble sort faster, though that arguably demonstrates the lack of knowledge that matters.
I recall the first drafts of my resume, as I’ve started out in co-op at University. I’d list a dozen different programming languages that I knew of. Now I would probably list none. That is not to say that I have unlearned things over the years but, on the contrary, that it’s true that the more you know, the more you realize of how little you know in the grander scheme of things.
So, with a few exceptions, I don’t think one gets to “know” a programming language. I also think that this shouldn’t matter.
1 Good post Tony, I completely agree. Couldn’t have said it better myself.
Reply to comment
Agreed – I stuck to putting “exposure to numerous object-oriented programming languages as well as relational databases” on my programming resume this term, partially out of laziness, but also in knowledge I can learn quickly if necessary. Where time investment is warrantied, I write a cover letter in which I elaborate which of the required/requested languages I’ve worked with.
I’ll let you know the full results on June 21, but from observations so far, this approach seems to work better with smaller companies. I suspect with the larger ones your resume gets processed first by an HR drone who doesn’t really understand programming, and lack of that required language name means an automatic kbai. Which may be just as well.
I did get an interview without a cover letter specifying the languages worked with; we’ll see how that goes.
Reply to comment
Do follow up with the results
And you are absolutely right, some of HR approaches are rather iffy. I’ve heard of some that use automated tools to filter out resumes that don’t list particular keywords. I would have to agree that you might as well skip over such applications. Though I suppose the general point would be to tailor the resume to the one you would expect reading it.
Reply to comment
“the more you know, the more you realize of how little you know in the grander scheme of things.” I love that quote, it’s got the ring of truth to it. In first year, I thought I had a firm grasp on Computer Science. Today, (in fourth year), I feel like I now have a firm grasp of maybe a fraction of a percent (if even that) of the field called “Computer Science”.
Reply to comment
Absolutely. And what I think might be happening, is that a lot of first year students are over-confident due to their “99% in high school” marks, see review material (aimed to get everybody up to speed), and get the wrong idea about the upcoming CS education. Though it gets better if they pay enough attention to get to the fourth year. For the most part.
Reply to comment
Knowing any one programming language exceptionally well seems like a poor idea for a student, or perhaps even for a professional programmer. It has been my experience that each programming language I learned made the next a little bit easier, especially when the languages learned catered to different problem-solving approaches.
We could probably pull some sort of bell curve out of our butts that represents languages learned and time invested and be reasonably correct.
Reply to comment
Agreed, wtd. Getting a couple of langauges under your belt, especially if they’re different, really makes the your learning experiences better (not easier though, that’s for sure). You can skip the part about trying to grasp how the pieces of logic fit in and instead focus on the respected programming language’s features and quirks, and what makes that language useful.
Reply to comment
There is no doubt that Scheme is grand. The more you know, the more you know you should know Scheme.
Reply to comment
I certainly agree with the general conclusion of the article. Back in the DotCom days, I was always annoyed when some execu-drone asked me what my “skill set” was. I considered skill set to be (a) knowing the principles of computer science, (b) knowing how to solve problems, and (c) knowing how to learn whatever new information was necessary for a project.
That said, I personally feel as though I “know” a language after I can remember all of its syntax and have written a few major programs in it from scratch. Roughly speaking, it’s the level at which I could walk into a job interview and write code in that language on a whiteboard.
As for actually putting a language on my rez, I like to express that in terms of how many months or years I’ve worked with that language professionally. So, when I just read a few books on Perl and played around with several scripts on my own, I couldn’t list it. But when I’d programmed with it on a job for about a year, I felt relatively secure putting it in writing.
These days, it’s probably best not to list a skill with which you are not 100% confident, because recruiters may notice only that word and bug you with jobs focusing on that alone. By that same token, I no longer list old, uninteresting skills. A long time ago I had a stint programming ASP, and when I listed that (along with dozens of other things) on my rez many years later, I had to deal with a lot of recruiters who wanted me to do ASP work for a fraction of my going rate. It’s not a horrible situation, but it can be a little disappointing.
Reply to comment
I can easily adapt to quite a few languages, but there’s only two that I feel I really know completely inside out, those being C and Haskell (but then again, there are extensions to Haskell98 in GHC that I’m not completely familiar with).
Reply to comment
Hehe, I inspired a blog post.
Reply to comment
I only say I know a language if it’s at least #3. I’d say I was an expert in a language if I was #5.
That’s about fair… because the word “know” doesn’t really imply actually knowledge, just soft knowledge as an observer.
Reply to comment
I definitely wouldn’t list zero programming languages on my resume. I agree with the crux of your argument that general computer science knowledge is more important than individual programming languages, but not everyone shares those views. When you’re trying to get a job, you can’t afford to be so idealist. And anyway, the recruiters and hiring managers who are doing the first rounds of resume filtering likely aren’t programmers themselves. They’re probably just looking for certain keywords, as in “All I know about what those guys down in IT do is that they write web applications in Java, so if I don’t see Java on a resume, it’s not making it through to the next round.”
I wouldn’t take those risks.
Reply to comment
Interesting post. I’d say much the same is also true of natural spoken languages as well.
Reply to comment
We’re currently interviewing Software Quality Assurance Analysts to fill a space on our team. We received the usual flood of resumes, but it has been easy to cull out the chaff.
We reject out of hand any SQA that claims to “know” C, C , C etc etc. It’s obvious from their experience and education that they are NOT developers, never coded anything worth a damn, and wouldn’t know a compiler from a hole in the ground. But somehow taking Introduction to C in college or working with actual devs somehow magically gave them the “know”? Uh uh. It’s amazing what some people will put on there. Several applicants “knew” almost every language in existence.
Sadly, this kind of resume paddingwas very evident on almost all the applications we received from Indian applicants. Someone is giving those guys bad advice.
Reply to comment
so what books would you recommend to study general computer science?
Reply to comment
Just to clarify, I wouldn’t avoid mentioning specific technologies by name. Though instead of regurgitating long lists of technical terms that I only have some idea of what they are, I would focus on actual experiences and how that applies to what I want to be doing in a given position. Yes, that is still a degree of idealism in there. Sometimes it could work well. Other times, as pointed out a couple of times in the comments already, it could backfire as a non-technical HR person in a large corporation passes over the missing keyword.
If your position in the industry makes this an “unacceptable risk” (and everybody has a unique position), then you obviously shouldn’t follow what you’ve read on some blog on the internet.
Reply to comment
That is true for a lot of things. I say I know Swedish (I’m from Sweden) but that does not mean I “know” it. There are tons of words and grammar I get wrong and I would not be able to teach it at any higher level. But still, in every day speech I can say I know it.
Reply to comment
For me it comes down to building software. If you can build production-quality software in the language, for various values of production, you know the language as far as I am concerned. Of course, you don’t have to list on your resume “Languages: C , Unix shell, Perl, Java, HTML/CSS/JavaScript”.
I haven’t tried this yet, but you might do something like:
C : shipped software, requirements through maintenance; collaborated with others in a large pre-existing code base
Unix shell, Perl: wrote scripts and tools to aid development, support software shipment
Java: Earned check-in privileges in XMagic open source software, xmagic.sourceforge.net
HTML/CSS/JavaScript: Created and maintain yourwebapp.com
You might also want to include your IDE of choice, if it’s significant (wrote plugins for Visual Studio, wrote a major mode in emacs, etc.), and experience with version control.
Reply to comment
I say I know a language if I have created at least one project in that language.
Reply to comment
@Dan — that’s a good example to follow.
@Binny — what’s the extend of that one project? If the “project” is an application that prints “hello world”, you are as far as the #2 point. Though that project could also be a compiler, for a #5. That’s a very large scope.
Reply to comment
I think that I would say I “know” a language to be a mix of 3-5. On one hand, knowing that Java has classes doesn’t mean you know Java, but you shouldn’t need to have javadocs memorized or be able to bootstrap it to say you know it.
IMO The truth here is that no matter how you justify it, when someone asks you what languages you know, it probably won’t be to your advantage to say “none” and then go on about how its a continuous learning process. You have to draw the line somewhere.
Reply to comment
If asked in a conversation, one could first reply with a question of “know how well?”, shifting the onus of drawing that line back at the asker.
Comes to think of it, that’s what the technical questions during the interview are. After one says “I know some_language”, the extend of that knowledge is usually probed anyway.
Reply to comment
On my resume, I list the languages that I would feel comfortable coding in my first day on the job. That is how I define what I know – if I feel comfortable doing a task professionally utilizing a concept or language, I know it. If I would need a couple days of ramp-up time to learn enough to be productive, I don’t know it, even if I am confident I could learn it given a small amount of time.
I just graduated with my degree in computer science, and lining up jobs using this logic seems to be working pretty well for me, and I never have to worry about studying for interviews since I really am confident I know what I have listed on my resume.
And just a quick response to Black Bellamy – using the definition I’ve just listed above, I know not only the three languages you listed above, but several more compiled and interpreted languages. I think you might be pushing your own inability to understand multiple languages out on everyone else. Among my peers, it isn’t at all uncommon to know not only every one of the major languages (C, C#, C , Java), but also a couple “lesser” ones (in terms of enterprise software) that we use when coding for fun (Python, Ruby, Lisp, Perl). I’m just wondering how many smart, legitimate candidates had their resumes tossed aside by you and your hiring team. My advice: pick ones that meet your requirements, then screen them on the phone to see if they really know what they’ve promised they do.
Reply to comment
For any modern language, I don’t think anyone can claim #4 unless they’ve used the whole breadth of the language for years in industry. Java, for example has a huge number of built in libraries and tools in the language. Memorizing all of them requires that you have done everything from web application development, to GUIs, to advanced string manipulation, to who knows what. The same goes with C . C is one of those languages where even #5 isn’t truly sufficient to claim to REALLY “know” the language. Consider template metaprogramming, it turns out templates are Turing-complete and you can basically execute code at compile time to generate code for the compiler. This “feature” was not intended but was discovered as a side effect of templates after C was designed. Who knows, maybe C still has some interesting quirks that have yet to be discovered.
Reply to comment
Following up Dan Lewis’ suggestions… perhaps create a table. List the projects you’ve worked on, and the technologies you’ve used. Check where they intersect. Put the greatest concentration at the upper left.
Reply to comment
Knowing a language is knowing its API, the language features, how the garbadge collection works, etc…
Reply to comment
Maybe it shouldn’t be called knowing a language, it should be called understanding a language.
Reply to comment
The earlier comment about trashing people who ‘know’ a lot of languages is typical of how many IT staff think … IE. this CV must be a lie … but that is not true if you encounter a grey haired developer who started in the very early 70’s …. those of us that remained active in the development side of the IT industry (admittedly rare), usually handled multiple serious projects, in many and varied languages over the years – especially if you did hard core contracting for most of the time.
I have stopped mentioning all the languages I ‘know’ (3 -5) because lots of younger managers just cant cope with the idea that someone may have actually accrued all that experience.
Reply to comment
Yeah, well I obviously agree with your thinking.
ATM I study in the university and we don’t just care to master the language – all we care is to learn writing a specific program. After a while those skills that a programmer has gained for a moment, become forgotten.
I believe that one must stick to one language and go together with it. Later, if because of some important matter he needs to change a language, it will be fast and less painful.
Reply to comment
@RonO — that is certainly an exception, though obviously a reasonable one in the circumstances that you’ve described. And if managers are doubting real experience like that, they certainly should spot meaningless lists with no experience to back them up.
@kapax — it will be fast and less painful to switch between languages, if one learns to use many in the first place. You don’t have the experience necessary to make an educated choice before beginning with that “one language”, and even if you let someone else decide for you (educational institution, for example), it will likely be some average point between corporations, academics, and all your classmates. The reason we have so many programming languages is because we have so many different types of problems. It is to your advantage to explore all the different paradigms available, and multiple languages make that easier to do.
Reply to comment
I’ve interviewed a few developers for jobs in my time. The temptation for them seems to be to stick down as many technologies and acronyms as possible. I’ve caught out several people who have added languages without really knowing what they are.
Programming a language is a transferrable skill. If I find a developer who can demonstrate experience with PHP, MySQL and some front-end technologies I could be pretty sure he or she could pick up other languages with a little investment in training.
On the other hand, if I find a developer who boasts experience with every language I’ve ever heard of, I would doubt that the skills in all of these languages are up to a production-level standard. ‘Production-level standard’ meaning being able to use the language within a commercial project.
I’m not suggesting being humble is the best policy. Knowing a few select languages really well is sometimes better than claiming to know every language. Listing more than you know will increase the chances of you being humiliated in a job interview.
Reply to comment
The differences between most of the modern languages are quite minimal (I’m sure someone is going to disagree with that, but c’est la vie). Most of them have some basis in C (PHP, AWK, Java, C#, C , ObjectiveC, etc.). If you know one of them very well it is often quite trivial to learn another since so many of the basics are either identical or very close. This even exists when one is talking about C and OO languages, many things are the same, and the ways in which objects are accesses isn’t very different from similar things in C.
Programming is about how you *think* about the problem space and how you approach the solution. The language you use shouldn’t have much bearing on that, although some languages make doing some thing easier than others.
Knowing a language or knowing many languages isn’t anywhere near as important as knowing how to leverage that knowledge for other languages and problem spaces.
Reply to comment
Back in the bad old days, when memory was measured in KB instead of GB, having a really good idea of what a language produced in terms of machine code was a lifesaver. Now, with hardware capacity keeping up with or even outracing software demand, language efficiency has taken a back seat to ease of use. I think that is why C# has made so much progress; VS 2005 has made it absurdly easy to incorporate standard libraries without huge memorization curves. Other IDEs, such as Eclipse, are on that path also. For the last few years, my career has depended less on me memorizing keywords and library functions and more on the architectural facets of the projects I am designing.
Reply to comment
Hey, it’s been ages since I read this blog, not for anything but being busy though.
This is an interesting question. When do I add a language to my CV. I have a long list of programming languages on my CV, some I only toughed upon in tutorials, others are heavily used. I think it’s OK to post them if you have tried it a bit, but not only heard of it I say.
During the interview, I would be honest and tell the level of my experience in the language. One interesting CV which was graphically made, a bit weird, had some kind of stars beside each skill he knows. This is helpful, and it didn’t look bad really.
I agree for certain level, it would be OK if I am new to say Perl, but I know PHP and Ruby very well. Knowing only PHP, reading a bit of Perl examples, I was able to write a small scrapper for some research purposes. Not bad!
However sometimes, a company is looking for experienced level say in J2EE, Java Beans, and digging into the core of stuff. Here, a brief idea in a similar language won’t be helpful, and not even basic understanding of Java.
It depends on the situation I say.
Reply to comment
I think that learning a programming language is fine, but a little bit on the redundant side. More importantly, people should be learning programming concepts -and ways they can be implemented without being held down by language choice. You should be familiar with coding concepts before you try to ‘master a language’.
Of course becoming a master really isn’t necessary when pretty much all the documentation you need is available online.
Reply to comment
I’d say I have a proficiency of about 3 in my favorite languages. That just goes to show that while I’ve learned a great deal over the years, I have little to show for it in the way of applications written.
At the moment, my focus has been on C# while I plug away and learn game design concepts as well as I can. I think that once I fully grasp the logic and reasoning behind the concepts, then applying the C# will be the easier part.
Anyway, great post.
Reply to comment
@Bashar — welcome back!
I think your view on this points out one of the issues — your Perl and PHP are listed together, though you are significantly more familiar with one, than another. And when you use PHP as a template to fill with Perl syntax, you still end up with a “PHP” program. At least in spirit.
@Matthew — maybe it’s just the way you are saying it… but memorizing documentation is not “mastery”, as it’s most important to know what the best documentation to look up is. You are correct to say that general concepts should take precedence.
@Tim — it’s not always necessary to have one “big application” for a portfolio (you might be better off with a plethora of various small scale scripts), though big applications offer their own unique challenges. It’s good to have experience with both.
Reply to comment
[...] over at the Computer Science Canada blog wrote an article on the 8th of June about what it means to master a programming language. The article raised the [...]
If you’re familiar with the syntax of , great. The key question is, do you understand the core logic of programming in general? I was able to write a fairly basic VC program in about ten minutes, having never used C of any flavor before. Is it that I’m just that awesome? Some could argue that. The truth is, I knew *how* to do the task long before I started it. Given a bit of pre-built code for initializing the form, I followed suit and picked up the syntax basics pretty quickly and adapted to accomplish the task at hand. Even then, I wouldn’t say I really “know” C just because I wrote one program. The syntax still bugs me, and I’d have to pump more time into it and become truly familiar with the syntax before I’d claim I “know” C . I do, however, know VB and C#. My previous job was VB, and my current is C#, so I sort of have to know the language. But the ability to think in computer terms for any language far outweighs knowing the language itself. I started on TI-BASIC, with IF’s and GOTO’s falling out every program’s entry point. While the style and syntax may have changed drastically for me, the fundamentals are still the same. Conditionals, loops, information management… that’s what allowed me to flow smoothly between languages. Syntax aside, you can’t “know” any language until you understand the fundamentals.
Reply to comment
Results are in…
This is somewhat Waterloo co-op specific, but I think some ideas may be applicable to a wider audience.
I’d estimate I applied to around 30-35 jobs that were purely programming. I had five interviews, two of which were for cover-letter-less applications (which purposefully did not name a single language). Of these interviews, the job with most applicants had 40 (to those who don’t know Waterloo co-op — more desirable jobs frequently go over 100 applications and the top ones easily pass 200).
Two of the interviews were with large companies (one after a cover-letter-less application — which I wasn’t really expecting), the others were with smaller places, around 10, 20, and 100 people respectively. All of the interviews were technical to one degree or another, and not once was I asked a stereotypical soft HR question.
In the end I was given offers by, strangely enough, both of the large companies, and was not ranked by the remaining three. One of the offers was for a job that involves some amount of J2EE, which I quite happily admitted to not having any practical experience with in the interview (but I do have experience with .NET which may be viewed as somewhat similar by some).
I suspect some accommodation of the co-op system may be taking place — none of the three not-ranked jobs ended up hiring to their limit (including at least one that did not get an employee they’d want at all). The larger companies may realise that the people they really want are likely to get a lot of offers (there’s a statistic going around about 80% of the companies wanting the top 20% of the students), and rank strategically.
I ended up turning down the job which I applied to without a cover letter, but it was primarily because my other offer is in a better location. The jobs I really wanted at the beginning turned me down for an interview seemingly regardless if I had the cover letter or not. My overall interview yield (including non-programming jobs) was 3/12 for cover-lettered and 5/52 overall. I’m not sure if it was the languages I named and explained or the sole fact that I attached a coherently-written cover letter that drove the interview rates up.
But it’s definitely possible to get a job without naming a single language in your application. I wouldn’t necessarily recommend it, but it’s possible.
Reply to comment
Waterloo’s co-op is such a game system, for both employers and students, that it’s difficult to draw conclusive statistics. Personally I suspect that there are enough generic resumes being submitted into the system, to make any sort of actual effort seem more outstanding.
Though taking it at face value, you’ve got a job offer without initially applying with any languages listed. Good to know. Thank you for sharing the experience. plus-5 insightful.
Reply to comment
Yeah it’s very unsustainable to focus all your energy on learning new languages. Improving problems solving skills, learning skills, communication skills, management skills should be much higher priorities I reckon. After all, Software Engineering and Computer Science aren’t about learning programming languages. Like a screwdriver, a language is just a tool to achieve a purpose. Knowing which tool to use and when, and how to use it properly, is what software engineering and computer science is all about. You don’t generally put a screwdriver up on a pedestal and worship it, and it’s true about programming languages to. They are just tools – and this is especially true for software engineers, who generally, but not always, work at a higher level of abstraction such as object oriented programming and … component based software*.
*Component based software is on a higher level of abstraction than OO. We’re probably moving in that direction now.
Reply to comment
[...] the use of comments in codeYou don’t know that programming languageIt’s a real programming languageTeaching with Internet – asking the right questionsIf a [...]
Hello world! Computer languages, in my view, are only tools to accomplish a task. We should all encourage our employers to begin stressing accomplishments, not languages we can learn in 2 days off the web. Can I get a huu-rah?
Reply to comment