It's been a little over a year since I left my day job as an analyst in the biotech/market research industry. Many things have changed since leaving. I'm now working in the mobile games industry as a software developer. I just wanted to impart some of my thoughts on how I made the change. If you're currently in a different industry but you have an interest in software development, especially mobile game development, read on!
First, some context. Beyond gaining experience developing my own games and applications, many other factors helped me make this transition including support from family and friends, location and a bit of luck. I had a couple friends from college who were non-CS majors but had made a similar transition into software and after speaking with them, I decided it could be possible for me as well. I thought game development would be an interesting area to gain experience in and decided to start with iOS development. Mobile development is a hot industry and I'm sure that also helped my chances later on with finding a job. Living in the San Francisco area also helped.
There is tons of advice and information out there on how to prepare for an interview. My favorite places for interview questions has been Glass Door and Stack Overflow. As I understand it, Glass Door is a site that aggregates information provided by former, current or prospective employees of a company. In addition, contributors, especially at the larger companies such as Google, often provide interview questions that they've encountered and insight on what the interview process is like. Stack Overflow is also a great resource for interview questions.
Starting out, my strategy was to aggregate all the questions I could find and go through them one by one. After a while, you will see common patterns and themes to these questions and you'll have a sense for which questions are likely to be asked at a typical interview, regardless of the particular company. My favorite read (which I would highly recommend) on the interview process and how to prepare is a blog post by Steve Yegge which can be found here:
One of my biggest weaknesses was in not knowing much about data structures and algorithms. A book, which I used, that Steve Yegge's recommends is "The Algorithm Design Manual" (Skiena) (pdf version). Learning about data structures and algorithms can get really complicated, but this book is probably one of the easier reads on the subject without sacrificing the core concepts. From my personal experience, an interview will not delve into concepts more complicated than what this book provides information on. You're not always going to be asked about data structures and algorithms during an interview at every company, but you are likely to run into these questions at larger companies.
Depending on what you are interested in or what the company does, you may never see these concepts in practice again after interviewing. However, the most important concept I got out of this and a concept that I think you will continue to think about on the job is understanding the "order of a problem" (e.g., whether it was O(n), O(n log n), or O(n^2), etc). If you don't know what I'm talking about, read the book (or the many online resources on the subject)!
Background
Development
I spent the next 4 - 5 months developing my programming knowledge and experience full-time on my own. Part of my time was spent with online resources including Google, Stack Overflow, Ray Wenderlich's site on iOS tutorials, but I also did spend time reading through books starting with "Learning Objective-C on the Mac" (Knaster, Dalrymple). From there, I moved onto other books including the following:
Some people learn best through online resources while others learn best through a physical resource. I prefer a combination of the two (leaning a bit towards physical resources). What can be taken away from this is that everyone learns differently and you should do what works for you.
- "Beginning iOS 5 Development" (Mark, Nutter, LaMarche)
- "Learning Cocos2D" (Strougo, Wenderlich)
Some people learn best through online resources while others learn best through a physical resource. I prefer a combination of the two (leaning a bit towards physical resources). What can be taken away from this is that everyone learns differently and you should do what works for you.
You can only get so far with books and online resources. I believe that starting a major personal project is essential in gaining the necessary experience. Find something you are really interested in implementing and dive right in! I started my first major project a few weeks in. It was a tower defense game. You can read more about that experience in my previous post.
The biggest value I got from the project was the rate at which I was able to learn things. There was the goal of finishing the game which helped me focus. There were a lot of game mechanics I had to figure out how to implement programmatically including how to make images show up and move on the screen and how to save data. There were a lot of issues I had to debug including why my animations weren't working or why my game crashed at certain points. At the end of the day, these issues didn't just disappear. They had to be figured out at some point or the project wouldn't progress. Reading through a book or other materials, you can always say, "Oh, I think that makes sense," or "I don't think I fully understand this, but it probably makes sense," but you may not actually get around to fully understanding the concept. Starting and completing a major project will put you face-to-face with issues you haven't fully fleshed out in your mind. Another great thing about working on a project like this is that, of course, you can talk about it during the interview process!
The biggest value I got from the project was the rate at which I was able to learn things. There was the goal of finishing the game which helped me focus. There were a lot of game mechanics I had to figure out how to implement programmatically including how to make images show up and move on the screen and how to save data. There were a lot of issues I had to debug including why my animations weren't working or why my game crashed at certain points. At the end of the day, these issues didn't just disappear. They had to be figured out at some point or the project wouldn't progress. Reading through a book or other materials, you can always say, "Oh, I think that makes sense," or "I don't think I fully understand this, but it probably makes sense," but you may not actually get around to fully understanding the concept. Starting and completing a major project will put you face-to-face with issues you haven't fully fleshed out in your mind. Another great thing about working on a project like this is that, of course, you can talk about it during the interview process!
Interviewing
Starting out, my strategy was to aggregate all the questions I could find and go through them one by one. After a while, you will see common patterns and themes to these questions and you'll have a sense for which questions are likely to be asked at a typical interview, regardless of the particular company. My favorite read (which I would highly recommend) on the interview process and how to prepare is a blog post by Steve Yegge which can be found here:
One of my biggest weaknesses was in not knowing much about data structures and algorithms. A book, which I used, that Steve Yegge's recommends is "The Algorithm Design Manual" (Skiena) (pdf version). Learning about data structures and algorithms can get really complicated, but this book is probably one of the easier reads on the subject without sacrificing the core concepts. From my personal experience, an interview will not delve into concepts more complicated than what this book provides information on. You're not always going to be asked about data structures and algorithms during an interview at every company, but you are likely to run into these questions at larger companies.
I spent about 4 - 5 weeks part-time (I was contracting during this time full-time) studying the concepts inside "The Algorithm Design Manual" and going through the questions I aggregated from Glass Door and Stack Overflow. For reference, you can find some interview questions I worked out while preparing here (in Objective-C):
Depending on what you are interested in or what the company does, you may never see these concepts in practice again after interviewing. However, the most important concept I got out of this and a concept that I think you will continue to think about on the job is understanding the "order of a problem" (e.g., whether it was O(n), O(n log n), or O(n^2), etc). If you don't know what I'm talking about, read the book (or the many online resources on the subject)!
Keep Learning
I've been working professionally in mobile game development for the past 9 - 10 months now. There are lots of things I didn't know when I started out, and there will continue to be things that I don't know. That's okay. You don't need to know everything for the interview nor when you start the job. The only thing you can do is keep learning!
- software development, especially mobile, is a hot industry and there is a high demand for engineers in this area
- moving to the bay area will help your chances
- work on a major personal project related to what you're interested in as soon as you are ready
- studying data structures and algorithms is very helpful for the interview process; the main book I used: The Algorithm Design Manual by Skiena (pdf version)
- read Steve Yegge's blog post on how to prepare for the interview (blog post)
- if I can do it, you can do it
- keep learning!