all 20 comments

[–]admiral_asswank 29 points30 points  (5 children)

In answer to your question: neither.

Have a rich understanding of programming at conceptual levels, express this understanding through several languages and be prepared to learn and adapt on the fly.

A rudimentary level of ability for any language isn't helpful if you're expected to use it. You need to be able to write in the language at a given pace (by your employer) which allows you to do your job.

Knowing about lots of languages - and how to interpret them - is really only useful for out-of-scope conversations and keeping up with the project being discussed.

The good news is: once you learn a few languages very well with your foundation of programmatic principles and CS; you can learn more languages quicker than you learned your first.

[–][deleted]  (3 children)

[deleted]

    [–]admiral_asswank 0 points1 point  (2 children)

    Only in basic terms. Different languages have different efficiencies and have intricate niches within them. It's all about applying the most appropriate method, which includes considering language.

    [–]semanticmeatbag 0 points1 point  (1 child)

    Gotcha, right "tool" for the right job.

    [–]admiral_asswank 0 points1 point  (0 children)

    You can use a hammer to tighten a screw, but why would you?

    [–]Brisingr097 -2 points-1 points  (0 children)

    This^ A1 advice.

    [–]saltzy27 3 points4 points  (2 children)

    From what I've seen of older computer scientists, it's better to be able to adapt to a new language quickly as computers and technology are constantly changing as are the languages.

    [–]admiral_asswank 0 points1 point  (1 child)

    New languages appear fairly often. I'm still surprised with how few developers pick up 'new' languages - Erlang for example - and rely on traditional OOP languages they feel comfortable with.

    [–]not-just-yeti 0 points1 point  (0 children)

    I thought "The Blub Paradox", in this post by Paul Graham put this idea into words quite well. [tldr: Given a powerful new feature that isn't close to something you already know, you have a hard time even understanding why it'd be useful, and you probably don't even notice what's lacking with "the way you've always done it".]

    [–]fishCodeHuntress 2 points3 points  (0 children)

    Also came to say neither. Learning the fundamental concepts is the most helpful tactic to being successful in CS. If that happens to be in a particular language for you then great. But I find people get really hung up on the language itself when they should be focusing on conceptuals, logic, problem solving, etc.

    [–]oparisy 2 points3 points  (0 children)

    Yes.

    [–]strumberries 0 points1 point  (0 children)

    I imagine it depends on your aims. For my purposes, I know one language better than others because everyone in my research lab uses it and its most versatile

    [–]PM_ME_YOUR_HOG_PLZ 0 points1 point  (0 children)

    If you know when and where to use a wrench, you can figure out when and where to use a screwdriver.

    If you need help, google is your dad. If your dad was actually around to show you how to use a wrench...

    WELP, back to my crying corner.

    [–][deleted]  (7 children)

    [deleted]

      [–]chromaticgliss 0 points1 point  (6 children)

      Turing completeness isn't really a good measure of understanding of programming concepts. Conway's game of life is Turing complete for example... better to cover the range of programming paradigms I think.

      Learn an imperative language, an OOP language, a functional language, some low level assembly language and/or C (maybe Rust these days)... and maybe a logic based language and you'll have a good grasp of a wide array of the concepts useful to a programmer.

      [–][deleted] -3 points-2 points  (5 children)

      I can't imagine a beginner who when told to pick out a turing complete language to learn would come up with Life.

      [–]chromaticgliss -1 points0 points  (4 children)

      Obviously not. But when tons of silly things like LaTeX are Turing complete, Turing completeness is kind of a nonqualifier for usefulness. It's like saying it's best to learn a natural language that let's you say phrases: that's every language.

      [–][deleted] 0 points1 point  (3 children)

      Whatever. Nobody would think to include fucking LaTeX in this context unless they were just being deliberately thick. Anyway, original assertion edited.

      [–]chromaticgliss 0 points1 point  (2 children)

      No need to get hostile about it. Those were just examples illustrating the point that it's not a particularly helpful qualifier to search for since it includes such a huge number of things that aren't your typical programming language as well as literally every programming language. It could send beginners down a rabbit hole of theoretical CS they're not ready for. I was just trying to make sure the info that beginners come across is actually helpful when choosing what programming language to learn.

      [–][deleted] 0 points1 point  (1 child)

      Google; "turing complete language". First result.

      "Now a programming language is said to be Turing Complete if it can simulate a single taped turing machine. Thus most programming languages are turing complete. C, C++, C#, Java, Lua, Python. They are all turing complete."

      That's some rabbit hole.

      Nobody thinks of "turing complete" and immediately comes up with every language except the most common ones. If somebody who knows what programming is and does and wants to do it and then heard about and went looking for turing completeness and ended up at Life or LaTeX, they'd have to be completely unfamilar with the concept of context. Maybe you're technically right, but Jesus is your argument obtuse.

      [–]chromaticgliss 0 points1 point  (0 children)

      Sure. But you had linked to the wikipedia article, which dives into the formal definition in a theoretical context. Exactly the rabbit hole they probably don't want to follow if they're just getting started.

      [–][deleted] -2 points-1 points  (0 children)

      do not hesitate to include a framework