Back at the end of 2014, I decided to teach myself how to code. Back then the motivation came from a realisation: I was a fresh graduate from University, had a master’s degree in Business Administration in my pocket but somehow … I knew nothing about the professional world.
Nowadays, getting good job opportunities with limited hard skills and no prior work experience was (and still is) super hard. This often leads to junior positions and a promise to struggle for years to get promoted.
The first few months at my first job (Junior Social Media Consultant in London) made me realise that this wasn’t going to be fast enough for me. I wanted more than just to work hard waiting for the next promotion year after year. I wanted more freedom and a way to detach my income from my time input.
This thought process was very much influenced by Tim Ferris’s book the 4-hour-work-week that I highly recommend as it’s still very relevant today. In this book Tim explains how he managed to generate passive income to free himself from the need of a 9-to-5 job.
Being into Tech since I was a kid, I’ve always known that understanding how apps and websites worked under the hood would be a highly valuable skill for me… but I majored in Business and my first experience with Computer Science (going back to 2009) failed miserably when I attempted to take a CS minor as part of my Bachelor degree. The way this was taught at university didn’t fit with my way of learning something new and the teachers were rushing through things that were meant to be basic for CS Students (they weren’t for me unfortunately) and I got left behind very early in the semester. I’ll skip the details of what followed… not great memories haha.
Three years later, I decided to give it another go, this time on my own terms and at my own pace. It has now been 4 years and looking back, I wanted to share the 10 thoughts I wish I could have been given before I got started. I hope this can help others who are just getting started or are thinking about teaching themselves how to code. Consider the following as a roadmap or a guide to help you think about how you want to go about learning.
First of all, ask yourself why you want to learn how to code. If you’re doing it for the wrong reason, you will fail.
Ed: Such an endeavour is something personal, don’t just do it because you see other do it to.
Ed: Unless you want to learn how to hack to help the cyber security field, get a life. Hacking other people is lame.
Ed: Nope, this is not useful. There are real people out there with real stories, sharing real things. Don’t be a fake.
Ed: You will most likely fail if nothing drives you. Start by asking yourself if that’s really what you want to do.
I’m sure you can find many more bad reasons to learn how to code. Basically start by asking yourself why you’re doing it. If you cannot convince yourself that your reasons are good enough, you probably need to think about it a bit longer and get started once you find the mindset that will give you the energy to push yourself far enough to never look back.
Let’s be honest, like any other challenge, it’s not going to be easy. If you’ve ever said to yourself on January 1st that you will hit the gym three times a week and stop eating junk food for the entire year, well welcome to the same territory. You’re in for a tough ride but the reward is so awesome that the ones who keep at it until they overcome the beginner’s liftoff (see last section of this blog post) will be in for a treat for the rest of their life.
Proceed to the next point if you’re ok with the following points. Alternatively, you can stop reading this post. Learning to code on your own might not be for you just yet.
“I know this is a marathon and not a sprint.”
“I am ready to dedicate several hours a week to this undertaking and form a habit around it.”
“I am ready to shift my priorities to make sure I spend some time learning on a daily basis.”
This is not going to be a quick sprint or a race won after a few seconds. You’re in for a proper marathon or even an Iron Man depending on how confident you feel when you’ll start / if you have previously been exposed to Computer Science. The good thing is that you do not need to prepare yourself, you just need to start running.
You need to be ready to invest months of work into your learning journey. Patience and perseverance are going to be the key to your success. You will get stuck, a lot actually, probably everyday… that’s fine. As long as you get stuck with the right mindset, everything will go smoothly.
But Ed, what’s the right mindset?
Well, try to see every struggle / hardship as an opportunity to learn and not as a frustration that you think is slowing you down. Sometimes you will have opportunities to find workarounds or use shortcuts (i.e. “I really don’t understand this, let me use that instead”) and that’s fine as long as these shortcuts lead you to making progress and feeling satisfied. Do not always go to the easy solution though. Many problems software engineers solve are complex and you will need to expose yourself to these problems to get your brain used to thinking in the right way.
I’m not talking about building crazy complex algorithms, I’m talking about not feeling scared to read documentation and building something yourself instead of using a library made by someone else. That might do the job but you won’t really understand the inner workings of your code if you keep using things written by others.
Research the things you do not understand. Google everything, all the time. Really, do it.
When I got started I remember myself Googling a word, not understanding its definition and googling other words inside the definition until everything made sense. You might think it’s stupid, it’s not. It’s time-consuming, yes, but it’s worth it.
Everything is explained in so many different ways and formats, it’s just a matter of time until you find the right resources that will help you understand.
After patience, consistency will be the second most important aspect of your learning journey. Think about it like building a habit.
Imagine your goal is to hit the gym regularly and your workout frequency looks like this:
How does that look? Well, you’re not doing a very good job and you are not likely to build a long lasting habit in my opinion.
It’s going to be the same with coding. You cannot succeed if you only do it every once in a while, even over a very long period of time. You’ll most likely lose motivation since you won’t see enough progress and you’ll end up quitting.
Set yourself ambitious yet realistic goals. When I started, I told myself I would dedicate at least one hour a day to learning. One hour per day for the whole week plus a few extra hours over the weekends is much better than spending your whole Saturday programming or doing an all-nighter to make yourself feel like you’re making progress. If you do this, you’re sprinting … and remember it’s not a sprint, it’s a marathon.
A great read about forming long-lasting habits and fighting procrastination is ‘The Now Habit’ by Neil Fiore:
I definitely recommend this book to everyone trying to make a change in their life. It personally helped me a lot.
If you’re taking this adventure seriously, it will impact your current lifestyle in one way or another. Unless you were spending all day sitting at home doing nothing, in which case, great, I saved you from the black hole of procrastination, you will have to say no to some things to say yes to programming. Do not see this as a chore, see it as an investment in yourself.
If you see no impact, I would consider this a red flag and ask myself if I set the right priorities or if my objectives are not too conservative.
This is much more relevant if you are already working full time. Your social life may be slightly impacted and you will need to find a new balance. You might find that waking up a bit earlier and putting in some hours before work is something that can work for you. I was personally dedicating most of my evenings & weekends at the beginning. Oh and yes you can totally manage a healthy relationship providing your other half understands that you are trying to achieve something huge that will pay off in the long run.
If you are still studying, party a bit less or skip a couple of courses (don’t tell your parents I said that) and that should do the trick.
If you are looking for a job, we all know that sending CVs is a pain and I’m pretty sure you cannot do this for more than 4-5 (6 if you’re crazy) hours a day. This leaves tons of time to go learn stuff.
If you are under 15, I’m really not worried, just keep reading and keep hustling. I wish I had been exposed to articles like this one when I was younger but back then I didn’t even speak proper English so things would have been pretty complicated anyway.
I often get asked how I learned and which courses, books, videos I recommend. I have my personal preferences, but the real answer is that you need to find the format that you enjoy learning with. Some people prefer to read, others would rather watch YouTube tutorials or follow online courses.
My go-to list isn’t really in the scope for this article but I will write another soon to list and review the courses I have personally taken throughout my iOS development journey.
Learning alone can be hard, surrounding yourself with others who are like you, struggling, learning, sharing, helping each other is a very good way to stay motivated. I personally learned iOS with one of my best friends and luckily we enjoyed learning with the same formats (mostly video courses + a couple books) and at the same pace. We found that following the same courses was adding a huge motivation boost and I remember conversations like:
Me: D*mn, you already finished section 8 about Networking & API calls?
Him: Yes, I did that last night, pretty good stuff.
Me: Alright, I’m doing this plus section 9 and 10 tonight then. There is no way you’ll stay ahead of me haha.
This led to a virtuous motivation cycle that made us learn much faster.
[!] This only applies if you are not learning with a close friend (like I did) and closely following the same courses at the same pace.
Do not compare yourself to other more experienced developers or to the guys you are watching in video tutorials. You might think that everything they do works from the get go but it’s never like that. The resources you learn with are polished and took a while to build and prepare.
Even experienced developers face issues, actually they all do, all the time. That’s the nature of what programming is about: solving problems.
The only person you should compare yourself with is you. Is the “you from today” better than the “you from yesterday”? If so, you’re doing well. If not you need to change something.
Some of you will already have ideas when you get started. If that’s the case, do not wait until you finish your learning journey to start working on them. Find a balance between courses and working on your own ideas. You will find that working on your own projects will expose you to new problems all the time and a big part of this whole adventure will require you to overcome the fear of the unknown and deep dive into problems. You will feel stupid at first, that’s normal. It will be confusing, this is expected. Don’t stop reading. Just keep at it until the fog slowly disappears. That’s what I did, and it worked.
How do we deep dive into problems?
Just Google the hell out of it and read a bunch of things until you feel more confident and start building.
When I got started, I decided to work on what I called a ‘learning project’. It was basically an idea that I had, that I knew might not have the biggest potential but could lead me to learn a bunch of things about iOS. The idea was to list a bunch of places offering gluten-free options (restaurants, bakeries, stores, bars/pubs) on a map and make that available for people when they are on the go. I had no idea how to get started but I knew I would have to load and display dots on a map and make them clickable for people to see details about these places. So I started Googling things like “iOS swift display pins on map”. That led me to understand that I needed to use MapKit. Google search and StackOverflow answers will be a huge source of knowledge for you.
You won’t succeed if you don’t ship anything.
What do you mean by “ship”?
Put things out there, release what you’re working on. Share it with people you know. It doesn’t matter if it’s ugly, not polished, full of bugs, basic or if it has been done before. Look at how many todo list or notes apps have been built and released. The amount of people working on the same ideas with slight variations (or even no variations) is insane. It doesn’t matter, they are learning, building and shipping things. That’s what really matters.
Shipping is scary because you’ll expose yourself to feedback and criticism but don’t be scared. Criticisms will help you grow, learn and build better products. Even if the initial feedback completely kills your idea, see it as a blessing that prevented you from working countless hours on a dead product. Just skip to the next idea.
I can’t ship yet, I need to add this feature and that other small thing first…
STOP! I’m guilty of this too and I’m working on staying lean. It’s hard, but critical.
If you are not aware of the lean principles, go read “The Lean Startup” and “Rework”. These are my go to resources to adopt an approach that will help you feel confident to ship early, hit the market super fast, get actionable feedback and iterate on your product based on what people want and not what you think people want.
Share your progress on Twitter, Instagram and join the conversation. Not only will you start building an audience which can always help… but it will also add an element of peer pressure which will make you accountable when it comes to your learning progress. The feedback loop will force you to push yourself and carry on when you feel a bit down.
I’m personally pretty active on Instagram at @edouard_iosdev and you will find a bunch of other devs there and on Twitter. Join us!
What the hell is this “Beginner Lift Off” anyway?
I’ve seen many friends and people I’ve met online trying to teach themselves how to code. Unfortunately most of them never overcome the initial barrier to entry. That’s what I call the “Beginner Lift Off” stage.
Once you pass this stage, the chances that you’ll give up are much less and you should technically be on your way to a great career or at least have the capability to bring your own ideas to life.
These are broad criteria but basically if we compare your mindset when you started learning and when you reach the “Beginner Lift Off” stage, you should relate to similar patterns:
Teaching yourself something new is a way of life, it’s not just something you do. You will need dedication and patience but if you push yourself enough the reward will be there and you can expect a significant positive impact on the future “you”.
Hopefully this post wasn’t too long, I tried to stick to 10 insights but as you can imagine there would be much more to talk about on this topic of being a self-taught iOS developer. I also believe this advice can apply to anyone learning (whether or not it’s related to the tech world).
If you want to find out about the apps I built, feel free to check my portfolio which can be viewed here.
If you’ve enjoyed this article, try to think of one person that could benefit from reading it and share it with him or her.
Till next time.