(Recently I have been on the hiring side in interviews)
If in an interview you rate yourself a 7 out of 10 in your knowledge of c#. I would like to think you have the following knowledge:
- Know what a generic and can explain some scenarios of when it would be useful to use them, and not just in collections.
- Understand the use of interfaces (DI, IOC, mocking, testing, stubbing, contracts, etc).
- Abstract class vs interfaces (when would you use one over the over, when would you use both)
- Keep up to date with changes to C#
- Know the basic fundamentals of C# and .NET (value/reference types, inheritance, etc).
If you get asked do you know what a restful service is, and your answer is yes. Then please know the difference between SOAP and REST, not just REST can return JSON. But what benefits does REST give, what does REST have over SOAP?
Could you answer the following?
- When would you use the verb Get vs Post
- Put vs Post
- Put vs patch
- Do you know the ranges of the status codes mean? (Could you describe when you would return a code in the following ranges 1xx, 2xx, 3xx,4xx, 5xx)?
If you say you know DI and IOC, would you know how to refactor a method which outputs a specific message depending on the current day of the week?
Simple if you have experience with DI and writing testable code, but if you don’t know and you said you know it then you will look pretty stupid in an interview.
If you get asked or have put down you’ve got experience with database design, could you draw a UML diagram showing table names/columns/relationships for a simple online shop (Products/orders/baskets/users/billing info)?
Know the difference between sync and Async patterns, not only an Async web API call or calling a .net sync or async method.
Do you know when you would use an async method in C#.
Can you architect a solution made up of different components (web APIs, background running services, databases, communication middleware services)? Could you draw it on a whiteboard?
Nowadays, companies which developing using an agile framework need developers who can develop and maintain solutions which can go from design to working in production within a short time period (could be hours, days, weeks).
In order to deliver fast without affecting quality or introducing bugs, developers now need to know how to do the following:
- Write testable code
- this involves knowing patterns such as DI and IOC, because without using these patterns how do you stub and mock responses.
- How to write unit tests and integration test. And know the difference between them.
- Code defensively. For example if you are writing an API which another developer or application will use, check and validate inputs.
New world order
The new kids on the block which developers need to be aware of are now microservices and containers (such as Docker https://www.docker.com/what-docker).