Что должен знать c# middle developer?
Начнем с того, что мидл должен знать как минимум то же, что знает джун.
Для джуна это систематческие знания CLR и c#. Лучше всего прочитать и понять CLR via C# Джеффри Рихтера. Я считаю - это минимум.
Джун находится на уровне неосознанной неосведомленности. Это значит, что за ним нужно присматривать.
Джун может даже не знать, как задать нужный вопрос. Если от человека в проекте больше вопросов, чем ответов - это джун.
Мидл отличается от джуна практическими навыками и опытом. Это самостоятельное решение прикладных задачь и навыки командной работы. Мидл находится на уровне осознанной неосведомленности. За ним присмотр не нужен - он сам умеет определять границы своей компетентности. Для мидла количество вопросов примерно равно количеству ответов.
Сеньор отличается от мидла тем, что способен самостоятельно реализовывать проекты с нуля и до feature complete, включая налаживание инфраструктуры разработки и управление проектом, обслуживание приложения в производстве.
Сеньор может обучать других, не говоря уже о том, что эффективно решает более сложные задачи. Сеньор находит системные решения. Если сеньор не может предложить решение задачи, то, скорее всего, человечество еще эту задачу не решило. Для сеньора количество ответов сильно превышает количество вопросов. Сеньор иногда делает вещи, которые причиняют непоправимую пользу не только в рамках проекта, но и всему человечеству, такие как хорошие опенсорсные фреймворки.
1. Уметь самостоятельно решать сложные задачи (анализировать, подбирать оптимальные варианты решения) в рамках своей компетенции (какая то часть приложения над которой работает в данный момент)
2. исходя из п.1. Хорошо и отлично знать инструмент (ЯП, Framework)
3. Не делать дичь, типа запросов к БД в цикле, т.е. знать как паттерны, так и антипаттерны.
Senior - это уже опыт, знание и умение архитектуры, понимание требований бизнеса, и как их переложить на архитектуру и код.