Câu 1Next.js mà bạn gặp trong sách nhập môn là ngôn ngữ, thư viện, hay framework?
Khác biệt giữa các ngôn ngữ lập trình, và framework với thư viện
Bài viết này nằm trong khóa Kiến thức nền tảng về CNTT, xây dựng từ đầu những kiến thức CNTT thực tế tối thiểu mà bạn cần để lập trình và vibe coding.
Python và JavaScript chỉ khác nhau ở cách viết, việc bạn làm thì như nhau. Các sơ đồ sẽ giúp bạn phân biệt được thư viện với framework qua chiều của lệnh gọi.
Bài viết này bàn về khác biệt giữa các ngôn ngữ lập trình, và framework với thư viện.
Bạn sẽ phân biệt được một cái tên như React hay Next.js là ngôn ngữ, hay là thứ được viết bằng một ngôn ngữ.
Bài nói về Python và JavaScript, cùng bốn cái tên: React, Next.js, Django và Flutter.
Ngôn ngữ lập trình là gì — cú pháp khác nhau, nhưng nội dung viết thì giống
Ngôn ngữ lập trình (programming language: bộ từ vựng và quy tắc viết dùng để viết mã nguồn) đi kèm với một môi trường chạy.
Thứ khác nhau là cú pháp (syntax: quy tắc về việc viết một câu lệnh bằng ký hiệu nào và theo trật tự từ nào).
| Cùng vai trò | Python | JavaScript |
|---|---|---|
| Đặt tên cho một giá trị | a = 3 | let a = 3; |
| Rẽ nhánh theo điều kiện | if a > 2: | if (a > 2) { |
| In ra màn hình | print(a) | console.log(a) |
Python đánh dấu một khối bằng dấu : ở cuối dòng và phần thụt lề, còn JavaScript đánh dấu bằng ; và { }.
Trong bốn dòng sau, ba dòng trên viết theo kiểu JavaScript, dòng cuối viết theo kiểu Python.
let a = 3;
let b = 4;
console.log(a + b);
console.log(len([a, b]))
Sau khi dòng thứ ba in ra 7, nó dừng lại ở dòng cuối.
Dù bạn muốn làm cùng một việc, viết khác kiểu thì môi trường chạy không đọc được.
Ngôn ngữ khác nhau ở cách viết, còn việc làm thì giống nhau
Ngôn ngữ lập trình là bộ quy tắc về ký hiệu và trật tự từ khi bạn viết mã.
Đặt tên cho giá trị, rẽ nhánh theo điều kiện và lặp lại là những cơ chế ngôn ngữ nào cũng có, chỉ khác ở cách viết và ở môi trường chạy đọc chúng.
Thư viện và framework — lệnh gọi chạy theo hai chiều ngược nhau
Thư viện (library) và framework (framework) đều là tập hợp các chương trình người khác viết, bạn dùng chúng để tự viết ít đi.
Việc chỉ định một chức năng của chương trình khác theo tên rồi cho nó chạy gọi là gọi (call).
Khác biệt giữa hai thứ này là chiều của lệnh gọi đó.
| Chỗ cần nhìn | Thư viện | Framework |
|---|---|---|
| Từ tiếng Anh | library | framework |
| Bên trong có gì | Các chương trình có một chức năng cụ thể | Luồng xử lý của cả ứng dụng |
| Quan hệ với mã của bạn | Bạn gọi nó từ mã của mình | Bạn viết thêm vào những chỗ định sẵn |
| Chiều của lệnh gọi | Mã của bạn → thư viện | Framework → mã của bạn |
| Thứ quyết định luồng | Mã của bạn | Framework |
- Thứ môi trường chạy cho chạy là mã của bạn (app.js)
- Quyết định luồng của cả chương trình
- Gọi thư viện ở những chỗ cần
- Chỉ chạy khi được gọi
- Xong thì quay lại mã của bạn
- Thứ môi trường chạy cho chạy là framework
- Luồng của cả ứng dụng đã được viết sẵn
- Gọi mã của bạn ở những chỗ định sẵn
- Chỉ chạy khi được gọi
- Chỗ viết và tên gọi đều đã được định sẵn
Ở khung dưới, bên trong và bên ngoài đổi chỗ cho nhau, và framework gọi mã của bạn.
Bên nào nằm ngoài thì quyết định luồng tổng thể.
Gọi một thư viện thì chỉ mất một dòng, thay vì hàng chục dòng bạn phải tự viết.
Chỉ khác nhau ở chỗ ai đã viết phần xử lý đó.
Với thư viện phải cài trước khi gọi, nếu bạn gọi mà chưa cài thì chương trình dừng với lỗi.
Các tài liệu hướng dẫn cũng gọi chúng là "package" hay "module", và bài "Quản lý package là gì" sẽ bàn về cơ chế đó.
Framework cho ứng dụng web mang sẵn luồng từ lúc nhận request cho tới lúc trả về response.
- Nhận request đến từ trình duyệt
- Nhìn URL rồi tìm phần xử lý tương ứng
- Dựng response từ kết quả nhận lại rồi trả về
- Chỉ chạy khi được gọi
- Đọc ghi cơ sở dữ liệu rồi tạo ra kết quả
- Trả kết quả đã tạo về cho framework
Ba việc ở bên ngoài do framework làm, nên bạn không viết chúng.
Lý do dùng framework là để khỏi phải tự viết phần bên ngoài.
Mã của bạn chỉ chạy ở bước thứ ba, còn trước và sau đó là việc của framework.
URL nào chạy phần nào cũng chỉ là thứ bạn ghi sẵn ở một chỗ định sẵn.
Bên gọi, hay bên được gọi
Thư viện và framework đều là chương trình người khác viết, khác nhau ở chỗ bên nào nằm ngoài.
Thư viện được gọi từ bên trong mã của bạn, còn framework gọi mã của bạn từ bên ngoài và quyết định luồng tổng thể.
React, Next.js, Django và Flutter là gì — xếp các tên vào ba loại
Bạn đọc những cái tên xuất hiện trong khóa học bằng cách xếp mỗi cái vào ngôn ngữ, thư viện hay framework.
Next.js không phải ngôn ngữ; nó là một framework được viết bằng JavaScript.
- Mã cho các màn hình chạy trong trình duyệt
- Mã phía server chạy trên node
- Tách file trang theo từng URL
- Viết được cả phần xử lý phía server
- Dựng màn hình bằng React
- Dựng các bộ phận của màn hình
- Gọi được mà không cần dùng Next.js
- Mã cho phân tích dữ liệu và tự động hóa
- Mã cho phần xử lý phía server
- Gắn URL với phần xử lý
- Đọc ghi cơ sở dữ liệu
- Cơ chế đăng nhập
- Mã cho ứng dụng điện thoại
- Màn hình và hành vi của ứng dụng điện thoại
- Từ một bộ mã ra cả iPhone lẫn Android
React là thư viện dựng các bộ phận của màn hình, còn Next.js là framework dùng chính React đó và mang thêm cả phần xử lý phía server.
Flutter là framework để làm ứng dụng điện thoại, và bạn viết nó bằng một ngôn ngữ tên là Dart.
Việc từ một bộ mã làm ra được ứng dụng chạy trên nhiều hệ điều hành gọi là đa nền tảng (cross-platform).
Không cái tên nào trong đó là ngôn ngữ; mỗi cái là thứ bạn dùng kết hợp với mã của mình.
Cùng cái tên Next.js xuất hiện ở cả phía thiết bị lẫn phía server.
Đó là vì phạm vi nó đảm nhận thay đổi tùy theo nó chỉ dựng màn hình hay mang thêm cả phần xử lý phía server.
Ngay cả từ ứng dụng điện thoại làm bằng Flutter, nơi nó nối tới vẫn là cùng một server công khai.
Cái tên là ngôn ngữ, hay là thứ viết bằng ngôn ngữ
Next.js, React, Django và Flutter đều không phải ngôn ngữ; mỗi cái được viết bằng một ngôn ngữ nào đó.
Tra xem bạn viết nó bằng ngôn ngữ gì thì biết nó có phải bản thân ngôn ngữ hay không; tra chiều của lệnh gọi thì biết nó là thư viện hay framework.
Học ngôn ngữ nào trước — quyết theo việc thứ bạn muốn làm có cần màn hình trong trình duyệt hay không
Ngôn ngữ mà trình duyệt đọc được là JavaScript, nên phía màn hình (frontend) là JavaScript.
Phía xử lý (backend) chạy trên server, nên bạn viết bằng ngôn ngữ nào cũng được.
Nếu bạn cần màn hình trong trình duyệt, phần đó nhất định là JavaScript.
Nếu không cần màn hình, hãy bắt đầu với Python, ngôn ngữ có nhiều thư viện bên ngoài cho phân tích dữ liệu và tự động hóa.
Các framework và thư viện ở hàng dưới cùng xuất hiện sau khi bạn chọn ngôn ngữ; chúng không phải thứ chọn trước.
Bắt đầu từ bên nào thì các cơ chế bạn học được cũng như nhau.
Hai lối đi cuối cùng gặp nhau ở cùng một chỗ.
Thứ bạn học lại chỉ là cách viết và tên các thư viện dùng trong ngôn ngữ đó.
Hãy chọn một cái gần với thứ bạn muốn làm, rồi đi tiếp với nó.
Quyết được thứ muốn làm thì quyết được ngôn ngữ
Bạn quyết được ngôn ngữ theo thứ mình muốn làm, chứ không theo sở thích.
Nếu cần một màn hình chạy trong trình duyệt thì phần đó là JavaScript, còn nếu không cần thì bạn bắt đầu được với Python, và tới ngôn ngữ thứ hai, thứ bạn học lại chỉ là cách viết và tên các thư viện.
Kiểm tra kiến thức
Hãy trả lời từng câu hỏi một.
Câu 2Phát biểu nào về khác biệt giữa thư viện và framework là đúng?
Câu 3Vì sao mã phía màn hình của ứng dụng web được viết bằng JavaScript?