Research, tons and tons of stuff on google.
^ This.
There is no single how-to on ROM building. Honestly the best way to learn is to just start messing with stuff. Figure out what works, what doesn't work, and why. A vast majority of my knowledge has been based on trial-and-error, and scouring the web for relevant information. It also helps to have fantastic teammates
With that said: before just jumping in, you should get a good grasp on the general concept of Operating Systems and how they work. You'll also need intimate knowledge of the Linux terminal, because Windows is not the best OS to be building ROMs on.
1) Learn the basics of creating themes (UOT kitchen does NOT count). This will be a major help in the long run when you start hacking away at system apps and frameworks.
2) Learn how to configure and compile a kernel. This will help get your command-line/terminal skills up to snuff.
3) (optional) Learn how to configure and compile CM7 from source. While optional, this is also a good way to increase your terminal skills.
4) Learn the basics of building ROMs using manufacturer-provided software. This includes deodexing, zipaligning, and creating the initial install script.
5) Learn how to modify system APKs and frameworks. This is probably the most difficult thing to learn especially if you aren't comfortable with the command-line/terminal, but it's also the most important.