IT просвет #1

Суть поста - "как стать стажером/джуном в бэкэнд-разработке"
Пост навеян разговором с @storykaber

Сейчас многие хотят "войти в айти" и есть некий перекос спроса и предложения на джуновские позиции.

Я попробую на примере бэкэнд-разработки и языка c# (для условной java полагаю будет +- тоже самое) расписать какие знания позволят с большей вероятностью успешно пройти собесы и этапы отбора.

Спойлер #1
Это очень примерный список.
Куда-то (особенно стажером) наверно можно пройти имея меньше знаний.

Спойлер #2
Не воспринимайте список как непреложную истину, он составлен исходя из моего опыта, а мой опыт не абсолютен.

Этап 0
Хорошо разобрать язык, на котором вы хотите работать
В случае с C# это означает "полностью прочитать и понять хотя бы на 80% CLR via C# Джеффри Рихтера"

Этап 1
Хорошо разобрать основные коллекции и структуры данных, которые лежат в их основе
В случае c C# этими коллекциями является List и Dictionary
Надо понимать как они работают внутри, понимать сложность операций вставки/поиска/удаления

Этап 2
Хорошо разобрать асинхронность
Очень хорошо
Надо понимать как она работает
В случае с C# речь про async/await и Task

Этап 3
Узнать sql на среднем уровне
Можно на примере ms sql, можно на примере postgres, в целом не столь важно
Что надо уметь -
1 - писать несложные запросы с join-ами
2 - знать про существование индексов, зачем они нужны, примерно понимать как устроены
3 - знать про существование плана запроса и что в нем можно увидеть
4 - уметь проектировать несложные таблицы

Этап 4
Узнать про http и grpc
Что такое/где используется/в чем разница

Этап 5
Узнать про бэкэнд-разработку
.Net core, контроллеры, middleware,..

Этап 6
Узнать про параллельность и поработать с ней
Узнать про средства синхронизации поток и как с ними работать
В C# надо разобраться во внутрянке lock-а + узнать еще хотя бы несколько средств синхронизации

Этап "было бы хорошо, но необязательно"
Прочитать "Современные операционные системы" Таненбаума
и "Архитектура компьютера" от него же

Послесловие:
1) Ничего не написал про английский язык, но он крайне желателен.
С ним устроиться, работать, расти по позиции и зарплате будет проще, нежели без него
Разговорный никто не просит, уверенное чтение - практически необходимо

2) Ничего не написал про практику - ее должно быть много. Проект для самопроверки объединяющий в себе почти все указанные выше знания напишу чуть позже новым постом, если у кого-то будет интерес