Lots of great advice above, just wanted to add my input as well .
Programming skills are usually split into two areas:
- Knowing the syntax
- Knowing the concept
I’d compare it to playing a board game and knowing the rules of the game (syntax), and knowing how to play the game well(concept). Its one thing to know how all the pieces and rules work in chess (or board game of your choice ) , its another to know specific tactics to play the game well. You could read the rules 500 times, understand everything about the game, and still lose to your friends, either due to bad tactics.
Programming is no different. You can study your cards to learn the language syntax, but it will only get you so far in “playing the game”. At the same time, programming is moderated by the computer, so if you try to do the wrong thing syntactically the computer will usually blow up in your face, or start acting funny. This could be due to your syntax, or due to mis-understandings of what your doing or a combination of both.
The fact you run into issues here and there is to be expected. Lets be serious, playing a board-game is vastly simpler then programming. There are infinite ways to do something, infinite ways to screw it up, and infinite ways to fix your screw ups, and infinite ways to not fix your screw ups haha. Programming is hard, but I believe anyone can do it.
I’d be careful with focusing on memorization when it comes to learning programming concepts and syntax. As I said before there are are basically infinite ways to do stuff when it comes to programming.
There is only finite syntax for a given language, so flash-cards can help you there except you don’t need to learn all the language syntax, and you always can look any unusual syntax up, or just play around with it.
Finally, I usually say that learning by doing is the best. Basically the more you program, the more issues, concepts, and solutions you will run into naturally as you solve problems while doing things. This will also force you to learn common concepts, solutions and solve common problems.
The issue with memorizing, and note taking is you don’t know whats important, and not important without context. Its one thing to try to digest, memorize and focus on everything thus far, its another to be able to run into a new problem, and find answers on the fly. If you run into the same problem 50 times, you will be damn sure you will remember how to solve/fix it. The same can’t be said for running into a problem 1 time and trying to memorize its “solution”.
PS. I’ve never taken notes, or tried to memorize anything programming related. At most I just try to keep up with changing trends, but at a surface level.
If I want to learn something, I try to use it and get to know it. If I run into new syntax, I read about it at that time and try to use it myself.
I build a lot of useless stuff just to get more practical practice in, as the best way to learn is to do.