Programming and Software Development
Software engineering practice
Engineering practice is what separates a program that works today from a codebase a team can still change in three years. It covers the habits around the code rather than the code itself: version control, review, tests, the shape of modules and the decisions written down about them. No exam certifies it, and code review and the later interview rounds are mostly probing for it.
Why this topic exists: Version control, code review, testing habits, architecture, design patterns and clean code: the slow layer hiring quietly filters on (SFIA Systems and software lifecycle engineering; MDN version-control module).
SFIA separates writing software from the conditions it is written under. Programming is one skill. Lifecycle engineering, SFIA's term for setting up how a team develops, improves and safely operates what it builds, is another. Software design, shaping code to meet requirements within agreed standards, is a third. Engineering practice lives in the second and third. It is the set of agreements that let several people change the same code without tripping over each other, and it is learned mostly by working inside a team that already has good ones.
- Version control as a record. Git commits that each do one thing and say why, branches that live for days rather than months, and a history someone can search when a bug surfaces. MDN places version control among its core modules alongside HTML and JavaScript, not as an optional extra.
- Review as a conversation. A pull request small enough to read in one sitting, a description of what changed and how it was checked, and reviewers who ask about structure and risk instead of formatting a tool could fix.
- Tests as a safety net. Enough automated checks that a change which breaks something fails before it merges. The discipline of software testing goes much further; the habit starts here.
- Decisions written down. A short note of why one approach beat another, kept beside the code, spares the next person from reopening a settled argument.
Patterns and architecture
Design patterns are named solutions to recurring problems: an adapter wraps an awkward interface, an observer lets parts of a program react to events without knowing about each other. Their main value is shared vocabulary, so a reviewer can say 'this wants a strategy' and be understood. Principles such as SOLID play the same role for class design. Treat both as descriptions of code that proved easy to change, not as rules to apply in advance. Architecture asks the same question at a larger scale: how the system splits into parts and how those parts talk. A single deployable application with clean internal modules serves most teams for longer than fashion suggests. Splitting it into separately deployed services buys independent releases and pays for them with network failures, distributed data and more operational work.
Where newcomers go wrong
The early mistake runs in two directions. Some newcomers keep the habits of solo work: one enormous commit, no tests, a branch drifting for weeks. Others discover patterns and stack layers of abstraction for requirements nobody has stated, so a small change touches eight files. Both come from the same missing experience of maintaining code over time. Contributing to an established open-source project, even with documentation fixes, is the fastest way to see a working set of conventions from the inside.
A habit to start this week
Before opening any pull request, read your own diff top to bottom as if a stranger had written it. Most of what a reviewer would flag, from leftover debugging lines to a function doing two jobs, shows up on that first read.
Practice feeds straight into DevOps and CI/CD, which automates many of these agreements, and into the structural choices that shape a back end.
Next to this topic
- Programming fundamentalsOne language learned properly plus enough of the machine beneath it: variables, control flow, data structures, debugging and reading code (SFIA Programming/software development; MDN's getting-started modules).
- Programming languagesPython, JavaScript, Java, C#, C and C++, Go, TypeScript, Rust, Kotlin, Swift: what each is for and where it is hired, so the first choice is a career decision rather than a syntax preference (Udemy's Programming Languages shelf names the market).
- Web developmentHTML, CSS and JavaScript, then a framework and the browser's APIs: MDN's core and extension modules are the syllabus of the largest development field.
- Back-end development and APIsServers, frameworks, databases behind them and the HTTP and REST contracts between services (MDN server-side modules; DVA-C02; the freeCodeCamp back-end certificate).
- Mobile developmentiOS, Android and the cross-platform frameworks are their own toolchains, stores and review rules (SFIA Systems development; Udemy's Mobile shelf).
- Databases and SQLThe relational model, SQL, schema design and the document and key-value stores next to it: the layer every application and every analyst stands on (SFIA Database design; DP-900 relational concepts).
- Software testing and QATesting as a discipline: the ISTQB Foundation syllabus v4.0.1 (fundamentals, testing through the lifecycle, static testing, analysis and design, managing test activities, tools) plus the automation frameworks (Selenium, Cypress, Playwright).
- DevOps, Git and CI/CDVersion control workflows, pipelines, containers for developers and the culture that joins build and run (AZ-400; GitHub Foundations and Actions; the cloud field owns infrastructure as code and operations).
- Game developmentEngines, graphics, physics and the design loop are a development field with its own tooling and job market (Udemy's Game Development shelf; SFIA Animation development).
- No-code and low-code developmentBuilding software without writing most of it (Bubble, Webflow, Zapier, Make, Airtable) is a recognised route into shipping products; Microsoft's Power Platform is the office-suite version of the same idea.
- AI-assisted developmentAssistants changed how fast plausible code appears, not what makes it correct; reading, testing and correcting generated code is now part of the craft (GitHub certifies Copilot use and, on its 2026 credentials page, agentic AI development).
Concepts to know
Glossary entries with the reason each one matters here.
- Git
Version control is the first engineering habit.
- Containers
The ordinary unit of deployment.
Certifications that test it
Vendor exams and free certificates; facts, cost and the preparation path are on each page, and the certifications hub has them all.
Tools of the trade
Frequently asked
- Do junior developers need to know design patterns?
- Know the handful you will meet in your codebase well enough to recognise them, and learn the rest when a problem calls for one. Reaching for patterns before the code needs them is a more common junior fault than not knowing them.
- Monolith or microservices for a new project?
- Almost always a well-structured monolith first. Separate services pay off when teams need to release independently or parts of the system scale very differently, and both of those are easier to see once the product exists.
- How can a self-taught developer show engineering practice to an employer?
- Through a public repository that looks like team work: small commits with clear messages, a test suite that runs in a pipeline, a readable README, and ideally merged contributions to someone else's project. Interviewers read history as closely as code.
Courses in the directory
748 courses are filed here; the top 6 by our ranking, details and the provider link on each course page.
Recursion
Udemy
Last reviewed 26 September 2026 · Getting Digital
