11

I am beginner to Python and I really like it so far. One question that comes to my mind very often is if I need to understand and therefore learn the Internals of a programming language (as in my case Python). As you might know, Python itself is written in C.

So my question is: How deep do have to dive into a programming language to be proficient or fluent in this language. I compare this question to "natural" languages. I don't know every detail in grammar in my mother language but I am able to express myself with no problems in that language. This is when I say I am fluent in a language. Does that apply to programming languages too?

8
  • 4
    Internals become important when you have to worry about performance. Aug 8, 2013 at 19:47
  • 7
    I know a fair bit about CPython and PyPy internals, but 80% of the time they are of no use (or even harmful, as in distracting) for my Python programming. I'm glad I know that stuff the other 20% though, and it's not just for performance, also for understanding stupid error messages and steering clear of non-portable behaviour.
    – user7043
    Aug 8, 2013 at 20:23
  • 1
  • 2
    Nope and nope. Definitely not a duplicate of either of those.
    – user39685
    Aug 8, 2013 at 21:48
  • 1
    It depends what you mean by "the internals," but I know that it's not uncommon at all for professional C# and Java programmers to have at least some understanding of the CLI or JVM.
    – user16764
    Aug 8, 2013 at 22:19

3 Answers 3

8

You don't need to know anything about the internals of a programming language, in order to write programs in that language. However, the better you understand the language, the better your programs are going to be.

  1. Knowledge of data structures and algorithms will help you choose the data structures that are most appropriate for your particular task. Some languages possess these data structures internally.

  2. Understanding the "culture" of the language helps you write programs that follow "best practices," making them easier to understand, more maintainable, and better performing.

  3. Writing a compiler for that language (or a compiler for another language in that language) can give you a deep understanding of the language, and improve your programs beyond being merely average.

  4. Being proficient in other languages (especially those of a different paradigm) makes you a better programmer in your primary language, because you can bring those skills and tools to bear in your primary language.

As a corollary, you don't need to know anything about your computer to write programs on it. But knowing how your computer works makes you better at writing programs for it.

7

I don't know every detail in grammar in my mother language but I am able to express myself with no problems in that language. This is when I say I am fluent in a language. Does that apply to programming languages too?

Simply put, yes. As long as you can express yourself (and understand others) well, then you are considered fluent in the language.

That said, simply being fluent isn't enough for some jobs. Certain sorts of authors, jobs that require exemplary public speaking skills and some academics that focus on the language need to know it "better than fluent". Likewise, some programmer specialties require knowledge of the language internals, but for most people knowing the programming language equivalent of how to ask for her number or order a cheeseburger is sufficient.

0

I'd define "proficient" with a language as:

  • Understand the majority of the syntax, and sufficient knowledge to research any new features you find in other people's code.
  • Working knowledge of any standard libraries and/or frameworks, and the ability to find, read, and understand official documentation on anything new you need to use.
  • Understanding of and ability to use common idioms and naming conventions for the language.

Notice that how the language works is not on this list, but there is a great deal of "ability to learn". Having at least a cursory understanding of the internals can be helpful, but is not necessary to be proficient. However, knowing enough about them that you will be able to understand any references in the documentation you're reading is a very good idea.

For example: I know that both VB.NET and C# is compiled to .NET's IL (Intermediate Language), which is then compiled for the target framework. I don't know much about IL, but I know enough to recognize it when I see it, and understand in a general sense how it handles certain things. I consider myself proficient in C#, but not in VB.NET, even though the "internals" are the same, and my understanding of them is not deep.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.