3
tueor
5y

Is learning a low level langauge essential for understanding high level stuff?

Say I'm using Python/some framework in it(for data science/machine learning), I don't see how knowing C would help me do it better. A lot of results on "benefits of learning C" argue that it helps understand/use high level stuff better.

Comments
  • 4
    Needless to say, knowing low level languages is beneficial, the speed, embedded programming, most of the high level stuff is made with it, etc but I don't get this argument.
  • 4
    in my opinion knowledge of a language in general has become less relevant compared to knowledge of frameworks, design patterns, software components, testing methodologies etc...
  • 2
    @deviloper Yeah I feel likewise, those are the things you end up using at the end, this widespread opinion confuses me, I'm still learning low level stuff because of the things I mentioned before + I hope this opinion starts to make sense.
  • 7
    Imo having to code low-level stuff, especially in environments with limited memory, make you appreciate the technology better and not waste resources in higher level code.

    But it's not necessary, depends on what you're doing and how you're doing it. My friend was optimising SQL queries in his former workplace - that's not programming but the person who made them clearly didn't think nor test, it was sooo slow (huge database, many joins). He made some of them hundreds times faster - he made some over a minute queries <1sec, and I think he mentioned some hugeass report query that originally took like half an hour and he cut it to a few minutes.
  • 4
    @deviloper Frameworks do not grow outside. Someone has to implement all that (with some language).

    I'd rather be the one knowing my language and making a framework, than the one just learning to use it with all that knowledge useless if the framework is deprecated.

    And you have to know your languag anyway, even if your using a framework. You will always have to implement most of your business logic by yourself.
  • 5
    I my personal experience, learning C first gave me a much deeper understanding of how computers and their languages work than I would probably have gotten had my first applications been developed in JavaScript. By the time I got into JavaScript, I already had a foundational knowledge of how memory addressing, pointers, arrays, and such things worked behind the scenes. I think it really helped me.

    On the other hand, I learned Assembler and, while it did give me a better understanding of logic gates and low-level computer functionality, I don't really think it made me a better programmer.

    Will learning lower-level languages give you a better understanding of how the machine processes your instructions? Probably. Will it make you a better programmer? Maybe not.
  • 2
    If you were using Python, say, you'll get much better mileage from your time just getting better at Python than learning C hoping it will improve your skills.

    Where would it end? Assembly? Direct machine code?

    One of my pet peeves is when a lecturer spends 20 mins showing you the old way and then says, "...but now all we have to do is this."

    I don't appreciate an impromptu history lesson.
  • 1
    @haze Thanks, that's a great example, I'll keep it in mind.
  • 3
    I wouldn't say that learning C will help you to be a better Python programmer.
    I would go a few levels further down: Knowing about how a CPU works, what it is all about with cache sizes and memory access, and so on, so that you have an understanding why your performance suddenly drops down a magnitude or two and how to solve that problem.
  • 2
    @ddephor m8 i rel8 8/8
    There's a new version of tensorflow every month, makes me want to not learn it because whatever I learn will be rendered obsolete within a few months. Then again, its a collaborative effort of the best minds in the field, is it even possible for a single person to be able to build something that can be on par with that framework in terms of features and logic? I guess its best to hop between huge gaps of versions.
  • 3
    @platypus guess I'll have to grab my screwdriver and transfer values between registers manually
  • 1
    @TobiSGD Yeah I'm studying Computer System Architecture too. At this point I feel so lost XD maths, low level language, CSA, high level language, etc, I guess I just have to keep at it, there's no path to clarity, learn a bit here and there, and slowly things start connecting and becoming more clear.
  • 2
    @ddephor right, but languages to me are pretty much the same. When you know how to program in one language, you can learn pretty fast another one.
    So I wouldn't learn C or Assembler to understand better a Python application...

    Said that, probably having experience with a language like C, makes you understand better how computers works in general.

    Anyway. I fucking hate frameworks. There is nothing like the pleasure of coding low-level stuff :-D
  • 0
    Yes, it is. Hi-level stuff has everything cooked and baked for the job. You just have to use those smart tools.

    However, do you really know which ones are best for the job? When do you use list vs a set? What structure do you use to check whether a value can be found in a collection? Why does it matter whether it's by-value or by-ref? Wtf is COW and why do you need it? When is a list better than array and when is it not?

    See, hi-level does many things for you. But to understand how do these things work, which ones are better for the job and what to do when they do not work good enough you need to dive deeper.

    Low-level gives you only basic tools. Using them you build more advanced ones, learn algorythms, learb how they actualy work and which scenarios are they best in.

    In lo-level you learn how os works, how to tickle it to make your app work better, why does a jvm need to stop the world to collect garbage, why is fetching a stack trace a slow procedure, etc.

    Even better, multithreading/multiprocessing in low level teaches you tricks and tips you can apply on higher levels, on architectures and designs.

    So yeah, you need low level to understand hi-level better
  • 1
    My take on this is that working with a lower level language makes you better at understanding your machine and faster at debugging. Wether you see it or not, new languages still use pointers, understanding those in memory lets you know exactly whats happening with your code and data. And whether you know or not again, all languages still use the instruction pointer, and a call stack in the CPU, registers... All the good stuff. Now that really helps you know exactly what is going on down at the metal. It makes everything even more predictable and you are a better programmer and debugger for it. Is it necessary? No. Is it fun? Kinda, if you like to tinker. Is it beneficial? Definitely, its like fixing a car engine with or without the knowledge of what each thing does. You're gonna fix the car no matter what with enough experience, but by knowing the metal better you can fix it faster and more reliably.
Add Comment