How to Pass a Silicon Valley Software Engineering Interview [PDF slides]
verifiedidentity.com
verifiedidentity.com
I have less formal computer science training than most candidates for Silicon Valley jobs. However, I gamble I have more programming experience than many CS graduates. So, I am hopeful that I don’t need to go back to school for chemistry straightaway.
I am familiar with algorithms and data structures, but I am certain that many properly educated developers would put me to shame. What is the best way to accumulate this core theoretical knowledge? Are there preferred books on the subjects or will any do? Or do you recommend simply taking few courses before I graduate?
Thanks for your input.
Algorithms and data structures? If you like proofs, I've heard that the Cormen and Rivest book is great. Personally, I find that the Sedgewick volumes have great explanations of the most common algorithms.
But you haven't graduated yet, so the most effective approach may be to sign up for an algorithms course. Then you'll have the benefit of a prof and students to help out.
I've never implemented a linked list since graduation, nor I sorted anything manually using quick sort. Moreover, I never had to generate permutations of anything, nevertheless those are the same damn questions they keep asking on interviews. I wonder why: it only makes sense for fresh graduates, because it's the only reliable way to compare then against each other.
I have also implemented a fulltext indexing system because we have total NIH syndrome, which involved working with suffix trees, inverted indexes, and other classic undergrad information retrieval material.
You don't have to know everything; you need to know enough to know what you don't know, and where to look to get what you need to get the job done. Like, I just start with Wikipedia, usually.
What you need when you actually get the job is a separate concern from what you need to get the job in the first place, though.
As for books, I really like Algorithm Design [Tardos, Kleinberg]. It has a ton of really well designed problems to work on.
A less theoretical book, that is useful for a gentle intro is Masting Algorithms with C.
A bit off the theory track, but useful for a software engineer: Modern Operating Systems by Tanenbaum and Computer Organization and Design for info on hardware.
(And recommendation thirded! I just reread a good bit of the book on a flight to Montana, and it still rocks.)
For me, the only time I write tree traversals is during interviews, so I am a little surprised that it's such a big point for interviewers. I suppose it is a pretty good sign that someone knows how to program, but I do think that it would lead to many "false negatives" (ie., someone who can program well but doesn't have it front and center).
My advice: don't become a false negative. Just make sure you bust out the old textbook and get it fresh in your mind.
If you've never taken data structures and algorithms, then you'll probably get a lot out of this exercise. I use container classes for most of this, but it is valuable to study and learn it well once.
"Its quite easy to write software that doesn't need to scale." Amen.
The bizarre thing is that I don't know of any software that I use other than (I believe) gmail that's actually written in Java (and I don't think gmail qualifies as a "normal" Java deployment).
Just b.c you hear about rails or django all the damn time, doesn't mean they are widely used. They are just trendy frameworks.
(Php is the other language that run the rest of the web.).
Neither of these are the darlings of most hackers. All hackers should know how to code them, though (IMHO).