Hacker News new | ask | show | jobs
by eliben 4695 days ago
Programming languages are just one subset of tools used by programmers. Therefore, simply counting how many languages one knows is simplistic. It's not incidental that high-rated CS curricula don't spent most of the courses teaching new programming languages.

I know amazing polyglot programmers who just know 3-4 languages.

3 comments

I agree. I would place much more emphasis on high-level mathematics, algorithms and data structures.

I believe mastering two languages with complementary strengths would be far preferable to just syntactically learning a bunch of languages.

Stated another way, I believe if someone can program at an expert level in one lisp, they probably don't need to insist on learning more of them.

If you progress to "merely adequate" in a smorgasbord of languages but all you can do is churn out CRUD apps but couldn't implement basic algorithms for a search engine you've plateaued.

I agree that simply "counting" is a useless metric. I believe what's useful is exposure to different ways of thinking about programming and problem solving. In my personal experience, exposure to imperative, functional, logic, actor, and meta-programming have all enabled me to learn more about problem solving and to think about programming at a higher level. Can you gain exposure to all of those concepts, and more, in just 3 or 4 languages? Absolutely. Does the potential for learning and growing as a programmer end there? I'd hope not!

As a related note, learning new syntax is by far the least useful aspect of learning a new language. Coincidentally, it's also the easiest element to pick up and takes little time at all. Incorporating new paradigms into your way of thinking takes far longer.

I was lucky enough at UW when I was an undergrad for our PL course to be of the buffet variety: LISP, ML, Prolog, Smalltalk. These days, most PL courses tend to focus on PL semantics, while we were taught the languages in the environments and contexts that they were meant to be used in (quite important for Smalltalk, but even for LISP).

I've also designed and implemented a few procedural, object-oriented, data-flow declarative, and logic meta-programming languages over the years. It is quite easy to get carried away with any of these paradigms, which is why I try to ground myself to working mostly with procedural imperative languages with aspects of other paradigms sprinkled in.

I couldn't agree more. I've encountered many "programmers" that know a wide range of languages, but once you begin to delve deeper you realize that its a matter of quality over quantity. "Jack of all trades, master of none."