# The Odin Project: lộ trình JavaScript và Node.js mã nguồn mở cho FDE quen Python

> Lộ trình bảy khóa của The Odin Project, một giáo trình mã nguồn mở do tình nguyện viên duy trì, giúp kỹ sư Python đọc được backend Express của khách hàng, miễn là chịu học đúng thứ tự.

Bản gốc: https://fdetimes.net/vi/sach-khoa-hoc/khoa-the-odin-project-javascript-full-stack-cho-fde/

Thử hình dung tuần đầu ở một khách hàng: hệ thống AI bạn mang đến viết bằng Python, còn toàn bộ backend của họ chạy Express trên Node.js. Muốn nối hai bên với nhau, bạn phải đọc được route, middleware và cách họ xác thực người dùng. Không ai đợi bạn học xong một khóa dài rồi mới bắt đầu.

Đó là lý do FDE quen Python nên để ý tới The Odin Project. Đây là giáo trình full-stack web development mã nguồn mở. Lộ trình Full Stack JavaScript của nó có riêng một khóa NodeJS dạy Express, PostgreSQL, authentication, ORM, API và testing, tức là đúng những chủ đề bạn nhiều khả năng phải đụng tới khi mở codebase Node của khách hàng.

Kỹ sư đã đi làm vài năm không cần học hết với nhịp của người mới. Điều cần biết là phần nào phục vụ việc gì, và nên bắt đầu từ đâu.

## Ai đứng sau, và vì sao điều đó quan trọng?

Erik Trautman sáng lập The Odin Project năm 2013. Trang giới thiệu của dự án cho biết giáo trình do một đội tình nguyện viên duy trì và cải tiến liên tục, còn website và toàn bộ giáo trình đều là mã nguồn mở. Repo trên GitHub nói thẳng rằng dự án sống nhờ đóng góp của cộng đồng.

Người học được lợi trực tiếp từ cách vận hành này. Vì giáo trình mở, bài học nào bạn cũng đọc được, sửa được và gửi pull request được. Khi bị kẹt, có cộng đồng Discord, cũng do tình nguyện viên vận hành, để bạn hỏi người đi trước.

## Bảy khóa, và lời dặn nên nghe theo

Lộ trình Full Stack JavaScript gồm bảy khóa: Intermediate HTML/CSS, JavaScript, Advanced HTML/CSS, React, Databases, NodeJS và Getting Hired. Trang lộ trình dặn nên học đúng theo thứ tự hiển thị.

Kỹ sư Python dễ muốn nhảy thẳng vào NodeJS. Đừng bỏ khóa JavaScript. Khóa này mở đầu bằng việc làm web động và tương tác, rồi đi qua async, testing, OOP, ES6 modules, npm, Webpack và cấu trúc dữ liệu. Async và modules thường là chỗ người quen Python vấp khi đọc code Node lần đầu.

Với HTML/CSS và React, bạn có thể đi nhanh hơn nếu việc của bạn chủ yếu ở backend. Nhưng đừng bỏ hẳn: nếu có lúc phải tự dựng một giao diện nhỏ để demo cho khách, đây là phần bạn sẽ cần. Khóa Databases thì nên học chậm, vì nó nằm ngay trước NodeJS và khóa NodeJS lại làm việc với PostgreSQL.

## Khóa NodeJS ứng với việc gì ở khách hàng?

Khóa NodeJS đưa JavaScript sang phía server, dùng Express để xây backend và dạy thêm cơ sở dữ liệu quan hệ PostgreSQL. Các phần gồm Introduction to NodeJS, Express, Authentication, ORMs, APIs và Testing Express. Bảng dưới đây ghép mỗi phần với một việc bạn có thể phải làm ở khách hàng.

| Phần trong khóa NodeJS | Việc tương ứng ở khách hàng |
|---|---|
| Express | Đọc route có sẵn, thêm một endpoint gọi dịch vụ AI của bạn |
| Authentication | Hiểu ai được gọi endpoint đó, tránh mở thêm lỗ hổng |
| ORMs và PostgreSQL | Truy vấn dữ liệu thật của khách mà không viết SQL lệch schema |
| APIs | Thiết kế response để đội frontend của khách dùng được ngay |
| Testing Express | Chứng minh thay đổi của bạn không làm vỡ thứ đang chạy |

## Một endpoint, năm bước

Quay lại tình huống ở đầu bài. Giả sử việc đầu tiên được giao là thêm endpoint trả về gợi ý từ model AI cho một khách hàng cụ thể. Bạn có thể làm theo trình tự sau, mỗi bước ứng với một phần của khóa NodeJS.

Bước một, mở file route của khách và tìm một route tương tự đang chạy, xem nó gắn middleware xác thực nào. Bước hai, khai báo route mới và gắn đúng middleware đó. Bước ba, lấy dữ liệu từ Postgres qua ORM họ đang dùng, chỉ chọn những cột model cần.

Bước bốn, gọi dịch vụ model, bắt lỗi khi model chậm hoặc trả lỗi, rồi trả JSON theo đúng khuôn các endpoint khác của khách. Bước năm, viết hai test cho Express: một ca có token hợp lệ trả dữ liệu, một ca không có token bị từ chối.

Lỗi hay gặp với người quen Python nằm ở bước ba và bốn: quên `await` trước lời gọi ORM hoặc model. Code vẫn chạy, nhưng thứ bạn nhận được là một Promise chứ không phải dữ liệu, và lỗi có thể bị nuốt mất. Đây chính là phần async trong khóa JavaScript, lý do không nên bỏ qua nó.

Lỗi thứ hai là chép route cũ nhưng sót middleware, khiến endpoint mới mở cho bất kỳ ai. Test ở bước năm, ca không có token, tồn tại để bắt đúng lỗi này trước khi nó lên production.

**Điểm mấu chốt:** Học một stack mới để đọc được code của khách hàng, không phải để đổi nghề.

## Ba ý đáng giữ lại

Ý đầu tiên: thứ tự có logic riêng. Async và ES6 modules được dạy trong khóa JavaScript, trước khi bạn chạm tới Express. Với FDE, đây cũng là cách tiếp cận mọi hệ thống lạ: hiểu nền móng rồi mới sửa tầng trên.

Ý tiếp theo: testing nằm ngay trong khóa backend chứ không bị tách ra làm phần phụ. Ở khách hàng, một bộ test chạy được là cách nhanh để đội kỹ thuật của họ tin thay đổi của bạn. Hãy coi Testing Express là phần bắt buộc, kể cả khi đang vội.

Ý cuối cùng đến từ chính mô hình mã nguồn mở. Giáo trình nằm trên GitHub và cần người đóng góp. Gửi một pull request sửa lỗi trong bài học là dịp luyện quy trình review code trong repo của người khác, việc FDE làm hằng ngày.

## Biến khóa học thành bằng chứng trong CV

Đừng chỉ ghi tên khóa học vào CV, hãy để một dự án chạy được nói thay bạn. Học xong khóa NodeJS, dựng một API Express nhỏ có authentication, PostgreSQL và bộ test, rồi thêm một endpoint gọi model AI theo đúng năm bước ở trên. Ghi rõ trong README bạn đã kiểm thử những gì.

Khi đọc mô tả công việc FDE, để ý xem công ty hoặc khách hàng của họ dùng JavaScript hay Node ở đâu. Nếu có, một dòng như "dựng API Express với auth, Postgres và test tự động" cụ thể hơn nhiều so với "biết JavaScript". Khóa cuối của lộ trình, Getting Hired, cũng có sẵn để bạn tham khảo cách trình bày.

Stack của khách hàng là thứ bạn được giao chứ không phải thứ bạn chọn. Đọc được Express nghĩa là có thêm một loại hệ thống bạn bước vào làm được ngay, thay vì phải đứng ngoài.

**Thử ngay tuần này:**

- Mở khóa JavaScript của The Odin Project, học xong phần async rồi viết lại bằng JavaScript một script Python gọi API mà bạn từng viết.
- Đọc danh sách các phần của khóa NodeJS, đánh dấu phần nào bạn đã làm được bằng Python và phần nào chưa từng làm.
- Vào Discord của The Odin Project, đặt một câu hỏi kèm đoạn code tối thiểu tái hiện lỗi để luyện cách hỏi sao cho người khác trả lời được.

## Nguồn

- [About - The Odin Project](https://www.theodinproject.com/about)

- [TheOdinProject/curriculum - GitHub](https://github.com/TheOdinProject/curriculum)

- [Full Stack JavaScript - The Odin Project](https://www.theodinproject.com/paths/full-stack-javascript)

- [NodeJS - The Odin Project](https://www.theodinproject.com/paths/full-stack-javascript/courses/nodejs)

- [JavaScript - The Odin Project](https://www.theodinproject.com/paths/full-stack-javascript/courses/javascript)
