The Problems With Being Self Taught

Note: I can only speak from personal experience on this issue, so I could use more input.

To say that I have been “programming” since I was 13 would be a stretch. I knew how to write code, but I was crippled by how much Visual generated automatically for me. I never learned many of those automated tasks manually.

Aside from a programming class in high school with a fantastic teacher, I’m entirely self taught. Being self taught is usually viewed as a great thing, though I cannot figure out why.

Like a British person’s teeth…

For an embarrassingly long time I had large “gaps” in my knowledge. As one of many early personal examples, I never learned how to properly use for loops, so I tended to avoid them. In addition, I didn’t realize you could access indexes in arrays with variables, and would instead copy and paste lines several times, filling in hard coded numbers.

Today, I still suffer from this. All but the most basic and common design patterns are still unfamiliar to me. In fact, properly organizing large projects is still a mountain of a task. I’m not done learning.

Perhaps this problem would not exist if I had taken a single course from start to finish. I would take on new information one idea at a time and in an organized manner, rather than jump around from tutorial to tutorial picking up bits a pieces, missing chunks along the way.

The dreaded intermediate phase

There are beginner guides galore to any programming language or library you could imagine, from professional companies such as Lynda and Envato, to independent bloggers such as Untold Entertainment, Michael James Williams and Emanuele Feronato.

Alas, few beginner tutorials prepare you for the “road ahead”. In my experience, the most difficult stage in learning a new language is \“I know the basics and the syntax. Now what?\” During the “intermediate” phase, technical manuals and papers are too advanced, while beginner tutorials are too simple. Either there are too few resources for intermediate developers, or they are too diffiuclt to find.

It certainly isn’t a help when beginner guides will take shortcuts (such as using timeline code rather than teaching to properly write classes) in an effort to make the new information easier to absorb. But similar to the “automatically-generated-behind-the-scenes code” in Visual, this may have crippling effects on the students.

Can you really call yourself self taught?

On a related side note, successfully self-taught musicians sit down with their instrument of choice, and after much practice one day produce golden melodies from the tips of their fingers (or lips, depending on the instrument).

Can the same really be said for developers? I doubt anyone has summed up their history with “One day I sat down at a compiler, not having read a single book on Objective C. It was hard at first, but after months of trial and error, my fingers eventually produced gold.”

Yes, you may not have gone to an “official” school, but most books and online tutorials are set up in a manner similar to how you would learn a subject in a standard classroom.

Perhaps all the self-taught developer can say is “The internet taught me.”

What about you?

As mentioned, I can only speak from personal experience on being self educated. I have not taken any college level classes on software development, so I can’t compare my expertise before and after the course. Would I still be facing the same problems after leaving college, or did I miss something crucial learning on my own?

I need more input. Are you a self taught developer? If so…

  • What has your experience been learning to become a better self taught developer?
  • Are there more hinders self-taught individuals face? How can they be overcome?
  • How do you overcome the “intermediate phase” of learning a language?
  • Why is being self taught considered a positive thing? Is it?


From: Mike
2013-10-05 22:52

I’m a self taught programmer too, started at the age of sixteen now I’m 24.

The problem with being your own teacher is that, if you’re not a good teacher then you’re not going to learn very well. A great example of this is the wanna-be hacker who goes out to the library to find books, only to read them without checking the publish date. Not knowing that he/she is learning is 2 years out of date. Yes I was one of those, but replace hacking with learning HTML.

Good teachers will not only teach you the fundamentals of a programming language, they’ll also gear you with current technologies that are likely to land you with a job in the future. Again, something self-taughts can’t do.

What I wish I did differently is go to University, and to also self-learn.

From: David S Gallant
2012-03-15 05:15

I've been what you might consider a "developer" for just under a year. I taught myself quite a bit, but seeking out a teacher made a huge difference in my abilities. This wasn't a formal classroom experience, but an internship with a Flash developer who was kind enough to take me under his wing for several months, one day a week. His help really helped me enter that intermediate phase (where I currently find myself stuck). If I could offer any advice, it would be to try and find a mentor: someone you can work with, in either a real or virtual environment, who can provide real-time feedback and impart essential skills.

I'm finding being self-taught has been a real hindrance in finding a job. Without formal education on my resumé (or any major releases), my self-education has not been an appealing factor to potential employers.

I think within ourselves, being self taught is a sign of our determination, our moxie. It can reflect our drive to succeed despite a lack of background or prior instruction. Plus, it's more economical than spending several thousands of dollars on formal education.

From: Nicolas
2012-03-15 05:28

Nice post! I for one, being "self taught" kinda envy those who learned programming in a university. The fact there being more people, specially teachers / mentors, that can help you along the way on things like best practices etc gives you a heads up, sure the internet is great for tool for learning stuff but talking things over with others cant be a bad thing.

Like a who you could talk to :)

From: Keith Peters
2012-03-15 06:52

A few thoughts.

1. I've known plenty of purely self-taught and plenty of college educated programmers. I wouldn't say that the ratio of good to bad programmers was any higher in the college group.

2. Any programmer worth anything winds up being self-taught anyway. You can only learn so much in school. Then you're done. Technology changes way too fast to rest on your degree for any more than a year.

3. I find a lot (not all) of college educated programmers seem to be complacent. They earned their degree, they keep up enough on stuff to do their jobs. Whereas self taught programmers often seem to hold on to that hunger to constantly learn more and improve their skills.

4. I think college is probably good for exposing you to a variety of languages and drilling in some real basics very solidly. But it's no replacement for experience and a desire to continuously learn.

From: Stray
2012-03-15 07:28

I think being self-taught is generally considered to be a positive thing because it's a very strong indicator that you're going to continue to learn, irrespective of the presence or absence of formal training.

Being self-taught in programming demonstrates a tenacity that is desirable - though it would be faulty thinking to assume that this implies greater tenacity than people who've been trained more formally.

In a very crude sense, choosing Comp Sci at 18 probably has less correlation with it being the right choice for you than pushing through all the little obstacles that are in the path of a self-taught programmer. But if you've been in the business for more than a few years after you graduate, you must be self-teaching the new stuff too.

The learning cycle, in any discipline, goes through the 4 phases:

  • Unconscious Incompetence
  • Conscious Incompetence
  • Conscious Competence
  • Unconscious Competence

As long as you stay aware of the need to return regularly to Conscious Incompetence, and you choose to keep feeding yourself with multiple good sources of new information, I don't think being self-taught hinders you.

As you identify - the danger is the intermediate phase. Bad developers often think they're great developers. They have no concept of how much there is to learn, and think they can jump straight from making a button change a sprite to building a full featured application.

I usually smile and say "Wow - good luck with that!" because trying to explain to someone that they have only scratched the surface of the surface never goes well.

I think that phase is actually just called youth :)

Generally, by the time you hit 30 (or earlier), you've been through and out the other side of that phase in some area of your life, and that changes your perspective of all learning, permanently.

You've known things and then later wondered how you could have been so naive, and the nature of what it is to know something changes too.

Personally, the big attraction of self-taught developers is that mostly it means that they've studied something else. For me, that was product and manufacturing engineering. For others it's philosophy, or history, or languages. It all makes for a much more interesting group-working experience IMO. You want a few comp-sci folk in the mix, to remind you about memory and rendering and threading, but diversity is also welcome.

I think there's never been a better time to be a developer - self-taught or otherwise - Twitter and other channels are making it easier and easier for us to be inspired by folk, aspire to be like them and then receive casual mentoring from our peers in pursuit of 'being better'. Good times!

From: Ruedaminute
2012-03-15 09:23

What I'd really like to see here, actually, is feedback from a traditionally-taught dev. To them, I would ask:

  • What are the gaps you typically see in a self-taught dev's knowledge?
  • What are the most valuable lessons you learned in school?

From: Jonny Reeves
2012-03-15 09:31

Learning is learning IMHO; one of the best ways to learn anything is to discuss the subject and your findings with others. (via Twitter)

From: Sebastiano MandalĂ 
2012-03-15 09:32

I tell you just few things the college can help you with: the "forma mentis", being disciplined e learn a lot of math ;). (via Twitter)

From: Benjamin Borowski
2012-03-15 09:33

There are pluses and minuses to being self-taught. I consider my fine-arts degree instrumental to my success as a developer. (via Twitter)

From: DT
2012-04-12 09:04

I used to be self-taught. I started programming when I was 9 with qbasic. My dad basically said to me "that computer is too old to run windows, and too slow to run games - so if you want to do something you will need to program it."

And so I started with qbasic. qbasic had a formidable help system with many examples that you could copy-paste and modify. I knew I would spend many hours playing with particular functions to know inside out how they worked. Then I switched to turbo pascal a couple of years later. Then I hit a wall... I tried to learn C.

I felt like I had hit a wall of complexity that I could not surmount. So I drifted away from programming, I still did a few delphi and VB things but it was very basic... Internet also made things much more easy to download than to program.

I guess that's what you call the intermediate steps in your post. Only mine demotivated me to the point of stopping programming all together. After a few years I felt I had gaps in my knowledge that prevented me from going further, I couldn't say that I knew programming because of those gaps. I mean I could have told you how to use a pointer back then... but I didn't know why it worked or why you could initialize an array with a pointer. I only had the "technical side" covered, but I had no idea about the abstract side or how someone could organize a large project.

So I decided to return to university and take computer science. My expectations was that I would learn about those gaps in my knowledge and things would make more sense. And it did a lot. I felt that at the end of my first semester I had learned more about programming than I had done in the last 25 years of my life. I felt that I had finally learned the basics properly and I could make all sort of assumptions because I had a solid foundation and they usually turned to be right - plus the courses overlapped a bit so if I didn't quite get the logic course, other courses would use that knowledge, but explain it in another way so in the end I would get it. I think the most helpful thing is that I learned a bit about every "domains" in information technology. I feel I know the basics enough to be able to work in computer security, or with networks, or as a functionnal analyst or just straight programming tomorrow. I would still be a newbie, but I know enough to know what to look for to further my knowledge in a specific domain. If I had to do the firmware for an hard drive, I know a few algorithms used to encode/read/write data on an hard drive, I could discuss that with a more experienced person and find out more about the specific algorithm he had in mind to be able to do what is expected of me.

If I had to understand a game engine tomorrow I know that I would expect to see a scene manager, a rendering loop that encompass most of the code, lights, geometry and so on.

Those are the two big advantages it gave me:

  • I don't feel there is gaps in the basics anymore
  • I feel I know enough to be able to start somewhere in any situation related to programming.

Those two things give me a lot of confidence... the confidence that I can get throught any new things that show up... like a new language or a specific design pattern a client wants me to use.

There are some disadvantages of course:

  • My geek friends with no formal education get lost pretty quickly when I explain things to them. I give way too much details and I end up making things more complicated. If we discuss windows I might eventually mention that windows switch the active program every 10 milliseconds and then I have to explain what a time quantum is and how/why an OS even do that.

  • It's much more difficult finding help on google now, because the questions are more advanced and more abstract. Asking google how to format a string to display 2 decimals in will get you an answer, but asking google to explain you what the pros and cons of using a red-black tree are is a bit more difficult.

  • My friends don't really know what kind of "information technology" I do. They don't really understand the differences between programmers from different kind of school ... technical college, college, vocational high-school and university. They think that with what I learned I can fix computer and diagnose problems with some sort of electronics toolkit - so I mostly spend time explaining what a computer science diploma is supposed to prepare you for - being an functionnal/organic analyst, being a software architect and maybe eventually being a lead programmer/team/project manager.

  • Due to the last disadvantage they will usually forward me jobs that have absolutely nothing to do with what I learned. Tech support jobs and sysadmin/database administrators jobs for example - sure I could do them, but my diploma doesn't change my odds of getting those jobs - because that's not what I learned at school. So I have to thank them, explain what I learned and tell them what kind of job I'm looking for.

  • School didn't make me a better person. In fact I think that all the stress a 4-year diploma entails made me a worse person.

From: Adam Bouqdib
2012-06-27 02:52

Hi Andreas,

I know what you mean, I sometimes think I should have gone to university to learn programming. On the other hand however a lot of my friends who have degrees in computer science still call me when they're stuck with code and all of them admit to being nowhere near as good as me as I learnt the things I needed, rather than what was on the curriculum.

The downside is of course that I have a very "hacky" approach to large projects. Instead of doing data-flow diagrams and organised project management, I tend to put everything in one large list and jump from task to task which makes it very hard to pass on projects that are in progress to other developers.

Like everything there's an upside and a downside to it and you can't really say one is better than the other. I personally think that self-taught programmers normally are better freelancers, as they usually are all-rounders and therefore have a wider array of skills, while uni-taught programmers function better in teams since they tend to be more organised and target driven.

Post a comment

All comments are held for moderation; Markdown and basic HTML formatting accepted.

(required, not published)