3 ms·
If you want to do embedded I would kind of agree(But C is low level enough), otherwise... I'm not so sure. Low level languages teach a lot of habits I don't l
by eternityforest 5y ago
If you want to do embedded I would kind of agree(But C is low level enough), otherwise... I'm not so sure.
Low level languages teach a lot of habits I don't like, and they don't teach as much about working in a modern high level environment on complex software.
Everyone should probably be vaguely competent with C, but I wouldn't call it a top priority.
If you're thinking about the underlying machine stuff when coding in Python, you're kind of just accepting leaky abstractions. If you're in the habit of first principles thinking, leaks seem normal.
C doesn't really seem to layer all that well. Whenever I code in C, I usually have to dig down to the SDK API level, and I wind up reading 10 other files to make a change in 1.
High level languages make it clear when something isn't DRY, or an abstraction leaks, or something isn't usable without modification. It's unusual, you notice right away, and you want to fix it because it obviously doesn't fit.
Low level languages make everything feel totally patched together. Encapsulation just isn't a big thing in most of it. It's almost like looking at an old point to point wired TV set compared to a rack of servers.
You might be able to write some amazing ASM code that feels as modern as some top notch Kotlin... but I'd call that an expert, not just a competent person.
And worst of all, the compiler can't catch many bugs. It's not like Rust. Or even Python. Low level languages don't teach the art of making sure that the computer has your back, the way Rust might. They normalize just entirely relying on your own skill, to the point where some C devs don't even seem to want the compiler to eliminate large classes of bugs for them.
High level languages teach a real appreciation of abstraction and safety, and standardization, that I don't feel like I really learned with C.
- mwattsun 5y agoI agree with everything you said here. I'm not saying we should stick to bare metal programming even if we aren't doing embedded. There may be a problem that could be solved easily with inline assembly or there may be a bug that can't be understood if the programmer doesn't understand what is going on at the CPU level. Assembler is a tool in my kit, but not everybody needs to use it. I like to understand my computer from top to bottom, but sticking to higher level abstractions is where I spend most of my time.