Why write (or in your case, read) another blog post about learning to code? The last few years have seen an explosion in the amount of quality learning resources available to curious beginners. Free and subscription-based online learning communities, bootcamps (both in-person and online), mentorship/apprenticeship programs - the diversity of options can be overwhelming. It can be tempting to look for "silver bullet" solutions - and some of these solutions may even work for you and meet your needs! However, we have the great fortune of living in a time when learning materials targeted towards all types of students are accessible and relatively inexpensive, giving you the opportunity to tailor a learning sequence to your exact goals and ambitions. If this idea appeals to you, read on!
This post is meant for the individual who has heard enough about computer science, web development, and coding to pique their interest, yet isn't sure where to go next - or more importantly, how to chart a path forward. I'll cover:
- Discovering whether coding is for you by creatively finding projects at your current day job.
- Weighing options with respect to online learning sources available to you.
- Pitfalls and opportunities to look out for as you chart your path.
I took a pretty crazy path into the post-college working world. My job history is littered with a grab bag of roles including archaeological field technician, bartender (let that be a lesson to you about the archaeology job market), high school history teacher, online education facilitator, and test prep teacher. The one unifying theme is that I like learning and helping other people learn at their full potential, with a healthy dose of interest in the hands-on/applied sides of education.
A few years ago, I started a job with a growing edtech company - my role was initially to help train teachers on our software platform, although my responsibilities eventually expanded to include a little bit of data analysis and web analytics implementation, alongside some basic product manager-style requirements gathering to bridge the gap between our teacher curriculum design team and our engineering team.
Since then, I've worked as grants officer for a charitable foundation, where my focus is on grants related to online learning and educational technology. While my role is less technical, I've been diligently building on my programming skills in my free time. Read on for some key lessons I've accumulated in that time.
Lesson 1: Get paid to learn by finding out how to add value at your current job
How did my job at the edtech gig grow so much (and give me the opportunity to learn) within just a year? After all, I had absolutely NO technical background in my work history.
The answer lies in cultivating an entrepreneurial mindset - even if you don't consider yourself to be an entrepreneur. Simply put, the entrepreneur is always thinking creatively about how to produce greater value for their customers by creatively eliminating pain points - and you can apply this to your internal customers as well.
One of my first tasks when I started getting my bearings at my new edtech job was helping my director manage weekly reports about website interactions, which included some reporting by our moderator team about what sort of activity they were seeing on the site.
I had only really fiddled with Excel in a business statistics class that I took (reluctantly) in college, but I knew enough to start fiddling around with formulas so that our weekly report calculations would go a little easier.
So with most of our manual calculations dispensed with, I turned my attention to a tougher matter: working with a geographically distributed team of moderators to more effectively collect, process, and integrate their weekly reporting information.
Using a Google form was not adequate; we required the flexibility and detail level of a spreadsheet-style document. So I started doing some research and stumbled upon the amazing ecosystem of APIs Google has in place that make it easy for you to script interactions between Google Docs/Sheets and Google Drive.
Lesson 2: Start small and free - low risk, amazingly high return
After a lot of tinkering, I had managed to build out a reporting system where each moderator could press a simple submit button on their spreadsheet to copy data over to a master reporting document. A task that had formerly required about 4 hours a week of my director's time (from emailing back and forth with our distributed team, collecting and calculating stats, etc) was now resolved automatically in less than 5 minutes.
In just a few short months, I had gone from never writing a single line of code in my life to finding ways to help my coworkers do meaningful work in efficient, interesting ways. I was blown away - and I was hooked. I had to learn more.
Lesson 3: Take the plunge and invest in yourself
This is where my whole world started to open up. I had seen ads for Treehouse and Codeschool somewhere (probably in my facebook or twitter feed), and decided it would be worthwhile to make a small investment in some high quality resources. I was able to hunt around for some online coupons for both Treehouse and Codeschool, which added up to a few hundred dollars in savings for year-long subscriptions to each.
Treehouse is an excellent, affordable resource targeted at total beginners. Their videos are well-produced, their instructors use a friendly, approachable teaching style, and their online community is welcoming and dedicating to helping new folks feel like they can achieve their goals.
Codeschool is another great resource, and very similar to Treehouse in terms of the layout and presentation of their courses. I've often heard it said that Codeschool is targeted towards a slightly more intermediate learner, but I think this is primarily because of the pace of new information they provide in their videos. The flipside of this feature, however, is that their courses are VERY thorough. The amount of ground they cover in their Angular courses, for instance, is almost staggering.
Both of these resources are fantastic for orienting an aspiring software engineer to the world of web development and the ecosystem of technologies that you will engage with in your new career. Each service provides "tracks" that will allow you to learn the ins and outs of different languages or technology stacks, or you can browse their library and take whichever individual courses interest you the most.
If you're like me, however, you might need a little push to start a serious deep dive into web development. I knew that a bootcamp (an immersive program that has you working 5-6 days a week for 3 or more months) was not for me - the cost was prohibitive by itself, but even more ominous was the thought of having zero income for perhaps a half a year.
Luckily, there is a whole sector of online part-time programs that bridge the gap between self-paced tutorials and the full-on bootcamp experience.
I'll take some time to write some more thorough reviews of these experiences in the future, but in the meantime, Bloc.io (an online bootcamp provider) has an awesome site that can acquaint you with some of the different opportunities available to you, all along the spectrum from self-paced tutorials, to online programs, to in-person bootcamps. Check it out here.
Lesson 4: Good job - now stop doing tutorials and start building
The important takeaway for me was this: you can spend all day doing tutorials and getting guided practice. There are just so many resources out there now that it's easy to get lost in the web of cool stuff, chasing down every interesting course or video or interactive learning app or whatever. Don't fall into this trap!
You're going to have to start getting your ass kicked a bit, and the sooner the better. What I mean by this, is that doing the work of a web developer has very little in common with solving carefully scripted problems in web-based code-editing UI.
You're gonna spend some time banging your head against the wall just trying to get your personal computer set up with the correct development environments you need.
You're going to feel like you have no idea what you're doing, and get discouraged.
Just start building. Preferably something you care about (to keep you motivated), but really anything will do. Learn how to use git and GitHub so that you can get comfortable using version control - that way you won't be afraid of "breaking" stuff or losing your work. The point is to get you acquainted with some of the less sexy but vitally important challenges you will face when you really start to dig into this stuff: reading through documentation, writing tests to make sure your code is doing what you think it's doing, starting from a squishy idea and breaking it down from a complex problem into reasonable tasks that you can complete.
If you're trying to solve a problem and you need to get help, get acquainted with the good folks over at Stack Overflow. If that sounds too intimidating (it shouldn't - the developers I've met so far that I really liked are the ones who are never afraid to admit they need help), and you've subscribed to an online learning community like Treehouse, use their forums. And don't forget to pay it forward by answering some questions as well, if you can. Nothing helps you learn better than trying to teach. You'll be surprised what you know.
Lesson 5: Get out of the house and meet people - earlier than you think you should
This should really be 'Lesson 0', as it's a lesson I wish I had learned at the very beginning. Why would you want to face all of the challenges laid out above all by yourself?
I've worked in all sorts of fields, and I've never been so impressed with the collaborative spirit and helpfulness of a professional community as much as I have been with the web developers and software engineers that I've met.
Hop on Meetup right now and search for some tech-oriented groups in your area. I guarantee that you will find groups that are happy to work with people with all types of experience levels. My personal favorite is the nodeschool meetup where I live in northern Virginia.
At the end of the day, you're probably interested in learning web development not because you like staring at a text editor all day, but because you want to learn how to build cool things for people - you want the skills to solve difficult problems and delight your customers. So get out of the house and start meeting people! You never know what you'll find.
As I noted in the intro, I can't claim to be an authority on web development or learning to code - I can only pass along my experiences and offer encouragement. If you want to follow along with my journey, check me out on twitter (@justinmhill), where I will continue to post new articles. Best of luck!