Scott Hanselman, one of my very favorite celebrity developers, recently drafted a list of interview questions that those among us bearing the title of Senior Software Engineer should really know the answers to. And though the last time anyone called me Senior anything was in my high school Spanish class, I dress for the job I want, and I fell upon the list con fiebre just to see where I stood.
Indeed, even if you are of the lowest caste of code monkey peons, you should do the same. If you’ve had your nose under the hood of a codebase of any depth at all, you’ll be able to wrap your head around these ideas. Not to mention that the personality questions he poses are things you should be asking yourself every morning in the bathroom mirror anyway.
Here is a sampling of the some of the more technical queries:
- What is SOLID?
- What is Inversion of Control? How does that relate to dependency injection?
- What are some examples of anti-patterns?
- Who are the Gang of Four? Why should you care?
- How do the MVP, MVC, and MVVM patterns relate? When are they appropriate?
- Describe a pattern that is NOT the Factory Pattern? How is it used and when?
- What’s YAGNI? Is this list of questions an example?
- What are some alternate ways to store data other than a relational database? Why would you do that, and what are the trade-offs?
- Explain the concept of convention over configuration, and talk about an example of convention over configuration you have seen in the wild.
- Explain the differences between stateless and stateful systems, and impacts of state on parallelism.
- Discuss the differences between Mocks and Stubs/Fakes and where you might use them…
Got all that? Epic. All our base are belong to you. But don’t panic if you are unable to digest all of these straight away—if you have looked up the answers and squinted hard enough at them, their declaration has been wedged somewhere hot and wet in your brain, and will be promptly rattled loose when the related real-world situation presents itself. Or, at the very least, you’ll be aware of what you don’t remember.
Meanwhile, what understanding you do retain of these concepts will go a long way not only toward improving your code, but also toward increasing the breadth of your smile while writing code. Design patterns exist for a reason—when applied correctly, they create a palpable sense of flow for the developer using them. And that is not to mention the beautiful, readable, maintainable code that is left in his or her wake.
Just so we’re clear, the number of questions on Hanselman’s list that sent me googling was straight up embarrassing. Which brings me to my very favorite question on the list, for a generous handful of reasons.
- Tell me about 3 times you failed.
How did you do?
New Interview Questions for Senior Software Engineers (via Scott Hanselman’s Computer Zen)