Becoming better at nearly any craft, normally involves lots of both studying and practice. A pianist will always both study music and practice musicality. A chess player will both study the game of chess and actively practice as well. For software engineers, the logic remains the same. We should always be both practicing and studying the most effective programming paradigms. So this leads us to the question. "How do we both study, and deliberately practice?" Hopefully this post will help us uncover some of the mysteries involved, as it relates to programming.
If you're reading this post, I'm sure you're already familiar with how to study. So let's ask ourselves, what is deliberate practice? One could define deliberate practice as, actively and accurately, engaging in a said craft by doing. Once a musician studies a specific genre, he/she can then physically practice that area of musicality, and once a chess player becomes familiar with the game of chess, one could then practice it. Once again, the same logic applies to programmers.
I've found one of the best ways to deliberately practice as a programmer is by both studying, and then doing. One could dig a lot deeper inside of both of these areas, but let's keep it more concise for time sake. Consider arrays, case/switch, and the binary search algorithm for example. Without studying or reading over arrays (studying), it would be hard for a person to know when and where to use its logic. One could easily be creating a ton of extra variables when a simple array would suffice, but if that person never studied arrays first it would be difficult to even know where to start in regards to arrays. If that same person only used if statements and never studied case/switch, he/she could potentially run into a situation that strongly suggest case/switch, versus 150 back to back if statements. Or, if one never learned to use the binary search algorithms, he/she could potentially find a situation that requires searching huge numerical data, and only iterating over one number at a time until the number is found. While the former of these examples could work, it lacks efficiency in most cases.
Let's also be careful on the advice that we receive while asking, "how do I become a better programmer". Everyone's situation is different and what works for someone else may not work for you given your situation. The response I've heard people give most of the time was, "to get better a programming, just program". This could not be any wronger. I would not tell a pianist, just play the piano, or tell chess player to just play chess. I also would not tell a boxer to just get in the ring and box. In the boxer's case, that bad advice would only get him hurt. He needs to learn and practice his jab, his right and left hooks, his uppercuts, stamina, etc... He can't just get in the ring and box without first learning and actively practicing boxing, outside of a direct competing event. Could one not "just program", and do an ill efficient job at it? Of course he/she can. Our earlier examples about searching one number at a time, would be the perfect case. If that person asked how to get better at programming, and we replied, just program, how would this help him in any way? This would probably not help much.
My more specific advice on this matter would be to first ask that person, what it is that he/she specifically do or want to do as a programmer, and then cater my answer towards that person. My answer in regards to the foregoing logical context of this post, would be to study by reading well coveted software engineering books, and doing every quiz/project, and involvement, until you have a solid understanding of the programming methodologies taught in that book. I would then say to apply that logic to whatever study method they are using, books, online tutorials, videos, etc... Doing this would allow them to first study (learn it), and then do it, by practicing it with the practice questions. Afterwards, one could then practice a lot further, through building personal projects. Some might prefer to build personal projects first, It's more of a matter of preference.
No comments:
Post a Comment