A Renewed Goal and The Adventure Begins
The person who stops studying merely because they have finished school is forever hopelessly doomed to mediocrity, no matter what their calling. The way of success is the way of continuous pursuit of knowledge. — Napoleon Hill.
Just because you finished your degree, it doesn’t mean you’re done! In the tech industry (and I presume in many others as well) there’s no such thing as being done learning. Although the foundations stay the same, current technologies evolve or new ones emerge. All this at a very fast pace and the only way to keep up and stay relevant is through continuous learning.
As you may know, last December I earned my Masters Degree in Computer Engineering. After graduation, I was considering applying for the Ph.D. program, mostly encouraged by my graduate advisor. I even started working on the application paperwork, which included requesting recommendation letters and other requirements. Still, there was something in the back of my mind that didn’t quite clicked. I felt that I was not “all in.” If I was to start the Ph.D. program, I would’ve had to wait until the next Fall semester. So, in the meantime, I started applying for Software Engineering positions at different companies. My confidence was high, you know, ’cause I just got a graduate degree.
Typically, an interview for a software engineering position involves what’s called a technical interview, in which you are asked to solve programming and logical problems. There may be several rounds of these interviews, and there is usually an initial skills assessment which you have to take before even going for an on-site interview. I received some calls back and got to take the initial assessment for two different companies. The feedback was that, based on my assessment results, they decided to consider other candidates for the position. In other words, I had failed in both. The second company that contacted me was Amazon, and I was very excited and also a little nervous about taking the assessment for them. So, as you can imagine, I was quite disappointed when I first heard the bad news. This was three weeks ago. After giving it plenty of thought, I now think this experience has been invaluable.
A Goal is Renewed
As I mentioned in my previous post, my background is not in Computer Science. So, one of the main reasons I decided to go through grad school was to make a career switch and become a software engineer. My experience with the Amazon interview rekindled (pun intended) this desire and taught me a few things. My definite goal is to become a Software Engineer for one of the best tech companies in the world (e.g. Google, Microsoft, Amazon, Apple, etc.). The fact that one of these companies reached out to me has convinced me that I can have the same opportunity with ANY of the others. Even Amazon is not lost, I can re-apply after 6 months.
In order to accomplish this goal, I have laid out a concrete plan with specific subjects that I need to review, study, or practice in order to prepare for a technical interview at a major tech company. The plan involves a daily schedule detailing what I need to be doing each hour of my day (which typically starts at 4:40 AM). Though Amazon does not provide specific feedback on the skills assessment, I have a pretty good idea of where I lacked. I also did some more research to come up with the plan. I was particularly inspired (and found quite useful) by jwasham’s coding-interview-university. Having a concrete plan makes things so much easier. First, it eliminates all the guesswork and helps in wasting as little time as possible, since you know what you’re supposed to be doing at all times. Second, it just feels good checking off items of the list and seeing how much progress you’ve made. Now, the plan may change as I go along. I may need to add or remove things, or maybe spend less time on some topics and more on others, but that’s ok. The most important part is to get started and stick to it.
Here’s a picture of the stack of books I’ve been drilling into for the past few weeks (my mug is there for scale :p). The Design Patterns and UML books are mostly just for reference.
For the past few weeks, I’ve been reviewing concepts, studying what I had forgotten, and practicing programming problems on these books. I will keep practicing every single day until it becomes second nature. Not pictured above are some other books I have in PDF format, a flashcards iPhone app that I use for reviewing, and a pool of youtube videos and websites with coding challenges. During on-site technical interviews, almost all companies do what is known as “whiteboarding” (not to be confused with waterboarding, though it might feel just like it). Whiteboarding means that candidates are asked to solve programming problems on a whiteboard. It is, of course, way more challenging than writing code in a computer where you have things like autocomplete, linting (syntax correction), and other similar features. Naturally, I also have my own 34" x 22.5" whiteboard for these purposes.
Practice, Practice, Practice
In the world of software development, hiring companies are finding out that school pedigree or GPA does not often directly translate into actual skill. Candidates are now being evaluated based on their skills and not their pedigree. I have learned (and seen) that the most effective way to get better at any skill is through consistent practice in a disciplined manner.
During my undergraduate studies, I remember one of my professors told us this joke:
One time, a young lad asked an old man, how do I get to Rome? To which the old man replied: practice, practice, practice.
Of course, at the time I thought it was just another lame dad joke. I now think it really was wisdom in disguise.
As of right now, I haven’t applied to any of my other target companies. I will wait until I’m a little further along in my preparation. This should take me only a few more weeks. Even after submitting an application, the response is not immediate, and it can sometimes take weeks to hear back from them. This is ok because it gives me more time to keep practicing.
I’ll see you in Rome!
Update (3/10/19): Here’s a video with advice from actual Google Engineers: