This is a fascinating book, and although its main focus is on designing software as a team, it has a lot of useful information for any software design process. When you start your program, it is not at all unusual to find out that you don't know how to program everything you want to do. If you're porting your program from the Mac to Windows, you need to learn how to code Windows. If you write a utility, you may need to learn how to create and write to a file. Starting a game may result in a sudden need to learn sound and graphics programming.
Programming is a constant learning process.
The environments you work in are constantly evolving, and you will constantly need to acquire new skills. When you need to learn a new programming skill, the first and best place to go to is probably a book. Whenever you need to learn anything about programming, either basic or obscure, go shopping at every decent sized bookstore you can find. Borders', I have found, often have excellent programming sections. When you find books on the subject you're interested in, look through them all.