I remember in 1999 thinking "Damn! The world's moved on to Java and I'm still writing in C! I won't last much longer..." Then I got a job writing C code for those wireless credit card doohickies (a nasty mess of Z80s with crazy paging schemes to access 2mb of memory, but I digress). A few years later I actually started working in Java and Python, and then iPhone came along and I was right back in C land again! Then i…
Perhaps a biased view but fter teaching students from colleges I feel that most who are "born in the high level" world float comfortably without needing to understand fundamentals (memory, OS interfaces, arch, drivers, crashes, ..). As soon as something basic goes down or when you have unexpected dives into low level stuff, the fair weather pilots are suddenly out of their depth. I started with C, eventually moved in…
I still remember a colleague complaining to me in 2001 about a crash they were having in the data entry app (written in Java) that was wreaking havoc in the bank's check clearing department. The stack trace would go to JNI, into a vendor's .so and then SIGSEGV with an address of 0. The trouble was, nobody knew anything below Java.
I tracked down the issue after examining the crash report over lunch for shits and giggles. It failed in memcpy because it was trying to copy a null pointer. I disassembled the vendor's .so and checked the offsets to see where the code was going, and it turned out that the fingerprint reader code would return a null if it failed to scan properly (and the library had no null check). The vendor refused to fix it, so I patched the .so with a few nops, an xor and a je to work around it.
Everyone looked at me like I was some kind of god who commanded the very chips themselves.
Once the old guard is gone, I wonder what they'll do...