Self-taught programmers without CS degree working at one of the big 5 Google, Facebook, Apple, Microsoft or Amazon. Kindly share your experience, how you did it & how happy you feel.
I don't have a CS degree and currently work at Google.
I used a bootcamp to get my foot in the door. I studied college textbooks in my spare time for a few years to fill some of the gaps in my knowledge, and then hardcore interview prepped for a few months leading up to my interviews. I got accepted into all of the tech giants and ultimately decided to go to Google.
This is by far the best job I've ever had, and I couldn't be happier with how this all panned out.
People vastly overestimate how much you need to know to get a job at a tech giant. Not everyone at Google is a computer science or math wizard - in fact, the number of jobs that require people with highly specialized knowledge is quite low. Most people are doing the same app development you'd do anywhere else.
Out of interest, how did you go about actually getting the interviews?
Unlike you, I have a CS degree, and I've applied to the top five a few times now. Microsoft and Amazon contacted me, and after I agreed to an interview they both went quiet. Facebook never got back, and Google rejected me twice after sending in my CV.
I've tried a number of ways, through LinkedIn, direct applications, and even asking face-to-face at conferences, but it feels like I've angered some almighty tech god because none of them seem remotely interested, or are happy to tease me with an interview, only to ignore me after I reply.
I've always assumed that if it's this hard for me, then it must be as hard, or harder for others, so it'd be interesting to hear about the actual process of getting an interview from your perspective.
I'm honestly not sure what to tell you - the recruiting side of things is so opaque that I'm not sure what you can do to get past the initial screen. I personally had a strong referral at Google, but everywhere else I applied through the front door and had no issues.
If I were to take a guess, I'd say that I got a bit lucky - right place/right time sort of thing. I had a few years of experience under my belt, which separated me from the new grads, but not so many years of experience that I'd be competing with senior engineers. On top of that, I applied for front end positions, which I think tech giants have only recently started to value - this has left a bit of a void that needs to be filled, which possibly made it easier for me to get the initial recruiter calls.
My resume was also relatively strong for someone with two years of experience. Solid university, strong GPA, and at my previous jobs I always tried my best to wiggle myself into taking on large projects and write tooling to make everyone's lives easier. This gave me a lot of stuff to talk about during the interviews and made for some impressive looking bullet points.
What you feel is the most important thing on your Resume to get the interviews in these companies? Is any of opensource work or any other thing which can be helpful to get the interviews (portfolio etc)? Thanks for sharing.
Nothing too exciting. Perhaps counter-intuitively, tech giants are the most straightforward to get into because their interview focuses so much on whiteboarding ability. I personally know people who have gotten into Google/Amazon/Facebook straight out of bootcamp because they had great ability to solve these sorts of problems.
My personal journey took ~2.5 years. I didn't think it was possible to get into a tech giant out of bootcamp so I never tried. Worked two different jobs for a year each, figured I'd give the interviews my best shot, and got accepted.
For background knowledge, I used Algorithms 4th ed. as my textbook. My source of practice problems was LeetCode - did a few/day over the course of around 6 months leading up to the interview.
I used JavaScript because I'm most comfortable with it - I believe you can use any language you want, but you're better off if it's one the interviewer knows (Java/C for back end, JavaScript for front end.)
I personally applied as a front end engineer, but the only difference is that the system design interview question gets swapped with a front end focused one. Within Google my official title is still "Software Engineer" and I'm expected to work across the stack.
Took me about 2.5 years, but I wasn't actively trying to get into a tech giant the entire time. I personally know people who went straight from a bootcamp into Google/Amazon/Facebook because their ability to solve algorithms was excellent.
I have a copy of CLRS on my desk, but I actually found Algorithms 4th ed to be the perfect level of difficulty for someone with no math or CS background.
I start at Apple tomorrow - unfortunately I can't really say much about it except that my industry experience and experience interviewing with a myriad of companies helped prepare me for the interview process at Apple, although Apple is pretty intense as far as interviews go (I only study interview failures).
While I am self-taught and without a CS degree, I did spend 4 years at a top 15 PhD program in mathematics (UIUC), and have undergrad degrees in math & physics.
After leaving grad school, I was desperate for any career track job - after 2 years of fruitless job searching, I got fed up and started teaching self whatever skills I felt I needed. Observing lots of web developer positions open, I decided to target programming skills. Half a year after then, I got my first job as a frontend web developer. Turned out I loved the work, and invested a lot of hours outside of work investing in myself to improve my skills. I also was introduced to the world of open source, and guided to contribute. Fast forward to today, I have 4 1/2 years of web development experience, predominantly frontend but about two years working across the stack. I have architected frontends for most of my career, as well as done some major open source work.
I don't have a CS degree and work at Amazon. I picked a specialty completely unrelated to academic CS that's generally welcoming of beginners (PHP development).
After getting a very entry level PHP job based on reading a few O'Reilly books, I spent a couple years getting progressively less shitty jobs with progressively higher pay and levels of responsibility. By the time I got an interview with Amazon, I was a legitimate PHP expert. I read a book on Amazon's leadership principles and worked through Cracking the Coding Interview to prep for my interview loop at Amazon, and I'm pretty sure only one or two of my interviewers knew I didn't have a CS degree -- the rest didn't look at my resume.
Now that I've been at Amazon for two years, I don't think any employer would care about my lack of a CS degree. I'm certainly happy to be making several times more than I did in my previous career (French teacher).
Self taught programmer WITH a CS degree, worked at 2 of the companies you mentioned. I got a master's degree in CS a while ago. I still call myself a self taught programmer because I started learning as soon as I started practicing CS at work. A degree is like a passeport, hard to move around without it and people assume you do have a passeport because it's easy to get.
So, it could be just a memory exercise. If you practice on leetcode and memorize about a 100 different problems, then you should be able to get in any of these companies (as illustrated by other people here).
Last but not least, to really answer your question, you basically feel pressured to deliver a lot in a small period of time. Not once, not twice, always. You get judged a lot on your abilities and at the end of the day, you still work on products that solve very basic problems - web app, mobile app, e-commerce, social, etc.
It's all about fear and ego. Was I able to work at one of these top companies? Am I the smartest employee in my group? Is my annual package bigger than my friends packages? Am I wearing a t-shirt of my employer during the weekends? Things like that... from experience, you should be hunting for a much bigger opportunity in life. Go where things don't exist yet and don't get distracted by very successful people like zuck, jobs, gates, etc. who have built empires. Do you want to work for their missions or yours? Use them as examples, don't work for them!
This is the same impression I got by interviewing at the big 5. Everybody there drinks the Koolaid while building things that have a negative impact on the world
To preface my answer: I don't work at one of the companies you mentioned, but before I joined a graduate program I didn't have any undergraduate degree and I still worked in the industry just fine. I am reasonably certain I'd be hired at at least one of them if I tried, and I've been invited to interview at one of them a few times by a specific team.
It's going to be hard to be hired at one of those companies without previous experience, whether that is through academic accreditation or through relevant work experience. So if you're already working as a developer in some capacity that's a good first step.
The knowledge you're missing (specifically for the interview process) comes in two flavors: breadth and depth.
In terms of breadth, you want to understand databases (applied set theory, you can focus on RDBMS), networking, computer architecture (including latency and memory), and system design.
In terms of depth, you want to dive into complexity theory, algorithms and data structures. You'll want to know data structures and algorithms such that you can both implement them and reason about their asymptotic complexity. Specifically, know data structures (arrays, linked lists, stacks, queues, etc) and algorithms (searching, sorting, graphs, etc) and know their respective complexity classes.
On a practical note, you should practice whiteboard coding for implementing the foregoing as well as 1) testing your code and 2) incrementally improving it (i.e. get comfortable writing a reasonably quick solution to a problem, then grappling with it to improve the approach and make it faster). You'll also want to practice mapping problems to the algorithms and data structures you've learned.
Functionally, in an interview you'll be doing the following:
1) Receive problem,
2) Think about the problem before diving into it, and map the problem to a first order solution,
3) Test the solution to reasonably account for edge cases,
4) Now improve your solution's complexity for time or resource requirements.
I can't comment on how happy the working environment is, but I'm familiar with folks working at at least two of those both with and without CS degrees. It's not at all an insurmountable hurdle; the biggest obstacle is taking an inventory of your unknown unknowns and working through them.
Self-taught programmer here for a long time (later got a CS & Engineering degree at a UC).
I worked at Trimble, Stanford (with IITians) and many other Fortune 500 shops as a consultant without a degree. No problem.
The only thing a degree really solves it tells HR "candidate completed some hazing ritual, with a smattering of learning how to learn."
Some people look at degree as a pedigree, but it's mostly BS (and expensive).
The goal of certifications and degrees should be based on whether it's required by a specific industry (ie professional engineer) or job role (ie doctor).
I used a bootcamp to get my foot in the door. I studied college textbooks in my spare time for a few years to fill some of the gaps in my knowledge, and then hardcore interview prepped for a few months leading up to my interviews. I got accepted into all of the tech giants and ultimately decided to go to Google.
This is by far the best job I've ever had, and I couldn't be happier with how this all panned out.
People vastly overestimate how much you need to know to get a job at a tech giant. Not everyone at Google is a computer science or math wizard - in fact, the number of jobs that require people with highly specialized knowledge is quite low. Most people are doing the same app development you'd do anywhere else.