3 Common Self-Taught Programmer Mistakes That You May Be Making


The self-taught programmer is getting more and more prevalent, and I predict this trend will only continue. With the 2020 pandemic, many of us are at home and expect to remain home for some time.

As a ‘hybrid’ self-taught programmer, who has taken computer science classes but has no CS degree, I grow closer to Team Self-Taught each day — especially now.

One Fall semester, I was taking a math course at my local community college. This class was only one of an endless succession of math and physics courses that counted toward a CS degree. While working a full-time tech job, my nights and weekends were drained. I was doing no coding in order to keep up with CS-major classes.

Hopelessly, I felt there was no end in sight. I thought to myself, When will I be able to get this degree out of the way so that I can focus on the skills that matter? I had already worked as a web developer and was currently working in software, but I wanted to get to the next level in my career. It was taking forever and I wasn’t taking care of myself — finding no ability to cook for myself or work out.

At that rate, I was looking at years of work. And there was no finish line — no moment to know when I have successfully made it.

Then something happened that put everything in perspective: forest fires ignited in my county and spread fast toward the cities. Huge regions evacuated. Droves of people camped in their cars next to my home. Because of this huge disturbance, classes were canceled for a time.

This helped me see the truth: I did not have — nor did I want to — spend any more time delaying my dreams. Tonight, today, and every day, I can code. I can focus on the skills, right now, that I want to see improvement. I was done with prerequisites and delaying my life.

As the fires waged war on the county, I dropped my class. I saw the path for the first time. Instead of taking years to reach my dreams, it took mere months.

Universities and people will have you believe that you need a traditional computer science education, but that is far from true. Deciding on the self-taught coding route will save you money, time, and pain. When you have a desire to learn, everything is faster and easier.

The Self-Taught Programmer says:

[D]on’t forget that some of the most successful people in the world are self-taught programmers. Steve Wozniak, the founder of Apple, is a self-taught programmer. So is Margaret Hamilton, who received the Presidential Medal of Freedom for her work on NASA’s Apollo Moon Missions; David Karp, founder of Tumblr; Jack Dorsey, founder of Twitter; and Kevin Systrom, founder of Instagram.

Life is too short to have insecurities about where we got our education. Passion, curiosity, dedication, and interest trump any mandated curriculum.

Today, as we try to prevent the spread of coronavirus, schools everywhere are closed. Amongst these unforeseen disasters, we have safety in knowing we can always continue to learn from home and for ourselves, at whatever pace that makes us most alive, and whatever material that is most relevant.

Overview of the Self-Taught Programmer

The three learning mistakes below are inspired by my personal experience with learning to program (which I talk about in more detail in my free email course Get the Most From Technical Books) and by the book The Self Taught Programmer by Cory Althoff. The Self-Taught Programmer is a book with a full curriculum to become a self-taught programmer in Python, using a nontraditional approach: learn code first and theory second.

The book is divided into five parts. The first part, “Introduction to Programming,” focus on programming fundamentals such as how to set up your machine, use variables, data types, and operations, functions, containers, loops, and so on. Part one ends with a detailed project: a game of war.

The second part is “Introduction to Object-Oriented Programming,” which introduces concepts such as the four pillars, state, and procedural vs functional programming.

The third part is “Introduction to Programming Tools,” which describes Bash, regular expressions, and version control.

The forth part is “Introduction to Computer Science,” which details data structures and algorithms such as stacks and queues, recursion, and palindrome.

Lastly, the fifth part is “Landing a Job,” which details good programming practices like don’t repeat yourself (DRY), choosing a career path, getting the interview, working on a team after getting he job, imposter syndrome, and how to keep learning.

The lessons learned in this article applies to all programmers, whether or not you will benefit specifically from The Self-Taught Programmer book.

A benefit of reading a book on programming is getting some time away from the computer.

A benefit of reading a book on programming is getting some time away from the computer.


3 Common Self-Taught Programmer Mistakes

I made mistakes in my path to becoming a programmer. I am here to share what I learned so that you don’t experience the same pitfalls. Becoming a self-taught programmer ought to take you months — not years. Learn the pitfalls so that you can actively work against them.


Mistake 1: Not Identifying the Finish Line — And Being a Forever Beginner

Instead of studying opening moves [of chess, [Josh Waitzkin] started learning the endgame (when there are only a few pieces left on the board) first. This strategy gave him a better understanding of the game, and he went on to win many championships.

The Self-Taught Programmer

Take an end-game first approach: envision the pieces of a winning game and work backwards from there.

Take an end-game first approach: envision the pieces of a winning game and work backwards from there.

As a self-taught programmer, we are prone to imposter syndrome. I had tweeted about how I am not comfortable calling myself a “software engineer,” since “engineer” feels weighty and highly educated.

Those without CS degrees often feel this way.

Being self-taught, we may associate that with being scrappy or having blind spots, and not like we have put together our own curriculum that amounts for all or more of what a computer science student has.

Without the degree, we can be more prone to insecurity about our skills, and as such, we may be in the process of being ‘self-taught’ forever. That’s why we need to see a goal clearly.

The book The Self-Taught Programmer encourages an “endgame first” approach to programming. The endgame-first approach is to start at where you want to be and work backwards.

This is an effective approach, because this lessens the chance that you will get bogged down by learnings that will ultimately prove to be irrelevant. When we take a theory-first approach, we do not yet know the application or relevance of what we are learning, so we cannot accurately weight its importance.

An endgame-first approach ensures that you waste a lot less time.


Mistake 2: Getting Bogged Down By Theory

Learning to play the flute by myself without one-on-one instruction was detrimental to my learning. I had to undo years of bad practice. As a self-taught programmer, it’s all-too-easy to fall into bad practices.

Learning to play the flute by myself without one-on-one instruction was detrimental to my learning. I had to undo years of bad practice. As a self-taught programmer, it’s all-too-easy to fall into bad practices.

Learning without theory was like me in elementary school learning to play the flute without one-on-one instruction: my form suffered and I years later had to untangle mistakes that were nearly impossible to undo.

But with programming, I made the opposite mistake: I took classes that focused on theory without investing in the hands-on day-to-day activities that programmers actually do.

In addition to understanding your data structures and algorithms, you need to develop comfort with your text editor or IDE, develop comfort with package managers, Bash, and using a terminal, and learn how to use version control.

You must learn theory, but the trap lies in starting there and staying there, not knowing how to do the basic day-to-day tasks of the job itself, which is living in Stack Overflow more than it is using Big O Notation. The university system might put you in a place where you are learning only theory without application — without coding at all in a semester. As a programmer, you must always be coding.

The Self-Taught Programmer encourages learning to code first and learning theory second, which is how the book structured:

The way I learned to program is the opposite of how computer science is usually taught, and I structured the book to follow my approach. Traditionally, you spend a lot of time learning theory — so much so , that many computer science graduates come out of school not knowing how to program. In his blog “Why Can’t Programmers Program?,” Jeff Atwood write, “Like me, the author is having trouble with the fact that 199 out of 200 applications for every programming job can’t write code at all. I repeat: they can’t write any code whatsoever.”

Taking a coding-first learning approach is powerful to learning fast and efficiently — an approach that many universities don’t care to use. Why? University systems are not incentivized to teach you efficiently or expediently. The time frame is approximately four years, after all.

But you don’t need four years, and to learn efficiently, you need to program your subconscious to care about what you’re going to learn. And caring means putting yourself in a situation to fully grasp all that you don’t know. Failing a code interview or starting a programming project knowing nothing is a slap in the face — but one that kickstarts your learning like nothing else.


Mistake 3: Taking the Scattershot Approach

In a litter of puppies, you need to pick only one. The same goes for selecting your programming language.

In a litter of puppies, you need to pick only one. The same goes for selecting your programming language.

The Self-Taught Programmer focuses on only one programming language: Python. A common mistake: self-taught programmers have a hard time focusing on just one thing. There is so much to learn, it’s hard to hunker down and figure out only one programming language or framework.

We want to be fast, but being slow and diligent is the fast approach.

Programming requires deep focus and problem solving skills, but if you find yourself in a position trying to learn more than one thing at the same time (which I am totally guilty of, too), it’s easy to find yourself never in that focus state and therefore not learning to be a programmer.

When I dropped my computer science class, I was overwhelmed by all I wanted to learn: test-driven development, design structures, algorithms, ES6 Javascript, as well as the major Javascript frameworks like React, Vue, and Angular. Software companies are all working with different stacks, tools, and frameworks, and so as you look at what is out there, you feel a ridiculous amount of pressure to know all of the things right now. You might be tempted to jump from one skill to the other, ultimately scattering your focus and ending up nowhere.

Deciding on one thing — one language — is one of the most powerful approaches you can take as a self-taught programmer. The author of the Self-Taught Programmer, Cory Althoff, wrote a blog post titled “The 3 Mistakes I Made Learning to Code.” This is what he has to say about learning only one language:

When I first started programming, like many other beginners, I tried to learn multiple programming languages at once. Trying to learn Python and Objective-C at the same time stopped me from making enough progress in either.

I’ve seen beginners trying to learn as many as three programming languages at once. When you are learning to code, you should avoid this. Pick one programming language, master it, and then learn more languages. When you learn how to program in one language, you will be able to pick up any other language in the future easily.

I am reminded of my 8th-grade English literature teacher, who told that class that she learned Spanish and French at the same time and got so confused by the language’s many similarities that she ended up learning a Spanish-French fusion.

When you commit to learning one language and learning it well, you have a solid frame of reference. Many languages share similarities and they share concepts. For example, you will encounter logic in any language in the form of conditionals, but there are minor differences between them. Many languages operate with object-oriented principles, but the difference between Javascript and C++ are fundamentally different, even though the ES6 mask may make them seem similar on the surface.

Do not confuse yourself.

Learn fast by being patient and diligent.

Choose one thing and stick to it.



Conclusion: Choose Programming First

Every day, learning how to code feels painfully slow, but it is an incremental process. That’s why I absolutely love the #100daysofcode challenge. If you code every day, you will be blown away by your progress in several months time.

If you are interested in a more hands-on, instructional approach to programming with graded assignments and all, I cannot recommend Coursera’s Fundamentals of Computing by Rice University highly enough. The courses cover “much of the material that first-year Computer Science students take at Rice University.” And being honest — I got far more from this than I did my local university curriculum.

This was true for me.

When I started a web development internship, I was completely green. After three months, I didn’t recognize myself from who I was, and that simply kept repeating itself.

Practicing each and every day on practical projects will give you exactly what you need to excel professionally. Don’t go chasing employers or trends. Don’t procrastinate by learning theory first. You can be a programmer from day one. All you need to do is commit.

We’re finding ourselves at home, practicing social distancing for a long time. Instead of the streaming or playing more of the new release of Pokemon Mystery Dungeon (guilty as charged), use your insanely valuable time to become the self-taught programmer you always dreamed of being.

If you want to read more about programmer’s mindset, this article on ‘becoming’ a programming will be your exact cup of tea. I will see you over there.👋😊


Miranda Limonczenko

Miranda is the founder of Books on Code, with a mission to bring book-lover culture to programmers. Learn more by checking out Miranda on LinkedIn.


3 Coping Strategies for Programmers in Quarantine


Eloquent Javascript 2nd Edition vs 3rd Edition