Web TechnologiesCourse and practice

Languages and frameworks

The languages back ends are written in, the frameworks that do the work every back end needs, who uses which and why, and the same route written in four of them.

6 parts · about 7 min

Present Cheat sheet

A language and a framework

A back end is written in a programming language, on a framework that does the work every back end needs.

A back end is written in a programming language. A handful of them cover most back ends: JavaScript, Python, PHP, Java, C#, Ruby and Go. JavaScript is the language browsers run, and a tool called Node.js lets it run on a server too.

On top of the language, almost every back end uses a framework: a set of ready-made parts for the work every back end needs. A framework receives requests on routes, reads what they contain safely, talks to the database, logs people in and protects against common attacks. It also gives a fixed way to organise the code, so that a new developer finds their way.

How common is each language? In Stack Overflow's 2025 survey, about 49,000 developers answered. About two thirds of those who answered the question had worked with JavaScript in the past year, and nearly six in ten with Python and with SQL, the language of databases. About three in ten had used Java, a little fewer C#, one in five PHP, one in six Go, and about one in sixteen Ruby. The 2026 survey, with fewer answers, gives similar figures.

Websites tell another story. W3Techs, which scans millions of sites, found PHP on about seven in ten of the sites whose server language it could detect, in October 2026. That's mostly because WordPress, written in PHP, runs about four in ten of all websites.

Cheat sheet

Programming languagelangage de programmation
a language for writing instructions that a computer runs, such as JavaScript, Python or PHP.
Node.jsNode.js
a tool that runs JavaScript on a server, outside the browser, so that a back end can be written in JavaScript.
Back-end frameworkframework back-end
ready-made code for the work every back end needs, such as routes, logins and database access, like Laravel or Django.
SQLSQL
the language used to ask a table database for data, such as every product under €20.
WordPressWordPress
a popular tool that builds pages on a server, keeps the content in a database and gives an admin screen to edit it.

Seven families, and who uses them

Each language has one or two main frameworks, and each family has its strengths and its users.

JavaScript with Node.js lets a team use one language in the browser and on the server. PayPal moved a page from Java to Node.js in 2013, and Netflix's website moved to Node.js in 2015. Python is easy to read and is the language of data and AI tools. Instagram runs on Django, and in JetBrains' survey of Python developers for 2024, FastAPI (38%) has just passed Django (35%) and Flask (34%).

PHP runs on almost any cheap hosting, and it runs WordPress and Wikipedia. Among PHP developers, JetBrains' 2025 survey found 64% using Laravel and 23% using Symfony. Symfony was created in Paris and released as open source in 2005, and French companies such as Yuka use it.

Java with Spring Boot is common in large companies and in systems meant to last for years: Netflix made Spring Boot its main Java framework in 2018. C# with .NET suits companies built on Microsoft tools, and Stack Overflow itself runs on it. Ruby on Rails was made to build fast: Shopify, GitHub and Doctolib run on it, and Doctolib's code has more than three million lines. Go is simple and light, and runs some of Uber's busiest services, as well as tools such as Docker and Kubernetes.

Large companies often mix: Netflix uses both Node.js and Java. And the choice usually follows the team that will maintain the code.

Seven languages for back ends, their main frameworks, and companies that use them1. JavaScript, with Node.js: Express (minimal) and NestJS (all-in-one). Used by PayPal, and Netflix's website. 2. Python: Django (all-in-one), FastAPI and Flask (minimal). Used by Instagram, built with Django. 3. PHP: Laravel and Symfony (all-in-one), and WordPress. Used by Wikipedia, and Yuka with Symfony. 4. Java: Spring Boot (all-in-one). Used by Netflix's services. 5. C#: ASP.NET Core, part of .NET (all-in-one). Used by Stack Overflow. 6. Ruby: Ruby on Rails (all-in-one). Used by Shopify, GitHub and Doctolib. 7. Go: Mostly its own built-in tools (minimal). Used by Uber, and the tools Docker and Kubernetes.The languageIts main frameworksUsed by, for exampleJavaScript, withNode.jsExpress (minimal) and NestJS (all-in-one)PayPal, and Netflix's websitePythonDjango (all-in-one), FastAPI and Flask (minimal)Instagram, built with DjangoPHPLaravel and Symfony (all-in-one), and WordPressWikipedia, and Yuka with SymfonyJavaSpring Boot (all-in-one)Netflix's servicesC#ASP.NET Core, part of .NET (all-in-one)Stack OverflowRubyRuby on Rails (all-in-one)Shopify, GitHub and DoctolibGoMostly its own built-in tools (minimal)Uber, and the tools Docker andKubernetes

Swipe sideways to see the whole figure.

Figure 1

Cheat sheet

DjangoDjango
an all-in-one framework for Python, known for the admin screen it builds from the data.
LaravelLaravel
an all-in-one framework for PHP, very popular with agencies and freelancers.
SymfonySymfony
an all-in-one framework for PHP, created in Paris and open source since 2005.
Spring BootSpring Boot
the most common framework for back ends written in Java, often used in large companies.
.NET.NET
Microsoft's set of tools for writing programs in C#, with ASP.NET Core for back ends.
Ruby on RailsRuby on Rails, Rails
an all-in-one framework for the Ruby language, made to build web applications quickly.
Open sourceopen source, logiciel libre
describes software whose code is public and free to use, which you can run yourself or pay someone to run.

All-in-one or minimal

Frameworks come in two kinds.

All-in-one frameworks, such as Laravel, Symfony, Django, Ruby on Rails, Spring Boot and NestJS, come with most of what a back end needs: logins and password resets, tools to read and save data, and a fixed way to organise the code. Django even builds an admin screen from the data, where staff can manage it.

Minimal frameworks, such as Express, FastAPI and Flask, handle routes and requests well, and leave the rest to the team, who choose a tool for each other job or write it. Go is often used with no framework at all, only the tools built into the language.

Neither kind is better. An all-in-one framework means fewer decisions, less to build by hand, and the same structure from one project to the next, so another developer finds their way. A minimal one is lighter and gives more freedom, but each tool the team adds is one more choice to make, maintain and update.

So it depends on the project. A music shop whose staff need a screen to manage stock and orders gains a lot from an all-in-one framework. An API that only sends prices to partner sites needs little more than routes, and a minimal framework is enough.

What comes ready-made in an all-in-one framework, and what a team adds to a minimal one1. Routes that receive requests: all-in-one, included; minimal, included. 2. Tools to read and save data: all-in-one, included; minimal, the team adds a tool. 3. Logins and password resets: all-in-one, included; minimal, the team adds a tool or writes it. 4. An admin screen for the staff: all-in-one, included in django, an add-on for the others; minimal, the team builds it. 5. A fixed way to organise the code: all-in-one, included; minimal, the team decides.All-in-one frameworksLaravel, Symfony, Django, Rails, SpringBootMinimal frameworksExpress, FastAPI, FlaskRoutes that receive requestsIncludedIncludedTools to read and save dataIncludedThe team adds a toolLogins and password resetsIncludedThe team adds a tool or writes itAn admin screen for the staffIncluded in Django, an add-on forthe othersThe team builds itA fixed way to organise the codeIncludedThe team decides

Swipe sideways to see the whole figure.

Figure 2

Cheat sheet

All-in-one frameworkframework complet
a framework that includes logins, database tools and a fixed structure, such as Laravel, Django or Spring Boot.
Minimal frameworkmicro-framework
a framework that handles routes and requests and leaves the rest to the team, such as Express or FastAPI.
Admin screenback-office
the private pages where a team edits a site's content, such as texts and images, without touching code.
ExpressExpress
the most common minimal framework for Node.js, which handles routes and requests.
FastAPIFastAPI
a minimal framework for Python, made for APIs, which checks the data each request sends.

The same route in Express and FastAPI

The two examples below, and the two in the next part, do exactly the same thing: they answer the request GET /products?under=20 with every product that costs less than €20. Each one does the four jobs of every route: receive the request, check it, ask the database, and answer. You'll never write this code, but you can learn to see those four jobs in it. The lines that load each tool are left out.

In the Express version, on the left, the first two lines create the app and connect to the database through Knex, a database tool the team chose and added. The line starting with app.get is the route: it handles GET requests to /products. The next line reads "under" from the address, or uses 20 if it's missing. The if lines are the rule, written by hand: if "under" isn't a number, answer with the status 400 and stop. Then db("products").where(...) asks the database for the products under that price, and res.json sends them back as JSON.

In the FastAPI version, on the right, @app.get("/products") is the route. The line under: float = 20 does three jobs at once: it reads "under", uses 20 if it's missing, and refuses the request if it isn't a number. The select ... where line is the question to the database, and FastAPI turns the answer into JSON by itself.

Express, a minimal JavaScript framework

Code
server.js
const app = express();
const db = knex(databaseSettings);

app.get("/products", async (req, res) => {
  const under = Number(req.query.under ?? 20);
  if (Number.isNaN(under)) {
    return res.status(400).send("Not a number");
  }
  const products = await db("products")
    .where("price", "<", under);
  res.json(products);
});

app.listen(3000);

FastAPI, a minimal Python framework

Code
main.py
app = FastAPI()
engine = create_engine(DATABASE_URL)

@app.get("/products")
def cheap_products(under: float = 20):
    query = select(Product).where(Product.price < under)
    with Session(engine) as session:
        return session.exec(query).all()
Example 1The same route, products under €20, in Express and in FastAPI

Cheat sheet

Routeroute
an address on the server that handles one kind of request, such as POST /bookings to create a booking.
Status codecode de statut, code HTTP
a three-digit number in each response that says what happened, such as 200 for success or 404 for a missing page.
JSONJSON
a plain-text format for data, made of names and values, that any program can read, such as "price": 12.
Librarybibliothèque
ready-made code, written by others, that does one job, such as showing a gallery of photos.

The same route in Laravel and Spring Boot

The same request again, in two all-in-one frameworks. They do more of the work for you, because they follow conventions: fixed rules about names and places, which the framework relies on.

In the Laravel version, on the left, Route::get('/products', ...) is the route. The validate line is the rule, in one line: if "under" isn't a number, Laravel refuses the request by itself. The next line reads "under", or uses 20. Then Product::where(...)->get() asks the database, and Laravel turns the products into JSON for the answer. The second file, Product.php, holds an empty class, and that's enough: from the name Product, Laravel guesses that the products live in a table called "products".

In the Spring Boot version, on the right, @GetMapping("/products") is the route, and the @RequestParam line reads "under", or uses 20, and refuses anything that isn't a number. The line products.findByPriceLessThan(under) asks the database. Nobody wrote that question: Spring writes it from the name of the method in the second file, "find by price less than".

Conventions mean less code to write, but you have to know them to read the code. That's one more reason to choose a framework that many developers know.

Laravel, an all-in-one PHP framework

Code
routes/web.php
Route::get('/products', function (Request $request) {
    $request->validate(['under' => 'numeric']);
    $under = $request->query('under', 20);

    return Product::where('price', '<', $under)->get();
});
app/Models/Product.php
class Product extends Model
{
}

Spring Boot, an all-in-one Java framework

Code
ProductController.java
@RestController
class ProductController {
    @Autowired
    ProductRepository products;

    @GetMapping("/products")
    List<Product> cheap(
      @RequestParam(defaultValue = "20") double under) {
        return products.findByPriceLessThan(under);
    }
}
ProductRepository.java
interface ProductRepository
        extends JpaRepository<Product, Long> {
    List<Product> findByPriceLessThan(double price);
}
Example 2The same route, products under €20, in Laravel and in Spring Boot

Cheat sheet

Conventionconvention
a fixed rule about names and places that a framework relies on, such as a model called Product reading the table "products".
Model classclasse de modèle
in a back-end framework, the code that stands for one kind of data, such as a product, and reads it from the database.
LaravelLaravel
an all-in-one framework for PHP, very popular with agencies and freelancers.
Spring BootSpring Boot
the most common framework for back ends written in Java, often used in large companies.

What to ask

Any mainstream language and framework can build most projects. So the useful questions are about people and work, not about speed.

Ask which language and framework the team will use, and why. "It's what our team knows best" is a good answer. Ask what comes ready-made and what they'll write themselves: the answer often explains the gap between two quotes, and logins written by hand are a warning sign.

Ask which version they'll use, and until when it will get security updates. Frameworks publish their support dates, so the answer is easy to check.

And ask who could take over if they left. With a popular framework, many developers can read the code. With a rare one, you depend on a few people.

Cheat sheet

Back-end frameworkframework back-end
ready-made code for the work every back end needs, such as routes, logins and database access, like Laravel or Django.
Security updatemise à jour de sécurité
a new version of a piece of software that fixes a weakness attackers could use.
Versionversion
one numbered release of a package or a tool, such as 5.2.1, where higher numbers are newer.

Practise this strand

These questions put you in the situations this lesson describes. You answer in your own words, and you get a level, feedback and a full answer.