My Journey into Software Development
Tags: career, beginners, python, learning
Published: 2021-08-02 11:09:20

I have recently made the transition from being a Geoscientist in the Oil & Gas industry to being a Python developer and lots of people have asked me a range of questions about how I've managed to do it. I thought it was a good idea to write a detailed post to explain the process in the hope that it helps someone else make the transition into software development themselves.

## Why did I start learning Python?

In 2016, the Oil & Gas industry was hit severely as it suffered a catastrophic drop in the oil price, leading to widespread and large scale redundancies. At my own employer, two-thirds of the staff were let go and those that remained were uncertain if or when they would follow suit. The brutality of that experience led me to really do some soul-searching and come up with an achievable back-up plan in case a similar thing happened again. I spent a lot of time taking career and personality tests to understand what alternative careers may suit me and began researching how to get into them. One of them was software development and it was at this time that Python was suggested to me as a skill to learn in my work appraisal, which I took as an opportunity to explore it. As it turned out, I absolutely loved it and knew that I could really enjoy doing as an alternative career. I think the logic and problem solving aspects of programming really appealed to me and play to my natural strengths. Since I enjoyed it so much, I began doing it in my spare time as a hobby and my knowledge has only continued to expand from there.

## How long did it take?

The time between when I started learning to program to when I got a job as a developer was about 3 years. That may seem like a long time but there are some caveats to consider. The first is that I took a lot of that time off either a result of life events or as a break to avoid burnout. I would estimate that about 12-18 months of those 3 years I probably didn't do any learning. The second is that I didn't have that much spare time to dedicate to it and so it would be squeezed in to short daily sessions and longer sessions once or twice a week. Obviously, someone who has more spare time can make more rapid progress on their learning path. This feeds into the final proviso, which is that I was learning as a hobby rather than specifically working towards a goal. For someone with a more focused endpoint in mind such as a specific career path, it would be more time efficient to learn specific tools than looking at lots of interesting ones across different career paths like myself.

## How did I stay motivated?

This is a difficult one to answer but I think there are a number of reasons. Firstly, I am naturally a motivated, self-disciplined person so once I had made the decision to really try and develop these skills, I was determined to make sure I carried on doing it. Secondly, I kept my interest by tying in programming with some of my other hobbies. I made homebrew calculation tools, analysed wildlife data, built games on my Raspberry Pi, and scraped board game data off the Web. These are just some of the examples of the hobby-based projects I completed, which helped hold my attention and stop me getting bored. This also feeds in to the last reason, which is knowing when to take breaks. It's inevitable that at some point you'll meet roadblocks, which can be frustrating and demotivating and may lead some people to quit. I found that giving myself a bit of time to process the issue, sometimes hours or even days, helped me come up with new ways of solving problems and kept my motivation up.

## Learning Methods

Without a doubt, the most effective way I found to learn was through project-based learning. After completing a tutorial on a subject I would then apply the material I'd been learning to solve problems. It’s learning by doing and through practice it was helping to cement that knowledge. By building projects I was also more likely to run into problems and suffer failures, which is another important part of the learning process. It is often from my mistakes that I would learn the most about programming and I often found that learning what not to do was as important as learning what to do. Another important approach for me was to make sure I stuck with only one or two resources or projects at a time. I found it easy to wonder off and try to learn new things especially as I am naturally curious and want to know a bit about everything. The problem with this approach is that it would make it less likely that I would complete things and extract the full value. By sticking to only a couple of things at a time, I kept focus and was more likely to complete them.

## The Job Search

Redoing my CV made me really think about what skills I have and how I wanted to try and sell myself. I realised that whilst I would struggle to compete with graduates from Computer Science disciplines in terms of technical skills, I had an advantage in terms of general work experience and strong soft skills. I am led to believe that soft skills are much harder to learn than technical skills, yet I know that a lot recruiters use software the strip out keywords from a CV to rank candidates based on their technical skills. This led me to make the decision that I would only apply to jobs that allowed me to submit a cover letter (it surprised me how many don't) so that I could tell potential employers in a more informative way what I could offer them. This approach also had the upside of me getting more feedback even when I wasn't successful and networking opportunities coupled with it. 

## Resource Timeline

Below I have included a list of the main resources I used in the order that I completed them. I have included a description of what I got out of each resource to give a general timeline of my progression.

### Beginner Python

These are the main resources that I used for the first few months whilst learning the fundamentals and coming from a background with no prior knowledge of programming languages. Regardless of what career path you are pursuing, these resources will be useful to anyone starting from scratch.

#### [Codecademy](www.codecademy.com)

The free Python course at Codecademy was the first resource I ever used and it was an excellent introduction for a complete beginner. It provides you a nice basic and brief overview of a language and gives you a simplistic idea of how it works and introduces the mindset of solving programming problem. It is very basic and does not reinforce the concepts learnt so I would would only recommend it to someone with no prior programming knowledge. 

#### [Learn Python the Hard Way](https://www.goodreads.com/book/show/8341335-learn-python-the-hard-way)

This book consists of a series of exercises for you to follow along with and is great because it does a couple of really good things. The repetition is great for helping to cement the knowledge but also for helping improve your code typing skills to stop mistakes creeping in. It also makes heavy use of the command line which is an essential skill for anyone wanting to become a developer. The author's tone is very direct and commanding, which seems to upset many people on the Internet but I found it suited me. It can be found pretty cheaply in paperback and you can probably find an ebook version for free on the Internet.

#### [Sololearn](www.sololearn.com)

Sololearn is a (mostly) free mobile code learning platform covering a wide range of programming languages and topics. Each language has training courses and an in-built IDE to allow you to write code and run it in the app. It also has an excellent community with many helpful and knowledgeable members who answer questions and resolve code issues. All of these features make it great, but it was the ability to learn and test ideas on the go that provided the biggest benefit to me as you can code anywhere and anytime without the need to have access to your main computer. There are lots of other mobile learning apps but this was the one liked the most and I'd recommend giving it a try.

#### [Complete Python Bootcamp: Zero to Hero in Python](https://www.udemy.com/course/complete-python-bootcamp/)

If I was to only recommend one resource on Python, it would be this course on Udemy by Jose Portilla. He is an excellent instructor who explains things in a clear and simple way and this course covers a lot of material with over 20 hours of video content. On top of that there are 3 challenging milestone projects that really test your understanding of the concepts learnt during the course. It also delves into more intermediate Python topics toward the end of the course, and all of these features together make it fantastic. It is paid but Udemy have regular sales where you can pick it up for under £15, which is a bargain in my opinion.

### Intermediate Python

After getting a hang of the basics, it can be quite difficult to know what to do next. Most of these resources are quite specific to me since I was trying to use Python in my workplace to automate tasks. I was also undecided on which career path to choose, so I ended up learning about a broad range of modules used across a number of different roles.

#### [Automate the Boring Stuff](https://automatetheboringstuff.com/)

This is another very highly recommended resource and is a great follow on from learning the basics as this shows some real world use cases. The author explains the concepts very clearly and there is an underlying humour to the writing that I enjoyed. It does contain some chapters for beginners but it is the mid-level chapters about file operations, web scraping and regular expressions where the real value lies. These types of use cases also had the added bonus of helping automate some tasks in my work so I got extra time to practice these skills. You can either buy the book or read it for free on the website.

#### [Real Python Intermediate Tutorials](https://realpython.com/tutorials/intermediate/)

Real Python is a website focused on teaching Python from beginner upwards on a range of topics. It has a mixture of paid books and courses, and free tutorials, articles and news stories, all of which are really good. I completed the functional programming course and read the Python tricks book and both were decent, but I found the free tutorials on intermediate topics such as web frameworks, databases and web scraping to be really useful at this point in my development. Overall, it's a decent resource that's worth checking out.

#### [Python Scripting for ArcGIS](https://www.goodreads.com/book/show/15810447-python-scripting-for-arcgis)

This one is only applicable if you are an ArcGIS user but this teaches you all about scripting using the ArcGIS Python package ArcPy. It is a huge package with a lot of functionality and applications but the book does a good job of breaking it down and is exercise focused. A bit like Automate the Boring Stuff, the main benefits of this resource were helping automate some tasks in my job so I got extra time to practice my Python skills. It can be either bought as a book or can be found free online as an ebook.

#### [Python for Data Science Bootcamp](https://www.udemy.com/course/python-for-data-science-and-machine-learning-bootcamp/)

Another excellent Udemy course from Jose Portilla which covers all the essentials from working with Python in Data Science. It includes modules on analysing and processing data, visualising data, and an in-depth look at machine learning algorithms. I only completed about the half the course as I wasn't interested in the machine learning sections, but I found the modules on dataframes and data visualisation to be invaluable, especially as I was considering a career in data analysis. Like the other Udemy courses on this list, it is paid but Udemy have regular sales where you can pick it up for under £15.

### Web Development 

At this point, I switched tack to learn more about web development for a couple of reasons. The first is to help me understand more about the Python web frameworks, and the second was to allow me to make my own profile page to boost my portfolio. It also seemed like a good time to learn another programming language to add to my skillset.

#### [Web Developer Bootcamp](https://www.udemy.com/course/the-web-developer-bootcamp/)

This bootcamp by Colt Steele is the top selling web development course on Udemy, and for good reason. This is an in-depth course with over 60 hours of content covering HTML, CSS, Javascript, Nodejs, MongoDB and more. The instructor is great and he does a good job of explaining even the most difficult concepts clearly and has a quirky sense of humour which adds a bit of fun to lessons. Like the other Udemy courses on this list, it is paid but Udemy have regular sales where you can pick it up for under £15.

#### [The Odin Project](https://www.theodinproject.com/)

The Odin Project is free and open source and uses on freely available resources in each of the modules. The ethos of the project is learning by building things, which worked brilliantly for me and had the added bonus of creating projects that can be showcased in a portfolio. The course itself is very comprehensive and also includes modules on soft skills like problem solving and code readability. It is all Web based so it can also be accessed on the go which I found a real bonus. Another fantastic resource that I would highly recommend. 

#### [freeCodeCamp](https://www.freecodecamp.org/)

This is a non-profit organisation and community that aims to teach web development by having you complete coding challenges (similar to Codecademy) and projects. This is a pretty decent resource, but the real benefit for me comes from the freeCodeCamp YouTube channel. It is an absolute treasure trove of free, in-depth tutorials on all manner of programming topics from web development to data science. It covers most major tools and programming languages and new videos are being added on a weekly basis so chances are you can find a video on something you want to learn. 

#### [JAMStack Web and App Development Course](https://thecodersguild.org.uk/)

This is quite a niche one but it was a free course funded by the UK Government as part of an initiative to get more people in the tech industry in my local area. It was run by The Coders Guild who are a tech training provider and are also pushing for more diversity, equality, and inclusivity in the tech sector. This was an intensive 8 week crash course in web development that was very well done and gave access to some excellent mentors to who you can ask questions. On top of that, the course provided workshops on improving CVs, tech interviews, using LinkedIn among others which were immensely useful and really helped me in my job search.

## Conclusion

There is a lot of information here, but hopefully you found it useful. I know I've found writing this post useful from a self-reflection point of view for me to appreciate all the time and hard work I've put into making this career change. My journey into software development has now come to an end but the next stage of my career has only just begun and I look forward to the challenges it will bring. If you decide to follow suit, I wish you the very best of luck.