Learning to Code like Billy Madison
Start by being interested in tech and only gradually work your way up to college level CS courses
What does it take to transition into tech? Can anybody learn to code? I’ve read a lot of articles like this detailing how to become a software developer in 12 months, but how realistic is that timeline for the average person with no technical background who is studying coding while working full-time? Should that person even bother trying?
Although much has been written about the futility of trying to learn to code, I am firmly in the opposite camp, and I think it is definitely worthwhile and achievable.
The other questions are much trickier to answer because everyone has a different starting point and everyone has different goals, if he/she has any goals other than learning a little bit of code.
Although any effort to answer these questions in a general way will be pointless, I do have some insight to offer from my efforts thus far. I think if you’re reading this article, then yes, you can learn to code. But it most likely will take much longer than 12 months, unless you have a strong math or engineering background or unless you do a really top end bootcamp at some point (but those are highly selective and require you to be intermediate level for entry). A more realistic timeline for transition to tech while working full time is 2–3 years. This assumes 1 hour a day of work; approximately 700–1000 hours of study time. If you want to pass a technical interview or have a portfolio of work to show this might be a conservative estimate of time required. Some articles, like the first article I linked to for instance, had the time spent at 2500 hours for comparisons sake…
I, on the other hand, do not have a strong math or engineering background, and as of yet have not chosen to do a full time bootcamp. I was always good at math and puzzles in school (one of the reasons I was drawn to coding in the first place), but my skills are/were very rusty. My background is actually in law and business, which makes the transition to tech a near 180 degree move. I wasn’t even an early adopter of technology; things have changed a lot since I’ve started learning to code, but if anything I still am hesitant about trying out new devices or technologies for fear that I might “break something”. I like reading real paper books and I’m kind of stuck in my old tech ways. Truthfully, I got into coding because I don’t like my job (I’m not yet employed in tech), I was curious about coding and tech generally, and somewhere deep down I always thought I might be good at coding. Plus, I didn’t want to go my entire life without learning how to code.
The beginning of my coding journey was incredibly frustrating. I barely even knew where to look for resources to learn how to code, and when I found resources, a lot of them seemed way too difficult, or I wasn’t getting very much out of them.
So I set out to write a guide that I wish I’d had when I was just starting out to help find all of the resources that were most useful to me, and maybe make the process a little less frustrating.
When thinking about the best way to approach this guide, it dawned on me that my coding journey has been a lot like the movie Billy Madison, where Adam Sandler realizes he really doesn’t know anything at all, so he has to go way back to the start and learn everything from scratch.
This has just been my experience, and I know everyone is different. As I mentioned, my background is completely unrelated to tech, so the transition has been huge. If you’re in a field more closely related to tech then maybe your journey will be different. For me, however, I had to go back to the drawing board and start from the beginning.
For the most part, I’ve been studying while working full time. When I was first starting out, I was able to take a few months off to dedicate full-time to studying, and I also took a part-time night course on front end web development and Ruby on Rails. The vast majority of my study time, however, has been during lunch breaks or down time at work, at night after work, and on the weekends. Additionally, most of the resources I’ve used have been have been free online courses and books.
I now feel like I’m at about High School level (described in more detail below), so that gives some insight into how long the journey has taken.
In this article I’m going to attempt to lay out my Billy Madison Theory to not only getting a job as a developer, but overall learning about the tech industry.
You might wonder why you should listen to me at all. After all I’m not even employed in tech yet, do I even know what I’m talking about? Well you might be right. But also consider this letter from Hunter S. Thompson written to his friend, giving that friend some advice on life. Hunter hadn’t made it yet, but still, he had a strong worldview and something profoundly important to say about how you should live your life. Maybe my approach to learning coding is similar- that I might have something to contribute to the conversation about tech education even though I haven’t made it in tech yet. Or maybe this is another example of first principles thinking. Or maybe I just give myself too much credit. I’ll let you be the judge.
Step 0: Kindergarten
At this point you are interested in coding, but you don’t even know what coding is, or what developers do, or even really what tech is. You have no idea what you don’t know. You’re basically totally in the dark.
You can start by reading this long article/magazine called What is Code by the terrific author and developer, Paul Ford, who lays out a good foundation on what coding is at a high level.
On a lighter note, try watching popular tv shows and movies related to tech. A few suggestions are Black Mirror, Mr. Robot, Halt and Catch Fire, and Silicon Valley.
You should also be reading a lot of books and industry blogs like TechCrunch, MIT Tech Review, Wired, Free Code Camp, etc. to start familiarizing yourself with the tech industry and to start learning important tech vocabulary.
If you’re not already on Twitter, you should join and follow important people and publications in tech.
Here are a few listserves and publications to subscribe to:
- Free Code Camp — follow them on Medium for articles about tech and learning to code
- MIT Daily Download - articles from tech and other scientific areas
- CB Insights- startup research firm with a popular newsletter
Here is a list of books to learn about the tech industry and to keep you motivated (I prefer Audible):
- The Lean Startup- book about the startup experience
- The Art of Innovation- from founders of IDEO the design consulting firm
- Grit- psychology book about how grit and perseverance can be more important than talent
- Whiplash- forward looking book by director of MIT media lab
- Algorithms to Live By- fascinating view of how algorithms are valuable to everyday experience
- In The Plex — history of Google
- Elon Musk- biography of Elon Musk by Ashlee Vance
Podcasts are also great:
- Code Newbie- interviews with people who have transitioned to tech and noteworthy people in tech field
- Software Engineering Daily- newbie accessible software engineer podcast
- The Exponent- about tech impact on society
- Too Embarrassed to Ask- about new gadgets and other tech news
I also recommend trying to become more “tech fluent”. Become a super user of whatever devices you own, whether that be your computer, smart phone, or even your coffee maker. Considering the recent cyberattack, go through some steps to protect your digital life. Become the person who knows about the new devices or the new phones that are coming out and how to use them. Maybe try to set up some smart devices in your home. Be the person who is interested in VR and AR technologies. In general — be interested and excited about technology.
So you’ve graduated from Kindergarten, and you’re ready for elementary school. You’re ready for some actual coding, but you need some real hand holding. Let’s see what’s next…
Step 1: Elementary School
OK, you know a little more, but not much. You’re still basically clueless, but you’re ready to code a little bit. Still, everything you’re going to do is going to be in the browser. You’re still in elementary school so you need a ton of assistance.
Your main resources here are:
- Code.org — used widely in public schools to teach kids to code
- Scratch- use “blocks” instead of code to create games
- Woof.js- like scratch but in a simplified version of JavaScript
- Khan Academy- JavaScript based curriculum to learn coding
- Manual Guides — articles and interactive guides on JavaScript, CSS, and more
- Codecademy- wide range of free and paid options
- Treehouse- the rest are similar to codecademy
- CodeSchool
Most of these are free, but a few have paid options. All of them, however, are very beginner friendly because you are completely coding in the browser. This means you just go to the website and they guide you through their exercises. You don’t download any software, you don’t really do any debugging; you generally just follow along with their instructions and you start “coding”.
This doesn’t mean elementary school is easy. Especially around what I’ll call “4th and 5th grade” the lessons start to get difficult (try the 3 star woof.js games for instance). You can build complex Scratch and Woof.js games, or spend a lot of time working through the exercises on Codecademy, Treehouse etc. I just include these in Elementary school because they’re very beginner friendly in terms of getting started on coding. These lessons can be very useful to get your “math brain” working again and get you used to solving more difficult problems that will come up later on in the curriculum.
In the meantime, keep reading and listening to podcasts and audio books. That lesson will continue throughout the entire curriculum.
Step 2: Middle School
Now things are getting a little more serious. You need to break free from the comforts of just coding in the browser. You need to start using your computer to create and delete files and folders, and that means you need to become familiar with that little black box called the terminal.
This is a very intimidating step, but that’s OK, we were all scared that first day we stepped into Middle School.
Our main goals for Middle School are:
- Learn HTML
- Learn CSS
- Learn some beginner JavaScript
- Learn Git Basics / create GitHub account
- Learn Command Line basics
Here are some resources for getting started:
- HTML and CSS
- Bootstrap — Bootstrap is the most popular HTML, CSS, and JS framework for developing responsive, mobile first projects on the web.
- Head First JavaScript — beginner friendly series of books with lots of visuals
- Free Code Camp- free JavaScript-based curriculum
- Git
- GitHub
- Command Line
You’re going to be getting started on the world of web development using HTML, CSS, and JavaScript. Some people think that HTML and CSS are easy, but for a beginner everything is difficult, especially CSS layouts and positioning, when you have a vision of how a webpage should look, but you can’t get it quite how you want. You’ll also get introduced to a web framework with Bootstrap. You’ll learn about version control and maybe even collaboration on GitHub, so you’ll learn what it’s like to merge different versions of projects, with the joys and struggles that that can bring. You’ll also get the excitement of sharing your first projects live on the web with your friends and family.
At this point you might want to consider a part-time in person program. Things are starting to get a little tricky. Having other people in the room will be helpful as you start to navigate things like the terminal, Git, HTML/CSS, etc. You probably aren’t ready for a full time bootcamp (and if you start a bootcamp now you will not be job ready in 12 weeks — just look at the job numbers) but a part-time program could make sense at this point. They’re more affordable, allow you to continue to work full time, and give you a boost in your learning journey. You can search for part-time night or weekend courses in whatever city you happen to live.
Step 3: High School
It’s time to take things up a notch. You know some basic web development, you have a GitHub account, and you know some Command Line basics, but High School is where the shackles really come off. You need to build some real web apps, and you need to be introduced to some computer science basics. You may even need to start learning some math.
You’re also going to have to learn a real object oriented programming language, and start developing small to medium sized programs with it. Your best bet will be Python.
High School is definitely not easy. This is the stage where there will likely be a lot of dropouts, because it’s at this point that you start to learn about those “known unknowns”. You realize just how much you don’t know, and how long the journey really is going to be.
Here are some resources to help you through High School:
- Free Code Camp — JavaScript
- The Odin Project — Ruby on Rails
- Coursera Python
- Processing — Create graphics programs using simplified Java
- Intro to Programming Udacity — Python
- Beauty and Joy of Computing — A curriculum organized around CS Principles in addition to coding, meant to ease learners into CS and show CS value to many other fields
- CS50 Harvard — Harvard’s intro to CS course
- Stack overflow — where you’ll get most of the answers to your coding questions
Some of these are college courses (CS50, Beauty and Joy of Computing), but you can consider them like taking AP courses your senior year.
You might also want to start studying some math. Although this is a debated topic, depending on your time and interest, it couldn’t hurt to at least brush up on some math skills. You don’t have to jump into Calculus or Linear Algebra; instead maybe try Algebra, Precalc, or even something more basic than that. Trying to solve math problems with code can be a good test of your progress as a developer as well.
You can try:
- Khan Academy — free online math lessons
- Project Euler- popular resource for math challenges of increasing difficulty that you can try to solve with code
Some people think you should just focus on one language and stick with that when learning to code. That may work for some people, but I liked to jump around and see all of the resources available to me. That’s why I listed so many resources that teach in different languages. Harvard CS50, for instance, starts with Scratch, then teaches C, then teaches Python and JavaScript for web development, all within one semester…. I think all of the resources above are great, and at the end of the day just continuing to do something everyday is better than doing nothing. If you can stick with one language, then great, do that. If you’re like me and you want to jump around, then that’s great too. Just do something everyday and keep learning and moving forward.
Step 4: College
Congratulations. You’ve made it this far. You can build some basic Rails apps. You know about classes and object orientation in Python. You have a decently active GitHub account. You are starting to demystify JavaScript (or at least you are less frustrated by a missing semicolon). Maybe you even started to brush up on your math skills.
Now the hard work really starts. You need to leave home and go to college.
You need to deal with things like algorithms and data structures. Maybe you dip your toes in Java (gasp!). You need to learn about testing and debugging. You need to learn about pair programming. You need to “think like an engineer”. You need to learn about databases. And this is just scratching the surface…
Here are some resources to get you started:
- Stanford 106A — Taught in Java but one of the greats
- MIT Intro to Computer Science — Python
- Intro to Programming Udacity — Python
- Google Interview University — algorithm and data structure prep for Google interview
- Free Code Camp — JavaScript
- Hacker Rank — Technical interview challenges
- Books to prep for programming interviews
- Job Waffle — searchable collection of coding resources
- Free online textbooks
This is just a sampling if all of the resources to “graduate” from college, which really means to get you job ready. In this context, job ready means having a portfolio of professional looking projects, and being able to pass a technical interview.
Note that most of the resources from High School can also be used in College, so a few are listed in both sections.
You have two important decisions to make at this stage:
- You have to choose your major. You can choose to specialize in front end or back end web development, or go in a different direction and start learning to use Python to analyze data for machine learning, among virtually infinite different options in your career as a developer. On the flip side, you now have to decide if being a developer is actually for you. It’s OK if it isn’t; tech is a big, diverse field. Maybe you want to be a user experience designer, maybe you want to be involved in research in the tech sector, maybe you want to be a sci-fi author. But this is a critical juncture and you need to decide if being a developer is actually what you want to do or not.
- You have to decide whether or not to do a full-time bootcamp. You now have the skills to get into a top notch bootcamp (the only ones worthy of the time and money in my opinion), so you need to figure out if this is worth it or not for you. There are many resources online to help research that decision, and that is a personal choice, but going to a reputable bootcamp can significantly shorten the learning curve if you are committed to a career as a developer.
Conclusion: Lifelong Learning
For a while, it seemed like every time I read a new article, or every time I started a new project, there were a million things I didn’t know. One door would open up five new doors, which would then open up another five…The comic above seemed to capture my feelings perfectly.
I could have also written a section on Masters degree and PhD, but the truth is if you want to be involved in technology, or any intellectual pursuit really, you have to be a lifelong learner. With the rate of development of technology, learning how to learn might be the most important skill of all.
Here’s a great comic / Isaac Asimov quote about lifelong learning.
This book and course are helpful in learning how to learn:
- Learning How to Learn — Coursera
- The Art of Learning — Written by Josh Waitzkin, from Searching for Bobby Fischer
One final point. I’ve made my curriculum linear, but the truth is learning to code is really not a linear process. There are a lot of starts and stops. It is at times extremely frustrating. It’s really much more like an undirected graph, where all of the concepts are interconnected, in seemingly chaotic fashion.
Eventually the pieces start to come together, but it can take a very long time. Until then you are wandering in the desert of despair, where everything seems difficult and new, and very little makes sense.
But don’t despair. Find communities if you can through Meetup, FreeCodeCamp, or Code Newbie. Having other people on the journey helps get through difficult times, otherwise learning to code can be a very lonely process.
Of course, if you’re really down, there’s always Shia LeBoeuf to help.