How to use VS Code like a software engineer (not a student)

VS Code is what 80% of software engineers actually use day-to-day, including the people who paired with you in screensharing and seemed to be moving twice as fast as you. The difference is rarely talent. It's about ten muscle-memory shortcuts and a few config choices. Spend two hours on this guide and you'll feel like a different programmer by the end of the week.

The mindset

Beginners use VS Code as a fancier Notepad: open file, type, save. Engineers use it as a navigation and refactoring tool that happens to also let you type. The shift is from "where in the file is the thing" to "the editor finds the thing for me."

The two biggest unlocks: the Command Palette and Go to Definition. If you only learn two things from this guide, learn those two.

The 12 shortcuts that pay back hours per week

Memorize these. Use a Post-it on your monitor for the first week if you have to. After two weeks they become reflex.

Conventions: Mac uses Cmd, Windows/Linux uses Ctrl. I'll write Mac shortcuts; substitute Ctrl for Cmd on Windows/Linux.

ShortcutWhat it doesWhy it matters
Cmd+Shift+PCommand PaletteThe single most important shortcut. Run any command. If you forget every other shortcut on this list, you can find it via the palette.
Cmd+PGo to file by nameType a few characters of any filename in the project. Way faster than clicking through the file tree.
F12Go to DefinitionJump to where a function, variable, or class is defined. The fundamental tool for reading unfamiliar code.
Shift+F12Find All ReferencesSee everywhere a symbol is used. Critical when you're about to change a function and need to know who depends on it.
F2Rename SymbolRefactors a variable/function name across the whole project, semantically (won't match strings or comments). Always use this instead of find-and-replace.
Cmd+Shift+FFind in Files (project-wide)The grep alternative. Search the whole repo for a string.
Cmd+DAdd next match to selectionMulti-cursor magic. Select a word, hit Cmd+D repeatedly to also select the next occurrence. Type once, edit many.
Option+Click (Mac) / Alt+Click (Win)Add a cursor wherever you clickManual multi-cursor. Edit ten lines at once.
Cmd+/Toggle line commentComment out the current line or selected lines. Reflexive use.
Cmd+BToggle sidebarHide the file tree to focus. Show it when you need to navigate manually.
Ctrl+` (backtick)Toggle integrated terminalThe terminal opens in your project root. No more switching to Terminal.app.
Cmd+K Cmd+SOpen keyboard shortcutsThe list of every shortcut. Bookmark this; you'll customize a few over time.

The Command Palette is the answer to almost everything

If you only remember Cmd+Shift+P, you can do everything else. Hit it, then start typing what you want:

The palette also has a fuzzy match, so "fmt doc" finds "Format Document." When you don't know how to do something, palette first, Google second.

Multi-cursor: the trick that looks like magic

Three ways to put cursors in multiple places at once:

Cmd+D for the same word

Place your cursor on a word, hit Cmd+D. The same word is selected. Hit it again, the next occurrence is selected too. Now you have N cursors, one at each occurrence. Type, and all of them update.

Option+Click for arbitrary positions

Hold Option (Alt on Windows), click anywhere. A cursor appears there too. Click another spot, another cursor. Useful for editing five different lines at once.

Column selection

Cmd+Shift+L selects all occurrences of the current word at once. Bigger hammer; use carefully.

Practical example. You have:

const userId = req.body.userId;
const userName = req.body.userName;
const userEmail = req.body.userEmail;

You want to switch all req.body to req.params. Click on "body," Cmd+D twice to select all three, type "params," done. Three seconds.

Go to Definition: the navigation unlock

The single biggest difference between a junior who scrolls and a senior who navigates: F12 on any symbol jumps to where it's defined. Across files, across packages, into node_modules if you want.

You'll use it 50+ times a day in an unfamiliar codebase. Pair it with Cmd+- (Mac) / Alt+- (Win) to navigate back where you came from.

The pattern that emerges: read a function, see it calls something unfamiliar, F12 to jump in, read that, navigate back, continue. This is what code-reading looks like for a senior.

Find All References: the safety net before you change something

Shift+F12. Right-click a function name, "Find All References." Now you see every place that function is called. Before you change its signature, you know who you might break.

Without this, you change a function and three other things in the codebase silently break. With this, you check first and update them all in the same PR.

Practice navigating real codebases

InternQuest's missions live in real-shaped multi-file codebases where you have to actually use Go to Definition and Find References to navigate. Free virtual software engineering internship simulator.

Try a mission →

Settings worth changing on day one

Open settings with Cmd+,. The defaults are fine for casual use; these are the changes I'd make for serious work.

Format on save

"editor.formatOnSave": true

Your file is auto-formatted every time you save. No more "fix formatting" PR review comments. Pair with a project-level Prettier or ESLint config.

Auto save

"files.autoSave": "onFocusChange"

Files save when you switch tabs. Stops you from running stale code.

Tab size

"editor.tabSize": 2,
"editor.insertSpaces": true,
"editor.detectIndentation": true

Most JS/TS/JSON projects use 2 spaces. Most Python projects use 4. detectIndentation auto-detects per file based on what's already there.

Word wrap (or not)

"editor.wordWrap": "on"

Personal preference. Turning on word wrap means long lines fold instead of scroll horizontally. Some teams disable it because they enforce a 100-char limit anyway.

Bracket pair colorization

"editor.bracketPairColorization.enabled": true,
"editor.guides.bracketPairs": "active"

Matching brackets get matching colors. Lifesaver in deeply nested code.

Extensions that pay off (and the ones that don't)

Worth installing on day one

Skip these unless you have a specific reason

The integrated terminal

Ctrl+` opens a terminal in your project root. Things to know:

The git panel

The Source Control icon in the sidebar is a full Git GUI. You can:

You don't have to use it. Plenty of senior engineers stay in the terminal. But for staging tricky multi-file changes, the GUI's diff-by-diff view is genuinely better than git add -p for visual learners.

Workspaces and multi-folder setups

If your work spans two repos that you edit together (e.g., a frontend and backend), use a multi-folder workspace:

  1. File → Add Folder to Workspace
  2. File → Save Workspace As → save the .code-workspace file somewhere
  3. Open the .code-workspace file next time

Now both folders share one VS Code window with searches, terminals, and git scoped per folder.

Live Share for pairing

VS Code Live Share lets you share your editor with a teammate in real time. Both people see the same cursor, edits, and terminal. Way better than screensharing for actual pairing.

Useful for: a senior helping you debug, a peer reviewing your in-progress work, an interview coding round.

Things that look smart but mostly aren't

The 5-minute drill

Open a real codebase right now and do these five things in order:

  1. Cmd+Shift+P, type "git", look at all the git commands available.
  2. Cmd+P, type 3 letters of any file, hit Enter.
  3. Find any function, hit F12 on its name to jump to the definition.
  4. Same function, Shift+F12 to see all callers.
  5. Pick a variable name, Cmd+D twice to select 3 occurrences, type a new name.

If those five things feel awkward, repeat them tomorrow. By Friday they're automatic. By month two, you wonder how you ever scrolled to find anything.

The mindset shift, restated

You're not editing files; you're navigating a graph of code. The editor's job is to take you to the right node fast and let you change it without breaking edges (references). The shortcuts above are how you operate that graph.

The senior engineers who seem to be moving "twice as fast" aren't typing twice as fast. They're navigating the graph instead of scrolling files.

Build the navigation muscle on real codebases

InternQuest puts you in real-shaped multi-file codebases (in-browser VS Code via Monaco), so the muscle memory you build transfers directly. Free virtual SWE internship simulator, no setup.

Try a mission →