
Ask HN: 8 years working, now 3-4 months off to learn. Looking for advice - ramblerman
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.<p>Now at age 33 I&#x27;m considering taking 3-4 months after this contract to take the following 3 courses:<p>- http:&#x2F;&#x2F;ocw.mit.edu&#x2F;courses&#x2F;electrical-engineering-and-computer-science&#x2F;6-042j-mathematics-for-computer-science-fall-2010&#x2F;Syllabus&#x2F;<p>- http:&#x2F;&#x2F;ocw.mit.edu&#x2F;courses&#x2F;electrical-engineering-and-computer-science&#x2F;6-006-introduction-to-algorithms-fall-- 2011&#x2F;Syllabus&#x2F;<p>- http:&#x2F;&#x2F;ocw.mit.edu&#x2F;courses&#x2F;electrical-engineering-and-computer-science&#x2F;6-046j-design-and-analysis-of-algorithms-spring-2015&#x2F;calendar&#x2F;<p>I want to stop contracting and apply to a company solving real problems after this process, google, facebook, zalando, amazon, etc..<p>I have always felt terrified of the google interview process, or any test on a whiteboard for that matter.<p>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.<p>Would love any feedback on this idea, i.e. if I&#x27;m missing the mark, or picking bad courses it&#x27;s best to know now.
======
gervase
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
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.

~~~
pennaMan
> Practice answering architecture questions

What are some good resources to learn about system architecture?

~~~
dreistdreist
Microsoft Application Architecture Guide [https://msdn.microsoft.com/en-
us/library/ff650706.aspx](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](http://martinfowler.com/tags/domain%20driven%20design.html)

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

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

------
bamboo_7
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
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?

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

~~~
FuNe
"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?)

~~~
derefr
"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.

------
brad0
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
> 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
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
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!

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

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

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

------
umbs
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
[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
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
What happened to Geohot? Any links?

~~~
fouadmatin
"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...](http://www.bloomberg.com/features/2015-george-hotz-self-driving-car/)

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

------
yogeshp
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
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
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
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
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](https://www.coursera.org/learn/algorithm-design-analysis)

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

------
msg
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
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
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
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
> 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
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
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
start hitting the phones, buddy. there's no secret trick to getting work, it's
called sales.

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

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

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

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

------
a_c
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?

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

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

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

~~~
drwl
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)

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

------
0xmohit
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...](https://www.edx.org/course/introduction-functional-programming-
delftx-fp101x-0)

------
tedmiston
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/](https://projecteuler.net/)

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

[3]: [https://www.amazon.com/Programming-Interviews-Exposed-
Secret...](https://www.amazon.com/Programming-Interviews-Exposed-Secrets-
Landing/dp/1118261364)

[4]: [https://www.amazon.com/Cracking-Coding-Interview-
Programming...](https://www.amazon.com/Cracking-Coding-Interview-Programming-
Questions/dp/0984782850)

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

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

------
JSeymourATL
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...](http://www.wsj.com/articles/book-review-work-rules-by-laszlo-
bock-1428361249?mg=id-wsj)

------
roronoaZoro
Funny because i saw this today.
[https://news.ycombinator.com/item?id=12260512](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?

------
wh0iscris
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](https://github.com/jwasham/google-interview-university)

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

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

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

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

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

~~~
bmay
Any recommendations?

------
known
Just read [http://www.businessinsider.com/best-selling-online-
classes-u...](http://www.businessinsider.com/best-selling-online-classes-
udemy-2016-8?IR=T)

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

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

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

------
adultSwim
This is a good idea. Go for it.

------
sitkack
Meditate.

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

