пока не подошел кто-то поумнее, выскажу свое IMHO
1) многие люди понимают эти уровни (джуниор, мидл, ...) по своему, так что оценка может быть субъективной и одного и того же человека в одной компании могут назвать джуниором, в другой миддлом. Кроме того, обычно на конкретном месте работы нужны знания определенных технологий. То есть, если человек, который пять лет профессионально пишет игры придет делать Web, то то как он себя оценивает в gamedev не будет особенно применимо на новом месте. В реальности перемены обычно не такие кардинальные, но они почти всегда есть.
То есть я как бы намекаю "А сильно ли это важно знать?"
2) Есть много разных статей, которые описывают разницу между разными уровнями разработчика (например вот эта неплохая:
http://sijinjoseph.com/programmer-competency-matrix/), но все эти статьи основываются на опыте (и уровне) конкретного автора и для любой из таких статей найдется большое количество несогласных.
Я лично бы разделил описанные два уровня следующим образом:
джуниор
- способен решать простые задачи, но при решении нетривиальных задач могут возникать трудности
- так как не имеет опыта, не может представить как архитектурные решения, написанные сейчас, могут повлиять на систему по ходу ее развития
- плохо знает паттерны используемые в своей области и часто прибегает к антипаттернам и велосипедам если самостоятельно пишет подсистемы
- то есть
может писать код, но не может отличить хороший код от плохого
миддл
- успешно решает сложные задачи, способен довольно точно оценить время необходимое на решение задачи
- способен оценить последствия применения многих архитектурных решений и может объяснить почему он выбрал то или иное решение
- знает наиболее используемые подходы к разработке, паттерны и архитектурные решения, используемые в своей области, знает их сильные и слабые стороны
- уверенно пользуется необходимыми в работе инструментами (система контроля версий, отладчик, ...)