AHHHHH! So this has been quite a long journey. For the past two years, I have been doing self-study in the evenings (after work), some early mornings (before work), most weekends, and public holidays. And finally, I am officially a Google Certified Android Developer. What this means is I can build basic Android apps.
When speaking about learning how to code it can seem a little strange to some people. Up until a few years ago, I was actually a Physiotherapist. So aside from all the hours I put into this, how did it all actually come about?
First of all, I have to admit I have always thought writing code was cool. I thought it looked fun. But aside from that, it always seemed quite intimidating. I just felt like there was a big barrier to entry. And When I looked a few years ago there were not any post-graduate conversion courses. Essentially I felt there were three things stopping me.
- I did not study it at university, so had no qualifications.
- I don’t know anyone that done it as a job, so had no advice.
- And I didn’t know how to learn it.
So to cut a long story short, by chance I spoke to a friend; applied and secured a job at an IT contracting company. They provided some basic training and then I took a job as a software tester. By chance, I ended up working in a mobile app team as a manual tester with scope for learning automation.
Although I have paraphrased I do think it’s important to appreciate the luck involved, in having a friend work in IT and also being placed in a mobile app team. I’m fortunate for both.
A couple of things about the job; manual testing requires skill and aptitude to ensure apps are working correctly before they are released. Automation is writing software that can perform some of the testing practices a manual tester would do, instead of repeating them. So essentially it is a non-technical job that gives you an opportunity to learn some development related skills.
Now I took this job with the purpose of exposing myself to software development. While performing this role, it’s impossible not to pick up a high-level overview of how apps are developed. You use bits of software and different technologies all the time, so I was constantly learning.
But software testing was never the end game, I wanted to be a software developer. Now when I began to talk to the developers at work I was surprised at how many were ‘self-taught’. I found it really inspiring. If there are people doing the job that you want, and you know they came from a similar place to you, it really does make you believe.
Of the barriers I mentioned, I now felt formal education was not a prerequisite, and I was also surrounded by developers who could give me some advice and guidance.
Now, where on earth do you start? Self-taught anything is a pretty difficult skill to develop. I would say patience and persistence are top of the agenda.
When I was learning Physiotherapy, my tutor once said to me you are learning a new language (Don’t think programming language). In healthcare, they use a lot of medical/latin/technical words to communicate. I now apply that concept to any learning I am undertaking; there is simply a difficult period at the beginning where you are not just learning new concepts but also industry colloquialisms, this is how ‘these’ people communicate. So when you hear phrases like API’s, Libraries, IDE etc. It’s best not to panic, take some time to do research and chat with people about them.
So what I did was, I made a plan of what I wanted to do and then broke it down. I found I spent a huge amount of time sifting through many different textbooks and online resources until I found material that was right for me. This is really key information! Find material that is at your level and communicated in a way that fits your needs. Overly technical information was not a good starting point for me.
Learn to use your computer
Most people flirt around with Code Academy and learning bits of HTML. And although useful, there are some more basic things you should start with.
Learn your computer. A basic understanding of Terminal (Mac) or the command line (Windows). I am not talking about becoming a Systems Admin expert. But just the confidence to navigate around your computer, open files etc. Basically, everything that you would do using your mouse and clicking screen icons.
A good friend introduced me to this blog which I thought was brilliant at the time – it is for Mac users only. It won’t make you an expert but it will give you a good grasp and you can always read another book/blog/whatever to learn more advanced topics as you deem necessary.
Learn to programme
On my endless list of google searching this topic, I read this a million times in the responses.
“Pick a language and learn it, it does not matter which one”.
Once you have got your head around that you will be fine.
I chose Java – for work needs and it complimented Android. If I was left to my own devices, I probably would have chosen Python, just because of all the support material. It’s a good language that you can build web applications with, and you can use it as a scripting language – more advanced stuff to do with the terminal/ command line (don’t worry if you are confused).
Learning Java took me the best part of a year. So literally half of the time it took me to get to where I am now (Jan 2018). My rationale was this, fundamentals are key. If you rush this stuff then it bites you in the arse later on. I was brand new to programming, so there were a lot of abstract concepts and terminology that I could just not quite grasp off the bat.
In hindsight, this has been really good, as now I don’t take the code other people have written as gospel. It enables you can have a constructive conversation and become active rather than passive when working with other coders.
I began with an introduction to programming in Java textbook as a starting point – I found it on Safari Books; then I went over a lot of the material I found a little confusing at the time with online video tutorials – I used Pluralsight for this, but there is some good stuff on Udemy and Youtube as well. The first two I was in the fortunate position that my company paid for subscriptions to the materials. I would certainly recommend signing up for free trials.
So at this point, I knew Java, I understood it conceptually and could talk to developers about the code they had written. But when I read my colleagues code it made no sense. I could have told them conceptually what a thing was or logically what it was doing. But I had no idea why they chose to write that specific code. I felt like I knew what code was, but I could not make the connection that allowed code to interact with the computer. It still felt very disjointed.
Learning a framework
This is where frameworks come into play. Frameworks are powerful. They give you the ability to apply your code in a manner so it actually does some cool shit. There are Web frameworks, that allow you to make stuff happen on a website. There are mobile app frameworks that let you build, yep you guessed it, mobile applications.
So I tried some tutorials etc. from the resources that I linked above, and then I came across Udacity. Honestly, I could not sing higher praises for this website. It is up there with Khan Academy, and CrashCourse for my favorite online learning – these are not for programming (well I think Khan Academy has a section for it now, and CrashCourse has stuff on Computer Science – but it’s not practical info).
But back to Udacity – some of the courses cost several hundreds of pounds, and I understand because the quality of the content is THAT GOOD! But the great thing about it is for some courses (like the android one), the content is free. You pay for tutorial support, coursework submission, and marking. I did not feel the need for this. Fortunately, my friends could review my code as I was learning it.
Because I had previously learned Java, I went through two android courses at a relatively fast pace. I was just learning how to use my Java code now to make apps.
After completing the course I felt a little lost. My technical proficiency was good enough to apply for jobs, but I still felt very much a hobbyist. So that is when I decided to take the Google Cert. Not everyone would need to do this, I just felt it showed potential employers how serious I was about learning Android. I may not have had the formal education of a computer science degree, but at least I could show that I understood enough core principles of app development.
Where to next?
So 2018 I plan to have a pretty busy year, with this type of work you don’t stop learning. Regarding languages, possibly start with either Kotlin, Rx Java, or Python; I plan to have a released app in the PlayStore (I’ll be sure to write a post on this); a job working as an Android developer; teach myself some basic web development to support my app knowledge.
I know it’s a lot of stuff but I do have enough goals to aim for and I feel pretty confident I have to tools to teach myself.
EDIT: I now have a job as an Android Developer 😁 11/3/18