Programming is hard. Don't let anyone tell you otherwise. This profession is not easy. Teaching yourself how to code, especially when you have no prior experience, can feel daunting and overwhelming. This is why one of the most important lessons you can learn before you begin this journey is to embrace being a beginner.
You will be terrible at first and that's ok
When you are first learning something, you typically are quite terrible at it. In fact, most of us struggle for quite some time when first learning a new skill, language, subject, instrument, etc. However, for some strange reason, people teaching themselves how to code completely miss this.
When you are first learning how to code, you really have no idea what you are doing. Am I doing this right? Should I take this tutorial or that one? Should I take both? Which one should I take first? Should I go to a boot camp? How do I find a mentor? How much do I need to know before I get my first job? The questions are endless, and that's expected, because you don't know what you're doing.
Embrace not knowing.
You must learn to embrace being a beginner when teaching yourself how to code. You are going to get stuck a lot! You are going to make tons of mistakes, you will do so many things "wrong." Here is the reality of it all though...
You are supposed to get stuck, make mistakes and do the wrong things over and over again. This is called learning, the very thing you set out to do.
Embrace being a beginner.
When you are learning to program, you are exposing yourself to many new concepts that at first seem completely foreign to you, and that's because they are. If these concepts were not foreign then you wouldn't be learning anything.
One of the most valuable lessons I learned while on this journey, and frankly before I even started, was knowing how to manage my expectations. You see prior to teaching myself how to code I taught myself how to play guitar at the age of 14. I didn't have any lessons, all I had was a guitar, the internet and an incredible desire to play. I practiced for hours and hours each and every day, and it took me about one year to become a "bad" guitar player.
Let that sink it for a moment. One year of practicing virtually every single day for several hours made me a bad guitar player. I could have just given up right then and there and said this is not for me, clearly I don't have any talent for this. Maybe I did, maybe I didn't, maybe I still don't, who knows.
The point, however, is that I never gave up. I kept practicing.
All of that practice finally paid off when I was accepted to Berklee College of Music at the age of 24. I was accepted as a bass player and managed to teach myself that instrument too, without any private lessons as well. I couldn't read music, I didn't know what scales were or key signatures for that matter, but I could play. I played countless shows in various bands and practiced for countless hours over those 10 years.
I embraced being a beginner because I knew that at some point I no longer would be.
You are not too old and yes you are smart enough
A common question that I see come up again and again is, "I am x years old, am I too old to program?" No. It doesn't matter how old you are.
The real question is how badly do you want to program? If you want it and are willing to work hard for it, you will get it, the same holds true for most things in life.
Hard work wins.
Don't be like me and think that you need to have a PhD from MIT in mathematics or physics in order to do this, you don't. I have been a full-time developer for over six years now and I have used very little math in my day to day work. Obviously this will vary depending upon the type of programming you are doing, but don't let it stop you. If you need better math skills, then you will learn those skills too, as needed. That "as needed" part is key, by the way.
You only need to know enough to get the job done, you don't have to know it all.
You are always learning
Another misconception many people have when teaching themselves to code is that they have to have it all figured out before they can apply for their first job. I got my first junior developer job after five months of teaching myself how to code. I had no idea what I was doing, however, I knew I would grow into the role over time.
You need to realize this too, and the sooner the better.
You are always learning in this field and you always will be. Things change all the time and that is what makes it fun. Sure we get paid a lot of money to do this, but you will be absolutely miserable if you are not comfortable with being put into challenging situations and asked to solve problems you have never seen before on a daily basis.
Developers who have been at this for a very long time are still learning and believe it or not they can still learn things for you, even if you are just a junior developer. Everyone's experience is unique and everyone has something unique to offer, don't think you don't simply because you are new.
Leverage what you have
If I am being completely honest, the real reason I was hired at that company was because of my degree in music, as Berklee is a well respected school. The company that hired me was a music company and they were willing to take a chance on me because of my degree in music, not because of my programming skills.
This is something you should be thinking about too. You may not have a lot of experience in programming just yet, but what do you have experience with? If you have experience in retail then try to get a developer job working for a retail company, maybe working on their e-commerce store. If you have experience teaching, then try to get a developer job at a software company in the education space.
Leverage what you already have instead of trying to start from scratch.
The sooner you learn to embrace being a beginner the more effective your learning will be. If you can learn to manage your expectations before you even begin to teach yourself how to code, you will be less likely to give up. You will already be anticipating getting stuck, making mistakes, feeling stupid, etc.
The biggest thing standing if your way from learning how to code is fear. It's all in your head and it's all a lie.
Learn to turn it off by embracing being a beginner.