Build the professional habits and independent delivery capability that turn a supervised learner into a reliable, self-directed contributor.
Professional Software Habits
Graduates arrive knowing how to write code but not how to write production code. This means tests as a first-class concern, not an afterthought. It means commits that tell a story, PRs that are reviewable, and code that a colleague can understand at 2am during an incident.
Understanding the System
Your code does not live in isolation. Learn where it sits in the architecture, what calls it, what it calls, and what breaks when it misbehaves. Reading logs, traces, and metrics is a skill you should develop early - it changes how you write code.
Effective Code Review
Both giving and receiving code review are skills. Learn to give feedback that is specific, actionable, and kind. Learn to receive feedback without ego. Code review is your fastest learning mechanism as a junior - treat every comment as a free lesson.
Delivery Consistency
Reliability matters more than brilliance at this stage. Finish what you start. Communicate early when you are stuck. Break work into small, shippable slices. A junior who ships predictably is more valuable than one who occasionally produces impressive work but disappears for a week.
Asking Good Questions
There is an art to asking questions. Spend 30 minutes trying to solve something yourself before asking. When you do ask, explain what you have already tried. Good questions accelerate your learning and respect your colleagues' time.
Skills to Develop
Behaviours to Demonstrate
Use an AI coding assistant such as GitHub Copilot or Cursor for daily work but read and understand every suggestion before accepting it and never auto-accept blocks of code you cannot explain.
Practice using AI to explain unfamiliar code by pasting a function you do not understand and asking it to walk you through it, then verify the explanation by tracing the code yourself.
Use AI to generate test cases for code you have written, then critically evaluate whether the generated tests cover meaningful scenarios or just happy paths.
Ask AI to review your code before raising a PR and treat its feedback as one input among many rather than authoritative, noting explicitly where it is wrong or misleading.
Learn the limits of AI coding tools by asking them about your team's specific codebase and observing how often they produce plausible-sounding but incorrect details.
Read your organisation's AI usage policy and understand what code and data you are and are not permitted to send to external AI tools.
The Pragmatic Programmer
The foundational text for building professional software habits covering version control discipline, debugging, and how to think about engineering as a craft.
Clean Code
Forces you to think explicitly about what makes code readable and maintainable, which is essential for a junior building their engineering taste.
A Philosophy of Software Design
A modern counterweight to Clean Code that focuses on managing complexity, the concept that will define how you write code for the rest of your career.
Working Effectively with Legacy Code
Most code you encounter as a junior will be legacy code and this book teaches you how to understand, test, and safely modify systems you did not write.
Software Engineering at Google
Concrete engineering practices at scale including testing culture, code review culture, and dependency management written by people who built systems millions rely on.
Test-Driven Development Path
Builds the TDD habit from first principles and is essential for a junior who needs to internalise testing as part of development rather than a finishing step.
Git Complete: The Definitive Step-by-Step Guide
Fills in the gaps in Git knowledge that most bootcamps and degrees skip, covering branching models, rebasing, and conflict resolution in depth.
CS50x
For graduates who came through vocational routes this fills foundational computer science gaps that will make you a better engineer long-term.
Debugging in Your IDE
Systematic debugging is a learnable skill and tooling-specific courses for your primary IDE pay off immediately in day-to-day productivity.
Review the full expectations for both roles to understand exactly what good looks like at each level.
→ Graduate Engineer Archetype → Junior Software Engineer Archetype