It may seem paradoxical to use an interpreted language in a high-throughput environment, but we have found that the CPU time is rarely the limiting factor; the expressibility of the language means that most programs are small and spend most of their time in I/O and native run-time code. Moreover, the flexibility of an interpreted implementation has been helpful, both in ease of experimentation at the linguistic level and in allowing us to explore ways to distribute the calculation across many machines.
It is not important for most candidates to be able to implement a red-black tree from scratch. It is not important for most candidates to know what a Fibonacci Heap is if they’ve never encountered one. It is not important for most candidates to be able to reverse a linked list on the spot. A high level knowledge of time and space complexity, the ability to research, learn and integrate different approaches, and recognition of trade-offs is in most cases sufficient. (In specialized positions, the importance of this might vary.)
The people you hire are professionals, and they want to do great work. When they make mistakes, they’re usually the result of good intentions. Sounds like a platitude, but most companies don’t live it. As a company grows, it starts to insulate itself from failure. It becomes more about protecting the downside than optimizing for upside.