Five years by https://xkcd.com/1088/

How to learn coding and become a software developer

Sabine Geithner

--

I am a biotechnologist, who after a stop-over in online marketing started a career in software development. I’ve been working in Berlin startups since 2008 and as a software developer since 2014.

I am often approached for advice on how to make a shift from an existing career to programming. Since I am usually asked the same questions I hope this article can help more people get started.

Am I too old to change jobs?

I firmly believe that it’s never too late to change your profession as long as what you want to do next really interests you. I was 32 when I decided to change careers and learn programming. I already knew some fundamentals and had written small VBA scripts for Excel and MSAccess. I had also played around with online platforms like codecademy and knew I would like the problem solving aspect of it.

Do I need to be good at maths?

Even though I used to be a total mathematics geek at school, I don’t think you necessarily need to be good at maths to become a good software developer. Chances are you just had a bad teacher and / or were made to believe you suck at maths. So I wouldn’t give up because of that.

However, I found that my drive to solve problems with logic made it easier for me. From early childhood, I always loved solving mathematical puzzles or even reading detective stories. I think this trait helps me stay motivated. Even if I don’t like a particular task, I still enjoy the process.

How can I find out if programming is for me?

I believe that if you enjoy programming, you will eventually be good at it. If you haven’t done so yet, try some codecademy's classes. They offer a very playful way to take your first steps in programming. When I started with those, I got a little bit obsessed and couldn’t wait for the next day to continue learning. If you have a similar experience, that's a good indicator that you could enjoy programming as a profession.

In addition these questions could help answer your question:
Are you ready for a life of continuous learning?
Do you enjoy creating things that people use?
Do you enjoy problem solving?
Can you imagine yourself looking at a screen most of your day? (software development is not completely anti-social, but unless you are in a leadership position the majority of your day will be spent coding)

Do I need to quit my job or can I learn while I am still working?

If you’re unhappy with your current job and dread going to work, yes, do it! Otherwise, if you are still undecided whether programming is the right thing for you, you should start with smaller steps: do an online class or join a free workshop in your area.

Once you are certain you enjoy programming enough to make it a career, it’s certainly easier and faster if you can dedicate your whole day to learning. However, if you are well organised and disciplined you can try learning in the evenings while continuing your day-job. Maybe you can even apply your learnings to parts of your job. Automating boring manual work could bring back joy and time for more exciting tasks at work.

I spent two whole months learning Objective-C and iPhone development with online classes. I like diving in deep and find it harder to learn while working. However, I had already done smaller workshops and online courses before I turned my back to my day job. I knew what I was in for.

How long is it going to take?

The answer to this questions really depends on how fast you're generally learning, how much time you invest and which technology you choose to start with. It can take a year (or more) or just a few months.

After two months learning full-time followed by a 6 months paid internship, I landed my first junior iOS developer position.

Which programming language should I learn?

This is always a tricky question and I don’t think there is a one-size-fits-all solution. Programming languages are developing constantly. New ones become popular and previously popular ones forgotten.

In the end, it doesn’t matter which programming language you start with. In the beginning, you will learn fundamentals that are transferable to any programming language. It’s just the syntax and patterns that change. Once you have a grasp of the fundamentals you can go language-shopping again.

Here are some languages to check out:

  1. Do you want to create websites?
    a) Do you enjoy creating visual interfaces? → Check out JavaScript
    b) Do you prefer being the magician behind the scenes? → Check out Ruby
  2. Do you want to create apps for your mobile phone?
    a) Do you own an iPhone? → Check out Swift
    b) Do you own an Android phone? → Check out Kotlin
  3. Do you enjoy digging into data to find answers?
    → Python for data science might be the way to go
  4. Are there local initiatives that offer coding workshops / learning groups that meet up regularly?
    → If you’re the social type, learning in groups can be a great motivator. But even if you prefer learning alone, seeing a few language before you “settle” will be good. Check out which courses your local learners groups are offering and attend a few different ones.

When I quit my job to learn programming, I wasn’t really sure what I wanted to do either. I had already learned some JavaScript, knew HTML, CSS and some PHP because I was setting up and customising Wordpress blogs and writing landing pages for work. So it seemed easiest to continue to learn frontend development for web. However, a friend of mine convinced me to look into iOS. So I started learning Objective C without even owning an iPhone or any Apple device except my tiny MacBook Air.

Looking back, I think learning iPhone development was the right call. Apple makes it easy to develop simple apps quickly. I learned with an online class from Team Treehouse that guided me step-by-step while explaining programming paradigms along the way. I found it super motivating to actually have my app running on a device and see it progressing every day.

Where do I start?

Depending on your learning style and goal there are different ways to go.

If you prefer learning on your own, look at online classes. It’s hard for me to make a recommendation, because there are so many companies which fit different learning styles and personalities. I personally enjoyed the playful classes of Codecademy for the basics (they offer a lot more in-depth classes nowadays) and the well-structured tracks of Team Treehouse and CodeSchool for iOS. But there are lots of free courses on Udacity and Coursera and other paid ones like Udemy. I would recommend to try some out and see which ones get you hooked.

If you enjoy learning in groups, join a local learners group or start your own. You can use an online course you all work through together as a guidance.

Ask your company for support. Maybe your current employer is interested in supporting your learning goals and could provide you with a place and maybe even time to learn. Or one of your colleagues can help you get going. Having an experienced programmer in your learners group who you can ask if you could ask for support is beneficial.

As for bootcamps — I have no experience with those. I would be shying away from the costs and I don’t learn as well in groups than by myself. I know that some bootcamps offer job placements at the end but others are rip-offs and not worth the money. You should definitely research your bootcamp well before settling for one.

How do I stay motivated?

Developing software can be frustrating at times.

In the beginning of my career I could observe a shift in my relation to things I created: it moved from a focus on the result to a focus on the process. I take a lot of pride in my work. At the start, it was really hard for me to delete something I had worked on for days. But over time I realised that throwing away code is a big part of programming. There will be features that get scrapped, others that need code refactoring and sometimes it's just crappy old code your less-experienced-you wrote. Nowadays, I know that with every bit of code I write I am expanding my knowledge and that I am applying a new understanding when I throw old code away. It's motivating to see yourself progress.

Sometimes, you get the feeling that there is so much to learn that you don’t know, and that can get very frustrating. This is a probably a feeling that will never go away as languages and operating systems constantly evolve. It’s important to understand that everyone feels that way — not just you. There will be times where you feel comfortable with your knowledge and times where you encounter concepts or technologies you don’t know or fully understand yet and that’s completely normal. The field of software development is vast but rewarding. The trick is to keep learning and to stay curious. Don’t give up! Just today I found this article about software development where a senior dev describes a similar feeling.

If you feel stuck, talk to other developers, join a meetup or learners group or start your own. You can also browse MOOCs for online courses and join their online forums.

And don't let other people discourage you. When I started learning a former friend of mine told me that he would never hire someone who hasn’t programmed since his teenage years. Hearing something like this can be really demotivating. Others told me that I was learning the wrong language and that I should instead be learning theirs. Don’t listen to them! If you enjoy what you’re doing, you will be motivated to continue learning and kick-ass!

How do you switch from learning to working?

One way to make the shift is to look for an internship. You will probably have to reduce your living expenses. Finding an internship wasn’t that hard for me. I was well connected because I was already active in the Ruby on Rails community and had a lot of developer friends. Finding one that didn’t just want to exploit my existing skills was harder. When you interview, be sure to ask exactly what you will learn and what you will be working on. One company I interviewed for wanted me to write the tests (in JavaScript) for their iOS app — not work on their iOS app. Another one was so excited about my online marketing skills (I was Head of Online Marketing in my previous job) that they wanted to hire me right away to work half iOS, half marketing — all that for an intern salary. Don't sell yourself short. You are already bringing experience in other fields to the table. Know what you want and what you are worth and ask for it.

Another way to start your career is to write and publish your own applications while you’re still learning. Later on, you can use those for your portfolio as you go freelance. When you do, you can ask for a lower hourly rate and work together with a more senior freelancer who (for a small share) can help you when you're stuck and possibly review your code.

What does your day as a software developer look like?

Being a software developer does not mean staring at your screen 9-to-5. It usually involves a lot of interaction with other developers, designers and marketing people to create a great product and a great user experience.

There are days where I only write code — with a few interruptions — and I really enjoy these as coding can be a meditative process. Most days however, I interact with designers to get feedback on what I’ve built or give feedback on their designs. It can be quite an intensive back and forth which I also really enjoy because it makes me feel like I am involved in the product development and not just someone who executes someone else’s ideas. On other days I have discussions with my colleagues about app architecture and how backend and client systems work together.

When you interview it's a good question to ask how developers interact with other departments to get an understanding on how your day might look like.

Conclusion

Changing careers can be scary — the older you are, the scarier it gets. Changing careers to become a software developer is even scarier — software developers are seen as solitary maths geniuses who spent all their free time playing video games. In addition the field is so huge that it’s hard to decide where to start and it seems impossible to conquer.

I hope this gives you some starting points for your own journey and that my story inspires you.

Feel free to share your own experiences in the comments :)

PS: I am not a native English speaker. If you find weird sentences, you can keep them as a souvenir ;)

--

--

Sabine Geithner

iOS developer at mercedes-benz.io — organizes @uikonf — passionate about #learning #iOS #data, #design and #psychology