You can train to become an employable programmer at a coding school such as a MOOC, a programming boot camp, a course platform, an accelerated coding academy, or a two- or four-year college. Or, you can train entirely on your own—better known as self-taught or self-educated, an option that has always been popular for years, especially before web programming became as complex as computer science is and required dedicated study.

You Need More than Just A Bit of JavaScript and HTML and CSS

Gone are the days when anyone can study a bit of HTML, CSS, and JavaScript and call themself a frontend developer and get a high-paying programming job. Nowadays, tens of thousands around the globe are pursuing proficiency in their programming career paths at coding schools and universities. As a result, the impressive candidates get hired by the best companies and receive the most rewarding salaries.

Since a self-educated programmer has access to the same kinds of high-quality programming courses as students attending expensive coding schools and universities do, a self-educated programmer can become just as qualified, skilled, and knowledgeable as any graduate from the best coding school or university. Still, too many people try to read a few blog posts and build a todos app and believe they are ready for a professional programming job.

Although inexpensive and even free, liberating and even self-empowering, and accessible to all and highly rewarding, self-education has its own disadvantages and peculiarities. And these negatives can both prevent a student from ever becoming a programmer and leave a student inadequately prepared for real-world programming jobs, even after many months of self-education.

Let’s find out how best to navigate the treacherous yet highly rewarding self-education path to a programming job, something I myself did after I graduated from college.

Article’s Objectives and Key Results (OKRs)

In this article, we set out to accomplish the following objectives, all of which you will realize when you read the article and complete the exercises at the end:

  • Determine whether you have the factors necessary for self-education in programming for a programming career.
  • Know the advantages and disadvantages of learning programming on your own.
  • Understand the processes and learn the resources for self-education in programming.

We discuss the key results (the specific concepts or ideas you will learn and the steps you will take to accomplish the objectives) at the end of the article.

The rest of this article continues after the series’ table of contents below.

Should You Learn to Code on Your Own to Become an Employable Programmer?

You should learn to code on your own only if you are cognitively fearless and have a strong problem-solving inclination (you know if you do) and have the other important considerations, all of which I detail on the following list:

  • You have the exceptional discipline necessary to learn dozens of difficult concepts and complete the many requisite courses to acquire at least competency in your career path, all on your own. The vast majority of people don’t appear to have this sort of exceptional discipline and cognitive fearlessness (described below) to learn a highly technical and rigorous field of study on their own. So, be sure you do have the exceptional discipline to do it; if you don’t, you will take many shortcuts o not complete enough of the training to become an employable programmer.

    I noted above that because tens of thousands are pursuing a career in programming at formal coding schools and universities, gone are the days when anyone can learn a bit of HTML, CSS, and JavaScript and expect to get a high-paying programming job. You need to know more and have experience to build real applications.

  • You can’t afford the tuition for any of paid coding schools. Because a coding school makes learning programming easier (see the last section of this article below) than learning entirely on your own, you may want to take the easy way out and pay a coding school and get a proper education, unless you can’t, of course, afford the tuition.

    You should know that while most of the paid coding schools are expensive, some of them have an affordable monthly tuition model. Some offer a variety of scholarships, and some allow you to postpone the tuition until after you graduate.

    (Be wary, heck stay away, from this last option, though, as you will likely be stuck with a big student loan, likely for many years. And the negative impact to your credit and future self could be much worse than you imagine now. I discuss this issue in the next article in the series.)

  • You are extremely driven and know you will push yourself to succeed: If you are not driven to become a programmer, by a compelling reason—your purpose—you will quit or take shortcuts and might never become a proficient and confident software engineer.

  • You have all four of the crucial factors for success in programming.

  • You have cognitive fearlessness. I describe cognitive fearlessness as the unusual confidence a person has in himself or herself to learn any field of study on their own, no matter how complex the field may be. Notice I said field of study, not some concepts in the field.

  • You know a professional developer, or someone more advanced than you are, who will review your code and give you feedback. Or, you are confident you can look at high-quality professional code and learn how to write such professional-grade code.

  • You are willing to put in considerable time to learn the hard way. Learning on your own is learning the hard way. Consider, for example, that the material I learned over a period of nine years in frontend development on my own, students at Bov Academy learn the same material in just seven months.

  • And you are willing to accept that there will be some things (likely many) that you should know and need to know that you won’t know. Indeed, even after you complete your training, whether you take months or years to complete it, you will still need to learn quite a bit more as you discover, in the real world working as a programmer, what you know and don’t know.

Everything I know about about web programming I learned on my own, from dozens of books and scores of articles and endless coding samples on coding forums and in open-source projects. Although I graduated from college with a degree in computer science, my learning on the web started before I graduated from college, before I even enrolled in computer science the program. I used to be a Biochemistry in college major for nearly four years. As much as I learned, I never knew enough. At the end of this article, I share with you a relevant story about my experience.

The main point is that learning on your own is doable and affordable and even rewarding, but you have to be prepared for the hard work and don’t expect to complete the entire process in some really short amount of time, such as 2–3 months.

Many Great Programmers Learn to Code on Their Own

Many web programmers who started their web programming career before 2006 taught themselves to code because web programming was still a relatively small field of study then; fullstack development wasn’t as complicated as it is today; as I hinted earlier, it is on par with computer science as a field of study.

And there was practically no formal web-programming education available. Programming boot camps and similar accelerated programming academies are a relatively new phenomenon. Books and online tutorials and coding forums were the primary sources for learning to code. In fact, I know some developers who became proficient programmers primarily by reading other developers’ code and by practicing.

A few of the all-time great programmers didn’t study computer science; they taught themselves to code, from scratch to excellence. These include TJ Holowaychuk (he is perhaps the most prolific programmer the web has ever known; he developed over 540 NPM modules) and David Heinemeier Hansson (the creator of Ruby on Rails), to name two.

So, learning to code should not be feared, but embraced and pursued, if you have cognitive fearlessness and all the other factors noted above.

How To Teach Yourself to Code and How to Learn and What to Learn?

There exist many opportunities for teaching yourself to become a programmer. But what do you learn and how much to learn are among the most important questions and the most difficult to answer. For a systematic and definitive path to coding, let’s focus on two primary goals for learning to code:

  1. You can learn the basics of programming to become programming literate. Let’s call this the learn to code for programming literacy option, which I will also refer to as learn to code or the learn-to-code option.

  2. You can train to become an employable programmer, a highly skilled software engineer or developer or an employer or an entrepreneur in a programming-related career. Let’s call this train to become an employable programmer option, which I will also refer to as the train-to-become-a-programmer option.

There is a big difference between the two, as the former requires just weeks of work and completion of a few elementary to intermediate courses. While the latter requires many months of training and completion of more than a dozen courses, including advanced courses on complex programming concepts that most people who learn to code will never learn and will never need to learn.

What to Teach Yourself To Code For Programming Literacy

You can use free coding platforms or blogs that teach you elementary HTML and CSS and JavaScript and other web technologies. For programming literary, your goal is to understand the how the web works, how to use a programming language, how mobile and desktop apps are developed, how to develop your own nontrivial website, how artificial intelligence is relevant to you today, and so on.

Specifically, you want to understand the following, all of which will help you to become programmatically inclined or programming literate:

  1. How to use the command line on your computer to move files, edit files,
  2. How to use git and GitHub
  3. The fundaments of the web, including the protocols the world wide web
  4. The differences between a mobile app and a web app and a website and how each is developed and deployed
  5. HTML and CSS and how to use them to build a website
  6. The fundamentals of programming in JavaScript
  7. How to build a website (such as a portfolio) by writing your own code (no CMS or UI library), and add JavaScript functionality to the website
  8. How to use a CMS like WordPress to create your own blog
  9. How to build a JavaScript-only small web app, such as a todo list; this sort of simple coding will give you the fundamentals of programming and help you comfortably learn any other programming language later
  10. How to use a UI library such as Bootstrap to quickly build a website
  11. The basics of Regular Expression
  12. The fundaments of website security on the frontend

How to Teach Yourself To Code To Become an Employable Programmer

If you want to learn to code on your own to become an employable programmer, expect to work hard and spend more than 20 hours a week learning to code in the first few weeks. After the fist three weeks, you could easily spend 40 hours a week or more building projects as you hone your programming and UI/UX development skills.

But before you embark on your passage to a rewarding programming career, ensure you do the following:

  1. Know your purpose and your goal: Your Goal and Purpose for Learning Programming Will Determine Which Programming Career Path to Pursue and Whether You Will Succeed.

  2. Get your family support because you will need it: Why You Will Need Your Family’s Support While You Train to Become an Employable Programmer.

  3. Ensure you understand the crucial factors for success in programming and choose a career path that aligns with your capacity: The Crucial Factors for Success in Programming, Assessing Your Capacity to Become a Programmer, and Choosing the Best Programming-Related Career for Your Capacity.

  4. Once you feel confident you are ready to proceed and you have chosen a programming career path (after considering the many options) that aligns with your goal, purpose, capacity, and interest, research the concepts and technologies you need to know for that career path, and find the relevant courses.

  5. Contribute to open-source projects on GitHub. Some of what you will miss in group projects a coding school can be made up on open-source collaboration. Furthermore, you get many additional benefits for working with others in the open-source community, including exposure to professional-grade complex code, recognition for your contributions, and the opportunity to network other outstanding programmers and others in the programming community.

  6. Read the source code on open-source projects and try to understand them and emulate the notable implementations. You will learn more about writing robust, maintainable, DRY (Don’t Repeat Yourself), efficient, less-buggy, and scalable code by reading other top programmers’ code than from reading many programming books and watching video courses.

  7. Don’t get mired down in theoretical scholarship by reading about one concept (for example, JavaScript this) on many websites and in books just to understand it. You can easily get stuck in this phase, researching many concepts in scholarly depth. You could waste many weeks and months going into such depth, when you extrapolate the many concepts you will want to better understand over a period of a dozen or more courses.

    What you really need to know is mostly how the concept applies in the real world. Once you understand the concept adequately, use it in the context of building a real project and its meaning will emerge and hit you about the head, and you will get it right away. Or, at least you will better understand its relevance in a real-world application.

  8. Spend at least 2–3 months solving coding challenges. The more time you spend on this, the better you will get at solving these problems and the more likely you will excel in the coding challenges given in the technical part of programming job interviews.

  9. Build as many projects as you can. The secret to becoming a great programmer is not in having great instructors or teachers or attending one of the best coding schools or universities or taking many courses. The secret is ridiculously simple: Practice coding. Practice building serious projects. Practice incorporating into real applications the theories and concepts you learn. Practice solving scores of coding problems. Practice as much as you can. Dedicated practice, as Mihaly Csikszentmihalyi discovered, is the secret to mastery in any field or pursuit.

If you are cognitively fearless and have all the other factors we discussed in the Should You Learn to Code on Your Own to Become an Employable Programmer section above, you will no doubt become a formidable developer and perhaps even an exceptional software engineer.

Where Can You Find Free Programming Courses and Books?

Of course, you can pay for courses and buy programming books, but you also have access to a wealth of free resources to learn programming, not just on an introductory level but even at an advanced and beyond advanced level. The following sections highlight some of the invaluable programming resources you can get free.

1. Free Online Programming Courses from Elite Universities

The following list has links to free programming courses from the most prestigious US universities for a degree in computer science:

  1. MIT
  2. Stanford
  3. Yale
  4. Harvard
  5. Carnegie Mellon

2. Free Online Programming Courses and Blogs and Course Platforms

The following list includes links to websites that offer free programming courses:

  1. Coursera
  2. edX
  3. Codecademy
  4. Codewars
  5. FreeCodeCamp
  6. JavaScript Is Sexy
  7. GA Dash
  8. Khan Academy
  9. MIT OpenCourseware
  10. The Odin Project
  11. Udacity
  12. SoloLearn
  13. The Code Player
  15. Udemy
  18. W3Schools
  19. Coderbyte
  20. Microsoft Virtual Academy
  21. Edabit
  22. Launch School Open Book Shelf
  24. Learn to Code HTML & CSS
  25. JavaScript for Cats
  27. Learn JS
  28. Eloquent Javascript
  29. Watch & Code
  30. Code Avengers
  31. HTML5 Rocks

3. Free Programming Books

The following list includes links to websites with dozens of free programming books:

  1. Github
  2. Tutorialzine
  3. MakeUseOf
  4. WebPageFX
  5. Open Library
  6. Free Computer Books
  7. Internet Archive
  9. XooBooks
  10. BookBoon
  11. Ebook-dl
  12. Ebook777
  13. 4shared
  14. Ebookee
  16. BookFI
  18. EbookLobby
  19. Online ProgrammingBooks
  20. GetFreeEbooks
  21. FreeTechBooks
  22. Free-Ebooks

Related Article on Free Online Resources for a High-Quality Education

This article, How to get a world-class education for free on the internet, has additional resources on high-quality free online education.

The Disadvantages and Advantages of Learning Programming on Your Own vs. Learning Programming at a Coding School

Learning programming on your own to become an employable programmer is a painful, inefficient, and time-consuming process. I know because I myself learned fullstack development on my own. I took over nine years to learn the similar material we teach our students at Bov Academy in just 7–12 months. I learned on my own because I had no choice. There were no formal web-programming training programs then, as we just discussed. Still, I no doubt benefited immensely from the experience.

Evidently, then, there exist advantages and disadvantages to learning to code on your own. Let’s look at some.

Advantages of Learning to Code on Your Own to Become an Employable Programmer

The advantages follow:

  • You will get your entire coding education free of cost or for a negligible cost.

  • You get to choose the specific courses and resources you prefer to use to learn all the material you will learn.

  • You get to avoid deadline and other pressures that naturally come from working with instructors and teammates in an educational setting; this, of course, can be seen as a disadvantage too, not just an advantage.

  • You get to select courses and specific lessons and lectures from some of the best educational institutions and course platforms, and you get to learn from some of the best individual teachers, such as those with their own Youtube channel or with a blog that focuses on teaching programming.

  • You get to set your own timeline for your studies and for building projects and applications.

Don’t make the short list deceive you; many of the noted advantages are crucial for some people, especially for people who can’t afford to pay for any coding school.

Disadvantages of Learning to Code on Your Own to Become an Employable Programmer

The disadvantages follow:

  • You won’t get feedback or guidance on your code and projects from an experienced programmer or instructor. You won’t know what specifically you are not doing well and can improve on, besides what you yourself determine.

  • You will not get the benefit of a well-researched and well executed curriculum. Coding schools, just as any educational institution, put much effort into their curriculums and teaching methodologies. Well, any good coding school should. Consider that Bov Academy has about seven well-regarded and innovative teaching methodologies built into the program to help our students learn and understand the material so as to attain confidence, proficiency, and mastery.

  • Without a detailed curriculum, you will learn many things you don’t need to learn for your career path and, most crucially, you will not learn many things you need to learn to become confident and proficient in your career path.

  • You will not get the privilege of working with others in a real-world setting while you learn, unless you contribute to open-source projects.

  • You will spend much time learning some crucial concepts from different books and courses because some of the concepts you need to learn are not taught with sufficient clarity and comprehensibility and comprehensiveness elsewhere.

  • You will not get the direct educational guidance on building relevant consequential projects to cement the concepts you learn in a methodological manner.

  • Because you alone are your source of inspiration and guide, you won’t get the encouragement you can benefit from and the group communication that will improve your soft skills.

That there are more disadvantages than advantages should not surprise you. Again, learning to code on your own is a time-consuming, inefficient, and painful process for most people. And it requires an exceedingly high-self confidence and considerable drive. Still, some of the best programmers have learned to code on their own, as we have see, and if you have the facts for self-education in programming, why not give it a go?

Why Learning To Code on Your Own Is Difficult and How Does it Compare with Learning at a Coding School?

I shared the following with students at Bov Academy over a year ago.

As you might have read on my JavaScriptIsSexy blog, although I graduated from college with a CS degree, just about everything I learned about web programming I learned on my own, from many websites and books and forums. The process took me a long time, more than nine years. It was a mess:

  • I learned good stuff and bad stuff, efficient programming techniques and egregious ones, too.

  • Some concepts were so poorly explained and inadequately covered that I spent countless hours trying to fully grasp them on many different websites, many tutorials, and by reading many books.

  • I read more than three dozen web programming books during my web programming career, all because there was no single authority, no single book or website that teaches everything, or even a fifth, of what I needed to learn. Few articles taught the concepts properly—that is, in a clear and comprehensive manner. No one, that I could remember, taught web programming with authority. This was perhaps because everything was still new and changed so often that no one knew the full extent of what needed be taught or learned. Even the revered godfather of JavaScript, Douglas Crockford, taught some not-so-wise and irrelevant coding principles in his much regarded JS book, JavaScript: The Good Parts.

You might think, after reading the last few sections above, that I am speaking about a long time ago. No, I am actually referring to between 2004 and 2013, maybe a bit of 2014, too. This time period is relatively recent.

In short, I know from experience that learning web programming on your own is painful and time-consuming and more unreliable than you may think. I know that there is much to learn and that when you know the things you need to know, your entire life as a developer is more enjoyable, more rewarding.

I also know what technologies and concepts a confident and skilled frontend and fullstack engineer should know, having worked as both a frontend developer and a fullstack developer in varying capacities (from working at corporations to working on teeny startups) and having researched web programming extensively. The comprehensive curriculum is evidence of the need to help students become proficient and confident.

Bov Academy [As Any Other Reputable Coding School] Tries to Cover You Fully

I suffered embarrassment and more and wasted hundreds of hours Googling stuff, reading stuff on StackOverflow, and building dozens of practice projects, some inadequate. If I add up the time I spent learning stuff and Googling stuff, running into errors, and so on, I know I won’t be shocked to learn I was away from family for an eternity with my head fastened in front of my computer screen.

I thought the only honorable thing to do is to create the program so that each Bov Academy graduate, no matter how fast or slow a learner he or she might be, will:

  • Graduate from the program a more skilled developer than my colleagues and I ever were

  • Not suffer the same embarrassments I suffered

  • Be the (or at least, one of the) most informed and knowledgeable developers on whichever team they are on when they have a professional job

  • Not need to spend hundreds of hours searching the web to understand many of the fundamental web programming concepts or technologies

  • [Will] have learned precisely what they need to know to have the confidence to go excel in the real world as a professional developer

Those are some of the reasons we spent nearly two years researching and building the comprehensive Bov Academy curriculum.

We want you to graduate the program as a masterful engineer. The curriculum has everything you need for you to accomplish this goal.

I Suffered and I Don’t Want You to Suffer

I didn’t know what I didn’t know until I found myself on professional projects that required certain expertise, some basic skills, that I didn’t have. I had to learn stuff on the fly, often.

I barely understood some fundamental concepts that you have mastered in just a week or two here at Bov Academy. I took years to fully master things that you have mastered or will master in just a month or two.

I worked on professional consequential projects, such as building a web app for the National Rifle Association (NRA) (I had no affiliation with them; I was just given the responsibility to build an entire app for them, on my own) and discovering that I didn’t know anything about web app security when the client told me that hackers try to hack them thousands of times a day and security is the most important part of the project. Worse still, The company I worked for already had the contract to build the project and the client already announced the launch of the project. What do you do in such situations? You can’t quit. In my case, I bought a bunch of books on the subject I needed to learn and read as fast as I can— during and after work. I did this often. There weren’t many places to learn from, and only books were comprehensive enough and authoritative enough to teach me what I needed to learn for the consequential projects I was working on.

I discovered on a professional project—while in a meeting with high-ranking officials at the National Institutes of Health (NIH) and with officials from two competing firms—that I didn’t know diddly-squat about web application architecture. How humiliating this was, as the lead engineer and chief representative for my company.

I was humbled and embarrassed on a technical interview when I couldn’t answer the logic problems I had been asked to solve. If I had been taught properly at a place like Bov Academy, those same questions would have been easy to solve because I would have practiced solving them. These are the same types of problems we give you to solve in the Art of Programming course. You become a better problem-solver by solving problems.

I stumbled when I was asked to improve the code on a huge project, after I discovered the code was written with design patterns and advanced functional programming techniques I had never seen. I had to go learn stuff and figure out stuff on the fly.

I could go on, but I think I have left you with enough to help you understand why we put much effort into creating a comprehensive curriculum. We have done it to help you soar.

Ponder This Comparison about Self-Education vs Formal Education in Highly Technical Disciplines

I believe that the education necessary to become a software engineer is more complex and comprehensive and challenging than the education to become a dentist.

Without knowing anything else about two dentists (a self-educated one and a formally educated one) besides getting great recommendations on both of them from your friends and colleagues, would you choose the self-educated dentist or the one educated at an average dental school?

The answer to this question will help you understand the tough challenge employers face when they have to decide whom to hire, when much else about the candidates are is comparable and why you can’t easily place a value on a formal education.