
Ask HN: At what proficiency do you consider 'knowing' a language? - ndomin
Lying on a resume is obviously bad, but when do you consider being able to list a new language on your resume as something you know? For example, I&#x27;ve written programs in a dozen languages over the last few years but if someone asked me to write something in any 6 of them I would have to look up some of the syntax to know if it needs a parenthesis or semi-colon. Is that considered not knowing it?
======
danielmiester
"if someone asked me to write something in any 6 of them I would have to look
up some of the syntax to know if it needs a parenthesis or semi-colon. Is that
considered not knowing it?"

I feel that that is a downfall of being a polyglot. I have no qualms about
keeping documentation at the ready. Especially for myself, as I regularly
switch between javascript(5 and 6, and various
frameworks),xml,html,python,bash,c in my day to day. I feel its much more
important to have general knowledge/skills than specific details. The fact
that I have to look it up to know if I need to use .toUpperCase() on a string,
or just .toUpper(), or if it is an instance method, or a global function,
should be of no consequence. If I am regularly having to look up how to _USE_
'if' statements (as opposed to just syntax: [does this language use && or
'and]) that should be concerning. I think a better test would be "Here's a
method from our codebase, but I broke it. How do I fix it" Just be sure to
break the logic of the code, instead of the syntax. I may or may not find the
syntax error, but I damn better be able to identify a non terminating while
loop.

------
ubertaco
There are levels of "knowing" a language.

I've been writing Java since I was 14 (for 11 years now). I write Java on a
daily basis for work, and I can't remember the last time I had to consult a
reference on syntax. I would consider that "fluent", to use an analog from
spoken/written languages, and I'd obviously put any languages in which I'm
"fluent" on my resume.

I've written a lot of Python in my personal time over the years, and have a
good understanding of what "idiomatic" Python looks like (comprehensions over
iterators/higher-order-functions, "is"/"in" over "=="/"indexOf", etc). I would
consider this "conversational", and would put it on my resume too.

Then there are languages that I have not written any projects in, aside from
tutorial-type-things while learning them. These are more on a case-by-case
basis; ones that I'm more comfortable with (like Elixir or Haskell) I might
put on my resume with a note that I'm at a "beginner" level of familiarity; I
understand many of the language concepts, but would need to consult reference
material frequently, and my code is not likely to be idiomatic. With these
languages, I'd ask myself the question of how comfortable would I be accepting
a job where I did nothing but write code in that language. And obviously, I'd
need to explain in an interview or phone screen that my knowledge is still
basic.

~~~
aerovistae
Whoa, hold on, since when is 'is' preferred over '=='? What kind of python are
you writing over there? Those are for totally different purposes. One tests
equality while the other tests identity.

~~~
clintonc
For example, 'if x == None' versus 'if x is None'. The latter is to be
preferred (since identity is faster and more clear than comparison), but you
see the former sometimes.

~~~
aerovistae
Yes that's the only case I know of where 'is' is regularly used.

------
xyclos
I will generally ask candidates a few questions about every skill on the
resume. So, if you're not comfortable answering a few general questions or
having a meaningful conversation about the skill then you should not include
it on your resume. Including a skill level can help frame the conversation or
give context, but if you can't provide 2-5 minutes on the pros and cons of the
language/skill, then I'll assume you don't actually possess that skill.

~~~
jjjjjjjjjjjjji
I've been doing iOS development for 2 years. As an employee around 9 months,
freelancing over a year and so on.

If someone asked me what is some pros and cons about Objective-C I really
don't know what to answer.

I am not really fuzzed about language details, if someone gives me python - I
will use it, perl - sure, bash? why not, c++ - sounds like fun and so on. I
just don't care, if the language can solve the problem, then I can figure out
how to use it for the problem at hand.

Sure some languages can obviously do tasks faster/better because of language
details - for example I used Python recently because it was easier to write a
script to handle some files, usually I'd use bash scripting.

I've been programming for years and years and I can solve most problems that
are thrown at me, no complaints from co-workers or anything like that.

How should I deal with this "interview" question? Just read books? I never got
these arguments online where people feel so strongly about whatever language X
or Y.

~~~
dktbs
I assume (perhaps wrongly) that the interviewer is less interested in your
opinions of the language and more interested in your ability to talk
competently about the language for a few minutes.

~~~
xyclos
this exactly.

------
gtk40
I went through a big interview spree after finishing my undergraduate degree
this spring. I have one company that I was very excited about potentially
working for. The job description was for a "Software Engineer" with no
particular tools listed, but wanted experience with some things like databses,
web apps, and so forth. I had worked several days a week during my senior year
at a .NET shop (now working here full time temporarily until my next job
starts), including some ASP.NET MVC and some other web-related work.

I put a section on my resume under education with relevant coursework. I noted
there that I had taken a database course as part of my CS cousework and put
"Databases (primarily MySQL with interfaces in PHP and JS)," as about 90% of
the project-related courework involved using MySQL databases with web-based
interfaces.

In the inital phone interview, I had a nice chat and talked about some of my
former projects, familiarity with other languages, where I made it known I was
fairly comfortable in JavaScript and Python and some other language, and most
of my professional/educational experience was in .NET and Java. He asked about
the databases course and I explained what the curriculum went over and the
final project. I explained all I had used PHP for was a few database calls and
that I wasn't very experienced with it.

Then, at the first technical interview, it was entirely in PHP. The
interviewer mentioned it at the start, and I explained my level of familiarity
(very little). It was asking about how specific data types behave in PHP,
global variables, differences in PHP 4 and 5, and was entirely about PHP. I
did my best, assuming wrongly about things like global variables, and so on. I
never got a call back.

I removed PHP and have since only listed the technologies in any way that I am
ready to interview in.

------
brickcap
For me it's when you can start reading and understanding the code that other
people wrote. This does not mean that you have to understand the "why?"(which
can be a bit hard without context) behind the code just the "how?".

I think it is a good indicator of how comfortable you are in your chosen
language.

------
loumf
For your resume, the list of languages should be roughly in the order you
would want to work in and can answer questions in.

Then, for each job, list the languages used in the order of how much you use
them (or know them).

For example: If I see Ruby on your list, but it's after Java and C++, and then
I look down the list of jobs and see that your current job is in Java, and the
one from 3 years ago was in ruby -- I know what to expect.

If you still want a job with ruby (and the above matches your situation), then
bring it up in the cover-letter -- explain why you would be a good choice (and
probably you should practice ruby before any interview)

I've see people do "Proficient in" and "Familiar with" lists -- but really --
all I want to know is: will you be productive on day one with this technology,
or do you need a refresher (and then I can decide based on my needs)

------
jabv
Actually, I wonder about this from a non-technical guy's perspective as well
(my work has mostly been in implementation and support). I have listed basic
experience with a language on my resume, and I know that is a useful little
nugget to non-technical hiring managers. When asked, I am pretty clear about
the small scale of things I've built, but I still wonder if it is a little
disingenuous because I don't actually know squat about data structures or
algorithms, and I am not a competent programming problem-solver. (Sorry if
this is a little off-topic.)

------
kzisme
I've seen on most resumes if someone knows a language their experience with
that language is also denoted.

ie:

Python[Expert] Scala[Intermediate] C++[Beginner]

I suppose you could do something like that just to make everyone who reads
your resume aware of your specific skill set - instead of generalizing.

~~~
jabv
Of course, the OP probably isn't sure how to differentiate between even those
categories, because he feels he could use any of them at his general level of
programming expertise as long as he had a syntax reference.

~~~
ndomin
Yes, I think the reason I didn't include skill levels was because at some
point I saw a post talking about the uselessness that comes with some of that.
It may have been a bit extreme but what does PHP [Ninja] or Ruby [Tadpole]
really indicate?

Although [Beginner] is pretty different from [Expert] no matter what, the
expectation of a beginner or expert may vary widely from person to person.

~~~
88e282102ae2e5b
It's a good way to position yourself for the kind of work you'll get, no
matter how it's interpreted. If you write that you're a beginner Ruby
programmer, and then after getting hired you're asked to write an entire
application in Ruby by yourself, you can say in a defensible way, "That's
fine, but I'll need constant help and code reviews and it's going to take a
long time as I get up to speed."

If you got any pushback at that point you could ask them why they tasked the
beginner with this project, when you clearly claimed you were not an expert.

The other levels can be played similarly. An intermediate person could be
assigned to some project and be expected to perform mostly independently, but
if there were any non-idiomatic code or poor optimizations, they could just
shrug it off as a learning opportunity. "I'm no expert" you can say.

