Skip to content

The Developer Environment

SAP Implementation Consulting & ERP - Startupistan Germany · Block I · study notes for revision.


Before I write a single line of real code, my machine needs a workbench: a place to type commands, and four tools that do the actual work. This chapter is that setup, from zero. Nothing here assumes I’ve ever opened a terminal before.

There are exactly two ways to give a computer instructions:

  • GUI - Graphical User Interface. Clicking icons, dragging windows, picking from menus. This is how nearly everyone uses a computer.
  • CLI - Command-Line Interface. Typing a written instruction, pressing Enter, and reading a written answer. Older, and still everywhere in the developer world.

The terminal is the window where the CLI happens.

Four words float around, related but not identical. Worth pinning down once:

WordWhat it actually means
TerminalThe window - the app I open (Windows Terminal, macOS Terminal, GNOME Terminal, Hyper)
ShellThe program inside that reads and runs my commands (PowerShell, Bash, Zsh)
Command lineThe line I type on - and loosely, this whole way of working
ConsoleAn older, catch-all synonym for any of the above

In everyday speech developers mix these freely. “Open a console,” “open a shell,” “open a terminal” all mean the same thing: get to the place where I can type commands.

If clicking works, why type?

  • The tools live there. Git, Node.js, and npm are command-line tools first. Their native home is the terminal, and every tutorial online assumes it.
  • It’s precise and repeatable. A command is one exact thing - copyable, shareable, re-runnable identically. “Click the third icon, then the second tab” is none of those.
  • It scales. Renaming one file is easier with a mouse. Renaming five hundred is one command.
  • Servers have no desktop. The machines that run real software usually have no GUI at all. The command line is how professionals reach them.

Same idea on every system: a mostly empty window with a short line of text waiting for me. How I open it differs.

The built-in app is called Terminal (also Windows Terminal), and it runs the PowerShell shell.

  1. Press the Windows key (or click Start).
  2. Type terminal.
  3. Press Enter (or click Terminal).

A window opens with a line like PS C:\Users\ravi>. On older Windows 10 machines Terminal may be missing - search powershell instead and open Windows PowerShell; same place.

Ignore Command Prompt (cmd): it’s an older shell this program doesn’t use. If a window shows C:\Users\ravi> without the PS, close it and open Terminal/PowerShell.

Everything is the same loop: type, Enter, read the answer. Here’s the working vocabulary. Most of these aliases work in PowerShell too, but where Windows differs I’ve noted its native command.

CommandWhat it doesmacOS / LinuxWindows PowerShell
pwdPrint working directory - “where am I?”pwdpwd
ls / dirList what’s in this folderlsls or dir
cdChange directory - step into a foldercd Documentscd Documents
cd ..Step up one folder (.. = the folder above)cd ..cd ..
mkdirMake a new folder heremkdir projectsmkdir projects
touch / New-ItemCreate an empty filetouch notes.txtNew-Item notes.txt
catShow a file’s contents in the terminalcat notes.txtcat notes.txt
echoPrint text back (or into a file)echo "hi"echo "hi"
clear / clsWipe the screen clean (history stays)clearclear or cls
mvMove or rename a file/foldermv a.txt b.txtmv a.txt b.txt
cpCopy a filecp a.txt copy.txtcp a.txt copy.txt
rmDelete a file (add -r for a folder)rm old.txtrm old.txt

Here’s what the loop actually feels like - a short walk that uses the first five. The $ is the prompt, so I type only what follows it; lines without a $ are the computer answering:

Terminal window
$ pwd
/Users/ravi
$ ls
Desktop Documents Downloads
$ cd Documents
$ pwd
/Users/ravi/Documents
$ mkdir startupistan
$ ls
startupistan
$ cd ..
$ pwd
/Users/ravi

Read it like a story: check where I am, look around, step in, confirm, make a folder, step back out, confirm. That check-move-confirm rhythm is exactly how experienced developers move around too.

Sooner or later the terminal answers with a complaint instead of what I wanted. That’s good - the error is the shell being helpful, and it always stops before doing anything. An error never means I broke the computer. The three I’ll meet first:

Error messageWhat it really meansThe fix
command not found / not recognizedThe first word isn’t a command it knows - a typo, or the program isn’t installedCheck spelling first; if spelt right, it’s an install/PATH issue (see troubleshooting)
no such file or directoryIt knows the command, but can’t see that folder/file from where I’m standingpwd to see where I am, ls to see what’s here, then cd to what actually shows
too many argumentsA space in a name split it into two piecesWrap the name in quotes: cd "My Projects" - or avoid spaces entirely

My machine runs on four tools, one per job. Together they form a loop I’ll repeat thousands of times: write → run → check → save → repeat.

ToolWhat it isIts one job
VS CodeA code editorWrite and organize code
GitA version-control systemRemember - record the history of my work so nothing is ever lost
Node.jsA JavaScript runtime (brings npm)Run JavaScript outside the browser, and install building blocks
The browser (Chrome)A browser + inspection labShow and inspect - where web code runs, previews, and gets debugged
WriteVS Code
→
Runbrowser · Node.js
→
Checkbrowser DevTools
→
SaveGit
→
…repeat
The everyday loop the four tools form together.

The problem Git solves is the folder full of website-final.html, website-final2.html, website-FINAL-REALLY.html. Which one did I send? What changed between two of them? What broke it today? A version-control system (VCS) answers all of that properly:

  • Save points - at any moment I choose, it snapshots the whole project with a timestamp, my name, and a message.
  • A readable history - the full list of those save points, so “what changed, when, why” is always answerable.
  • Time travel - any earlier save point can be restored. Broke something today? Back to yesterday’s working state in seconds.
  • Safe teamwork - several people work on the same project; the VCS merges their work and shows exactly where it collides.

Git is the standard VCS - so dominant that “version control” and “Git” are near-synonyms.

Node.js = run JavaScript outside the browser

Section titled “Node.js = run JavaScript outside the browser”

JavaScript is the language of the web, and for years it could only run inside a browser. Node.js is a runtime - a program whose job is to run programs - that removed that cage. Install it, and JavaScript runs directly on my machine, no browser needed. That turned JavaScript into a language that also powers servers, command-line tools, and nearly all modern web-development tooling.

To most people a browser just shows websites. To a developer it’s the machine their work runs on - HTML, CSS, and JavaScript run inside the browser of whoever opens the page. That makes it my test bench, plus a full inspection lab one right-click away.

  1. Right-click anything on a page (a headline works well) and choose Inspect.

  2. A panel opens - the DevTools (Developer Tools). The Elements tab shows the page’s actual HTML; hovering a line highlights the matching part of the page.

  3. Double-click a headline’s text, type something else, press Enter - the page changes. Now refresh: it’s back.

Someone will eventually ask which IDE I use. The honest answer needs a definition first, because the distinction returns when this program reaches SAP.

Code editorIDE (Integrated Development Environment)
Starts asLight and general - edits any language out of the boxA complete workshop for one ecosystem, everything preinstalled
Grows viaExtensions I choose, per projectAlready wired together: build system, debugger, templates, refactoring
ExamplesVS Code, Sublime Text, VimIntelliJ (Java), PyCharm (Python), Visual Studio (.NET), Eclipse
Best whenOne tool must cover many languagesDeep, single-ecosystem work

Before any install steps, the one habit that prevents half of all “it didn’t work” moments:

Two more facts before installing anything:

  • Know my machine. Every download page asks what I’m running. Windows: type about → About your PC (or run winver). macOS: Apple menu → About This Mac. Linux: cat /etc/os-release.
  • Administrator rights. Installing changes the machine for every user, so the OS asks permission - the “allow this app to make changes?” pop-up on Windows, a password prompt on macOS/Linux (where the terminal word is sudo). On my own laptop I click Yes / type my password. On a company or family device, installs may be locked to someone else’s account - that’s policy, not an error; the fix is asking the owner or IT, not fighting the dialog.

Everything was set up at program start, so the first move for each tool is verify - check it already works. Install steps are the reference for a new machine or a reinstall.

Windows uses Windows Terminal - nothing to do. macOS/Linux run Hyper, and it’s verified first because everything else gets checked inside a terminal.

  1. Open Hyper (Cmd + Space → hyper on macOS; app search on Linux).

  2. Run a command to prove the shell behind the theme:

    Terminal window
    $ pwd
    /Users/ravi
  3. Opens and answers - verified. Install reference: download from hyper.is; on macOS drag it into Applications, on Linux install the .deb (sudo apt install ./hyper_*.deb). Built-in terminals (macOS Terminal, GNOME Terminal) are the permanent fallback.

  1. In a terminal, run the check:

    Terminal window
    $ git --version
    git version 2.45.1
  2. Any version number = done. My number will differ - that’s fine. Only command not found needs fixing: try a fresh terminal first, then install.

  3. Install reference:

Download the installer from git-scm.com/downloads, run it, and accept the defaults on every screen - the wall of option pages intimidates everyone once, but none of them need changing here. It also installs Git Bash, a bonus terminal that speaks the macOS/Linux command language. Open a new terminal and run git --version.

Node brings npm along, so this is two checks in one:

Terminal window
$ node --version
v22.14.0
$ npm --version
10.9.0

Two version numbers = done. Different numbers are expected.

Download the LTS installer from nodejs.org, run it with defaults. npm rides along automatically - no separate install. Open a new terminal and run both verify commands.

No command - three moves I already know:

  1. Open VS Code (Start menu on Windows; Spotlight code or Applications on macOS).

  2. File → Open Folder, and pick a folder I made earlier (e.g. startupistan-practice).

  3. Press Ctrl + backtick (the ` key, top-left) to open the integrated terminal, and run pwd - it should answer with the folder’s path.

All three work → editor ready. Install reference: download from code.visualstudio.com, defaults throughout (Windows installer; drag to Applications on macOS; .deb on Linux).

Extensions are where a plain editor gains its abilities. Installing all twelve takes ~10 minutes. The procedure, repeated twelve times:

  1. Open the Extensions view - the four-squares icon, or Ctrl + Shift + X.

  2. Type the extension’s name in the search box.

  3. Check the publisher matches the one listed below - imitations of popular extensions exist, and the publisher line is my guarantee.

  4. Click Install. Active in seconds, no restart.

GroupExtensionsWhy
Formatting & qualityPrettier, ESLint, HTMLHint, Code Spell CheckerKeep code clean; flag problems before I run anything
Web workflowLive Server, Auto Rename Tag, JS (ES6) snippetsSpeed up building pages - Live Server auto-refreshes the browser on save
Git supportGitLens, Git HistoryWho changed each line, and a browsable project history
Comfort & readabilityAndromeda (theme), Material Icon Theme, Better CommentsThe shared look, meaningful file icons, highlighted TODO/warning comments

Extensions give abilities; settings decide behavior. Open Settings with Ctrl + , (comma), use the search box, and set five things:

Search forSet it toWhat it does
format on savetick Format On SaveCode tidies itself every time I save
format on pastetick Format On PastePasted code adopts my formatting instantly
default formatterPrettier - Code formatterTells the two above which tool tidies
minimapuntick Minimap: EnabledRemoves the tiny code-overview strip - more room, less noise
telemetryTelemetry Level → offNo usage data leaves my machine (Datenschutz hygiene)

Two checks: installed and current (three-dots menu → Help → About Google Chrome - it updates itself right there), and set as default (the honest test: click a link from outside a browser - an email, a PDF - and see if it opens in Chrome).

Setting the default: Windows - Settings → Apps → Default apps → Google Chrome → Set default. macOS - System Settings → Desktop & Dock → Default web browser. Linux - Settings → Default Applications. It only changes which app opens links; every other browser stays installed.

Not software - an identity on the web, and in Course 05 it becomes the online home of everything I build. Verify: log in at github.com; seeing my dashboard is the whole check. Lost password? Use “Forgot password?” now, not mid-course.

One sitting, run from the VS Code integrated terminal. A machine that passes all eight is ready for the whole block.

#CheckPass looks like
1git --versionAny version number
2node --versionAny version number
3npm --versionAny version number
4Extensions (Ctrl + Shift + X)The twelve are listed under Installed
5Settings chainconst x=1; snaps to const x = 1; on save
6ChromeA link clicked outside a browser opens in Chrome
7Hyper (macOS & Linux)Opens and answers pwd
8GitHubI can log in at github.com
PatternWhat’s really happeningThe fix
command not found right after installingMy terminal read its list of program folders when it opened, before the install added the new oneFresh terminal first - close completely, reopen, retry. Reinstall only if a genuinely fresh terminal still fails
The installer won’t run / admin prompt rejects meI’m on a machine where install rights belong to someone else (company/family device)Human, not technical: the owner or IT enters credentials or installs it. Nothing should bypass that
An old version was already thereAn install from years agoAlmost never matters here. If a tool misbehaves and my version is far behind, installing the current version fresh simply replaces the old one - that’s the whole upgrade
Must-knowOne-line recall
GUI vs CLIClicking vs typing; the terminal is the window where the CLI lives
Terminal vs shellTerminal = the window; shell (PowerShell / Zsh / Bash) = the program inside that runs commands
Never type the promptThe $, %, or > is the prompt - I type only what comes after it
The five-command rhythmpwd (where) · ls (what’s here) · cd (move, .. = up) · mkdir (make) - check-move-confirm
Windows vs Unix commandstouch → New-Item in PowerShell; most others (ls, cat, cp, rm) alias fine
Silence = successcd / mkdir say nothing when they work; confirm with pwd / ls
Reading errorsnot found = typo/missing program · no such file = wrong folder · too many arguments = quote the space
The four toolsVS Code writes · Git remembers · Node.js runs JS (+ npm) · browser shows & inspects
Git vs GitHubGit = the tool on my machine (offline); GitHub = the online home for Git projects
Node.js = runtimeRuns JavaScript anywhere, not just in a browser; brings npm (package installer)
DevTools is a sandboxInspect edits my local copy only; a refresh undoes it - safe to poke anything
Editor vs IDEEditor = light + general, extend per need (VS Code); IDE = complete workshop for one ecosystem (ABAP later)
The golden ruleAfter every install: close the terminal, open a fresh one, then verify
Verify = any version--version answering with any number is the pass - numbers differ on every machine
Node: choose LTSLong Term Support = stability over novelty; what professional teams run
command not found after installAlmost always a stale terminal - fresh terminal first (the PATH was read at open)