2 ms·
As someone who learned MS BASIC 2.0 -> 6510/6502 assembler -> Pascal -> C -> etc, I know we'd be more immediately productive, but would we necessarily be "bette
by georgemcbay 12y ago
As someone who learned MS BASIC 2.0 -> 6510/6502 assembler -> Pascal -> C -> etc, I know we'd be more immediately productive, but would we necessarily be "better"?
I run into a fair amount of programmers these days who never worked with a non-garbage collected language, have never even seen an assembly language listing (let alone written code in assembly), etc who are generally productive but end up being really lost whenever whatever leaky abstraction their language/framework/etc is using inevitably breaks in some way and in this situation if the solution to their problem isn't immediately Google/StackOverflowable they are standing in front of a brick wall because they've never worked in a language or environment that wasn't abstractions upon abstractions over how computers actually work at a fundamental level.
I'm sure there is some amount of get-off-my-lawnism going on here and I know it isn't universal (there are still young kids writing real bare metal bit-banging code, especially in the maker/"IoT" space), but I think that while highly programmer-time-productive languages and frameworks are great we're still at a point where those skipping over the fundamentals the technology is built on do so at their own peril in terms of how effective they can be when things don't go as planned (and in software things rarely go as planned).
- notduncansmith 12y ago> writing real bare metal bit-banging code Well, there are plenty of microcontrollers running on Javascript/Ruby/etc, so if people are still writing "real" code, it won't be for long.
- georgemcbay 12y agoJust to clarify, the "real" I used was a qualifier for the bare metal code description. I'm not suggesting JS/Ruby/whatever code isn't "real" code, but it is pretty common to see people talk about some JS/Ruby/etc code being "bare metal", totally abusing the classic meaning of the term. Examples (just a couple out of many dozens I've seen over the past few years): http://video.kiberpipa.org/jsmeet_slavic_performance_optimizing/ http://video.kiberpipa.org/jsmeet_slavic_performance_optimiz... http://www.hyperscala.org/ http://www.hyperscala.org/ Efficient JavaScript is great! But it isn't bare metal programming. Also people will be writing low-level C/asm code on small devices for quite a long time yet. While it is great that you can get small "IoT"-style devices with the power to run a JavaScript interpreter, such SoCs are still really expensive by "chip whose cost must be factored into every device manufactured" standards.
- Retra 12y agoComputers are themselves abstractions upon abstractions. How many levels of cache does a modern computer have? How many memory protection layers exist between your code and the machine? Hardware keeps getting more complex and it becomes obsolete quickly. It's hard to teach this stuff to beginners because it will probably be useless by the time the get good enough at programming to do anything. Add to that the fact that there are probably 15,000 different platforms all doing the same things in subtly different ways . PS: 'subtly' is a horrible word.