Essential Software:
Ubuntu 11.10 (dual boot not virtual machine, it's too slow)
Eclipse IDE with the Android plugins
Meld (for easy directory compares)
Mastery of the terminal especially git / repo commands
Github account
CyanogenMod gerrit account
Google Plus account
I'm assuming you're coming from Windows since you don't know what a .so file is (like I did when starting). .so files are android's versions of .dll files. 'executables' don't have a file extension. Kernel modules use the .ko extension.
(I think .so means shared object, .ko means kernel object. Makes sense to me anyway

)
The worst thing about starting is simply the sheer size of the project, it is a
whole operating system we are dealing with here!
Start simple and easy, follow the instructions on how to make your own build and flash it. (and feel proud you have your own build string in about phone!) Then do it again without the instructions. (harder than it sounds

)
The programming side may not be such a problem for you if you already know it. I didn't know anything. reading library files written in c++ ain't so bad, but getting used to how an android app is written in java was a huge mindf**k for me at first.It still is actually
I'm really just your average code hacker, I just hack based on educated guesses but I have taken copious notes on what I do and how things work. Seriously, I have two A5 notebooks full of lists, commands, file locations, diagrams and other tips I've found over the past 6 months.
Prepare to read a lot, be confused a lot, say WTF?!?!?! a lot, delighted when you make your first changes and they work, a ton of waiting for builds to finish and perhaps a bit nervous when you are ready to submit your first commit to CyanogenMod...