On the shoulders of the giants
lpalmieri.com
lpalmieri.com
Working Effectively with Legacy Code was also impressive, I think I just read it too early before I was good enough to really understand and use it.
TDD is also worth reading (and it’s short) to get a sense of tests if like me, it’s something you’d never really done before when learning.
If you like soul of a new machine, you’d probably like Halt and Catch Fire on Netflix. I’d also recommend the Phoenix project and the dev ops handbook.
Code by Charles Petzold is one of my favorites to recommend, something every CS student should read.
I’ll have to check out the others on this list too.
It's fun, nostalgic, and shows a fairly accurate few of the devil-may-care and slightly-charlatan approach to early (and some current) startups.
(Amazon says I bought it 14 years ago!)
Nowadays, I keep nearly all my books electronically; I still have a sizable bookshelf, but the books are gathering dust.
One of my biggest gripes is when documentation does not have a PDF.
That’s how I feel about physical books…
> I find it's hard to beat being able to quickly flip through a physical book.
I find it hard to beat Ctrl+F.
If a candidate's answer included a book that touched on a topic from some legally-protected class (e.g., race, religion, or sexuality) and that person didn't get hired, it could be one more piece of ammunition in a hiring-discrimination lawsuit. (I do wonder if I'm being overly cautious on this.)
I'd probably rework the question to something like, "Have you found any good books, websites, etc. that you've found useful for growing the skills this position requires?"
Company legal and HR advice seems very conservative considering how rarely I hear about such lawsuits actually happening.
But I'm hiring on behalf of the company, so I let the people above me choose their risk tolerance.
Lots of people can do the job. Is this person a learner? And what kind of learner. Learn on the job? Learn in your free time? And what does this person like to learn?
Here's the thing though. I don't want to work with an engineer who hasn't read anything technical in the last year. Don't care how good of a problem solver they are, if they don't teach themselves things they probably aren't very passionate about the profession.
Last year I took a year-long sabbatical and went to New Zealand. I spent half of that time offline. During that, I read 4 technical books. I really enjoyed that.
Before and after that I don't really have the time to read through a book in a meaningful way. After work my brain is to tired to focus more than a few pages. I still read relevant blog posts that are usually more dense and short so I don't loose focus while reading.
There is always a subjective reason why someone can fail.
Whiteboards? Some don't perform well with those. Take-home assignments? People can lookup solutions. Everything can be used.
Asking someone: what did you learn in the last year? How? And what did you gain out of it?
These don't seem hard and unfair questions to ask.
You are saying loud and clear you assess how good an engineer is fit for a role literally judging part of personal life based on your own (100% unbiased, right?) inference process.
I find it funny that I received a lot of criticism for this, when companies out there are still giving people BS riddles and "find the leaf with the value 'x' in a binary tree in O(logn)", or whatever crap they ask, to assess how good an engineer is, however, asking for how someone learns, how updated someone is, etc., is a something you should not take into account, while I find this very important, because it shows an important aspect of the person's attitude.
I think that we should stop hiring coders, and we should start hiring people. And people have interests, such as reading, fishing, etc.
In my line of work, we operate in sizable teams, and write software that evolves continuously over several years. Under such circumstances, factors other than being able to solve a coding problem in isolation inevitably come into play.
Another concern is that we don't want to hire somebody just for being able to solve today's problems, today, but somebody we expect to solve, down the line, problems we don't even know exist yet. Learning styles matter in that context.
That said, the concerns you and others in this thread have raised about the subjectivity of evaluating answers to such a question are not without merit. But now that I'm asking more coding questions, I would argue that there is plenty of subjectivity in evaluating the answers to those as well.
I've only read one of the books on the list (Accelerate), and it was such a delight to have claims referencing sources in publically available empirical data/studies to corroborate said claims! Not to mention that their observations and inferences (based on the empirical data) make a lot of sense when you ponder a little while!
(As opposed to the many "this-is-how-we-feel-the-truth-should-be-represented-after-our-experiences" presently available in countless blog posts and conference videos on the same subjects/themes as the Accelerate book touches upon).
For what it's worth, I appreciated your defense of the book, that there's genuine value in reading it, rather than as a "coffee table book" (I guess social signalling); that Knuth explains things clearly and in detail, with unique approach and insights.
Also, if you read Programmers at work, it was the knowledge of the one rarely taken step in the long division algorithm that enabled one of the subjects to debug a process that had no tools.
In databases, there is Readings in Database Systems (http://www.redbook.io/). I wouldn't recommend it as an essential to all engineers and researchers, because one would be better off spending their time learning practical skills that apply to their job (relevant tools, protocols, etc.), gaining a broader understanding of CS, and exploring general topics (work/career, teamwork, enjoying life, etc.).
In the same vein, it feels like SCIP and TAOCP go too far in-depth into topics that aren't that important to everyone. I rarely see the topics in these books pop up in the research papers that I read (though I mainly read systems ones). I definitely don't see them when I'm building REST services or Javascript frontends. When I check on the Table of Contents in these books, I never feel like reading a chapter in the book would have saved me a ton of time in the past.
As a result, I've concluded that they a good intro/intermediate CS reference for people who'd be interested in the research/theory side of things. Still, I've seen them recommended so much that it bothers me. Have you all seen anything in these books that truly makes them required readings?
- SICP,
- Concepts, Techniques, and Models of Computer Programming,
- Paradigms of AI Programming:
Case Studies in Common Lisp,
- Elements of Programming.
I got them all at some point in my career in order to become a top notch engineer. I have not finished any of them yet, 10 years later. I think they are great and you can learn from them a lot, particularly I found CTMCP to be very informative.Problem is they require dedication, and I think one gets the most from them by consuming them sip by sip meanwhile coding a lot and integrating new techniques and mental models.
EDT: formatting
-Richard Hamming
From Hal Abelson, who attributes this thought to his Princeton roommate Jeff Goll
"Walk into a bookstore and look at the number of books on a topic. The more books on a topic you see, the less we understand about the topic."
There's a lot of clashing perspectives on computing and modern software architectures so I'd say Hamming is on the dot.
As far as standing-on-giants jokes go, when Stekel defended himself to Freud with "a dwarf standing on a giant sees a little further", Freud replied "a louse on an astronomer does not".
https://books.google.com/books?id=wmB9AAAAMAAJ&q=louse+intit...