optimize / optimise
There are after-market optimizing compilers for (even) Node, Python and Java - a language is just a language, GC or not. People just tend to use them in the standard manner (interpreted, JIT or whatever). A compilation stage could simply be added to a devops pipeline, if only people trusted their near-to-non-existent testing these days (a-hem iOS and Android).
I programmed one of the world's first prototype cash machines. It only had 256 12-bit words of RAM in magnetic core storage. Out of that I had to handle screen i/o, cash dispensing and comms. Obviously it had fairly limited functionality and there were separate i/o processors and hardware controllers to handle stuff but it's amazing what skills we have lost. For example had to use self-modifying code to save memory, so the screen output routine was essentially the same as the the cash dispensing and serial output loops, with a few changed words in the middle as required.
As for the comment about C being close to Assembler, there was a language in-between those, called NEAT-3 which was like assembler but with variables, it was a fun way to learn about instructions, stacks and algorithms. Also you get millicode and microcode but those are different subjects.
You are not a real programmer unless you remember when an assembler multiplication of 200x5 could be made faster than 5x200. But then again I did once know a programmer who's idea of a program was a C header followed by 200 lines of un-commented assembler...