Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: 8 years working, now 3-4 months off to learn. Looking for advice
218 points by ramblerman on Aug 10, 2016 | hide | past | favorite | 117 comments
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.

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.

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.

> Practice answering architecture questions

What are some good resources to learn about system architecture?

Microsoft Application Architecture Guide https://msdn.microsoft.com/en-us/library/ff650706.aspx

Domain Driven Design (The book is hard to read, but worth it I think) http://martinfowler.com/tags/domain%20driven%20design.html

This uncle bob talk is not too bad https://www.youtube.com/watch?v=WpkDN78P884

I think the microsoft guide is the most comprehensive, but don't limit yourself to it.

(disclaimer: I haven't done the interview dance for quite some time.)

I find suggestions in part 4 of this article: http://blog.triplebyte.com/how-to-pass-a-programming-intervi... quite reasonable. The rest of the article is also excellent. And it is short!

The key here seems to be breadth - even if you have designed a few successful systems yourself, your breadth may be inadequate to talk smoothly about a system design problem which is unfamiliar to you in an hour-long interview. So learn your building blocks, get some ideas from architecture talks and blog posts by tech companies and sharpen your talking and hand-waving skills.

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.

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.

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

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?

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?

If airlines guaranteed a Google-like working environment/salary/tech and no Office Space-like management like I assume they have, I'd definitely be interested. I think most of us have prejudices against other industries and companies that aren't tech centric.

That said, I agree with you. Plenty of other industries that affect people's lives every day need our talent.

"Google-like working environment" You mean colleagues full of themselves, colorful furniture and lousy work/life balance? I think you are a bit prejudiced against non-software house companies. It's not that bad (according to my experience). Neither are software houses full of dream jobs (SW game industry anyone?)

"Work environment", "culture fit", etc. are usually just euphemisms for "your boss."

As in, if you're interviewing and an applicant says they left their previous position because it was a "bad work environment" or a "bad culture fit"—they're saying they had a horrible boss. And if someone says they're looking for a place with a "better work environment," what they're looking for is a place where their boss will defend them against outside interests, won't micromanage them, won't force them to waste their time on work that won't get used, etc.

I suppose that the people saying this may not even realize they mean this—most people don't put much thought into how much of the everyday experience of "work environment" is controlled by what your manager does or doesn't do for the team.

But this is why people will describe places that might seem cloying and unappealing as having a "good working environment": they mean that you're likely to work under someone that knows what they're doing.

Having worked at Google, (and numerous other places), the environment varies a great deal from team to team, but overall they treat their people extremely well.

At the other end of the spectrum, in my experience, are non-software companies (biotech, for example) who need software engineers, but think of them as "IT".

I meant high paying with good benefits and not afraid of using non-ancient tech (obviously as long as it's reliable). That's common in industries like airplanes.

Could the problem be that airlines treat their IT staff like trash? I get why people like Google. They get treated well and have good benefits. I don't see an airline treating much of their workforce as good as Google treats theirs.

You probably refer to low cost airlines. Things are much different in normal airlines I think.

I've been working w/ one of the top airline companies in the Middle East for the past year. One of these that are "luxury". I've been on-site in their HQ for 6 months and worked with their IT department.

The environment was exactly as the stereotype above. There was not even free coffee for the employees.

A great many "normal" airlines are slowly going broke, or trapped in an endless merger cycle. Not much joy there I think.

Do you have any real world data regarding working conditions in "normal" airlines?

Why would you think that?

Is it wise to aspire to work in any non-tech corp IT department? Unless, I suppose, you are willing to relocate to a low COL country and join the contracting agency your job gets outsourced to.

You read my mind. Figuring out how to put ads in front of people is the opposite of "solving real problems."

Most of the real, boring software problems needs boring software solutions that are out there but for some reason aren't being done.

More than likely, the problem with e.g. airline systems needing upgrading is political within the company - not an engineering challenge.

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.

That subreddit seems to only care about getting hired by Google, Amazon, Facebook, and Microsoft. It's funny because there is so much interesting work being done at smaller startups. If you are a new grad and get hired by one of the above companies, you usually aren't going to be doing the most interesting work.

Source: I work for one of those companies.

In my experience with those kinda people ("high achieving" students), they just want to work at a big, prestigious company. What they do there isn't that important to them.

While there are definitely students pursuing the prestige, I think you're painting this with too wide a brush.

The career progression for me and a lot of my friends who were high achieving students was to start out at one of those companies. A lot of us didn't have much money saved up, and didn't come from much money. After building up some money, and realizing the little surface area to work with at one of these companies, we left.

Visa issues are also a very real problem that chain a lot of good talent to these corporate juggernauts.

Fair point—it just seems that way after spending a lot of time in that sub :-)

The fact of the matter is that your average employee who lasted a year at Google is probably significantly better than their startup counterpart. Having this stamp of approval on your resume gives you a lot of bargaining power in the job search process. The churn at these companies is very high.

From the perspective of a recent (sub 5-year) grad, if I was qualified to work at one of the big, prestigious companies I would, for no other reason than the long term career doors it would open.

Isn't it perfectly rational for a new grad to want to get some prestige on his or her CV? Especially as those companies probably pay better than the alternatives.

yes! I had to unsubscribe because I got sick of being downvoted for reminding people that career goals are not always about making the most money.

In a consequentialist sense, isn't "fuck you money" the sort of singularity beyond which you can have your career any way you like? So any path to "fuck you money" should theoretically be ranked above a path that doesn't lead to "fuck you money."

It's sort of the same argument people use for justifying ranking AI X-risk as the highest concern for Effective Altruism.

I don't think any job/career/being employed (99% of the time) is a right path to "fuck you money", it's mostly entrepreneurship

> 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.

Could you elaborate ?

I didn't do well on a relatively simple question about finding the contiguous elements with the maximum sum in an array. My solution was correct, but not at all the simple, ideal solution. Someone asked me how I'd write/model a simple game like Space Invaders, so I showed him a couple of tiny prototypes I'd written and discussed how the code was organized.

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.

Being able to remember and implement those algorithms in under 20 minutes on a white board is not applicable to programming at Amazon, Facebook or Google at scale.

If an interviewer is just testing your memory of an algorithm, it's a bad interview.

It sure is, but it still happens a lot.

"If you think that algorithms and math are not applicable to programming at Amazon..."

When did I say that??

You said that he's studying interview techniques -- he's studying math for cs, basic algorithms, and algorithmic design. He mentioned that whiteboarding has scared him, he did not say that he was studying only to get better at whiteboarding.

My issue was more with the answers given here, not the question asked. When I wrote this comment, the top comment and all of the others recommended studying interview questions, not algorithms and math FOR answering interview questions. That's what bothers me.

Gotcha -- when I looked, yours was the top comment. Sorry for the misunderstanding.

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.

> 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. :/

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.)

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!

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...

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.

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.

I studied in Europe, but I was specifically referring to industry candidates.

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.

Did you even the read the question and my post (specifically the last point)?

Before joining Google now, I traveled though South East Asia for 1 1/2 years while freelancing and worked for a startup for 2 1/2 years. I wouldn't recommend it unconditionally, nor would I recommend working at Google unconditionally.

It's pretty topical for the question asked here, which explicitly said that he would like to work at Google, Amazon, Facebook, etc. and that he was terrified of the Google interview process.

This is definitely the way to go, the learning curve is steep following your advice!

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]

[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]

[1] 4.5 stars (227 reviews) $28 https://amzn.com/dp/1479274836

[2] 4.5 stars (216 reviews) $27 https://amzn.com/dp/0984782850

[3] 4.5 stars (94 reviews) $16 https://amzn.com/dp/B008SGNJOW

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

What happened to Geohot? Any links?

"The First Person to Hack the iPhone Built a Self-Driving Car. In His Garage" http://www.bloomberg.com/features/2015-george-hotz-self-driv...

That looks like quite a bit of hype for someone who has not done too much as of late.

Cracking the iphone was great, but disparaging top notch organizations (Carnege, Tesla, Vicarious, etc.) sounds more like narcissism than reality.

I believe this is what he meant.

'From 2007 on, Hotz became a coding vagabond. He briefly attended Rochester Institute of Technology, did a couple five-month internships at Google, worked at SpaceX for four months, then at Facebook for eight. The jobs left him unsatisfied and depressed. At Google, he found very smart developers who were often assigned mundane tasks like fixing bugs in a Web browser; at Facebook, brainy coders toiled away trying to figure out how to make users click on ads. “It scares me what Facebook is doing with AI,” Hotz says. “They’re using machine-learning techniques to coax people into spending more time on Facebook."' http://www.bloomberg.com/features/2015-george-hotz-self-driv...

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

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.

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.

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

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

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.

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.

Big Co's are the Black Holes.

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.

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.

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.

Is there anything like RC in the Bay Area? Kind of hard to believe if not.

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.

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.

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)

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.

> 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.

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.

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.

start hitting the phones, buddy. there's no secret trick to getting work, it's called sales.

Better phrasing: how do you pick up contracting work if you have absolutely no connections?

I'm not a particularly social person: I mostly just like staying home and working on coding projects in my off-hours. I didn't made friends or "expand my network" at my last few jobs; I just showed up, did work, and went home.

People always say "do contracting to save up money if you want to do a startup", but I have no idea how to get off the ground. I certainly have a lot of skills, but I'm not sure who I could possibly sell them to.

Is this when I just start cold-calling? I get the sense that nobody on HN is ever really bothering with inbound marketing for contracting services; I constantly see "programming talent is a seller's market" and "just use your network", but never anything about running ads for your services or anything.

here's how i did it: start responding to job ads and offer contracting services instead. local or remote.

it requires being social and talking to people. if you can't do this, just get a normal job, dude. you're barking up the wrong tree. nobody just sits around and gets contracts handed to them. anyone who tells you that is bullshitting you.

Oh, I'm not saying I can't be social. I'm just saying that I wasn't in the past—because of some wrongheaded assumptions—and so don't have a network to build off of.

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.

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

I am curious where you get all those contracts. Isn't it always easier to get an employment, compared with, for example , finding customers, listening to client requirement, dealing tax form, drafting contract, etc?

I can't really comment on any of the courses, but taking a few months off to learn and recharge sounds like a great idea if you can afford it.

However, the problems solved at Amazon, Google and Facebook aren't necessarily more "real" than what you're solving now. Google also builds a lot of Java webapps. Sure, there are many advantages to working at these companies, but be aware that you most likely won't end up on the team that builds the algorithms for the self driving car or the machine learning powered object detection for photos.

I think a top down approach is much better, practical and actually interesting than diving into theory directly. To that end, there are two books that I recommend - Programming Pearls by Jon Bentley & Algorithm Design by Jon Kleinberg and Eva Tardos. These books cover a wide variety of important CS aspects starting with extremely practical problems and scenarios. They are more narrative in style with very limited maths formulas and diagrams, but don't be fooled by that because they are expository, which is often superior to simply following a dry mathsy problem solution theorem proof style. (The Klienberg book says in the preface that it is meant for students who have completed two semester standard CS course, and even includes some proofs, but you may skip those without losing any insight into the solutions or techniques.)

These books really pique your interest, and after finishing them you will see the big picture and find sufficient motivation (problem solving wise), and may venture into following proper undergraduate courses with proper textbooks. You might even like to quickly read through Skiena's The Algorithm Design Manual as an intermediary step. This book is a proper 'engineer's book' as in it is basically a catalog of algorithms and data structures with advise and illustration of where to use what.

With this approach, you won't be needing a tutor and can gain a lot by self studying at your own pace.

I've been professionally been developing for 10 years, and I stay a contractor because the hiring process of companies depresses me.

When there is a CS person interviewing me I get depressed because I know they are going to do a sanity check on CS things and I will fail because I don't have Big O memorized.

Why it depresses me is if they say, they want to scale postgres, I can come back to them with a working model, and I may utilize CS like-things, but since I can't remember textbook answers its gates me from jobs.

I hate to be /that/ guy but Big O isn't something to memorize. It's a way to evaluate algorithms. You can memorize Big O for certain patterns of code but there are ways to trip you up if you do this. (One example I came across was a for i < n loop, printing out a recursive Fibonacci function. If you memorize Big O you would be tempted to say O(n*2^n) but if you reason through it, it ends up being O(2^n).) So it's best not to memorize Big O.

I used to be in the same boat but after working past that initial anxiety and getting started in CtCI and Skiena's algorithms class to further my CS fundamentals, it turns out that the stuff being asked in interviews aren't that too hard. (this is a huge generalization)

The thing I would get into if I were in my early 30s would be DevOps. No matter what you build, it should be going through a pipeline to the cloud. And more and more that pipeline is managed by developers.

This is called vertical integration, by the way. Instead of spending your time learning more and more about the arcane details of programming, you might be much better off learning more and more about how and why people ask for programs to be created -- and what happens to them after they're coded.

Additionally, I'd recommend "Introduction to Functional Programming" [0] by Erik Meijer.

Depending upon your areas of interest, you might also want to look into related open source projects and attempt to contribute. Chances are that you'll learn a fair bit in the process.

[0] https://www.edx.org/course/introduction-functional-programmi...

Personally I think you would learn more from solving algorithm puzzle problems independently than taking algorithms and analysis courses.

A couple that come to mind are Project Euler [1] and CodeKata [2].

The problem with most courses is that they teach the very basic types of data structures, a couple search algorithms, etc but not enough. They didn't give me the intuition I was looking for.

Alternatively, the most recommended books I've seen for your use case are _Programming Interviews Exposed_ (PIE) [3] and _Cracking the Coding Interview_ [4].

[1]: https://projecteuler.net/

[2]: http://codekata.com/

[3]: https://www.amazon.com/Programming-Interviews-Exposed-Secret...

[4]: https://www.amazon.com/Cracking-Coding-Interview-Programming...

Depending on how much else you have going on in your life, and how much of that 8 years of salary you saved, you might want to consider getting an engineering degree and gaining some domain specific knowledge; I doubt a few more general CS courses will dramatically change the types of problems you will be considered to work on. I can't speak for you, but most people's concept of "real problems" means that there is a simple and direct way in which they can see people in society benefiting from their work, and those problems tend to get domain specific in a hurry. i.e. if you want to get to work on improving the water people drink or the air they breathe, you're probably going to need to know some chemistry. An upside of being an engineer who also happens to be a good programmer is that your interviews won't be pure coding interviews.

Good luck first of all. Sounds like you've done well for yourself thus far.

If you got the savings, I would say go for it and take the time to learn. I don't know how helpful the math for computer science course will be but understanding various algorithms is useful for general knowledge and especially for interviews. Once you know basic algorithms, start on cracking the coding interview, hackerrank etc.

Lastly, I would say the grass is always greener on the other side, so don't disregard all you have accomplished and all that you will continue to do. If you think you will enjoy a job at a top company, go for it, but don't do it because you think what you are doing is inadequate.

Google's HR Chief likes to boast in his book, that it’s harder to get a job at Google than it is to get accepted at Harvard.

Gaining cutting-edge skills sends a strong signal to the market. And can make you more attractive to recruiters.

Don't overlook the professional network piece of making new friends and contacts amongst your fellow students. Those individuals often have inside tracks to hidden opportunities.

Here's a review of Laslo Bock's Work Rules > http://www.wsj.com/articles/book-review-work-rules-by-laszlo...

Funny because i saw this today. https://news.ycombinator.com/item?id=12260512

I don't work for amazon but yeah i work in one of the so called top 4 companies.I got lucky to get into a good project. But talk with some google employees and you will be surprised to see how many engineers work on some pretty mundane stuff inside of google.

Still i can't process the thought that the OP is not solving real world problems right now as a contractor and would be doing some sort of a dream job after he gets through the google interview process.

What exactly is a real world problem?

Having a solid Computer Science background is a must! So do the courses if you think your CS base is not solid enough. Then, solve the "Cracking the Coding Interview" problems all by yourself, hesitate to look at the solutions until you really tried them out. Here is a great resource to prepare for big companies, like Google: https://github.com/jwasham/google-interview-university

Need I even mention that if you're looking to broaden your horizons in programming, you may want to try 6.001/SICP? It's hard, but you'll probably learn a lot.

I've conducted hundreds of technical interviews, mostly at Google. It bothers me a lot when I read comments here saying that tech interviewers are just testing trivial knowledge or for memorization of obscure algorithms. (And some are, but they're bad interviewers.) As if you need only memorize the right magic spells, and bang, you're in.

4 months is a decent chunk of an MS. Just saying.

I took 042 and 006 simultaneously, and wish I'd have just skipped 042 altogether. I'd seriously consider jumping straight into 006, and adding something else (SICP, 6.945, learn a new language, or commit yourself to a personal project).

I did something similar and in retrospect I wish I had developed a solid routine and stuck to it from the outset. When you're suddenly in direct control of most of your time, it can get easy to get lost in the weeds.

Any recommendations?

Maybe think about traveling internationally, and doing some of this in your downtime on the road. You'll learn a lot seeing how things are done in other countries.

I'm curious, by 'Zalando' do you mean the online fashion store? If so I'm interested to know what makes you group them with Google, FB and Co.

I would say find a freelance job from a site like Upwork and work there. You don't have to re-learn everything again.

This is a good idea. Go for it.


Courses are good but not enough. Definately read cracking the coding interview as you wrote and the most important is to solve hundreds of problems on hackerrank, topcoder and similar sites. I think it takes maybe half year to get there, still be prepared to survive for at least a year (optionally move to a country with cheap cost of living). I don't know any tutors as I always prepared alone (and employed by one of these companies)

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact