There’s something weird that goes on in my head when I think about programming (or “hacking”, to use one definition of the word). It’s as if as soon as I think about something I want to achieve (a “goal”), I see it happening, and simultaneously, as if in a split-screen, I see the code needed to accomplish it. My brain just “shifts” from the world of abstract ideas into the world of concrete code (minus a few details here and there).
I find this interesting because it’s also the way I learn a new language. For example, when I learned C++, I learned the basics of the language in a class (for the most part). But I really learned how C++ worked when I was watching a program through a debugger, literally tracing each line of code as it executed, following its effects on the “face” or visual aspect of the application, or on the file system, or on a database. The same thing goes for VB… I watched code through the debugger, I traced other people’s sample applications, following instructions and taking note of properties & methods. After a while, these properties & methods became second nature to me – I don’t have to spend a lot of time looking up properties or samples in any manual or anything. I just know them.
Today I spent a LOT of time messing around with CSS, or cascading style sheets – a very, very useful thing to know for web design these days. Frankly, my web sites are crap compared to what they could be if I were better with CSS. But anyway: I was messing around with CSS today; copying bits of code from other websites that had “features” that I wanted, then modifying every property of these features to see what effect it had “visually” on the page I was working on. Through this “tweaking” process, I came to know CSS by heart. I started the day flipping through several very good guidebooks to CSS; by the end of the day I was freely modifying my CSS file without referencing the guides at all (well, almost). And the best part is, the page I was working on (a new web site for work) turned out great. When it’s done and published publicly, I’ll let you know where to find it.
So, that’s my reflection on my “hacking” technique… basically just “fiddling” or “tweaking” something that already works until I know all about it, and then I can build something just like it, and then change it completely to suit my needs. I personally think this is the only way to learn… at least as far as some things are concerned… mostly skills, like languages (computer or otherwise) or technical skills (mechanic, carpenter, etc). So, if you find yourself needing to learn something new… give my method a try. Maybe you’ll surprise yourself when you pick up a new skill really quickly.