Learning to program at age 30: here's how I'm approaching it
After 12 years, I've finally found what I needed to take the plunge into programming. So as to help others like me who have been interested, but could never quite flesh it out, here's how I'm approaching it.
For the past 12 years of my life, I've been interested in the idea of programming. I tried to learn Visual Basic back when I was 18, but once I got to the point where I needed to actually write code, my brain said "screw this!" Since that time, I've tried off-and-on to learn various languages, only to fall short right about the time my brain severely rejects the very sight of cryptic writings. Well, thanks to the proliferation of mobile phones and the apps that fill them, I've finally found what I needed to overcome the hurdle that has always blocked my path: a real reason to program.
A few months ago, I turned to Twitter to ask what the best way(s) to go about learning to code might be. I received a bevy of comments ranging from helpful suggestions to crass, would-be witty responses (this is the Internet, isn't it?). From it all, I walked away understanding that I needed something more than just a general interest in programming. As such, I chose the landscape of mobile development -- specifically, iOS -- and doing so has really made a genuine difference in my approach to finally learning programming.
With that said, the rest of this article follows a checklist format. For every point I list, I will write what my personal approaches/thoughts are. Feel free to follow my lead, but above all, I hope it helps those of you who, like me, need something more to truly excite the coder you know has been buried deep down inside of you. The following aren't in order of importance, because they've all been integral for me, so I encourage utilization of all of them:
1 - Have a goal: Why do you really want to program? Do you have a specific application or game in mind? Also, what platform(s) do you envision it running on? For me, the epiphany came in the form of a game I've loved for years that I suddenly thought would be a huge success on the iPad. Bam, there's my idea. But carrying it even farther, what are more apps/games I would like to develop? Would it be worth my time, money, and energy to learn mobile development? Asking myself those questions left me with a smile on my face as I realized I had that excited feeling in my chest that you get when you're genuinely inspired to do something you know you'd love. This step alone truly has made all the difference.
2 - Pick a curriculum: Alright, so, now that you're all fired up and you have a goal, how will you go about learning? After plenty of research into the language and tools I would need to learn to develop iOS apps, I decided to begin my journey by learning the fundamentals of Objective-C via a book titled Objective-C Programming: The Big Nerd Ranch Guide. And, as it just so happens, about a month from now, a local community college of mine is holding a "Mobile Apps Development Summer Camp." It begins with iOS dev 1; then, iOS dev 2; then, mobile gaming dev 1; then, mobile gaming dev 2. There are also Android dev 1/2 and WinPhone dev 1/2, but I'm only interested in iOS. Between the book and the classes, I feel I'll have taken a solid step towards my goal of developing iOS apps!
3 - Monitor your brain: While reading the book I mentioned in the previous point, I've been keeping a text file open with which to take notes. Specifically, I have 3 sections: questions, notes, and thoughts. Under the "questions" section, I write down every single programming-related question that pops into my brain -- things like, "What does the 'f' in "printf" stand for?" Sometimes, I look up the answers immediately. Other times, I wait. For the "notes" section, I like to write down points I've read that I feel need mental reinforcement; however, instead of just copying the book word-for-word, I reword given points such that my brain has to really consider what they mean.
Lastly, for the "thoughts" section, I write down anything else that comes to mind: "This part of the book could have been written a little better," or, "Look up the word "flummoxed"," etc. I find that doing this "brain monitoring" really helps to get all the "stuff" OUT of my head so I can continue to focus on the material.
4 - Find a buddy: Sometimes, having a buddy to go through the exact same experience as you can make all the difference in the world. Maybe you have a friend, coworker, or family member who is interested in learning the same thing with you. Or, perhaps you found a community or forum full of people looking for others to learn with. Even better, why not look for meet-ups from meetup.com that you can attend? There's nothing quite like connecting and networking with real people within your community!
5 - Find some excellent resources: Basically, find Web sites and materials that will act as great resources for you through your journey. This is a subjective point, primarily due to the changes in what you will need in a resource at any given time through your coding. With that said, you can still begin to populate your favorites list with resources you can use now, as well as ones you identify as potentially being useful later.
6 - Find the experts: Throughout your research for resources, tools, languages, etc., be cognizant of names you either see multiple times or see people speak highly of. Seek those individuals out (Twitter, Facebook, Google+, their own personal Web sites, etc.) and follow them! The reason for this isn't just because of their expertise, but also because of how immersed they are in your field of study. That makes them excellent resources for news, tips, other valuable resources, and -- perhaps most importantly -- pitfalls/woes that are great to know. You know, there's the educational side of programming, and then there's the "real world" side of programming. Following the experts can help to give you a glimpse of the latter while you engage in the former.
7 - Don't forget cost: Luckily, it's quite inexpensive (if not completely free) to educate yourself these days; however, if you're serious about development, cost will inevitably become a factor at some point -- be it money, time, or otherwise. For me as an aspiring iOS developer, I luckily already had all the hardware I needed to get started: a fully-loaded 13" MacBook Air and an iPad 3. Xcode (Apple's IDE) comes with an iOS simulator (basically, an on-screen iPad/iPhone emulator), but since the iPad 3 has a display with the resolution that it does, looking at an iPad 3 simulated app on a 13" notebook is... well, less than optimal, let's just say. Anyway, the point here is to consider the costs associated with your education -- even if it means figuring out workarounds to compensate for a lack of time, funding, what have you.
8 - Never mind the naysayers: I'll tell you, as a society these days, we are absolutely bombarded with choice -- so much so, that it can be paralyzing. Additionally, the weight we place on reviews can be integral in our decision-making processes: you know, "Which book do I choose based on the best reviews," or, "Do I use this IDE or that IDE based on what people are saying?" Sometimes, you just have to pick something and stick with it -- be it a book, video, tool set, etc. If I listened to all the negative criticism surrounding Xcode, I would have never used it. Instead, I just decided to trust in the curriculum I've chosen (which includes the tools being used by those instructing me) and things have worked out great thus far!
Additionally, one thing I've heard from a number of developers is something to the effect of "Objective-C is a stupid, irrelevant language that's EXTREMELY difficult to learn. Have fun failing." Maybe so, but the way I chose to view it is that I'm a complete newbie to programming. As such, I have the advantage of ignorance, and so far, it's paying mental dividends to see it this way! Everyone on the Internet is a critic, so just take what you read with proper perspective and don't allow negativity to steer you off your course.
9 - Never too old; you've got time: YOU'RE NEVER TOO OLD!!! I feel this point is worth mentioning solely because it's something I've dealt with through the years when making career-based decisions. Our society is steeped in age-restrictive logic, but thankfully, such logic is increasingly being chipped away. Talent is talent, no matter your age or educational background. If you think you have it in you to be a talented programmer, then go for it! Time is on your side. Plus, if you're like me, you've essentially wasted what could have been 12 years of learning -- even if only bit-by-bit (no pun intended). In the words of one Tony Lucca, "It takes the time it takes to get it right."
And with that, I'll go ahead and bring this post to a close. While I've been selective about the bases I chose to cover herein, I feel they are amongst the most important for me, personally. Your mileage may vary, but overall, I really, truly hope that what I've written will serve as a solid foundation to give long-time aspiring programmers the push they need to actually get started this time. Good luck with your journey as a new programmer!
Are you an aspiring or experienced developer? Whichever the case may be, please feel free to share your stories, advice, and/or experiences in the comments below!