Знает базовые концепции algorithms complexity для compiler engineer и умеет применять их в типовых задачах. Использует стандартные инструменты и следует установленным практикам команды. Понимает когда и почему применяется данный подход.
Роли · Compiler Engineer · Junior
Что должен уметь Junior }
12 ключевых навыков, всего 55. Ожидания по каждому навыку и что меняется на следующем уровне.
На этой странице — что ожидается от Junior }, навык за навыком. Ключевые навыки оценивают руководитель и коллеги в цикле ревью; остальные учитываются только в самооценке. Основные области: Основы программирования, Контроль версий и коллаборация, Компиляторы и языки.
Ключевые навыки для Junior
Сгруппированы по областям. Метка справа — ожидаемая глубина: Осведомлённость, Применение, Продвинутый или Эксперт.
Основы программирования · 3
Знает базовые концепции code quality для compiler engineer и умеет применять их в типовых задачах. Использует стандартные инструменты и следует установленным практикам команды. Понимает когда и почему применяется данный подход.
Знает базовые концепции data structures для compiler engineer и умеет применять их в типовых задачах. Использует стандартные инструменты и следует установленным практикам команды. Понимает когда и почему применяется данный подход.
Контроль версий и коллаборация · 1
Знает базовые концепции code review skill для compiler engineer и умеет применять их в типовых задачах. Использует стандартные инструменты и следует установленным практикам команды. Понимает когда и почему применяется данный подход.
Компиляторы и языки · 8
Понимает структуру Abstract Syntax Tree и умеет рекурсивно обходить дерево. Применяет visitor паттерн для простых трансформаций. Знает основные типы узлов AST для популярных языков.
Понимает что такое кодогенерация и разницу между native code, bytecode и интерпретацией. Знает базовые концепции register allocation и instruction selection. Умеет читать x86/ARM assembly.
Знает классические компиляторные оптимизации: constant folding, DCE, CSE. Понимает когда оптимизации корректны и безопасны. Умеет читать и сравнивать оптимизированный IR.
Понимает разницу между компилятором и интерпретатором, знает tree-walking interpreter паттерн. Реализует простой интерпретатор для арифметических выражений с переменными.
Понимает разницу между AOT и JIT компиляцией и ситуации применения каждого. Знает концепции hot path, профилирование выполнения, deoptimization. Изучал работу JIT в JVM (HotSpot) или V8.
Знает основы лексического анализа: токенизация исходного кода, регулярные грамматики и конечные автоматы. Умеет реализовать простой лексер вручную, понимает разницу между лексером и парсером на практике.
Знает архитектуру LLVM: frontend, IR, backend, и роль каждого компонента. Понимает структуру LLVM IR и базовые инструкции. Умеет компилировать C через clang и изучать сгенерированный IR.
Понимает базовые алгоритмы вывода типов: unification, Hindley-Milner inference. Знает разницу между structural и nominal type systems. Умеет работать с simple generics.
Дополнительные навыки
Команда их не оценивает, но они входят в самооценку и план развития.
Что меняется на Middle
55 навыков получают более высокое ожидание или становятся ключевыми при переходе с Junior на Middle. Сначала самые большие скачки.
- Алгоритмы и сложность: Осведомлённость → Применение
- Качество кода и рефакторинг: Осведомлённость → Применение
- Структуры данных: Осведомлённость → Применение
- AST и IR Manipulation: Осведомлённость → Применение
- Code Generation: Осведомлённость → Применение
- Code Review: Осведомлённость → Применение
- Compiler Optimization Passes: Осведомлённость → Применение
- Interpreter Design: Осведомлённость → Применение
- JIT Compilation: Осведомлённость → Применение
- Lexing и Parsing: Осведомлённость → Применение
} в открытой матрице компетенций: 55 навыков на 5 уровнях. Матрица бесплатна для специалистов и останется бесплатной.