© 2019 Tim Buchalka
  • Tim Buchalka

Four Stages of Becoming a Programmer

Updated: Aug 2, 2019


Let's now discuss the four stages that you'll go through in becoming a programmer and also why knowing these stages can help you make better decisions for your career.



We're talking about the four stages that you'll go through in your journey to becoming a programmer.


Let's get started with the first one, and the first one is unconscious incompetence. What that means is that when you're starting out, the decisions are hard to make. For example, you don't know languages, frameworks, an area of interest that you want to get into for programming, how easy and how hard these different areas are, and basically where to start in fact. Even things like what's involved in a particular language or basically getting to a certain level.


So using an analogy here, or an example, consider that maybe you're starting out and you're thinking "Okay, I want to become a programmer. I'm interested in artificial intelligence or machine learning", for example. At the moment, if you're at this stage, then you don't know the prerequisites to get into artificial intelligence or machine learning, or even if programming is for you at that early level. You may not recognize this either. You may not really recognize or acknowledge to yourself that you don't understand this, and you may think you know but basically, to move on, what you need to do is figure this out and you need to learn and recognize that you don't yet have all of the answers. Also, very importantly, you really do want to acquire those skills, basically the skills you need to proceed.


Now when I get asked a question from students, and I get asked this quite often, students will approach me and sort of say, " Okay, I'm starting out. I've just started my first course (for example) my Java Masterclass, can you give me the next three courses that I need to take after this and I wanna get to artificial intelligence or machine learning?" Well what I say to them is basically, it's too early to do that. Finish your first course first, and then start looking at making a decision after that.


This is really dealing more with this unconscious incompetence, because you don't know what you don't know at this point in time. So you need to go through, get some basic training, before you can move on and that's why I say early on in your programming career, don't try and make long-term decisions on where you're going and what you're doing. Focus on the basics, in this particular case, would be learning a programming language.


All right, so that's the first stage that you'll go through. The next one is what I call conscious, or what's called conscious incompetence. Now here, you've taken yourself to the next level. You now know and recognize that you don't have the skills you need to become a programmer or to get into that specific area of interest. Also, you've got a real want, you really want to acquire these skills, and you've recognized that there's a value there for you to learn these new skills.


That's really important that you're sort of acknowledging to yourself, "Okay, I haven't got these skills, I've got a lot to learn, but I want them. You know, you're really saying to yourself, I really want to learn these skills. So basically, you're acknowledging to yourself you don't yet have the skills, or you really don't at this point in time, and during this process, when you acknowledge that, you're gonna start programming and learning, and you're gonna make tons of mistakes and basically, making tons of mistakes and getting frustrated and wanting to give up, this is all an integral part of this stage.


Let's use an example here, equate it back to programming, so it makes sense. Let's assume that you've recognized now to become a web developer, that you need to learn. You've figured out now, when you first started, your very first time you said to yourself, before you touched a line of code, "I wanna be a web developer", you had no idea. That was going back to step one.


Step two, you've done a bit of training, a bit of research, and you now acknowledge and say, "Oh wow! Okay, I need to learn HTML, CSS and JavaScript as a prerequisite to at least some level before I can hope to actually start learning other more advanced frameworks etc. for web development". So you've done that, you've gone through that very basic process of learning some fundamental skills, or at least acknowledging to yourself that "Okay, I need to learn these skills", and you're sort of saying, "Look I haven't got those skills but I'm prepared to learn it". So what I'm saying there is there's a process to go through, and here you're acknowledging to yourself that you do wanna do it, you've done some research, you've figured out, in this case and that example, HTML, CSS and JavaScript would be three core skills used typically by web developers, and you can make a start on that.


So you're recognizing now that you need to understand those three core skills, but also more importantly, the value of doing this, why you're doing this, and you've made the decision to yourself to go ahead and do it and you recognize that at this point it won't be easy, but you're saying to yourself, "Look, you understand there's a process that's gonna take a while, there's a lot of stuff you're still trying to figure out at this stage, but you know that you can actually get there".


That's the second stage, and moving on now, the third stage, is conscious competence. Why don't you continue with the web developer example here, because it's a good one. So here now, you can finally get some of that stuff working. So perhaps you now understand some HTML (looking at the web developer example), HTML tags seem to make sense or at least some of them, and some of the JavaScript code may actually make sense.


You can sort of start stringing together small bits of code, but your brain hurts at this point in time from all the concentration. You really have to focus and concentrate hard on understanding this and you've got this worry in the back of your mind at this stage, if you're gonna remember all this stuff and if you're not constantly immersing yourself in training and practice, some of this information's going away.


So you're still uncertain at this point in time but you have progressed. You're now able to understand some of the concepts you're learning and string together perhaps little programs, but again, you've got those worries and concerns in the back of your mind at this point in time. The bottom line here is, at this point, the training, perhaps a video course (if you're taking a video course or a book or whatever it is) it's now starting to make sense, and you're now basically on the road still to getting to that fourth stage.


All right, so the fourth stage now is unconscious competence. So this level is really the level where you want to be at. Ultimately, this is what you should be shooting for and this is where programming effectively is second nature for you. Here, you've practiced so much, you've done so much training, you've applied this code, basically to get to this level you've done that.


At this level you're now actually finding to a large degree that programming is easy. It's not necessarily always easy, but you're feeling much more in command, you're not struggling to remember things. There are a lot of the things you can sort of remember off the top of your head, you can string together, put together code, and you're not feeling you have to concentrate so hard all the time, things are coming to you automatically. So as you're typing code, for example, you're thinking "Okay, which algorithm do I need to use here?" and it's coming to you, so you're understanding that.


You're maybe at the stage where you feel that you're even at the level now where for some things, you feel you could teach this material to other people. But certainly, programming at this level is so much easier for you and perhaps you're even looking back and wondering why you thought about giving up in some of the earlier stages. So you got frustrated perhaps at an early stage, and you know, at this stage, if you reach this stage, you're finally saying to yourself, "Wow! Okay, I can actually get this. I'm enjoying it, I'm understanding!", and you really almost can't believe that you were ready to give it away you were so frustrated at earlier stages.


Now that's not to say when you get to this stage that you won't have other challenges to overcome. For example, if you pick up a new programming language, even if you're at this stage, there will still be some work, there'll probably still be some elements of frustration, but it'll be a heck of a lot easier because you've been through the process and you've got the core skills, and basically a model for how you can move forward and learn and sort of understand these skills.


All right, so a summary of today's discussion. Keep at it, make a commitment to persist with your training and your practice, and know ahead of time that when you're entering this journey, there are gonna be ups and downs. I also suggest you practice and study regularly. It's really important that you do that and do the exercises in courses, try and create little programs for yourself, try and adapt those programs.


If there is a challenge or there's some code that you see me (or whatever book or video course you're going through) giving you , try and firstly understand that code and can you adapt that code, can you add to it, can you add some functionality, can you make it do something slightly different. So if you actually focus and keeping on doing that and practicing and going through all these stages and realizing that there's a process to go through these four stages and everyone has to go through that, that will ultimately help you to actually succeed and make it possible for you to actually succeed as a programmer and make this your brand new career.


All right, so I hope that helped. If you've got an questions, feel free to leave a comment and I'll get back to you.