Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions how-to-become-a-full-stack-developer/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Full Stack Roadmap Materials

Supporting files for [How to Become a Full Stack Developer: What Jobs Ask For](https://realpython.com/how-to-become-a-full-stack-developer/).

- `roadmap-checklist.md`: the printable checklist, one box per skill.
- `slice/`: a minimal full stack slice. A Node.js server sends JSON, and a
web page fetches it and shows it. It needs Node.js 26 and no packages.

Run the slice:

```console
$ cd slice
$ node server.mjs
Listening on http://localhost:3000
```

Then open http://localhost:3000 in a browser.
31 changes: 31 additions & 0 deletions how-to-become-a-full-stack-developer/roadmap-checklist.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Full Stack Developer Roadmap Checklist

Tick each box when you can do the thing without looking it up.
Pace assumed: about 10 hours a week.

## Stage 1: HTML and CSS
- [ ] Build a page with headings, links, images, and a form
- [ ] Style it with CSS and make it work on a phone-sized screen

## Stage 2: JavaScript in the browser
- [ ] Change the page when someone clicks a button
- [ ] Fetch JSON from a URL and show it on the page

## Stage 3: A server with Node.js
- [ ] Run a Node.js server that answers with JSON
- [ ] Install a package with npm

## Stage 4: A database
- [ ] Save and read data so it survives a restart

## Stage 5: Ship it
- [ ] Put your project on GitHub
- [ ] Deploy it so a stranger can open the link

## Before you apply: React and TypeScript
- [ ] Rebuild one of your projects' pages with React components
- [ ] Add TypeScript types to that project and fix what the checker flags

## Ready to apply
- [ ] Two or three deployed projects, each with a front end, a server, and a database
- [ ] Each project has a public repository with a README that says what it does and how to run it
23 changes: 23 additions & 0 deletions how-to-become-a-full-stack-developer/slice/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Skills</title>
</head>
<body>
<h1>Full stack skills</h1>
<ul id="skills"></ul>
<script>
fetch("/api/skills")
.then((response) => response.json())
.then((skills) => {
const list = document.querySelector("#skills");
for (const skill of skills) {
const item = document.createElement("li");
item.textContent = `${skill.name} (stage ${skill.stage})`;
list.append(item);
}
});
</script>
</body>
</html>
23 changes: 23 additions & 0 deletions how-to-become-a-full-stack-developer/slice/server.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { createServer } from "node:http";
import { readFile } from "node:fs/promises";

const skills = [
{ name: "HTML", stage: 1 },
{ name: "CSS", stage: 1 },
{ name: "JavaScript", stage: 2 },
{ name: "Node.js", stage: 3 },
];

const server = createServer(async (req, res) => {
if (req.url === "/api/skills") {
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify(skills));
} else if (req.url === "/") {
res.writeHead(200, { "Content-Type": "text/html" });
res.end(await readFile(new URL("index.html", import.meta.url)));
} else {
res.writeHead(404).end("Not found");
}
});

server.listen(3000, () => console.log("Listening on http://localhost:3000"));
Loading