Code Interview Reading List
codingforinterviews.com
codingforinterviews.com
Given this, there are some books you might add or remove depending on the area you are interested (e.g.: Knuth's "Art of Computer Programming", Martin Fowler's "Patterns of Enterprise Application Architecture", ...)
To finish, 2 books people recommend a lot for beginning programmers:
"The Pragmatic Programmer"- Hunt, Thomas: a very good book, with sound advice and very easy to read. The only bad side is that it became so influential that its ideas became vulgarized in thousands of blogs.
"Code Complete" - Steve McConnel : A very dangerous book. It does give have a lot of sound advice. But, IMO, it has some big problems. First is that it gives the false impression that there is a lot of empirical evidence on what works on software engineering. Second, it perpetuates some myths that don't have such evidence: the "orders of magnitude programmer's productivity" and "the cone of uncertainty" (see: https://leanpub.com/leprechauns).
I'd be genuinely interested to check that. While still anecdotal, my experience from working in big and small companies in 4 countries is that there certainly is a absurdly wide gap in productivity between programmers.
There is some discussion of the topic in "Making Software: What Really Works, and Why We Believe It."
But I usually don't interpret this kind of claims literally, so I took the GP remark as saying that in practice (IRL) there was no such 'wide gap in productivity', which is opposite to claims/data I saw before (as you mention, 5-20x) and to my own experience.
Re: The Pragmatic Programmer and Code Complete, I learned a ton from those books and I'd heartily recommend them to programmers starting their first job or internship, but likely not to someone with a few months before their first round of programming interviews. What do you think?
Maybe I will put together another list more tuned for general programming improvement versus interview-specific prep.
As an aside, Patterns of Enterprise Application Architecture looks very useful, thank you for the pointer.
Seriously, it becomes very stupid, a new profession has came: The Interview Specialist.
So, instead of testing what you current know, many companies look to evaluate the way you think and your potential to learn. I'm sure that the current methods of doing this aren't perfect, but I think they're a hell of a lot better than asking me minute Hibernate details when I haven't used Hibernate in years.
I currently prefer overall design questions. The type where the interviewer proposes an overarching problem, and you have to design a full system to handle it (not a difficult algorithm necessarily, but the data structures and classes involved). Mix this with a bit of actual coding, and I think the interviewer can get a decent idea of your skills.
- Win32 API
- Write device drivers WDM or other
- .NET / ASP.NET
- Java standard library
- Sockets, UNICODE
- DOM, HTML, CSS, Javascript
These things take a lot of time to learn properly. You have to read for a long time and know a lot of things. It's not true to say that anyone with algorithm smarts can do this.Yet, if I gave engineering interviews impromptu I am pretty sure I will fail many of them. It's a weird situation in the industry when an experienced person has to go through a bootcamp to revisit/ memorize rather trivial stuff to get a job for which he may well be overqualified.
I can't blame other people for studying for tests, I can just blame the tests.
For solving these kind of problems knowing a bunch of known algorithms won't take you too far. They will only be useful in the beginner stages, but as you progress you need to invent new algorithms, make modifications to the existing algorithms (so they test that you really understand the idea behind them), combine different algorithm design techniques, etcetera.
They are often a good proxy to test how creative in problem solving you can be, not just mere rote memorization of algorithms and how good are you at remembering known algorithms.
It's usually a symptom of a bad company culture to be honest when the people making hiring decisions feel the need to "spread" it around so as not to take the blame for those few bad hires that will inevitably happen.
As engineers we all know that bugs happen and shrug, feel bad for a bit and move on. When someone else makes a bad hiring decision, these same engineers grab the pitchforks demanding to know why they weren't consulted.
It's kind of silly when you think about it as human behavior is much more complex than software. Hiring is hard.
> Five essential books
> To fully prepare for your programming interviews,
> you should have access to information on at least
> these five key topics:
> I haven't read this yet myself
> I haven't read this myself either
> This book is new. As of this writing, the
> book has not been released yet. Perhaps it
> is the Effective C++ of Javascript.
How strange. I've never seen anybody propose a reading list with so many books that they admittedly haven't read themselves. What's the point? > What's the point?
Re: including pointers to books I haven't read, many solution submitters use python and C++ for their solutions and subsequent job interviews, so I wanted to offer them a good starting point, note my lack of experience with those books and save them some time. I spent a good hour researching what the in-depth language books might be for python, C++ and javascript and offered those suggestions.Re: the broader purpose of publishing a reading list, a few CS undergrads who read Coding for Interviews separately emailed me about books for interview preparation and general programming practice improvement. A lot of these books get discussed and read in book groups in the industry but not often in undergrad programs.
I hope this helps clarify why I included those. Do you still feel I should remove them?
This is a fantastic read that should be required reading for everyone in The Enterprise.
(Of course, with this newfound awareness comes massive frustration working on Enterprise applications which routinely serve as anti-patterns of UI design)
Just to note, those are Amazon affiliate links. Proceeds from Coding for Interviews all funnel back into the list's MailChimp fees (I just made it last month, and the list has grown a lot since then).
1. Python Essential Reference - Beazley
2. Modern C++ Design - Alexandrescu (mind-blowing; he now works on the D language)
3. Internet Core Protocols: The Definitive Guide - Hall (not a work of any particular genius, but this is stuff everyone should know, in my opinion)
4. Applied Cryptography - Schneier
5. Think Bayes - Downey
6. Interconnections: Bridges, Routers, Switches and Internetworking Protocols - Perlman
Are you familiar with either Expert Python Programming or Effective C++? Would you suggest Python Essential Reference and/or Modern C++ Design over either of those for undergrads preparing for interviews in those languages?
This may affect your response rates. Just saying.
If you're still interested, try it now. It should hide for mobile browsers.
It also has more difficult questions, on average, and many are not the kind that one would expect in an under hour interview. Nevertheless I find it more easy to read than something like say CareerCup, mainly because it is not so mundane and hence more fun.
In most cases, the point of coding interview questions is to see how a person goes about solving a problem as much as it is to see the solution. "I know this because I just read the solution in 'Interviewing for Dummies'" doesn't help at all.
I've found actually pairing with the candidate to be a better measure than quizzing their knowledge of algorithms, etc.
You're misunderstanding the issue here. For the type of things that matter in 95% of actual software, it's true that you can't learn all that in a week before an interview. However, those things are somewhat difficult to get across in a 60 minute interview, and good interviewers who can do that are rare. So they resort to algorithm questions because they don't require much skill to know. Which sucks but the interviewee can easily account for it by (re)learning that same stuff with a week of preparation, maybe a little more if they've got no experience in algorithms.
I like to think of tests as "you either know it or you don't and if you try to game it you're cheating", but I'm probably just weird that way.
Still, I got out of HS quite fine, I got a BSc with highest GPA of my generation and went to do a PhD in Comp. Sci.
Nowadays I have to do interviews quite often and I although I use some of the "programming riddles" (there is so much you can test in 1 hour phone interview) I usually try to "read" the most I can from the guy I am interviewing.
No, I think cramming in general is kind of silly.
> I like to think of tests as "you either know it or you don't and if you try to game it you're cheating", but I'm probably just weird that way.
Yep, that's almost exactly how I think about it.
Regular coding requires that general background, but often involves larger (and less clearly defined) problems, more complex schemas, more lines of code, more working with other people, more supporting legacy code, and so on. To balance this greater complexity additional tools are available.