Teaching Yourself How to Code

I have worked as a software developer for almost a year now.  Since I have started, some of my friends have approached me saying that they have ideas for applications and want to learn programing as quickly as possible so they can get started with them.  In the past I would point them to a specific Udemy course or Codecademy so that they can learn the basics, but I never stressed to them the importance of self-education and how they can accomplish teaching themselves new languages and technologies.  But why is self-education important?  I would say the best reason is that employers like to see candidates who can learn on their own because they require less training and can be trusted to keep their skills up to spec as technology progresses.  But how do you get to this point? Step 1: Pick a Programming Language to Learn and Stick to that One Language I am not saying you should never learn more than one language (in fact, not doing so would be career suicide), but when you are first starting out you need to learn the basics.  Most Object-Oriented Programming (OOP) languages share fundamental features such as inheritance, polymorphism, composition, and encapsulation.  Once you have mastered the fundamentals, learning a new language is mostly getting used to writing in another syntax. Step 2: Consult the Official Documentation of the Language You Chose I get it.  Documentation tends to be dryer than your dad’s sense of humor, but it’s a great tool to have as a reference.  At the very least, you should consult the documentation for instructions on how to get the programming language installed and setup on your operating system (assuming it is not on there already). Step 3: Subscribe to or Purchase an Online Course If you are like me, you are a visual learner, and coding along with a virtual instructor allows you to see how and why your code does (or does not) work. There are some resources that you can consult free of charge (Youtube has plenty of videos for all mainstream languages) but I am a huge believer in “you get what you pay for”.  Udemy is good for this because they offer courses at a discount during their sales, some of which allow you to message the instructor if you are stuck. Step 4: Build Small Apps and Work Your Way Up If you are familiar with Dave Ramsey’s debt snowball methodology, you likely know that he advises people to get out of debt by having them pay off in order from smallest to largest.  His reasoning for doing this is that people get a thrill when they rid themselves of another lender, and the excitement gets them pumped to pay the next debt in line.  I find this approach works well for me in programming too.  I started out learning Python by programming small projects (like a text-based calorie counter), and then worked my way up to larger endeavors. Step 5: Look for Beginner Questions on Forums and See if You Can Answer Them This is a great way to test your knowledge or do the necessary research to solve the problem.  John Sonmez (former CEO of Simple Programmer) says in his book “Soft Skills: The Software Developer’s Life Manual” that teaching others what you have learned is a great way to master what you are studying because “..It’s a process that will cause you to really dissect and understand the topic you’re learning about in your own mind as you organize the information in a way that will make it understandable to others” (Sonmez, 2015). Step 6: Find a Way to Automate Your Daily Rituals Do you have a grueling task in your life that you could make easier, if only slightly? One thing I hated doing while working out was writing down how many pushups and pullups I could do for each set on a pad and paper.  My handwriting sucked, it was hard to see progress when flipping past pages, and sometimes pages would rip and I would lose a whole day’s record.  Surely there must be a better way. Enter the Pushup/Pullup program, a console Python application that would check the day of the week, give you a specific workout, and then record how many reps you performed per workout on a spreadsheet!  Okay, so it is not a pretty phone app with a dashboard, but it was effective in letting me see how well I did over time and did not waste paper!  The point is, writing an application to help make my life easier kept me motivated to see it to the finish. Step 7: Learn from Failure One of my college instructors told me that failure was his best teacher, because the pain associated with his mistake made sure he did not forget the solution.  This is arguably one of the most valuable pieces of knowledge ever shared with me, as I would go on to “fail” plenty of times in my personal projects.  For example, there have been times when I have tried to “replicate” functionality from one language to another only to have it blow up in my face.  I remember one instance where I tried to recreate Python’s dictionary functionally in Java using ArrayLists.  If you are a professional developer by trade you are probably wondering how on Earth I thought this would work (yes, I understand that it was a very stupid thing to attempt). I cannot remember exactly how I tried to get it to work, but after a half hour of forcing it, I took to Google to see what I was doing wrong.  Turns out that in Java, you typically create dictionaries using HashMaps, as they utilize key value pairs (just as dictionaries do in Python).  I never made that mistake again. Step 8: Practice and Do Not Make Excuses In my opinion, application development is one of the most affordable and accessible trades to learn.  Documentation is free, online courses are cheap, and the answer to most of your problems are just a Google Search away.  This profession continues to gain popularity, yet I still come across so many people who want to learn but have over 9000 reasons why they cannot.  Why is that?  I believe it is a question of willpower.  Programming is not a profession one simply walks into.  It takes a lot of practice, and practice takes time.  There have been plenty of times I have thought to myself how nice it would be to walk away from the keyboard and pop Final Fantasy into the Playstation (in fact, I remember doing that often before I forced myself to sit down and commit to learning this).  But practice leads to sharper skills, and those lead to better job opportunities.