1. Learn a General-Purpose Programming Language

Start with one strong, widely-used language.

I suggest Java, Python, or Javascript

  • Java dominates enterprise and legacy systems

  • Python is extremely popular at startups and heavily used in AI and data

  • JavaScript with Node.js is still one of the most common back-end languages

All three are excellent choices. The specific language matters far less than how deeply you learn it. The biggest mistake many beginners make is hopping between languages too early. They learn just enough syntax to “get by,” but never develop real depth and understanding of a language. When you go deep with a single language, you start to understand how it’s built, the design decisions behind it (like the JVM, garbage collection, or multithreading models), and how those choices directly shape the way you write software.

That means:

  • Writing clean, readable code

  • Understanding object-oriented principles like encapsulation and abstraction

  • Learning how memory is managed

  • Understanding concurrency and multi-threading

  • Knowing how your language handles errors, async work, and performance tradeoffs

If you deeply understand one language, learning a second one later becomes trivial (I’ve learned every language but my first on the job). You’ll recognize the same patterns everywhere, just with different syntax.

2. Get Comfortable With Linux and the Command Line

Most production systems run on Linux, and at some point in your career (probably the first few weeks) you will:

  • SSH into servers

  • Debug issues directly on remote machines

  • Read logs, inspect processes, and diagnose failures from the terminal

If you’re uncomfortable in the command line, every one of those tasks becomes slower and more frustrating than it needs to be.

You don’t need to become a Linux expert, but you do need to be fluent.

You should be comfortable with:

  • Navigating the file system

  • Editing files from the terminal

  • Managing processes and ports

  • Reading logs and environment variables

  • Understanding permissions and basic networking commands

The terminal is often the fastest and most direct way to understand what’s actually happening in a system. In addition to being useful on the job, many companies will ask Linux related questions in an interview. I have a friend who was asked to “name 5 two-letter Linux CLI commands” in an interview for Citadel.

3. Learn Databases (You’ll Use Them Every Day)

Databases are at the core of almost every back-end system.

Start with the fundamentals:

  • SQL — this is non-negotiable

  • Postgres — one of the most widely used and well-rounded relational databases

You should understand how to:

  • Design tables and relationships

  • Write efficient queries

  • Use indexes correctly

  • Think about transactions and consistency

Once you’re comfortable with relational databases, take a look at NoSQL systems like:

  • DynamoDB

  • Neo4J

  • Redis

  • Cassandra

  • Pinecone (for AI)

Each “NoSQL” system is different, so don’t try to master these, just understand why they exist and what problems they solve at a high level.

You should be able to answer questions like:

  • When does a relational database break down?

  • Why would you choose a key-value or document store?

  • What tradeoffs are you making around consistency, flexibility, and scale (CAP theorem & PACELC still applies)

Many production issues trace back to poor database decisions: missing indexes, inefficient queries, or choosing the wrong data model entirely. Engineers who understand databases deeply are able to prevent these problems before they happen.

A good rule of thumb:
If your database design is solid, everything built on top of it becomes easier. If it’s bad, you’ll spend YEARS trying to make everything else work around it.

4. Learn APIs (This Is Most of the Job)

If you strip away everything else, most back-end engineering work comes down to building and maintaining APIs.

This is how long developers spend per week on API related tasks in 2025 according to Postman.

You should understand:

  • How to design clean, intuitive APIs

  • REST fundamentals and common patterns

  • Authentication and authorization

  • Input validation and error handling

  • Pagination, filtering, and sorting

  • Rate limiting and abuse prevention

  • Versioning and backward compatibility

This is where all your previous knowledge comes together.

Your programming language defines how you write the logic.
Your database defines what data you store and retrieve.
Your API defines how the outside world interacts with your system.

Poor API design creates long-term pain: brittle clients, confusing contracts, and constant breaking changes. Good API design makes systems easier to evolve, scale, and maintain over time.

At more senior levels, API work becomes less about writing endpoints and more about thinking through contracts, edge cases, and failure modes.

If you can design APIs that are simple, predictable, and resilient, you’ll already be operating at a higher level than most back-end engineers.

5. Learn Cloud and Deployment (no this isn’t only for DevOps folks)

At some point, your code has to run somewhere.

In modern back-end engineering, that “somewhere” is almost always the cloud. Very few teams are deploying new systems fully on-prem anymore.

Start by picking one major cloud provider:

  • AWS

  • Azure

  • GCP

It genuinely doesn’t matter which one you choose. The core ideas transfer cleanly between them. I prefer AWS, but that is because I started my career at Amazon, where we (obviously) use a lot of AWS.

You should learn how to:

  • Deploy a service

  • Configure multiple environments (dev, staging, production)

  • Manage secrets and environment variables

  • Set up basic monitoring and logging

  • Understand how scaling works at a high level

Beyond the basics of what you can do in the cloud, it’s important to learn infrastructure as code. Tools like Terraform or cloud-native alternatives (ie AWS CDK) let you define and version your infrastructure the same way you do application code. This is how teams avoid configuration drift and production surprises. You’d be shocked how often someone manually does something in the UI, tells no one and documents it nowhere.

Cloud knowledge changes the way you think about systems. You start considering reliability, cost, and failure modes, cold starts, and more from the beginning.

Final Thoughts

At its core, the key to backend engineering is building a strong foundation that lets you reason about systems, debug issues under pressure, and ship reliable software.

If you:

  • Go deep in one programming language

  • Understand the basics of networking and Linux

  • Design databases intentionally

  • Build clean, resilient APIs

  • And know how to deploy and operate your systems

You’ll be well ahead of most people calling themselves back-end developers.

Focus on fundamentals.
Go deep before going wide.
And most importantly: build real things and put them into production.

That’s how you actually become a back-end engineer.

P.S
If you haven’t already, subscribe to my newsletter for more (hopefully) useful content like this here: https://www.arjaythedev.com/