While looking for programming related jobs, it is common to come across associative terms tied to a particular programming language in the job requirements. So what does it mean to be a proficient JavaScript programmer; or to be familiar with Python? Familiarity with a programming language can be broken up into four categories: Not Familiar, Familiar, Proficient, and Master. While the following definitions are in no way concrete, you can safely use them as a guideline.

Master

  • Know almost every pitfall, gotcha, and best practice. Have a rock solid grasp of the ecosystem.
  • Up-to-date on the language roadmap and philosophy.
  • Have written a substantial amount of source code that others deem high quality.
  • Hard time convincing yourself that you have finally mastered the language.  😉
  • You are part of the community. (hopefully, you give back)
  • Know when to “dumb it down” and exclude advanced usage.
  • Deep understanding of runtime and performance.

Proficient

  • Know most of the best practices and gotchas.
  • Mostly aware of upcoming language features and philosophy.
  • Most of the syntax is in your head.  If you are rusty, it will take only a couple days to give yourself a refresher.
  • Occasionally look at references but the vast majority of your time is spent solving the real problem at hand.
  • Able to whiteboard in it during interviews. (i.e. fair game if listed in resume)
  • You’ve read and studied a substantial amount of source code that is known to be of high quality.
  • Can identify bad code and smells.
  • Can rattle off at least 5 people in the community whose work you study and respect.
  • Decent knowledge of runtime and performance.

Familiar

  • You are still hung up on syntax at this stage.  You spend substantial time looking at syntax references instead of solving the real problem at hand.
  • Don’t expect to whiteboard in it during interviews.
  • You can read and mostly understand the source code.
  • You can prepare simple bug fixes or patches.
  • Don’t know much about the ecosystem.
  • You cannot identify bad code and smells.
  • No clue where the community even hangs out.
  • You would be happy if your code compiled or worked at all. Runtime and performance considerations are the least of your concerns.

Not Familiar

  • You need someone to tell you if you qualify as being “familiar”.  😉
  • If someone showed you some source code in the language, you couldn’t even identify what language it is in (or you would have many doubts as to what it might be).

Leave a Reply