The reason for these questions being considered 'fundamental' seems totally contrived, and that's that everyone studied them in their CS program, not necessarily because that's the kind of knowledge you apply day to day.
The reason for these questions being considered 'fundamental' seems totally contrived, and that's that everyone studied them in their CS program, not necessarily because that's the kind of knowledge you apply day to day.
I believe that understanding the theoretical backing is very important for making correct software design choices, at least at the positions I have held. Moreover, this base knowledge is a proxy for general awareness of complexity analysis and architectural trade-offs (why do we pick this structure over that?). I agree that we needn't consider single-source shortest paths every day when programming, but for companies that want to be sure they are making good hiring choices, this seems reasonable to me. Graphs, for example, come up so often in practice, which is why I refer to them as fundamental. It's not like we're talking about red-black trees here. Again, it's a proxy for one part of what makes a great programmer.