By August 29, 2016

Learning Programming By Teaching Yourself – Catastrophe or Brilliance?

Many programmers are self-taught.

It’s not rare in the world of software development to come across a programmer who learned how to program on his own.

Some of the best programmers learned programming out of necessity when doing another job, and found they needed to automate some set of common tasks.

That doesn’t mean teaching yourself programming is easy.

There are plenty of eager software developers in training who struggle with teaching themselves and get frustrated along the way.

A self-taught programmer is a unique animal in the world of software development.

I can tell, almost immediately, when I am working with a self-taught programmer versus someone who went to school or coding boot camp to learn programming.

Self-taught programmers tend to think they can take on just about any challenge.

But… sometimes they get in over their heads or they move too fast, often being labeled as cowboy coders.

That doesn’t mean all self-taught programmers are the same, but there are some distinct advantages and disadvantages to learning to code on your own.

If you are considering learning on your own, you should be aware of the advantages and disadvantages before you embark on this exciting and sometimes frustrating journey.

Advantages to Self-Taught Programming


First, let’s talk about advantages — and there are plenty.

Most of the advantages here are based around flexibility.

When you learn on your own, you have ultimate flexibility. Some people see this as a good thing, others as a bad thing.

I tend to think of it as a mixed blessing.

Flexibility is great when you can utilize it to allow you to do more and go down the path you want to go down.

It’s not so good when the lack of structure leaves you feeling like you don’t know what to do and lacking the motivation to find out.

Cost is low or nothing

Teaching yourself to program can save you a huge amount of money.

Today, anyone could conceivably learn to program just using the free resources available on the internet.

We really do live in an amazing time as far as access to information, especially about programming.

The web abounds with free tutorials, blog posts, reference manuals, and even complete copies of books which one could use to learn how to become a software developer.

In fact, if you are reading this chapter as a blog post on my blog at, it’s completely free.

Even many of the programming tools and development environments are free for programmers learning their craft.

Now, that doesn’t mean free is always the best way to go.

Often it’s worth paying some amount of money to get access to a more curated set of learning materials.

But, again, that route is still much cheaper than college or a coding boot camp.

A few thousand dollars can buy you far more books you can ever read and gain you access to literally thousands of online courses through sites like Pluralsight, Lynda or Udemy.

If you are cash-strapped, this reason alone might be enough to convince you to go down the self-taught programmer route.

Self-education is one of the most valuable skills you can learn2-most-valuable-skills

Whenever I give a talk on the top five soft skills every software developer should know, self-education, or learning to learn, always makes the top of the list.

I can’t stress enough how valuable of a skill this is, in not just the field of computer programming and software development, but in life in general.

People who master the skill of self-education have a whole world of possibility and opportunity opened up to them that those who rely on others for education and learning do not.

There is almost nothing you can’t do in life if you have the ability to teach yourself, so I place an extremely high value on learning this skill.

That doesn’t mean you have to learn this skill by learning to program on your own, but it is a great way to develop it since it’s such a difficult and demanding endeavor.

There are few things that are more difficult to learn in life than learning to program on your own.

I know some people will disagree with me on that statement, but I have taught myself many skills and I have been a teacher of all kinds of life skills for a long time, and I’ve only encountered one challenge greater than that of learning to code: learning to be an entrepreneur.

You can learn at your own pace

One of the major struggles people have with traditional education or boot camps is that they either move too fast or too slow.

Different people, with varied backgrounds, intelligence levels, and concentration abilities are going to learn and grasp things at a different pace.

It can be frustrating to be in a class or setting where the teacher is teaching at slower pace than what would be optimal for you, because if feels like you are wasting your time and you may become bored and not pay attention.

On the other hand, it can also be equally frustrating when you are sitting in a class that seems to be moving too fast and you are having trouble understanding what is going on.

By teaching yourself how to program, you can avoid this problem completely and move at the pace that is most comfortable to you.

In the end, you’ll probably have a better understanding of what you are learning, because you’ll be able to completely explore a concept before moving on to the next one.

If you consider yourself a slow learner or a very rapid learner, this could be a big advantage that you may want to consider.

I almost always try to learn things on my own for this very reason.

You can work around your schedule


When you decide to go to college or a coding boot camp, you are committing a huge amount of time in both your daily schedule and your life to one specific endeavor.

This can be great if you don’t have other commitments and you have the luxury of focusing on just learning to program or getting your degree, but if you already have a hectic schedule and you don’t want to quit your full-time job, learning on your own can be a much better choice.

In fact, it may be your only choice.

I learned programming on my own and then completed my degree on my own through a correspondence school.

I needed that flexibility since I already had a really good job that I had no interest in leaving.

So, if you don’t want to drop everything else in your life to focus on learning to program, this could be a pretty big reason to learn on your own.

You can go deep on subjects you are interested in

One of the things I found best about learning on my own is that I could go really deep into the subjects I was most interested in.

When I did go to a traditional college, I was constantly frustrated by having to move on before I felt like I had completely explored a topic.

I often felt like we were just rushing through the material so we could complete the textbook––not really trying to learn.

If you find yourself to be a very curious person who really wants to dig deep and understand what they are learning, you will probably be frustrated in college––and perhaps in coding boot camps––where there is often an emphasis on rushing to cover the required material, rather than going deep to gain true understanding.

Disadvantages to Self-Taught Programming


Learning on your own definitely has some great advantages, but it has some definite disadvantages as well.

That same flexibility that is great for working around your schedule and letting you set your own course can be a detriment when you feel like you don’t know what to do and no one is guiding you.

Here are a few disadvantages you might want to consider before becoming the facilitator of your own educational journey.

You have to figure out what to do and what to learn

Remember how I said flexibility was both a blessing and a curse?

Here is why.

When you have absolute flexibility, it can be extremely difficult to decide what to do.

What do you learn first?

How do you know if you are doing it right?

How do you know if you are done?

These are just some of the questions that come up when you are trying to teach yourself programming.

That is part of the reason why I laid out a step-by-step process for learning your first programming language in the chapter “Learning Your First Programming Language.”

I always say that everyone wants freedom, but not many people can handle it.

If you are not a self-starter and you have problems with motivating yourself and walking down paths that you are unsure of or not completely paved, you might want to consider learning programming via a more guided pathway.

No help with finding a job5-no-help-looking-for-a-job

While colleges don’t often offer a huge amount of direct support for finding a job after you graduate, there are usually internship programs or networking opportunities which you can take advantage of to greatly increase your chances of getting a job after getting your degree.

Coding boot camps are even more focused on helping graduates get placed into companies after completing their programs.

But, when you are on your own… you are on… your own.

It can be pretty tough to find your first job as a self-taught programmer.

Getting your foot in the door and proving that you know what you are doing without any experience, certificate, or degree, can prove challenging.

But it can be done. In the next section of the book, “Finding a Job,” I’ll talk more about how, but this is definitely something you should consider, before you fully commit to the self-taught route.

It’s easy to lose motivation

Not many people can push on and accomplish a goal without motivation.

It’s an extremely valuable skill in life, but it’s a rare one and is difficult to develop.

Most people only do things when they feel motivated to do them–which is usually when they first start.

That is where committing to a structured program like a formal degree at a college or even a three to six-month program at a coding boot camp can help.

When you feel obligated to complete something because you threw down a large wad of cash, or committed a large amount of time already, it can be easier to push on, even when motivation wanes.

It can also help to be around other people whose motivation and enthusiasm may rub off on you, for those times when you are lacking it.

Learning on your own can be difficult if you can’t either work without motivation or you aren’t very good at self-motivating.

Remember, everything eventually gets boring. The newness wears off.

At some point, studying programming at 7:30 PM, after a hard day of work is not going to seem so fun. Will you be able to push through and do it anyway?

Or will you be better off with a formal structure that guides you a little more firmly?

Social isolation


Let’s not forget social isolation.

This is a very tough one for many people to deal with and it’s one of those problems most people never suspect they will have.

Colleges and coding boot camps provide plenty of opportunities for you to socialize and work with other people seeking a similar goal.

At first, studying on your own might not seem so bad, but after a few weeks of being locked up in your room or office by yourself in front of your computer, you can start to go a bit stir-crazy.

I spend quite a bit of time in my office by myself, so I know this from personal experience.

I find other ways to get out and socialize when I can, but even I have short fantasies of going into a regular office and being around people, rather than being alone for most of the day.

This is definitely something you might want to test out and see how you do, before you make a final decision.

Likely to have gaps in knowledge

I know I’ve given you quite a few disadvantages so far to learning on your own.

I don’t mean to paint an overly bleak picture, because I am a big advocate of self-education. I just want to make sure you know what you are getting into, because this route has the highest chance of failure for most people.

So bear with me while I tell you one more disadvantage. Last one, I promise.

Just like I mentioned with coding boot camps, learning on your own is likely to leave you with some definite gaps in knowledge, but probably in different areas than what you would experience going to college or a boot camp.

Many self-taught programmers lack some of the best practices and orthodoxy that college or boot camp graduates may have.

That is because when you work in isolation and solve problems on your own, you start to develop your own ways of doing things.

This isn’t necessarily bad, but it can be if the way you figure out how to do things greatly differs than what is commonly accepted and you aren’t willing to learn and change once you get a real job.

You can of course combat this by purposely trying to add computer science material to your self-study program and working on shared projects, like open-source for example, but just be aware that you are likely to have some gaps in your education that you won’t be aware of.



I’ve already covered quite a bit of strategy on self-education on the chapters on “Learning Your First Programming Language” and “How to Develop Technical Skills,” but I’m going to dive into a few more tips that I think will help you on your path to learning on your own.

As I’ve mentioned before, you’ll probably find my “10 Steps to Learn Anything Quickly” course to be of some value as well, since it gives you a good system to use for teaching yourself just about anything.

Come up with a plan

When we fail to plan, we plan to fail.

Isn’t that how the old saying goes?

It may be cliché, but it is so true.

I can almost guarantee you that if you don’t come up with an actual plan for how you are going to learn how to become a software developer, you will inevitably fail.

Planning is extremely important in any endeavor where you are working on your own and setting your own course. Trust me, as an entrepreneur, I know.

So, make sure you actually plan out what you are going to learn, how long you are going to spend learning, and the actual steps you need to take to get from where you are now to where you want to be.

The plan isn’t going to be perfect, and you are going to revise it along the way, but that’s ok.

The important thing is to always have some kind of realistic plan that you’ve actually spent time to think about.

Don’t just crack open a book and naively think you are going to learn how to code.

Set a schedule

If you follow only once piece of advice from this section, follow this one: set a schedule.

I can almost guarantee you failure and frustration if you do not set an actual schedule for when you are going to be focusing on your self-studies.

You can decide how long or short or how often, but plan it ahead of time and stick to the schedule, like your life depends on it.

I coach software developers for a living. I teach people how to be more productive, get in shape, reach their goals and basically kick ass. And I can tell you that people who do not commit to a schedule pretty much always fail.

I fail when I don’t create a schedule.

I would have never even made it this far in writing this book if I didn’t commit to a schedule of writing so many minutes per day.

Right now there is literally a timer ticking that is telling me I have 21 minutes of writing left for today.

The cumulative effect is one of the most powerful effects for making progress in any area of development. Use it to your advantage by creating a schedule and making a little bit of steady progress each and every day or week.

Network while you are learning8-Network

Remember how I said that one of the major disadvantages with learning on your own is that you don’t get the benefit of someone helping you find a job after you are done?

That means your network is going to be extremely important.

What you don’t want to do is decide that you are done learning to program and are ready to go look for a job and suddenly find that you don’t even know where to start and you have no network to help you.

Start building your network right away.

Start attending meetups and user groups in your area.

Go to code camps and other activities.

Start a blog. Get involved in the community.

Then, when you are ready to find a job, it will be much easier.

Don’t wait to do this kind of stuff until the end. Start now.

Find a mentor

It doesn’t have to be Yoda, and you don’t need someone to walk with you through every step of your learning process, but you should find at least one software developer you can turn to to ask some questions or get some help when you really need it.

Don’t expect someone to officially accept you as their mentee. That rarely happens and it’s a bit weird in today’s society.

But, do know at least one or two people you can turn to when you get stuck.

Having a resource you can depend on in moments where you just don’t get it or don’t know what to do can save you hours of frustration.

Before you start down your learning path, know who you are going to ask if you desperately need help, even if you have to pay for their advice.

Build at least one side-project


Nothing will help you learn better than applying what you are learning to a real problem and using it to create a real solution.

But aside from that reason, which we pretty much already covered in previous chapters, side-projects can be extremely beneficial.

I always like to double-dip in the benefit I get out of my time.

The chapter I’m writing now is going to first appear as a blog post on my blog.

I’m standing at my desk while typing this chapter, which is burning some extra calories.

I’m writing at least 1,000 words a day to keep my writing skills sharp and improve them.

For the hour I spent today, writing this chapter, I’m going to be getting at least three benefits.

That is what a side project can do for you.

A good side project can provide these benefits simultaneously:

  • Give you a real problem to practice on and apply what you are learning
  • Create a portfolio of real work you can use to show at an interview
  • Create some possible side income or a new business
  • Create some useful tools for yourself while you are learning to code
  • Build confidence in your abilities
  • Provide an outlet for fun (if you like that kind of thing)

If you are going to be writing code anyway, you might as well make that code be doing something useful that might benefit you in multiple ways.

Don’t worry if you don’t know exactly what you are doing. You will learn along the way.

Even if you build something you deem as “crap,” at least you’ll have built something and at the end of your education, you’ll have something to show for it –– or multiple somethings.

Subscribe to a site like Pluralsight

Full disclaimer here, I authored 55 courses for Pluralsight.

But… even if I didn’t, honestly, I’d still be telling you to sign up.

Why? It’s an insane amount of value for such a low price.

I wish something like this existed when I was learning to program.

There is a ridiculously large amount of content available on just about every programming topic you can think of––taught by experts––for a pretty cheap price.

Even if you don’t go with Pluralsight, there are plenty of other alternatives like, Treehouse, Udemy and more.

I would definitely be taking advantage of this cheap training, because it’s an excellent way to learn on your own and have some structure to it.

I can’t stress enough how much of a value video training sites like these are for someone who is trying to learn on their own.

Alright, so now you know enough—or should be well on your way to knowing enough—to get started as a software developer. (Although you probably have some important decisions to make on how to best go about your new venture.)

From here on, we are going to take a different turn with the book. In the next sections, we will delve into actually getting a job as a software developer.

We’ll begin our journey with a nice long discussion about internships. Coming up next week.

Sometimes learning how to learn is more important than mere learning. Check out my course “10 Steps to Learn Anything Quickly” for a few tips on boosting the rate at which you learn.

About the author

John Sonmez

John Sonmez is the founder of Simple Programmer and a life coach for software developers. He is the best selling author of the book "Soft Skills: The Software Developer's Life Manual."