All Articles

How I learned to Code in 10 Months

Code

In the fall of 2012 I decided I would teach myself how to code. At the time I made this decision I had recently graduated from SDSU with a degree in History, and had been searching for what I wanted in a “career”. Among many factors, I choose to teach myself how to code because I saw the competitive landscape of the post Great Recession economy and decided I would try learning something that only a small minority of society even attempts to understand. I had also lightly dabbled in computer programming since I was in High School, but never spent the time to fully learn the fundamentals. Initially I was just as intimidated as the average person would be of programming, but I quickly learned that if you just stick with it, learning to code is no harder than learning a new foreign language. This is not something you can teach yourself in a day, a week, or even a month, however if you are the kind of self-learner that never gives up, computer science can be an incredibly rewarding skill to learn. I am now currently 3 months into the start of a great career at an awesome company, doing challenging and rewarding work that I enjoy. Learning something like computer programming on your own is not for the average person. You have to really want to learn, and have a border-line obsessive compulsive determination. If you are just starting to learn how to code and are looking for resources and motivation to continue your self-studies, I hope that I may be of help with this article.

html5 logo I started by taking a few courses at my local UC Extensions for basic HTML and CSS. This was by far the most expensive part of my self-education at around $600+ per course, however I see this initial expense as a benefit. It forced me to want to attend every class and over-perform on the homework because I really wanted to get my “money’s worth”. After taking HTML in particular I realized that I had been WAAAAAY over-thinking the complexity of building websites. I didn’t even realize it, but I knew most of the fundamentals of HTML already by just using the internet regularly. If there is a first course you should start with, it should be HTML so that you can start to understand how you are likely over thinking the difficulty of the internet. After taking the UC courses I came to realize that I could learn any computer language, as long as I spent the time to fully get to know the markup.

Ruby on Rails Logo I decided that I would try Ruby / Ruby on Rails as my first real programming language after the HTML and CSS courses. I decided on Ruby because the syntax is (arguably) easier to read and write than other languages. I started by watching YouTube tutorials, then came across the Lynda.com Ruby on Rails video tutorials (which are generally OK). I spent about a month watching and following along with a few Lynda.com (now LinkedIn Learning) programs, however there seemed to be something missing. I just wasn’t picking up the material as fast as I had hoped. This was about 2-3 months into the process and I was getting a little disheartened, so I decided to really double down and dive into learning at 110%.

Codecademy Logo I came across Codecademy; a fairly new learn-to-code startup back in 2012. I struggled through most of their available courses, which at the time were not very well written. Codecademy’s content is now far more mature and their material is much much better than it was in 2012. I have recently gone through a number of their new lessons and can confirm that they have become a pretty good place to learn, especially their API courses are awesome.

Treehouse Logo Around the same time I also started working with Treehouse and Code School (now a part of Pluralsight). Both Treehouse and Code School catered really well to my personal learning style. I made it most of the way through the Ruby on Rails courses on both sites, and then started going through the other material including HTML, CSS, and PHP courses. I would say that while similar, both companies complement the learning process in different ways. Treehouse is especially outstanding for Beginner - Intermediate level students and their teaching platform is the most stellar of all the learning sites I’ve mentioned in this article. In my opinion the Treehouse instructors are the best online, and interact with students often through the Treehouse Forum; answering questions, and offering help/feedback to students in a surprisingly timely manner. Code School is more for the Intermediate - Advanced level student. Initially I found Code School really hard to follow, but after a few months working with Treehouse I came to realize Code School was a great place to head once I began to generally understand how to program. The Code School courses fly through material much faster than Treehouse, but the courses are absolutely loaded with great content to learn. I will go into more depth on both of these companies in a future article, but I think both are a huge part of the reason I was able to succeed in learning how to code.

Code School Logo By this time I was about 5-6 months into my coding binge, and I was starting to understand web design very well. Particularly I was able to read and write HTML and CSS efficiently, however I still felt somewhat mystified when trying to program my ideas out with Ruby on Rails. I am not sure why I was so attached to wanting to learn Ruby before anything else, but I think that focusing so hard on only Ruby was one of the mistakes I made in the whole process. Around this time I started taking on some side projects for free for a few of my buddies that had been starting up their own companies post-college, and those projects started forcing me to use JavaScript and PHP a little. I was still myopic about Ruby, so I hacked around these languages till I was able to make something work and then moved on. I slowly started to realize that I was beginning to understand these languages better than I understood Ruby, and it clicked. In order for me to really learn, I had to start getting outside of the course material and build something I wanted to build. I had been learning all of the fundamentals, but I had not been applying them to anything and therefore was not cementing my newly acquired knowledge. This is when I feel I began to cross the threshold of understanding how to code.

iClub.fm Logo After completing a few projects for friends, I began work on one of my side projects from college. Within a 2 week sprint I had completely transformed the website into something that was actually starting to resemble a real web application. I started coming up with ideas, and was able to write them out in code and see them work. This was a pretty exciting time and was full of many 7am-2am coding sprees. I also began to generate some word-of-mouth interview offers via friends that I had helped the previous months.

HTML Code I decided I also needed a personal website where I could have a place to showcase my previous work, practice more small programming ideas, and write about my learning progress. One of the projects I started was in creating a badge widget that automatically pulls my ‘progress report’ from the online schools I was using to learn how to code. I still wasn’t terribly good at programming, so I started it off in just static HTML and CSS, but the student community at Treehouse really liked the idea and a collaboration project was started. Treehouse even opened up their site to enable us to pull our badge information more easily, and after a couple weeks of work we had a half-decent working widget. I made a small post about it on the Treehouse Form, which Treehouse ended up featuring on their Facebook and Twitter accounts. All of a sudden I was getting massive traffic to my blog from all of the Treehouse students stopping by to have a look at the widget!

* As an interesting observation, I also noticed that the feature on Treehouse kicked up my sites organic SEO a ton.

A few weeks later an opportunity presented itself to interview up in Los Angeles. I would say I generally didn’t take the interview all that seriously, mostly because I didn’t think there was any chance I’d do too well given my lack of a Computer Science degree and only about 8 months of self-taught education, but I figured it wouldn’t hurt to see what a “tech interview” was like. I showed them my portfolio of work I had done when helping my friends out, and the various projects I had been working on myself. Apparently I did alright in the interview, and they offered me a bigger salary than I asked for. I hadn’t even considered moving at the time of the offer, and I had 7 days to let them know if I’d take the job, so I frantically started trying to figure out what the heck I was going to do. In those 7 days I ended up landing another interview in the Silicon Beach area through a friend, and apparently did well enough there as well as they matched the other companies offer. Within 7 days I had gone from scraping by, bootstrapping my self-education, to getting 2 kick-ass job offers. I figured this was a sign that I had to move out of the San Diego area, and I have been working at one of those companies for almost 3 months now. I won’t tell you which here, but a quick LinkedIn search might give you a clue. If there were a few things I think I did well in the interviews that landed me these offers, I think my portfolio of past work and my obvious hunger to learn shown through as positive assets. I feel incredibly lucky to have my current opportunity to work for a tech company and start building my experience.

I have still been continuing my coding-education on the side, but working for a company has exponentially increased my understanding of programming. Being around really bright people that are willing to help has been an invaluable asset since starting work, and has also forced me to look outside Ruby programming. I now code in mostly PHP and JavaScript, but sometimes work with other languages. Today, knowing all these other languages, I wish I had started with JavaScript and in conclusion I’ll tell you why:

Initially I decided Ruby was best language for me to learn because of the seemingly simpler syntax, however to do anything major with Ruby you really need to have a good understanding of programming theory and the Rails framework as a prerequisite. Especially when not understating programming fundamentals, Ruby on Rails has a steep learning curve. Some may argue that Ruby on Rails simplifies programming, and gives developers access to a lot of pre-fab code (Ruby Gems), however I would argue that while Rails does simplify things, if you do not understand the fundamentals of programming you will quickly get lost. It requires a lot of foundational knowledge and a decent amount of setup to begin getting Rails to work like you want it to. JavaScript, on the other-hand, is “the defacto programming language of the web”, and with the introduction of HTML5 (which is technically HTML, CSS/CSS3, and JavaScript), JS has officially been solidified as the main programming backbone of internet. JavaScript also doesn’t require a ton of setup like Ruby, so you can literally start using it in seconds in the browser console. The jQuery JavaScript library makes it really easy to start basic programming in JS as well, and if you know a bit of CSS, you’ll be able to pick jQuery up pretty quickly. Initially I was intimidated by all the [{brackets}] and semicolons, but I now realize that this becomes second nature after a few weeks of using the language. I still think that Ruby on Rails is a generally more powerful (server-side) language and framework, but when starting out, I think JavaScript would have been the best to start with for my learning-style. I still plan on going back to finish learning Ruby on Rails in the future, but now that I actually understand the fundamentals of programming I do not think that Ruby on Rails will be too hard anymore.

If you are curious about anything mentioned in this article, let me know in the comments below. I will try to answer any questions you may have in as timely a manner as I can.