What I cannot create, I do not understand.
- Richard Feyman
Learning programming is like learning to do parkour, you are not going to learn how to do parkour by reading a book, you have to stamp yourself on the floor.
- Understand the problem
- Do your own research, it's an incredibly useful skill which can be applied to and can be applied to anything.
- Implementation
- Take the language you're most familiar with to start your project. If the problem is way too easy, pick a language you've never used.
- Test
- Write test cases for your program. Get used to thinking about how you can break your software.
- Re-Implement
- Now that you have something together with lots of documentation and experience, try a different language and try to match it as closely as possible.
- Don't stop learning
- Now that you've gotten this far, don't stop trying to challenge yourself. Keep a portfolio and keep adding to it.
- Resources:
- Wikipedia, Stack Overflow, Google.
- Literature
- Knuth: The Art of Computer Programming
- Sierna: The Algorithm Design Manual
- Carmen et al: Introduction to Algorithms
- Russel: Artificial Intellingece: A Modern Approach