Roadmap · Foundations
Linux, terminal and Git
FreeFor students and early-career engineers who want to be at home in a Unix shell, whether they work on Windows with WSL, on a Mac or on Linux. By the end you can set up a machine from scratch, move around and fix things in the terminal, use Git and GitHub the way teams do, automate small jobs with scripts and look after a small server over SSH.
By the end, you will be able to
- Set up a working development machine with a Unix shell, a package manager, Git and an editor, and explain every step you took
- Find, filter and transform files and text with the shell, pipes, grep, find and jq instead of clicking through folders
- Use Git and GitHub like a team member: small commits, branches, pull requests, conflict resolution and undoing mistakes safely
- Write a checked Bash script, schedule it with cron and run it on a small Linux server you reach over SSH with keys
- Debug a broken environment methodically: read the error, check PATH, permissions, processes, ports and logs
The path
8 stages, in the order to learn them. Open one to start.
1Set up your machineInstall WSL 2 with Ubuntu, make Windows Terminal your home, and keep projects in the Linux file system. The rest of the roadmap runs in that Ubuntu shell, so a clean setup now saves hours of confusing errors later.8 topics · ~2 weeks
- 1WSL 2 with UbuntuThe Windows Subsystem for Linux (WSL) lets you run a real Linux distribution, a complete version of Linux, inside Windows.
- 2Windows Terminal as your homeA terminal is the window you type commands into, and Windows Terminal is Microsoft's modern one.
- 3Where your files should liveWSL and Windows can each see the other's files.
- 4Terminal, shell and promptThree words get mixed up, so pin them down now.
- 5Getting help from the terminalAlmost every command comes with its own instructions.
- 6Updating and installing packagesBefore installing anything, update.
- 7Installing and configuring GitGit is the tool that tracks changes to your code.
- 8VS Code, opened from the terminalVisual Studio Code (VS Code) is a free code editor that works well alongside the terminal.
8 in this stageOpen this stage2Shell basicsMove around, create and change files, and connect commands with pipes and redirection. Learn how the shell expands patterns, quotes text and finds programs through PATH.9 topics · ~3 weeks
- 1Paths and moving aroundEvery file on a Unix system sits in one big tree of folders that starts at
/, called the root. - 2Creating, copying, moving and deletingA handful of file commands do most of the daily work.
- 3Wildcards and quotingBefore a command runs, the shell expands patterns into real file names.
- 4Pipes: joining small toolsA pipe, the
|character, sends the output of one command straight into the next command. - 5Redirection and the three streamsEvery program has three streams, like three pipes attached to it.
- 6Environment variablesEnvironment variables are named settings that every program you start picks up from the shell.
- 7PATH and "command not found"When you type a command name, the shell has to find the program.
- 8Startup files and aliasesYour shell reads a few shell startup files each time it opens.
- 9Editing files in the terminal: nano and VimOn a server there is usually no VS Code, so you need a terminal editor, one that runs inside the terminal.
9 in this stageOpen this stage- 1Paths and moving aroundEvery file on a Unix system sits in one big tree of folders that starts at
3Text toolsSearch, filter and reshape text and files with the classic Unix tools and jq. Logs, config files, CSV exports and API responses all become things you can question from the terminal.8 topics · ~2 weeks
- 1Viewing files: cat, less, head and tailThere are a few ways to look at a file, and the right one depends on its size.
- 2Searching text with grepgrep searches text and prints the lines that match a pattern.
- 3Finding files with findThe find command walks through a folder and everything inside it, and matches files by name, type, size or age.
- 4Sort, uniq, cut and wcA few small tools turn raw text into answers.
- 5Regular expressions basicsA regular expression, or regex, is a small pattern that describes text.
- 6Editing streams with sedsed is a stream editor: it changes text as it flows past, line by line.
- 7Columns with awkawk reads text one line at a time and splits each line into fields:
$1is the first,$2the second, and so on. - 8JSON on the command line with jqJSON is the text format most APIs and many tools use for data.
8 in this stageOpen this stage4Permissions, processes and packagesUnderstand who can do what on a Unix system, what is running and how to stop it, and how to install developer tools and language versions without making a mess.8 topics · ~2 weeks
- 1Read, write and execute permissionsEvery file has an owner, a group and a set of permission bits.
- 2Users, groups, root and sudoUnix is built for many users on one machine.
- 3Processes and how to see themEvery running program is a process.
- 4Stopping processes: signals and killYou stop a process by sending it a signal, a small message from the system.
- 5Foreground, background and jobsThe shell can run a program in the foreground, where it holds your terminal until it ends, or in the background, where you can keep typing.
- 6Installing developer tools properlyInstalling developer tools happens in layers.
- 7Version managers: nvm, pyenv and friendsDifferent projects need different versions of a language: one uses Node 20, another Node 22.
- 8Disk space and system informationA full disk causes strange failures: builds crash, databases stop and Git cannot save.
8 in this stageOpen this stage5Git fundamentalsLearn how Git actually stores your work, then use it daily: small commits, clear messages, branches, merging and rebasing, resolving conflicts and undoing mistakes without losing anything.8 topics · ~3 weeks
- 1How Git thinks: snapshots and historyGit saves your project as a series of snapshots called commits.
- 2Working tree, staging area and commitsGit keeps your work in three places.
- 3Small commits with clear messagesA good commit does one thing, and its commit message says what changed and why.
- 4.gitignore and what never goes in GitA
.gitignorefile lists files and folders Git should not track. - 5Branches for every changeBranches let you work on one change without disturbing the rest.
- 6Merge and rebaseThere are two ways to bring branches back together.
- 7Resolving conflicts calmlyA merge conflict happens when two branches change the same lines and Git cannot decide which version wins.
- 8Undoing things safelyGit has a different undo for each situation, so undoing changes means picking the right one.
8 in this stageOpen this stage6GitHub and working with othersConnect local repositories to GitHub with SSH keys, and work the way teams do: branches, pull requests, reviews, keeping forks up to date and the GitHub CLI.8 topics · ~2 weeks
- 1Remotes: clone, fetch, pull and pushA remote is another copy of your repository, usually on GitHub.
- 2SSH keys for GitHubGitHub does not accept your account password for Git over HTTPS.
- 3GitHub flowGitHub flow is the simple way of working most teams use.
- 4Writing a good pull requestA pull request (PR) asks for your branch to be merged, and it is where the discussion happens.
- 5Giving and receiving reviewCode review is how a team shares knowledge and catches problems before they ship.
- 6Forks and keeping them in syncSometimes you want to contribute to a repository you are not allowed to push to.
- 7The GitHub CLIThe GitHub CLI, called
gh, lets you use GitHub from your terminal. - 8Secrets, access and account safetyProtect your GitHub account as carefully as your email.
8 in this stageOpen this stage7Shell scripts and automationTurn repeated commands into small, safe Bash scripts, check them with ShellCheck, schedule them with cron and keep your own configuration in a dotfiles repository.8 topics · ~3 weeks
- 1Anatomy of a scriptA shell script is a text file full of commands that run in order.
- 2Failing safely: exit codes and set -euo pipefailEvery command finishes with an exit code, a number that reports how it went.
- 3Variables, arguments and inputIn a script, set a variable with
name="value", with no spaces around the=. - 4Conditionals and loopsScripts make decisions with if and repeat work with loops.
- 5Functions and readable scriptsFunctions group steps under a name and make a script easier to read.
- 6Checking scripts with ShellCheckShellCheck is a tool that reads your shell script and warns about bugs before you run it.
- 7Scheduling with croncron runs commands on a schedule, like an alarm clock for scripts.
- 8Dotfiles in a Git repositoryDotfiles are your personal configuration files, named with a leading dot:
.bashrcor.zshrc,.gitconfig, editor settings and aliases.
8 in this stageOpen this stage8SSH, servers and debuggingLog into remote machines with SSH keys, set up and secure a small Linux server, keep work running with tmux, and debug problems with logs and networking tools.9 topics · ~3 weeks
- 1Logging in with SSHSSH gives you a secure command line on another machine:
ssh user@hostlogs you in. - 2The SSH config fileThe SSH config file,
~/.ssh/config, saves connection settings so you type less and make fewer mistakes. - 3Copying files: scp and rsyncTwo tools copy files to and from a server over SSH.
- 4Your first server, set up safelyA VPS (virtual private server) is a small rented Linux machine from a cloud provider.
- 5tmux: sessions that survive disconnectstmux is a terminal multiplexer: it keeps shell sessions running on a server even if your SSH connection drops.
- 6Services and logsA service is a program that runs all the time in the background, such as a web server.
- 7Talking HTTP with curlcurl sends HTTP requests (the messages browsers use to talk to websites) from the terminal.
- 8Network checks: DNS, ping and portsWhen something "cannot connect", check one layer at a time.
- 9A method for debugging your environmentMost setup problems give way to the same calm method.
9 in this stageOpen this stage- 1Logging in with SSHSSH gives you a secure command line on another machine:
Related on Sefism
Picked from the other libraries by shared topics.
Best practices
See all- Git Best Practices for DevelopersGit best practices for everyday work: clear commits, clean branches and pull requests, rebase vs merge, safe force pushes, secrets, signing and recovering mistakes.
- Code Review Best PracticesCode review best practices for reviewers and authors: the approval standard, what to look for, review speed, writing kind and useful comments, handling disagreement and small changes.
- Technical Writing Best Practices for EngineersTechnical writing best practices for developers: write for your audience, clear sentences, scannable structure, design docs, READMEs and docs, PR descriptions, async updates and blog posts.
Checklists
See allProject structures
See all- VS Code extension project structureA TypeScript extension for Visual Studio Code, built from the official Yeoman generator with esbuild bundling. The example, TODO Lens, finds TODO comments and shows them in a tree view, with commands, settings and editor decorations. The tree grows from the generator's Hello World into commands, providers and editor-free core logic, then tests on three operating systems, publishing to the Marketplace and Open VSX, and a webview with a strict security policy. For students who use VS Code every day and want to build a tool other developers install.
- Turborepo monorepo project structureOne Git repository holding several apps and the packages they share, wired together by pnpm workspaces and run by Turborepo.
apps/holds things you deploy (two Next.js apps from the starter, later an API),packages/holds shared code and config (UI components, ESLint and TypeScript configs, validation schemas, the database client). Turborepo runs each task in dependency order and caches the results, so you never rebuild what did not change. - Chrome extension project structureA Manifest V3 Chrome extension that saves highlights from any page into a side panel, built with WXT, React and TypeScript. WXT reads your
entrypointsfolder and writes the manifest for you, so the layout is one folder per thing Chrome loads (service worker, content script, popup, side panel, options) with shared code inutils. For students who have loaded an unpacked extension once and want to ship a real one to the Chrome Web Store.
Career questions
See all- How do I learn Git and GitHub properly instead of just copying commands?Learn the model first: commits are snapshots, branches are pointers, and remotes are copies. Then use Git daily on your own projects, practise a team workflow with branches and pull requests, and break things on purpose, such as merge conflicts, so you learn to recover calmly.
- Which AI tools do employers expect junior developers to know in 2026?Employers rarely require a specific brand. They expect you to use an AI coding assistant well (in the editor and in the terminal), to review and test what it produces, to call an LLM API in a small feature, and to explain when you would not use AI. Pick one assistant, learn it properly, and show judgement in your projects.
- How do I build a developer portfolio as a beginner with nothing to show?Start with two or three small but complete projects that solve a real problem, each with a clear README, screenshots and a live link or easy run steps. Put them on a simple one-page site or a tidy GitHub profile. Depth and finish matter far more than the number of projects or a fancy design.
Cheat sheets
See all- Git cheat sheetHow Git stores your work, the everyday commands, branching, undoing mistakes, remotes, reviews and team workflows.
- Linux command line cheat sheetThe Linux shell from first commands to safe Bash scripts: files, text tools, permissions, processes, services, SSH and more.
- Coding with AI tools cheat sheetClaude Code, Cursor, Copilot, used well.
Stuck on something specific?
Writing only gets you so far. If you want an answer to your situation rather than the general case, book a session and we will work through it together. Sessions are free for approved Sefism members, and a few slots open each week.
- 1:1 Mentorship
- Fresh Graduate Mentorship
- Career Guidance
Brand deals, promos and partnerships: tauseeffayyaz@gmail.com