| One of the things that I find really hard to do is to figure out where to start. I started programming when I was 8 years old, in BASIC, on a Vic-20. We were too poor to buy many games, but I discovered somehow that the public library had books that had game source code printed in the back. I learned how to type so that I could get free games quicker. Then I started understanding how the games actually worked and figured out how to change the code to cheat. Then... started making my own from scratch. A couple years later I got a C compiler (Mix C) that came with a fantastic reference manual. This was on the family’s shared XT, so I started optimizing my computer time by writing code on paper and then typing it in when it was my turn. I started figuring out how to debug on paper too, so as to further optimize my computer time. Then when I was around 12 we got a Pentium 1. Windows 95! This was really cool, but the C compilers for Win95 were either expensive or extremely hard to use (GDI in DJGPP? Yeesh). But I heard about this thing called Linux, and downloaded just enough Slackware packages to get going. From there, learned Perl, made money through high school doing web development, and started a CS/EE dual degree in 2002. Anyway, that’s the long prelude to the problem: employees that work for my clients often enough ask me “how can I get better at Linux and lower-level software development?” I have no frickin’ clue what to tell them. I know the path that worked for me, but that path started a decade before I took my first university course. There’s this huge deep well of experience that I didn’t learn for the sake of learning, but rather because somewhere along the way it solved a problem for me. Easy example: debugging something weird in giant source trees (eg the Linux kernel). “How did you figure that out?” “Well, I used find and grep to figure out all of the files that referenced that constant, and looked through each one of them to figure out which one we were actually calling.” “What do you mean when you say ‘find’? And what’s ‘grep’?” It’s like that joke about “to make an apple pie from scratch, you must first create the universe”. I have absolutely no clue how to figure out how much of a universe a reader might have, and I’m almost certain I’m going to be making a bunch of incorrect assumptions about “common background knowledge” that will just further bewilder the reader. |