Thursday, February 26, 2015

Why is it so hard to learn programming?

For my inaugural post I'm going to talk about one of the many things I suck at, programming. It's been the bane of my existence since I first decided Security is what I wanted to do with my life. I'm currently taking a Python course on Coursera through the University of Michigan. Shoutout to Dr. Chuck because I think i'm finally starting to understand what this stuff is all about. This post is a copypasta of an extra credit essay assignment but I thought someone somewhere might be struggling with the same issue and find my musings helpful. 


I am a living, breathing example of "How Not to Learn Programming." I have tried, and failed, to learn Python on at least 7 different occasions. What follows is an introspective look on why I have yet to conquer this particular beast. I hope this will help others who share my struggle with coding. I've narrowed these issue to four categories; denial, context, opportunity and human nature.

I've done an amazing job at convincing myself that my brain is simply not wired for coding. What better way to avoid doing what's hard than to convince yourself you simply do not have what it takes? I can't fight my DNA so why try? This is, of course, a cop out but it's a convenient one. I betrayed one of my own core principles; everyone is teachable, it's the methods that vary. You need to find your own best practices and train in a way that keeps you engaged. If you don't enjoy reading page after page of a hotwo book or can't focus in an online environment, instructor led may be the fix for you.

The second hurdle to learning program is context. Why are you learning programming? What real world/career problems are you trying to solve with programming? My personal context is the need to code within the Information Security sphere. This is a daunting task when all of the classes/tutorials are geared towards software developers. Simply put, I don't need a shopping cart, I need a port scan. 

I think this has a lot to do with Information Security's evolution. Information Security is such a new discipline and it is hard to teach something like Python geared specifically toward security when such a broad baseline knowledge is required. The key is identifying the problems you're trying to solve and plan your own personal curriculum around those problems. You will feel more accomplished when you make strides towards a goal that effects your personal bottom line. 

Another roadblock to a successful coding campaign is opportunity. When one is breaking into the Security industry, one has to be a generalist. This means being torn in a million different directions to learn a million different things just to get your foot in the door. I can't very well code for Security if I don't know the fundamentals. You need to prioritize your time and realize that the human brain is, by design, incapable of multitasking. We only have a single processor between our ears and everything else is just a distraction. Focus is made all the more illusive if you have a real passion for the work you're doing because it's all so incredibly interesting. 

The last factor in the difficulty of learning to code is simply human nature. I have notoriously poor impulse control with a multitude of bad habits to show for it. Falling asleep watching Scrubs reruns is a hell of a lot more satisfying to my baser instincts than staring at a simple "if" statement that has been defeating me for thirty minutes.  Habit is a very powerful motivator and an even more powerful roadblock. The trick is to be cognizant of your own bad habits and take steps to modify them accordingly. On this note, I recommend the book "The Power of Habit" by Charles Duhigg. It really struck a chord with me and helped me to course correct some pretty destructive habits. 

In conclusion, there are many reasons why learning to code can be a daunting task. Whether it's self delusion, time management, unclear goals or just a set of bad habits, introspection and remediation are the keys to getting back on the correct path. I'm finally making progress and I'm the worst at all of those things.  It there's hope for me, there is hope for everyone.

*Addendum to my original essay since that was capped at 600 words: Another huge key in my current success's is the willingness of my peers to help me out when I'm stuck. My current concentrated effort would have never gotten off the ground floor without Chris Sandulow, you should check out his GitHub because he's pretty much a genius. The infinite patience he's shown at my noob questions is mind boggling. My point here is, find and build a support system of your peers to help you through those rough patches. Not everyone is a great teacher but when you do find someone as ready and willing to help as Chris is with me, it truly will make all the difference. 

No comments:

Post a Comment