В какой последовательсти изучать материал?
Паттерны проектирования и язык в котором ты собираешся их применять обычно не принято разделять.
Врятли до миддла за год возможно это все подтянуть, особенно если ты будешь учить питон с нуля и не имеешь нормального представления о алгоритмах и структурах данных. Опять же смотря, что ты подразумеваешь под миддлом. У всех представление о знаниях миддлов, джунов и сеньерах разнятся. Вести такую статистику обучения довольно удобно в trello. И миддла от джуна в первую очередь отличает большая практика в тех направлениях, которыми он занимается.
Я бы сделал так. Соблюдая последовательность.
0. basic linux - apt, man, ls, cd, --help, mk, cp
1. python + Алгоритмы и структуры данных
2. linux - scp, ssh - только на базовом уровне, больше не надо
3. python + mysql
4. git - за один вечер, смотрите последний скринкаст Ильи Кантера
5. linux - lamp server, можно вместо apache nginx взять, он проще и лучше, но лучше оба попробуйте 
6. Паттерны проектирования
7. js - я так понимаю что-то уже знаете. Подучите ES6
8. docker - эта технология не имеет смысла, если вы не знаете основ, поэтому только последним.