Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Hai từ này bị dùng lẫn lộn đến mức nhiều người mới tin chúng giống nhau. Hiểu đúng khác biệt giúp bạn chọn công cụ hợp lý, đọc tài liệu dễ hơn và trả lời tự tin trong phỏng vấn.
Thư viện (library) là tập hợp các hàm, lớp có sẵn để bạn gọi khi cần. Bạn là người chủ động: chương trình do bạn điều khiển, và thư viện chỉ giúp thực hiện những việc cụ thể.
import math
import random
print(math.sqrt(81))
print(random.choice(["đỏ", "xanh", "vàng"]))Hai thư viện trên giải quyết riêng lẻ việc tính toán và chọn ngẫu nhiên. Bạn quyết định dùng khi nào, ở đâu, theo thứ tự nào. Ví dụ khác: lodash, axios (JavaScript), requests, NumPy (Python).
Framework (khung ứng dụng) cung cấp bộ khung và quy tắc; bạn "điền" code của mình vào những chỗ nó quy định. Lúc này framework mới là bên điều khiển luồng chương trình và gọi code của bạn.
from flask import Flask
app = Flask(__name__)
@app.get("/")
def trang_chu(): # Flask gọi hàm này khi có người truy cập "/"
return "Chào mừng"Bạn không tự viết vòng lặp lắng nghe kết nối, phân tích request, định tuyến. Framework lo hết, và chỉ gọi hàm trang_chu của bạn khi cần. Ví dụ: Laravel (PHP), Django (Python), Spring (Java), Angular (JavaScript), Ruby on Rails.
Đây là sự khác biệt cốt lõi, còn gọi là đảo ngược điều khiển (Inversion of Control): với thư viện, bạn gọi thư viện; với framework, framework gọi bạn. Có câu đùa quen thuộc: "Đừng gọi chúng tôi, chúng tôi sẽ gọi bạn".
| Tiêu chí | Library | Framework |
|---|---|---|
| Ai điều khiển luồng chạy | Code của bạn | Framework |
| Phạm vi | Giải quyết một mảng việc | Định hình cả cấu trúc ứng dụng |
| Độ tự do | Cao | Thấp hơn, theo quy ước |
| Đường cong học | Thường nhẹ | Thường dốc hơn |
| Thay thế được không | Dễ thay | Khó thay, gắn chặt vào dự án |
Ranh giới đôi khi mờ. Ví dụ React tự mô tả là thư viện giao diện, vì nó chỉ lo phần hiển thị; để làm ứng dụng đầy đủ bạn tự chọn thêm định tuyến, quản lý trạng thái. Trong khi Angular là framework trọn gói. Đừng quá sa đà vào tranh cãi từ ngữ, quan trọng là hiểu mức độ nó áp đặt cấu trúc lên dự án.
Hãy xem việc xử lý yêu cầu web bằng thư viện và bằng framework. Với thư viện chuẩn, bạn tự viết vòng lặp nhận kết nối:
from http.server import BaseHTTPRequestHandler, HTTPServer
class XuLy(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header("Content-Type", "text/plain; charset=utf-8")
self.end_headers()
self.wfile.write("Xin chào".encode("utf-8"))
HTTPServer(("127.0.0.1", 8000), XuLy).serve_forever()Ở đây bạn vẫn phải tự lo định tuyến, đọc tham số, chọn mã trạng thái. Với framework như Flask, chỉ cần khai báo hàm cho từng đường dẫn, những việc lặp lại còn lại do nó đảm nhiệm. Đổi lại, bạn phải theo cách đặt tên và cấu trúc thư mục của framework.
Thư viện là công cụ bạn cầm lên dùng, framework là khung nhà bạn chuyển vào ở và bày biện theo quy ước. Nắm rõ sự khác biệt về quyền điều khiển, bạn sẽ chọn công cụ có lý do rõ ràng thay vì chạy theo xu hướng.
Học xong lý thuyết, hãy thực hành thật nhiều; các bài giảng có bài tập trong khóa học codebem.com sẽ giúp bạn việc đó.
Nguyễn Đình Cường
0 comment