Windows for Developers

Expected level: Working

Windows is a capable development platform with its own conventions for paths, permissions, packages and tooling. When a project or script behaves differently from what the tutorial showed, these conventions are usually why.

File system and paths

  • Windows uses drive letters (C:\) and backslashes (C:\Users\you\repos). Network shares use UNC paths (\\server\share).
  • The file system (NTFS) ignores case but preserves it: README.md and readme.md are the same file.
  • Some names are reserved (CON, NUL, COM1, …) and names must not end in a space or a period.
  • Paths used to be limited to 260 characters. Newer Windows versions can lift the limit, but it is opt-in and some tools still fail on long paths. Keep repositories in a short path such as C:\repos.
  • Your profile lives in C:\Users\<you>. App settings are under AppData (%APPDATA% for roaming, %LOCALAPPDATA% for local).

Permissions and elevation

  • Everyday work runs as a standard process. “Run as administrator” (UAC elevation) is needed only for system-wide changes. Do not run your editor or terminal elevated by default.
  • Access is controlled by ACLs on files and folders. icacls <path> shows them.
  • PowerShell scripts can be blocked by the execution policy. See it with Get-ExecutionPolicy. A common developer setting is Set-ExecutionPolicy -Scope CurrentUser RemoteSigned.

Developer-focused features

  • Windows Terminal is a tabbed host for PowerShell, Command Prompt and WSL (see Command Line Basics).
  • WSL is a real Linux environment inside Windows (see Linux on Windows (WSL)).
  • winget is the built-in package manager, for example winget install Git.Git.
  • Developer Mode is a setting that, among other things, allows creating symbolic links without elevation.
  • Task Manager and Resource Monitor show which process uses CPU, memory, disk or a port. A file that “is in use by another process” is a lock held by one of them.

Processes

Task Manager is the graphical way; the shell is faster and scriptable.

Purpose PowerShell Command Prompt
List processes Get-Process (filter: Get-Process node) tasklist
Stop by name Stop-Process -Name node taskkill /IM node.exe
Stop by process ID Stop-Process -Id 1234 taskkill /PID 1234

taskkill asks the program to close politely. /F forces it, so unsaved work is lost and the program gets no chance to clean up; use it only when the plain form does not work. Check the process ID first: stopping the wrong process, or a system one, can break your session. To find which process holds a port, see Networking Basics.

Slow builds, line endings and stale PATH

  • Antivirus scanning can slow builds. Ask before excluding folders, since that is a security decision.
  • Line endings differ from Linux; see Windows vs Linux Differences.
  • After installing a tool, open a new terminal: environment changes (such as PATH) are not visible in sessions that were already running. See Environment Variables.

Try it

Open PowerShell and run winget search git, Get-ExecutionPolicy -List and echo $env:LOCALAPPDATA. Then find where your repositories live and check how long the longest path in one of them is.

Common mistakes

  • Running the editor or terminal elevated by default.
  • Using `taskkill /F` first, which loses unsaved work, or stopping a process without checking its ID.
  • Keeping repositories in deeply nested folders where long paths fail.
  • Excluding folders from antivirus scanning without asking, since that is a security decision.

Check yourself

  • Why keep repositories in a short path such as `C:\repos`?
  • What does `Get-ExecutionPolicy` show, and why does it matter?
  • How do you stop a process by name in PowerShell, and when is `/F` justified?

Related topics

Terms

Further reading