top | item 12259772

Ask HN: 8 years working, now 3-4 months off to learn. Looking for advice

218 points| ramblerman | 9 years ago

I have a Bsc in Software development which was extremely practical and light to non existant on real math or algorithms. Since then I have done very well as a contractor programming mainly in java building webapps for your typical enterprise shops, banks, big energy providers etc.

Now at age 33 I'm considering taking 3-4 months after this contract to take the following 3 courses:

- http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/Syllabus/

- http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-- 2011/Syllabus/

- http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2015/calendar/

I want to stop contracting and apply to a company solving real problems after this process, google, facebook, zalando, amazon, etc..

I have always felt terrified of the google interview process, or any test on a whiteboard for that matter.

In the 3 months, I plan to work 6-7 hours a day and get a tutor 3-4 times a week on chegg.com. If I have time left I would also like to work through cracking the coding interview.

Would love any feedback on this idea, i.e. if I'm missing the mark, or picking bad courses it's best to know now.

117 comments

order
[+] gervase|9 years ago|reply
If your goal is be employed by a large company with a "Google-esque" interview model, your time will be much better spent working on your interviewing than on learning a broad base of CS knowledge, because that's not what they're going to be testing you on.

Cracking the coding interview is pretty good, but you'll go crazy if you just try to work through it straight without any other content to broaden your perspective.

I'd suggest doing challenges on Topcoder, Hackerrank, etc. to help reinforce the concepts. These questions are very similar in format (if not content) to those you'll see in your interviews, so it's helpful to get thinking in these kinds of modes.

If you're not already comfortable coding on a white board, or talking and coding at the same time, you'll want to work on those as well. Even some simple rubber duck programming will be useful.

Note that the above is probably not going to be anything new to you - you've probably already read this in a bunch of other blogs you found while googling. I repeat it only to reinforce its accuracy.

[+] dunkelheit|9 years ago|reply
Seconded. Learning basic CS concepts will be more useful in the long run but for the specific goal of passing google-style interview you are better off practising directly for that.

All suggestions here are great but don't forget that whiteboard coding is the main part but not the only part of the interview. Practice answering architecture questions (conveniently, they can be practised without actually building any services) and other types of questions (find out which ones).

Also think hard about your goal. "Getting into Google" is too abstract. Google has all sorts of teams, from the ones doing hardcore legacy maintenance to the ones doing some crazy cutting-edge stuff. The catch is that competition to get into more prestigious ones is crazy. Try to figure out (don't know how to do it though) if you have a chance of making a team that does something that you personally find interesting, or you are bound to be disappointed.

[+] CyberFonic|9 years ago|reply
Great suggestion.

Buy a whiteboard and a rubber duck and practise away. Take a video of yourself, review and polish. 4-6 weeks should be more than enough. So then you could treat yourself to a vacation.

[+] rahimnathwani|9 years ago|reply
This is the best answer so far on this thread.

I would add: if you have additional time, it's worth starting to learn about machine learning. More and more problems are being attacked with machine learning models, that a few years ago would have required with hand-coded algorithms/rules or basis statistical techniques.

Learning about ML may not help you much with the core of the interview process (algorithms, data structures, and system design), but it will give you a better idea about the types of problems you might want to work on.

[+] billhathaway|9 years ago|reply
The "talking and coding" point mentioned above is key. The interviewers want to hear your thought process and approach. Gayle McDowell (author of CtCI) has some videos for purchase[0] that show mock interviews including whiteboard coding and she gives good feedback. Certainly worth the $40 if you are unfamiliar with this style of interviewing and going for a dream job.

[0]: https://www.careercup.com/video

[+] bamboo_7|9 years ago|reply
WTF is wrong with this industry?!?

You have 4 months to train for a better job and the best advice is to spend the time studying interview techniques??

I'm not criticizing anyones post here, but the industry in general. That's where we are? Teaching to the test??

I know, I know, "interviewing is broken" and "that's the way the big companies evaluate you" and all.. but geez! Is anyone else bothered by this? Isn't it possible to get a good job at a good company based on your skills & knowledge rather than interview-ability?

I can understand an argument of "well, OP wants to get into Google, and this is the best way", but maybe that means that sights are set too high... maybe it should take longer than 4 months to get a job at Google. Am I taking crazy pills?

[+] ChuckMcM|9 years ago|reply
And here I thought your second line was going to be along the lines of "why do you think Google, Facebook, and Amazon are solving 'real' problems?"

I have encountered that point of view several times "I'm spending all my time writing this stupid app that collects purchase orders from one data base and puts them in a shippers database, I want to solve real problems like putting mustaches on the pictures of all my friends in Facebook!" That is when I have my WTF moment. Airlines desperately need to upgrade their systems, that is a real problem that affects people every day, but who is aspiring to work at the airlines in their IT department?

[+] peruvian|9 years ago|reply
The interesting thing is how well accepted this is. Go on Reddit's /r/cscareerquestions (a popular forum for programming job help) and you'd get downvoted by people who prefer to have to "study" for the test.
[+] 35bge57dtjku|9 years ago|reply
> Isn't it possible to get a good job at a good company based on your skills & knowledge rather than interview-ability?

I did, at Amazon.

[+] nostrebored|9 years ago|reply
If you think that algorithms and math are not applicable to programming at Amazon, Facebook or Google's scale, you really do not understand the work that they are doing.
[+] brad0|9 years ago|reply
Short answer:

Understand all of Cracking the Coding Interview. Surround yourself with other developers who know the material well.

Long answer:

The big 4 hire thousands of engineers a year.

They have an interview process that brings in developers who can "get the job done". What I mean by this is that 99% of those thousands of developers won't be building anything groundbreaking.

Before you decide you want to work for these guys ask yourself why you want to work for a big company.

Is it:

- To get away from contracting - do you feel trapped?

- You're not learning any more or getting anything out of contracting?

- You just want to try something different?

- You want to work on a specific team in a specific company because their problem is interesting and unique?

Another thing that's interesting - you say the interview process terrifies you.

You need to ask yourself why it scares you.

A lot of the time when something terrifies you it means that you need to expose yourself to it.

Ask yourself:

- What's the worst that could happen? (you fail the interview and you're in the same place as you were today, just with more experience)

- What do I lose by going into one of these interviews without being prepared (you can't interview again with this company for a year)

- What do I gain by going into one of these interviews without being prepared (you get a feel for how the interview process works)

Don't be afraid of failure - it's the key to success.

[+] derefr|9 years ago|reply
> Before you decide you want to work for these guys ask yourself why you want to work for a big company.

The bigcorps are the only people hiring here (Vancouver, BC) that pay anything sensible. :/

[+] mathgenius|9 years ago|reply
All of this sounds a bit pre-meditated to me. If you are a "planner" then perhaps this will work for you. The alternative is to just GO NUTS! and pick up whatever random stuff you find interesting TODAY and dig in there. Most of these roads lead to rome, and if you find something that makes you curious, even though you have no idea why, that curiosity is likely to make you 10 times faster at absorbing/processing (and creating) new ideas.

For example, you want to do some graphics programming, maybe a raytracer, and that leads to thinking about projective geometry and linear algebra and whoah, a few years later all of that stuff is useful when you end up in a machine learning job. (maybe)

But back to the plan, if that's your thing. All the blog posts that complain about the "interview process" seem to be about how they don't understand dynamic programming. So, put that at the top of your list! (And by the way it is loads of fun.)

[+] mk7|9 years ago|reply
Yes! GO NUTS! Scan the web for most advanced tech and dive in... choose what is attracting you most... try to deeply understand all that -> will be much better for your future work, than math/algorithm courses you mention... BUT if these courses are attracting you most, dive in there and understand them very well!
[+] derefr|9 years ago|reply
That sounds fine if you want to get a job at (wherever) in three years. If you want (or need!) to get one in three weeks, however...
[+] ma2rten|9 years ago|reply
I am going to start at Google in two weeks. Having recently passed Google interviews, I would give you the following tips:

1. Unless they contacted you at LinkedIn or you know someone at Google who can refer you, the most difficult part is actually getting an interview.

2. Apply as soon as possible. They don't mind scheduling an interview 3 months in advance and they will send you preparation material and they will be able to answer questions. (This is specific to Google, I would not do that at most other companies).

3. Check out Quora they have a ton of information about the Google interview process. Also some info, but not so much about other companies. That shouldn't matter because the preparation is mostly the same.

4. I don't think it's a bad idea to follow courses as well. At least for me it would motivate me more if I learned something of value in addition to just getting a job. However, unless you are interested in it, don't worry about Math.

5. As others I would recommend to work through the book Cracking the Coding Interview. I also found the website interviewbit.com helpful. It's similar to leetcode, but they organize the questions by topic and gamified it. This helped me to stay motivated.

6. Also prepare for system design questions. Those are equally important as coding, algorithms and data structures for candidates that have industry experience.

7. Do mock interviews. Ask friends, otherwise there is a YC startup called Pramp.com. They allow to do mock interviews with peers for free. There also services that let you do payed mock interviews with people that actually work at big tech companies.

8. Don't be naive about what impact you can have working at big companies like Google. You are going to work on a small subpart.

[+] cprayingmantis|9 years ago|reply
Curious as to what level of education you have. Myself and 3 of my friends from a little of nothing state school in the southeast had no problems getting interviews when we were about to get out of the Graduate program.

As for everything else I 100% agree. In short the Google interview process is crazy. It's where you're quizzed on your knowledge of obscure facts and algorithms not really on your actual knowledge and level of skill.

[+] pyman|9 years ago|reply
Please stop with all this "I survived the Google/Facebook interview process" for god sake. These type of comments are written by an HR employee or an Evangelist promoting the company. There are some amazing Engineers working in those companies, but some mediocre ones as well. Believe me, I worked with a lot of them. Apple, on the other hand, is an exception. They are all outstanding.

My advice: Develop your curiosity. Be adventurous. Travel around the world and learn about other cultures. Then, find a company where you are happy, the smaller the better.

[+] umbs|9 years ago|reply
Since your goal is to clear interview at Google (or companies with similar interview style), I would recommend straight up interview preparation.

I have recently found "Elements of Programming Interviews" [1]. For people with 5+ years of experience trying to clear Google style interviews, this is the perfect book for following reasons:

+ The quality of problems is much much better than the other two books popular in this category ([2,3]). I am not saying problem are hard, but they found a right balance between quality and solvability in interview setting. + The solutions are methodical and of high standard. For experienced people, problems in [2,3] may appear too dumb down. + It has some 260 or more problems covering various areas of CS. By going through this book, you should get CS fundamentals and interview prep in one shot.

I have all three books but strongly recommend EPI

[1] Elements of Programming Interviews [2] Cracking the Coding Interviews [3] Programming Interviews Exposed.

I have no affiliation with authors/publishers of [1]

[+] FT_intern|9 years ago|reply
[3] is a good newbie book. It explains basic problem solving techniques and introduces the basic problems/algorithms that many questions are derived or built on top of.

[2] has a good soft skills section and is a medium difficulty workbook. I felt that Gayle did a poor job explaining the solution to the problems. I used the book in a guess and check manner.

[1] wastes little time explaining the basics and ramps up very quickly. It does a very good job of explaining the problems, although there is an assumption that the reader is advanced. Some problems are so difficult that they would never appear on interviews.

If you're starting out fresh, I recommend the sequence: [3] -> easy leetcode -> [2] -> medium leetcode -> [1]

[+] grobaru|9 years ago|reply
I do not want to discourage you but these companies hardly solve "real problems". Yes they might be challenging and more prestigious but you will probably end up just working on better ads targeting.

I mean I do not want to underestimate your skills and intellect but look at what happened to Geohot and I believe he is above your average MIT/Stanford graduate

[+] vinothgopi|9 years ago|reply
What happened to Geohot? Any links?
[+] yogeshp|9 years ago|reply
Here are some of resources you can use for learning CS topics related to interviewing. You don't have to do all of them, do as per whatever combination suits you.

For learning Algorithms and data structures for interviews

1. Coursera courses on Algorithms by Prof Roughgarden

2. Coursera courses on Algorithms by Prof Sedgewick

3. OCW 6.006 as listed above would be good too.

4. Prof Skiena's algorithms course

5. Berkeley CS 61b by Prof Shewchuk for refreshing basic Data structures like Linked list, tree traversals which are not covered in above mentioned courses.

For practice,

1. geeksforgeeks.org

2. leetcode.com

3. interviewbit.com

4. careercup.com

5. Hiredintech.com

6. topcoder, hackerrank , spoj etc are good sites for practice in general but their problems are embedded with extraneous information not seen in interviews. For example, interviewer is not going to explain you 2 page story, instead he will tell you directly what needs to be done.

In books,

1. Cracking the Coding Interview

2. Programming Interviews Exposed

3. Elements of Programming Interviews

Books on Design Patterns

1. GoF

2. Head first design patterns

3. Software Architecture books by Robert Martin

4. Elements of Enterprise Architecture Patterns by Fowler

5. System Design research papers, gainlo.co has many design questions

[+] CyberFonic|9 years ago|reply
With your experience in so many application areas, I doubt that so much theory oriented learning would be of much benefit. You are more likely to be hired for your domain knowledge.

Based on your plan, you would become better versed in several areas of theory, but still limited to being a Java programmer - which in turn will probably lock you into the enterprise space. Unlikely to give you real problem solving opportunities.

@grobaru hit the nail on the head. The established firms you list are either going to hire you for your general programming knowledge or for a specific project. In the latter case domain knowledge and experience is going to be valuable.

I think you need to revisit your goals. What industries do you prefer to work in? What domain knowledge do you bring to the table? Look at what languages, frameworks are used in those areas and then get some experience with them. And have you considered startups? Their mission and problem domain(s) tends to be more focused than the big companies.

[+] fecak|9 years ago|reply
I'm a mod on Reddit's /r/cscareerquestions, and we get questions like this so often that we created a specific weekly "Big4" thread to address them.

Even if your BS in SW had been heavy on math, it wouldn't likely matter much now that several years have passed where you haven't used that education.

As others have said, practicing for the type of interview you'll be subject to at these companies is probably a better plan than taking a bunch of online courses.

My concern is that you seem to equate "solving real problems" with only a handful of companies, and it turns out that those companies are somewhat known to all have this particular interview style which will require you to memorize algorithms and data structures (even if you won't use those skills on a daily basis at that job).

Essentially, you're talking about taking a few months to prepare for the interview that most entry-level candidates with "Big4" aspirations prepare for after graduation.

Another option would be to consider whether there are other companies solving real problems (of course there are), and whether or not these other companies would subject you to the same style of interview (probably not).

Other companies won't interview the same way, and still solve big problems. I'm not sure if this is something you'd considered, but thought I'd throw it out there.

[+] triplesec|9 years ago|reply
This answer in particular makes sense: don't go with the names, becaue they often hire brilliant people, and you're doing really dull things. Have a search round old HN posts and discussions about that. A smaller or medium sized more tech-oriented (rather thn advertising and huge custimer numbers) company might serve you better! Or perhaps a real startup
[+] ryporter|9 years ago|reply
I think it's a great idea to study algorithms and math for CS, and that OCW is a very good resource. Also consider taking a Coursera course on algorithms. One taught by Tim Roughgarden started Aug 8. [1] I haven't taken the class, but I've met Tim and seen him talk. He's both extremely intelligent and a dynamic speaker.

I wouldn't prepare specifically for the interview yet. I know that others are very skeptical of the algorithms interview, but I conducted it myself many times, and I'd like to defend it. When done right, the goal is to see how you think about algorithms. I didn't care about whether you jumped to the solution as much as I wanted to hear you think out loud.

My goal was to decide whether I could see myself developing a new algorithm with you as a peer. For many interviewees who lacked a former CS background, the answer was clearly, "No." You need to have a basic and intuitive understanding of Big-O notation, and you need to be able to develop an algorithm yourself. These courses will teach you exactly that (though you absolutely must do the problem sets as well).

Now, it is true that the interview process has its own quirks. So, get experience. Apply to a bunch of jobs, and try to setup interviews with other companies before you even have a phone screen with a company you really want to work for. As with developing algorithms, nothing beats experience. However, I really believe that this step should be secondary to learning the fundamentals. They truly are the basis for the rest.

[1] https://www.coursera.org/learn/algorithm-design-analysis

[+] goldenkey|9 years ago|reply
If you think the glory of the big co awaits you, you'll be sorrily dissapointed. I worked for one of the companies listed, it was a shit show. Stick with startups. Do what you love. The only way to solve real problems is to be close to them. And most likely Big Co will put you near a black hole that will swallow you up.
[+] Gnarl|9 years ago|reply
I echo that. If you really want to go near BigCo's, then try getting in there as a consultant/contractor so you can hover above all the infighting and politics.
[+] ruraljuror|9 years ago|reply
Check out the Recurse Center. Their sessions are normally about 3 or 4 months. I am not an alum, but I think you could meet some good people, learn from them, and maybe get some good career perspective. It is free but you would have to find a place to live in NYC.
[+] tomca32|9 years ago|reply
This is a great advice. Recurse center (former Hacker School) is a great way to spend 3 months and will get you exposed to so many different fields of our industry. In my batch, there were people making lisp interpreters, robotics, toy operating systems, solving project euler, etc.

They also have a lot of great residents, people who come in for a week to hang out, give talks and workshops, such as: Peter Norvig and Evan Czaplicki.

If you want to spend 3 months making yourself a better programmer/engineer, Recurse Center is one of the best places to do that.

[+] liamgriffiths|9 years ago|reply
I would second this - I participated when I took some time off after a number of years of working. My goal was similar to yours too. The environment and community is wonderful for learning and gaining new perspectives. I loved it.
[+] jraines|9 years ago|reply
Is there anything like RC in the Bay Area? Kind of hard to believe if not.
[+] msg|9 years ago|reply
Amazon engineer here.

Before I worked here, I read Steve Yegge's posts on interviews at Amazon and Google. You cannot get information more straight from the horse's mouth.

I also agree with the general point that you are better off doing interview prep than your general undergrad algorithms courses.

But the catch is that interview prep will lead you back to CS fundamentals anyway. This is a both/and, not an either/or.

The other thing I wanted to address is whether working at Amazon can be practical and cool.

My team is the full stack physical rentals team. When you press a Rent-Now button on Amazon.com, you enter my team's world. Today, we rent physical textbooks to millions of students every semester, and they all get returned at the same time.

We own custom checkout, order management, and return customer experiences. Underlying them is a service ecosystem we built and maintain. To handle the seasonal, spiky nature of our business (back to school, Christmas vacation returns), we use AWS to scale up and down during peaks.

Success breeds success, and we're working on category expansion. Twenty engineers in three teams run the software for this business. That is cool.

There is an incredibly broad spectrum of work going on at Amazon, from mammoth services to front end optimization and everything in between, including unfortunately some very unhappy firefighting operations. Undergirding it is heavy company investment in builder tools and infrastructure, and excellent engineers.

One person's cool is another person's depressing, but I would look at the job listing carefully before writing off a stint at any of the Titans of software.

[+] jasonkester|9 years ago|reply
I think the first question to ask, before you set off on this, is "what happened when you interviewed with google that scared you so bad?"

If the answer is "well actually I haven't tried yet, but I hear it's really scary" then maybe a better plan is to go interview with google.

They really want to find people who are good at programming computers, which you seem to be. They want that even more than they want to humiliate people with impossible algorithm trivia, believe it or not.

Seems like you might save yourself a few months of no fun, and end up landing your dream job in the process.

[+] cableshaft|9 years ago|reply
Well if he doesn't get the interview at Google, he'll probably need to wait at least a year and a half before he can try again. So a few months of boning up on the material could save him a year and a half wait before trying a second time.

But generally you're right, he should apply sooner than later. But it's not worth it without feeling pretty solid on the material that's public knowledge that they quiz you on.

(I'm someone who only had a week and a half to prepare for my interview at Google and I don't recommend that little preparation)

[+] alexdowad|9 years ago|reply
In your 3 months, make sure to limit the scope of what you expect to learn. There is just so much out there, and when you start learning about one thing, that will lead you to another, and another, and another... so be selective about which "rabbit holes" you go down.
[+] eddd|9 years ago|reply
> I want to stop contracting and apply to a company solving real problems after this process, google, facebook, zalando, amazon, etc..

The bigger the company, the smaller the feeling of doing something 'real'. Just my experience.

[+] cableshaft|9 years ago|reply
Although the smaller the company, the greater the chance you're going to be working on "It's like Facebook/Instagram/Twitter, but...", with nowhere near the time or resources to even do it properly.
[+] MK_Dev|9 years ago|reply
Not meant to steal your thread, but any advice on picking up good contract work? I'm in the exact opposite situation you're in.
[+] beachstartup|9 years ago|reply
start hitting the phones, buddy. there's no secret trick to getting work, it's called sales.
[+] k__|9 years ago|reply
You can "solve real problems" as consultant too, you just need to marketing yourself different.

But yes, learning new things is always good. I too 1 1/2 year off to do a master degree in CS.

[+] jheitzeb|9 years ago|reply
these are things I might consider if I was in your situation: 1) build something that you think will force you to learn whatever data structures and algorithms you want to learn. Two benefits; learning and having something to show for it 2) ask someone to do mock interviews with you to practice 3) take the coursera ML course - fascinating, useful, marketable skill and hard to do unless you have a couple of months free to dedicate 4) network. Coffee with people IRL regularly