By Michael Choi, Founder of Coding Dojo
In 2011, I was a partner at the 33rd fastest growing company in America and the 3rd fastest growing tech company. The company was flourishing, but I couldn’t find affordable and qualified developer talent to keep pace with our growth. There was a major gap between what computer science majors were being taught in the classroom and what they were capable of upon graduation.
In one instance I hired a “developer” with a freshly minted masters in computer science, paid them $120,000 base, only to retrain them.
I racked my brain trying to figure out where we could find effective and affordable developer talent, and that’s when I had an epiphany of sorts—start an internal training program that could quickly on-ramp CS grads and junior developers to give them practical programming skills.
After internally training hundreds of developers and seeing their success, I asked myself: “With the right training, is prior programming experience even necessary?”
I decided to test my idea.
Long story short, it took me two years to develop a system that effectively took someone with little to no programming experience and trained them to be a working developer in a matter of months. Since 2012, I’ve been trying different ways to see how I could improve the system to more efficiently and effectively educate those who are passionate about learning to code, but lack a traditional CS education.
I want to share some astounding things I’ve witnessed over the years when it comes to a developer’s learning progression.
First, it’s not possible to tell whether someone is going to end up being a great developer from the start.
This rings especially true if someone has fewer than a hundred hours of experience working on coding and algorithms.
I bring this up because many coding schools test applicants on algorithms, and use that as a primary factor in whether or not that applicant gets accepted into the program. At Coding Dojo we have some light algorithm questions we ask as part of the application process, but we take the student’s performance with a grain of salt.
Let me explain.
Throughout my career, I’ve trained LAMP, MEAN, Python/Django, iOS and Ruby on Rails to successful tech executives, entrepreneurs, developers with 10-15 years of experience, and CS grads. A large number of those who were completely new to programming.
Naturally, you would guess that developers with 10-15 years of experience, or those with CS degrees, would perform exceedingly better than those who never programmed. This is true during the first 6-7 weeks of our bootcamp where the following general pattern is observed.
Note, this is the general pattern of my students, each student’s learning journey/progression is unique.
Conversely, I’ve observed that it’s not unusual for students who struggle learning programming concepts in the beginning to start suddenly grasping concepts and becoming really good. They get to the point of keeping pace and working alongside developers with 10-15 years of experience in the field.
This was quite surprising to me, especially when I first started teaching. I observed that students who were originally in the bottom 10-15 percent of my class, not capable of writing basic algorithms, were suddenly working at the top performance level of the class.
Admittedly, when I first started working with some of these students, I was worried whether programming was even a field they should pursue! I questioned whether I should talk to them and see if this is indeed something they want to continue doing, because the risk of failure seemed substantial.
I am glad I didn’t say anything. Many of the “lower” performers ended up being some of my top students, and have gone on to become very successful developers.
After years of teaching, I’ve had time to test how I can accelerate these “aha” moments where concepts click.
Now, the majority of students with zero coding experience do extremely well by the end of our three month program, with some performing as well as the experienced developers who came to the Dojo wanting to retool themselves in a web stack they weren’t familiar with before.
Below is a generic graph to illustrate some of these concepts.
Again, I’m generalizing some data to emphasize certain points and not saying that every coding novice in the beginning does better than those who are experienced in the end. What I am pointing to, is that sometimes we have “outliers” who often surpass experienced students, even though they were initially in the bottom 25 percent of the class.
A recent cohort I taught at Coding Dojo had 20 percent CS grads and experienced developers and 80 percent students with little to no coding experience.As expected, during the first month of the bootcamp I saw those with dev experience perform much better than the students with no coding experience. On average, CS grads/developers progressed 20-40 percent faster than those with no experience.
During the middle of the second month, about 60 percent of the students who never programmed before started to perform at a level that was comparable to the progress our CS grads/developers were making, and about 10 percent of students even started surpassing the progress of those with experience.
By the end of the three month program, almost all of them were comparable.
Now that the program is finished, if you were to ask me to identify the top developers who I would bring on as a hiring manager, my top choices may seem surprising. Especially if you only knew these developers at the beginning of their software journey. My three picks would be students who had zero programming experience before the program but are now performing very well, with my next choice being the one with a CS degree.
Now, I’m not saying that those with CS degrees or previous development experience don’t perform as well. Those experiences definitely help, but I’ve come to realize that previous experience does not necessarily correlate to how great of a developer one could be.
Second, anyone can learn how to code, although don’t expect linear progress.
Anyone can learn to code with persistence, the right teachers and optimal learning environment.
While coding can be learned alone by sifting through dozens, if not hundreds, of tutorials, it will take significantly longer. It can also be ineffective since as someone new to coding wouldn’t know what information is relevant. In the right environment, learning can be accelerated by a factor of 20 to 100.
Here’s an example from my own life.
When I was 14, I moved to the United States with my family from Korea. Growing up, I studied English for a few years. Yet, when I came to the States, I was unprepared and didn’t know how to speak the language at all! I was frustrated and felt isolated. Although I studied English for a few years, it didn’t prepare me adequately enough when I was placed in an immersive English-speaking environment.
Even though I was studying for many hours, I struggled with keeping up with all the homework assignments, preparing for tests, and establishing friendships. This was extremely difficult, and there were many days where I didn’t feel like any progress was being made in learning to speak English. Even by the end of my first semester, I felt like I wasn’t getting anywhere and had no idea what my peers or teachers were saying.
However, something surprising happened during the summer break. (Keep in mind, I didn’t study much during that time.) Yet, when I arrived back at school I could suddenly understand everything my teachers and peers were saying!
Reflecting back, I had pivotal “aha” moments, where certain concepts just clicked. Practically overnight, I was no longer struggling with the class, and was able to keep pace with my peers.
Learning to code is much the same way as learning a new language. It often consists of several “aha” moments where gains in learning increase substantially. Similarly, learning accelerates when someone is put into an immersive environment.
Another lesson looking back is that when it comes to learning how to code, the growth/progression is definitely not linear where you get incrementally better each day you work/learn.
In fact, it’s more like this:
Often times, it may even feel like, despite the work being put in, you’re not getting any better. The key is to keep pursuing your goals and to never give up. Given the persistence and passion, anyone can indeed have an “aha” moment to get them to the next level.
On the other hand, if you don’t stay persistent, and if you’re not really “immersed,” your progression will be stagnant.
My Final Thoughts
In summary, based on my experience teaching coding to thousands of programmers, I’ve seen first-hand that anyone can learn to code, regardless of their level of aptitude starting out. Granted, some may learn faster or reach a higher level of proficiency than others, but with the right teachers and environment, everyone with the passion and dedication to put the hours in can learn to code.
Just because someone is twice as capable as another, doesn’t mean they will always be twice as capable. Often there are those who seem like bottom performers who then surprise everyone by a suddenly having several “aha” moments, in turn ending up as a top performer.
Human potential is limitless and we shouldn’t judge the person based on where they’re currently at, but should be mindful of each person’s potential and encourage them to continue on their learning journey, especially if they’re passionate about learning and becoming better.