Software Engineer
Software engineering is the highest-employment technical career in the United States — about 1.66 million people, at a $132,270 median. It is also the career most loudly declared dead by AI. This page gives you the honest version: what the job actually is, what it pays, which parts machines have already taken, and what to learn instead.
Typical Pay (US)*
$132kmedian** AI-estimated from general U.S. labor-market patterns — not measured data from the U.S. Bureau of Labor Statistics or any official source. Real pay varies widely by location, employer, experience, and timing.
Outlook
Employment is still growing at roughly 4.8% annually across ~1.66 million U.S. jobs, and this occupation sits in the 89th percentile for momentum. But the growth is not evenly distributed. AI coding tools have absorbed the routine implementation work that entry-level roles were built on, which is why new-grad hiring tightened while senior compensation held firm. What the job becomes on the other side is more architectural and more editorial: specifying systems, reviewing machine-generated code for correctness, debugging production, and owning outcomes. Learn system design, testing, and reading unfamiliar codebases — not faster typing.
What does a Software Engineer do?
A software engineer builds and maintains the systems other people depend on. On a given day that means reading code you didn't write, deciding how a feature should be shaped before typing anything, writing the implementation, reviewing a teammate's pull request, and getting paged when the thing you shipped behaves differently at 3 a.m. under real traffic than it did on your laptop. The title covers an enormous band — the same two words describe someone maintaining insurance claims processing in Java and someone writing inference servers in Rust — but the core loop is constant: take an ambiguous problem, turn it into a precise specification, encode that specification so a machine executes it reliably, then own what happens next.
"Software engineer" is the umbrella the narrower titles sit under. A frontend developer, backend developer, full-stack developer, and mobile developer are all software engineers with a smaller surface area; at most large companies those are literally the same job ladder with a specialization noted in the req. The roles genuinely distinct from it sit adjacent in the pipeline. A DevOps engineer owns how code gets deployed and stays up rather than what it does. A data engineer owns the movement and shape of data rather than application behavior. A machine learning engineer owns training and serving models. The boundary that actually matters in practice is who gets paged: if your name is on the on-call rotation for a service, you are the engineer for it.
Here is the honest version of the AI question. The routine tier of this job has already been eaten. Writing a CRUD endpoint from a clear spec, converting a mockup into markup, translating a function between languages, drafting a first-pass test suite — Claude, Copilot, and Cursor do all of that competently, and that is precisely the work that used to fill a junior engineer's first year. What has not been eaten is the work that requires holding a whole system in your head: deciding what to build, debugging a failure that spans three services with incomplete logs, judging whether a generated solution is actually correct rather than merely plausible, and carrying a design that has to survive four years of changing requirements. Compensation data reflects the split exactly — senior pay held, entry-level hiring got materially harder. The fastest path forward is to skip the tier that got automated: learn to review and correct machine output rather than to produce the same output slower.
The people who last in this job like being wrong in public and fixing it quickly. You need real tolerance for sitting with a problem you do not yet understand, and comfort with the fact that most of your hours go to reading and reasoning rather than typing. It suits you badly if you want work with a finished state — software is never done, and maintenance is most of the total lifetime cost. It suits you badly if you want to avoid writing, because design docs, incident write-ups, and review comments are a large share of a senior engineer's real output. A computer science degree helps at the résumé screen and for the algorithms interview, but it is not a licensing gate. A large share of working engineers arrived via bootcamps, adjacent technical jobs, or self-teaching plus a public record of shipped things.
A day in the life
- Standup at 9:45, then two hours of uninterrupted work on a feature branch before the first meeting lands
- Reading an unfamiliar service's code to figure out why its response times doubled after last Thursday's deploy
- Writing a two-page design doc proposing how a new payments retry flow should handle partial failures
- Reviewing three pull requests, leaving comments that reject a clever solution in favor of a boring maintainable one
- Pairing with a teammate in a screen share to reproduce a bug that only appears with production data volumes
- Prompting Claude or Cursor for a first implementation pass, then rewriting the half of it that misread the data model
- Taking an on-call page, checking dashboards and logs, rolling back the bad deploy, then filing the incident write-up
How to become a Software Engineer
- 1
Get fluent in one language, deeply
~3 monthsPick Python, JavaScript/TypeScript, Java, or Go and go past syntax into idioms, error handling, the standard library, and the package ecosystem. Depth in one beats shallow familiarity with five.
- 2
Learn the fundamentals AI can't fake for you
~3 monthsData structures, algorithmic complexity, how HTTP and databases actually work, and version control with Git. These are what interviews test and what let you judge whether generated code is correct.
- 3
Ship three real projects end to end
~4 monthsNot tutorials. Build things with a database, authentication, tests, and a deployed URL someone else can visit, then write up the design decisions and the bugs you hit.
- 4
Work in a codebase you did not write
~2 monthsContribute to an open-source project or inherit a messy repo. Reading and safely modifying unfamiliar code is the single most transferable skill in the job and the hardest to practice alone.
- 5
Practice interviews as a separate skill
~2 monthsGrind roughly 100 well-chosen algorithm problems, rehearse a system-design conversation out loud, and prepare specific stories about tradeoffs you made. Interviewing is a distinct skill from engineering.
- 6
Enter through the widest door available
~3 monthsInternships, apprenticeships, QA, support engineering, or an internal transfer all convert into engineering roles. With entry-level competition high, a side door beats a year of cold applications.
Skills that matter
Learn the actual skills
Mochivia's structured roadmap walks you from fundamentals to job-ready — 15 minutes a day.
See the Roadmap