Roadmap · Foundations
Programming foundations
FreeFor someone starting from zero, or self-taught with gaps, who wants to write code a team can trust. By the end you write, test and ship small programs in Python, JavaScript, Java, C++ or C#, use Git and the terminal daily, and can reason about memory, data structures and the cost of your code.
By the end, you will be able to
- Write and debug a program of a few hundred lines in your language without a tutorial open
- Use the terminal, Git and GitHub for commits, branches, pull requests and recovering from mistakes
- Choose a fitting data structure for a problem and state the Big-O of your solution
- Refactor messy code into small, well-named units with unit tests around the core logic
- Ship two documented, tested projects on GitHub that you can walk someone through line by line
The path
6 stages, in the order to learn them. Open one to start.
1Your first languageLearn one language properly: variables, control flow, functions, the core collections and error handling. Python is the gentlest start and is used everywhere, from scripts to AI.9 topics · ~4 months
- 1Variables, types and inputA variable is a name that points to a value, and every value has a type.
- 2Strings and f-stringsText is the data you will handle most, so learn strings early.
- 3Conditionals and loopsConditionals (
if,elifandelse) let a program choose between paths, and loops let it repeat work. - 4Functions, parameters and scopeA function packages a piece of logic under a name.
- 5Reading tracebacks and debuggingErrors are information, not failure.
- 6Lists, dictionaries and setsThese three collections hold most of the data in a program.
- 7References, mutability and copyingIn Python a variable holds a reference to an object.
- 8Handling errors with exceptionsSome errors are expected.
- 9Modules and reading filesPrograms grow past one file, and real data lives in files.
9 in this stageOpen this stage2Command line and GitGet comfortable in the terminal and put every piece of code under version control. This is the tooling every team assumes on day one, and it protects your own work from now on.8 topics · ~4 weeks
- 1Navigating files in the shellThe terminal is a text window where you control your computer by typing commands, and every developer tool assumes you can use it.
- 2status, add, diff and commitGit records snapshots of your project called commits.
- 3What to commit and .gitignoreA repository should hold your source code and the files needed to build it.
- 4Branches and mergingA branch is a movable label pointing at a commit.
- 5Merge conflictsA merge conflict happens when two branches changed the same lines and Git cannot choose for you.
- 6clone, fetch, pull and pushA remote is another copy of the repository, usually on GitHub.
- 7Pull requests on GitHubA pull request asks to merge one branch into another on GitHub.
- 8stash, log and undoing mistakesUndoing mistakes is a skill of its own: everyone makes Git mistakes, and the trick is picking the right undo.
8 in this stageOpen this stage3How computers run your codeUnderstand what happens below your code: bits, memory, the CPU, compilers and interpreters, and the operating system. Enough that bugs about memory and numbers stop surprising you.9 topics · ~2 months
- 1Binary, bits and bytesComputers store everything as bits, ones and zeros.
- 2Text encodings: ASCII, Unicode and UTF-8Text is stored as numbers too.
- 3Integers and overflowIn most languages, integers are stored in a fixed number of bits.
- 4Floating point numbersDecimals are usually stored as IEEE 754 floating point numbers: a sign, an exponent and a binary fraction, 64 bits in a double.
- 5How a CPU runs a programA CPU, the chip that runs your code, repeats one cycle billions of times a second.
- 6Compiled vs interpreted codeThe CPU only understands machine code, so something must translate the code you write.
- 7Memory: the stack and the heapA running program uses two main areas of memory.
- 8What happens when you pass a value to a functionThis connects memory to code you write every day.
- 9Processes and the operating systemThe operating system (OS) sits between your program and the hardware.
9 in this stageOpen this stage4Data structures and Big-OLearn the handful of structures almost all code is built from, and how to reason about the time and memory a solution costs. This is what separates code that works from code that still works with a million rows.10 topics · ~3 months
- 1Big-O time complexityBig-O describes time complexity: how the work your code does grows as its input gets bigger, ignoring fixed constants.
- 2Arrays and dynamic arraysAn array stores items side by side in memory, in one contiguous block.
- 3Linked listsA linked list stores each item in its own node, together with a pointer to the next node.
- 4Stacks and queuesA stack is last in, first out (LIFO): you push and pop at the same end, like a pile of plates.
- 5Hash maps and setsA hash map stores key and value pairs.
- 6RecursionA recursive function solves a problem by calling itself on a smaller version of the same problem.
- 7Searching and sortingSearching an unsorted list means checking every item, which is O(n) in Big-O notation.
- 8Space complexityBig-O measures memory as well as time.
- 9Trees at a first lookA tree is a set of nodes (items) where each node has children and exactly one parent.
- 10Graphs at a first lookA graph is a set of nodes joined by edges (links), with no single root.
10 in this stageOpen this stage5Object-oriented design and clean codeOrganise programs so they stay readable as they grow: classes where they help, separation of concerns, small functions, tests first on the logic that matters, and documentation someone else can follow.10 topics · ~2 months
- 1Classes, objects and encapsulationA class bundles data with the behaviour that changes it, and an object is one instance of that class.
- 2Composition, inheritance and interfacesThere are two main ways to reuse behaviour between classes.
- 3Naming and small functionsCode is read far more often than it is written, so readability matters, and names do most of the explaining.
- 4Separation of concernsSeparation of concerns means each part of a program handles one kind of job.
- 5DRY, KISS and YAGNIThese are three short principles that work best as questions while refactoring (tidying code without changing what it does).
- 6Unit tests and edge casesA unit test calls one small piece of code with known inputs and checks the output automatically.
- 7Test-driven developmentTest-driven development flips the usual order.
- 8Code smells and refactoringRefactoring means changing the structure of code without changing what it does.
- 9Comments, docstrings and READMEsGood code explains what it does through its names.
- 10SOLID as review questionsSOLID is five design principles for object-oriented code, the kind built from classes.
10 in this stageOpen this stage6Build and ship your first projectsTurn skills into finished, shareable work: small programs that solve a real problem, with dependencies managed, tests on the core logic, a README and a history of honest commits.8 topics · ~3 months
- 1Scoping a small projectMost first projects fail because they are too big, not because they are too hard.
- 2Virtual environments and pipA virtual environment is a private folder of packages for one project.
- 3Files, JSON and pathlibReading JSON in Python is the job of the
jsonmodule. - 4Calling a public API with requestsrequests is the library most Python code uses for HTTP, the way programs talk to web servers.
- 5Configuration and secretsThe moment a project calls an API (another service your code talks to), it gets a secret key, and that key must never reach GitHub.
- 6Tests with pytestpytest is a Python testing tool.
- 7README and a short demoA project nobody can run might as well not exist.
- 8Publishing on GitHubPublishing is the last step of the project, not an afterthought.
8 in this stageOpen this stage
Related on Sefism
Picked from the other libraries by shared topics.
Best practices
See all- Python Best PracticesWrite Python that stays maintainable: supported versions, pyproject and lockfiles, Ruff, type hints, errors, logging, concurrency, pytest and security.
- TypeScript Best PracticesModern TypeScript best practices for 2026: strict settings, TypeScript 7, modeling data with unions, safe narrowing, runtime validation, generics and typed linting.
- Secure Coding Best PracticesWrite code that resists attack: untrusted input, validation, parameterized queries, output encoding, safe parsing, uploads, SSRF and errors that fail closed.
Checklists
See all- Pull Request Checklist: Before You Open a PRA pull request checklist to run before you ask for review: scope and size, a clean diff, tests, a clear description, safe releases and a tidy branch, each with a way to verify it.
- Career Switch into Tech ChecklistMove into software from another field step by step: choose a direction, follow a learning plan, build proof of skill, use your previous domain, network, plan your runway and target a first role.
Project structures
See all- Python package and CLI project structureA command line tool published to PyPI, laid out the way the Python Packaging User Guide and uv recommend: a src layout, one pyproject.toml for metadata and every tool, a thin Typer CLI over plain, testable modules, and releases uploaded by GitHub Actions with trusted publishing. The example is mdlinks, a tool that finds broken links in Markdown files. For students who have written Python scripts and want to ship one that strangers can
pip install. - TypeScript npm library project structureA small, typed npm package (a retry helper) built the way modern libraries ship in 2026: TypeScript source in
src, bundled by tsdown intodistwith type declarations and anexportsmap, tested with Vitest, checked with publint and Are the Types Wrong, versioned with Changesets and published from CI with npm provenance. For students who want to publish their first package, and for anyone whose package works locally but breaks for users. - Flutter project structureFor anyone building one Dart app for Android, iOS and the web. The tree starts from what flutter create gives you and grows into a feature-first lib/ folder, where each feature keeps its own data, domain and presentation code, then adds tests at every level, flavors, release signing, crash reporting and, for large teams, a melos workspace of local packages.
Career questions
See all- What should I learn first to become a software engineer in 2026?Learn one language properly, then Git, the command line, how the web works and basic SQL, and build small things with them from week one. AI tools change how you write code, not what you need to understand. Pick a direction only after the foundations feel boring.
- Should I learn Python or JavaScript first?Choose based on what you want to build. JavaScript if you want web development, since it runs in every browser. Python if you are drawn to data, AI, automation or backend scripting. Both are excellent first languages, and the second one is far easier once you know the first well.
- I understand tutorials but cannot build anything myself. Why does coding feel so different when I am alone?Tutorials train recognition, not production. When you follow along, someone else makes every decision. Building alone requires you to break a problem down and make choices, which is a separate skill. Build it with small projects, planning on paper first, and a rule to struggle before you look anything up.
Cheat sheets
See all- Software design and clean code cheat sheetOOP, SOLID, design patterns, refactoring.
- TypeScript cheat sheetTypes, inference, narrowing, generics, type-level tools and strict configuration for real TypeScript codebases.
- Design Patterns cheat sheetAll 23 Gang of Four patterns with intent, when to use and a TypeScript sketch, plus SOLID, related principles and a problem to pattern map.
Work with me
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