Dạo gần đây, người ta thường bảo nhau rằng AI đang sắp sửa "cướp việc" của ngành này, ngành kia... và đương nhiên, lập trình cũng không ngoại lệ. Theo quan điểm của tôi, thật ra AI không cướp việc của lập trình viên. Thay vào đó, chính những lập trình viên biết sử dụng AI để hỗ trợ công việc mới "cướp việc" của các lập trình viên không kịp chuyển đổi nắm bắt cơ hội.
Thực tế, các tool AI hỗ trợ lập trình giờ mọc lên như nấm sau mưa. Khi bắt đầu viết bài này, tôi cũng đã nhờ ChatGPT hỗ trợ tổng hợp một bức tranh toàn cảnh như sau:
GitHub Copilot
- Ngày ra mắt: 29/06/2021
- Tình trạng hiện tại (2025): Ổn định, phổ biến rộng rãi
- Ước lượng người dùng: ~2 triệu người dùng
- Mô hình AI sử dụng: GPT-4, Claude 3.5, Gemini 1.5 Pro
- Nền tảng hỗ trợ: VS Code, JetBrains, Neovim, Xcode
- Ghi chú nổi bật: Hỗ trợ đa mô hình AI; tích hợp sâu với GitHub
Windsurf (trước đây là Codeium)
- Ngày ra mắt: 2021 (đổi tên tháng 04/2025)
- Tình trạng hiện tại (2025): Đang phát triển mạnh
- Ước lượng người dùng: >700.000 người dùng
- Mô hình AI sử dụng: DeepSeek, Claude, GPT-4
- Nền tảng hỗ trợ: Web IDE, VS Code, JetBrains
- Ghi chú nổi bật: Tích hợp AI-native IDE; hỗ trợ nhiều mô hình AI
Cursor
- Ngày ra mắt: 2023
- Tình trạng hiện tại (2025): Đang phát triển nhanh chóng
- Ước lượng người dùng: ~40.000 người dùng
- Mô hình AI sử dụng: GPT-4, Claude 3.5
- Nền tảng hỗ trợ: VS Code (fork)
- Ghi chú nổi bật: Tích hợp AI sâu; hỗ trợ chat và điều khiển terminal
Tabnine
- Ngày ra mắt: 2019 (đổi tên từ Codota năm 2021)
- Tình trạng hiện tại (2025): Ổn định, hướng đến doanh nghiệp
- Ước lượng người dùng: >1 triệu người dùng hàng tháng
- Mô hình AI sử dụng: Mô hình riêng, GPT-4, Mistral
- Nền tảng hỗ trợ: VS Code, JetBrains, Jupyter
- Ghi chú nổi bật: Tập trung vào bảo mật và tùy chỉnh cho doanh nghiệp
Amazon CodeWhisperer
- Ngày ra mắt: 2022
- Tình trạng hiện tại (2025): Đang phát triển
- Ước lượng người dùng: Không rõ
- Mô hình AI sử dụng: Mô hình riêng của Amazon
- Nền tảng hỗ trợ: VS Code, JetBrains
- Ghi chú nổi bật: Tích hợp với AWS; hỗ trợ nhiều ngôn ngữ lập trình
Google Gemini Code Assist
- Ngày ra mắt: 2024
- Tình trạng hiện tại (2025): Mới ra mắt, đang mở rộng
- Ước lượng người dùng: Không rõ
- Mô hình AI sử dụng: Gemini 2.0
- Nền tảng hỗ trợ: Web IDE
- Ghi chú nổi bật: Cung cấp miễn phí cho cá nhân; hỗ trợ 38 ngôn ngữ lập trình
Tôi cũng không biết thông tin của ChatGPT cung cấp có đúng hay không (dạo này tôi thấy con ChatGPT này cũng hay chém linh tinh, bịa chuyện dựa trên tự suy luận lắm), các bạn xem tham khảo nhé.
Trên mạng chắc cũng nhiều bài so sánh những công cụ này rồi, tôi sẽ không viết gì thêm về vấn đề này nữa mà nhảy thẳng luôn vào việc sử dụng Windsurf - công cụ mà tôi lựa chọn.
1 - Cài đặt Windsurf
Windsurf có cả bản Editor chạy độc lập và Plugin cài vào các IDE có sẵn (VS Code, JetBrains, Visual Studio, Vim, Emacs, Xcode... nhiều lắm, hỗ trợ tận 40+ IDE khác nhau cơ).
Để làm quen với Windsurf 1 cách chân thực nhất thì đầu tiên tôi cứ thử dùng bản chạy độc lập (Windsurf Editor) đã. Các bạn tải về từ trang này nhé: https://windsurf.com/download (có hỗ trợ cả Windows, MacOS, Linux).
Sau khi tải về thì cài đặt như bình thường.
Mở Windsurf lên:
Bấm Get started
Chọn luồng cài đặt: giữ nguyên, bấm Start fresh
Chọn hệ phím tắt: giữ nguyên Default (VS Code), bấm Next
Chọn theme: cứ Dark mà giã, Next
Cần đăng nhập (hoặc đăng ký) trước nhé các bạn. Ai chưa có tài khoản thì chọn Sign up, nó sẽ nhảy ra trang web cho các bạn đăng ký, cứ chọn đăng ký bằng tài khoản Google luôn cho lẹ.
Tôi có tài khoản rồi, tôi chọn Log in, nó vẫn nhảy ra trang web của windsurf để xác thực, xong thì màn hình app sẽ hiển thị "Hi, {Tên người dùng}". Sau đó app sẽ tự động chuyển sang màn hình Getting started.
Mặc định thì Windsurf sẽ cho bạn 2 tuần dùng thử gói Pro trước khi quay lại gói Free.
2 - Hello Windsurf - ứng dụng đầu tiên
Không cần phải tìm docs ở đâu xa, chúng ta cứ nhờ chính Windsurf hướng dẫn luôn xem sao.
Từ màn hình Windsurf, bạn bấm Command + L (Ctrl + L trên Windows) để vào cửa sổ Cascade (tên trợ lý AI). Giữ nguyên lựa chọn model là GPT-4.1 (promo), tôi gõ luôn:
Tôi muốn bắt đầu học sử dụng Windsurl, bạn hãy hướng dẫn tôi theo từng tutorial nhé
Tôi copy lại nội dung mà Cascade trả lời vào đây để các bạn nhìn rõ hơn:
Tuyệt vời! Tôi sẽ hướng dẫn bạn học sử dụng Windsurf (công cụ phát triển phần mềm và AI của Windsurf Engineering) từng bước một, theo phong cách tutorial. Chúng ta sẽ đi từ những kiến thức cơ bản nhất đến các thao tác nâng cao, đảm bảo bạn có thể tự tin sử dụng Windsurf.
Dưới đây là lộ trình học cơ bản, bạn chỉ cần làm theo từng bước. Sau mỗi bước, tôi sẽ giải thích chi tiết và hỗ trợ nếu bạn gặp khó khăn.
Tutorial 1: Giới thiệu về Windsurf và thiết lập môi trường
Bước 1: Giới thiệu Windsurf
- Windsurf là một nền tảng hỗ trợ phát triển phần mềm, đặc biệt mạnh về AI, tự động hóa, và quản lý dự án.
- Bạn có thể sử dụng nó để tạo, quản lý, và triển khai các dự án một cách nhanh chóng.
Bước 2: Thiết lập môi trường phát triển
- Đảm bảo bạn đã cài đặt Python, Node.js, và Git trên máy tính (nếu chưa, tôi sẽ hướng dẫn).
- Đăng ký hoặc đăng nhập tài khoản Windsurf (nếu cần).
- Tạo thư mục làm việc đầu tiên với Windsurf.
Bạn đã sẵn sàng bắt đầu với bước thiết lập môi trường chưa? Nếu rồi, hãy cho tôi biết bạn đã cài đặt Python, Node.js, và Git chưa, hoặc bạn muốn tôi kiểm tra/chỉ dẫn cách cài đặt các công cụ này.
Nếu bạn muốn bỏ qua phần cài đặt môi trường và chuyển sang tạo dự án đầu tiên luôn, cũng hãy báo cho tôi nhé!
Bạn muốn tiếp tục với bước nào?
- Kiểm tra/cài đặt Python, Node.js, Git
- Đăng nhập/đăng ký Windsurf
- Tạo dự án đầu tiên với Windsurf
(Hãy chọn một trong các bước trên hoặc hỏi bất kỳ điều gì bạn còn thắc mắc!)
Ok, Python, Node.js với Git thì máy tôi cũng đã cài sẵn rồi, nhưng tôi cứ giả vờ hỏi/ nhờ con bot này xem sao, tôi lại gõ:
Bạn Kiểm tra/cài đặt Python, Node.js, Git giúp tôi
Thế là Cascade lại trả lời và hiển thị sẵn 1 dòng lệnh, tôi chỉ việc bấm Accept để thực thi lệnh đó. Accept 3 lần (tương ứng với 3 thứ mà bot gợi ý cài), thì nó bảo tôi:
Tôi đã kiểm tra trên máy bạn và xác nhận:
- Python đã được cài đặt (phiên bản: 3.12.8)
- Node.js đã được cài đặt (phiên bản: v23.11.0)
- Git đã được cài đặt (phiên bản: 2.39.5)
Như vậy, môi trường phát triển đã sẵn sàng cho các bước tiếp theo với Windsurf!
Bước tiếp theo bạn muốn thực hiện là:
- Đăng nhập/đăng ký tài khoản Windsurf (nếu bạn muốn sử dụng các tính năng cloud hoặc quản lý dự án online)
- Tạo dự án đầu tiên với Windsurf trên máy tính
Bạn muốn tiếp tục với bước nào? Nếu chưa có tài khoản Windsurf, tôi sẽ hướng dẫn đăng ký; còn nếu muốn tạo dự án ngay, tôi sẽ hướng dẫn từng bước cụ thể.
Đến đây thì tôi không muốn mất thời gian để Cascade hướng dẫn đăng nhập/ đăng ký nữa, nên tôi chọn 2, gõ lại:
Tôi muốn "Tạo dự án đầu tiên với Windsurf trên máy tính"
Ô, gặp lỗi không tạo được file rồi:
Không sao, bên dưới thì vẫn hướng dẫn tạo file thủ công, kèm dòng lệnh tạo folder (chỉ việc bấm Accept như bước trên):
Accept xong thì folder được tạo, đồng thời 3 file phía trên mà Cascade không tạo được thì giờ cũng tạo lại được luôn (vậy lỗi bên trên là do thiếu folder).
Đồng thời, 3 file mới tạo cũng được tự mở lên ở vùng cửa sổ bên trái để mình kiểm tra những thay đổi trong source code mà bot nó đã làm.
Tôi bấm Accept Changes trong vùng cửa sổ file để chấp nhận các thay đổi (phải làm với từng file). Sau đó tiếp tục bấm Accept trong vùng cửa sổ Cascade
Tôi đã tạo thành công dự án Python mẫu đầu tiên với Windsurf cho bạn tại đường dẫn:
/Users/hung-nguyen/CascadeProjects/windsurf-demoCác file đã được tạo:
- main.py: Chạy chương trình sẽ in ra thông báo chào mừng.
- requirements.txt: Quản lý thư viện (hiện để trống).
- README.md: Hướng dẫn sử dụng dự án.
Tôi cũng đã chạy thử chương trình và kết quả là:
Chào mừng bạn đến với dự án Windsurf đầu tiên!
Tiếp theo bạn muốn làm gì?
- Thêm chức năng mới cho dự án (ví dụ: nhập dữ liệu, xử lý file, tính toán…)
- Tìm hiểu về quản lý thư viện với pip/requirements.txt
- Tìm hiểu cách sử dụng Git để quản lý mã nguồn dự án
- Học cách triển khai (deploy) dự án lên cloud hoặc chia sẻ với bạn bè
Bạn muốn tiếp tục với hướng dẫn nào? Nếu có ý tưởng riêng cho dự án hoặc câu hỏi khác, hãy cho tôi biết nhé!
Ok, vậy là mới dùng Windsurf để tạo được 1 ứng dụng dạng Hello world! đơn giản nhất quả đất thôi, chưa có gì phức tạp cả.
3 - Bổ sung tính năng
Giờ tôi sẽ bổ sung thêm vài tính năng mới cho nó, cũng không mất công nghĩ làm gì, lại tiếp tục nhờ Cascade gợi ý tính năng luôn xem sao.
Tôi gõ:
Hãy gợi ý giúp tôi một vài tính năng cho dự án này.
Bot trả lời:
Dưới đây là một số gợi ý về các tính năng bạn có thể phát triển cho dự án Python mẫu này. Các tính năng này phù hợp cho người mới bắt đầu, giúp bạn vừa luyện tập lập trình vừa mở rộng dự án một cách thực tế:
1. Tính năng Quản lý Danh bạ (Contact Book)
- Cho phép người dùng thêm, xoá, tìm kiếm và hiển thị danh sách liên hệ (tên, số điện thoại, email).
- Lưu dữ liệu vào file (txt/csv/json).
2. Máy tính đơn giản (Simple Calculator)
- Thực hiện các phép tính cộng, trừ, nhân, chia.
- Nhập phép tính từ bàn phím, in kết quả ra màn hình.
3. Quản lý công việc (To-do List)
- Thêm, xoá, đánh dấu hoàn thành công việc.
- Lưu danh sách công việc vào file.
4. Đọc và phân tích file văn bản
- Nhập đường dẫn file, đọc nội dung, đếm số dòng/ký tự/từ.
- Tìm kiếm một từ khóa trong file.
5. Trò chơi nhỏ (Mini Game)
- Ví dụ: Đoán số (Guess the Number), Oẳn tù tì, hoặc Xổ số may mắn.
6. Lấy dữ liệu thời tiết từ API
- Nhập tên thành phố, lấy thông tin thời tiết từ một API (ví dụ: OpenWeatherMap).
- In ra nhiệt độ, trạng thái thời tiết.
Bạn muốn bắt đầu với tính năng nào? Nếu bạn thích ý tưởng nào trong số này, hãy chọn và tôi sẽ hướng dẫn bạn từng bước để xây dựng nó. Nếu bạn có ý tưởng riêng, hãy chia sẻ để tôi hỗ trợ nhé!
Bạn muốn chọn:
- Quản lý danh bạ
- Máy tính đơn giản
- Quản lý công việc
- Đọc & phân tích file
- Trò chơi nhỏ
- Lấy dữ liệu thời tiết từ API
- Ý tưởng khác (bạn tự đề xuất)
Hãy chọn một trong các tính năng trên hoặc nêu ý tưởng của bạn!
Ok, cứ nghe theo lời xúi của Cascade, nhưng lần này tôi muốn thử thêm khả năng viết đặc tả của nó xem có ra gì không, nên tôi gõ:
Tôi muốn chọn Quản lý danh bạ (Contact Book). Nhưng trước tiên hãy nêu chi tiết lại specs mà bạn định thiết kế cho chức năng này để tôi duyệt đã.
Bot trả lời:
Dưới đây là bản thiết kế chi tiết (specs) cho chức năng Quản lý danh bạ (Contact Book) mà tôi đề xuất để bạn duyệt:
1. Mục tiêu
Xây dựng một ứng dụng dòng lệnh (CLI) đơn giản cho phép người dùng quản lý danh bạ cá nhân: thêm, xoá, tìm kiếm, chỉnh sửa và hiển thị các liên hệ. Dữ liệu danh bạ sẽ được lưu trữ vào file (CSV hoặc JSON) để có thể sử dụng lại sau mỗi lần chạy chương trình.
2. Chức năng cụ thể
a. Thêm liên hệ mới
- Nhập thông tin liên hệ: Họ tên, Số điện thoại, Email, Địa chỉ (tùy chọn).
- Kiểm tra trùng số điện thoại hoặc email trước khi thêm.
b. Hiển thị danh sách liên hệ
- In ra màn hình toàn bộ danh bạ với các trường thông tin cơ bản.
- Có thể sắp xếp theo tên hoặc số điện thoại.
c. Tìm kiếm liên hệ
- Tìm kiếm theo tên, số điện thoại hoặc email (cho phép tìm kiếm một phần, không cần khớp hoàn toàn).
d. Xoá liên hệ
- Cho phép xoá liên hệ dựa trên số điện thoại hoặc email.
e. Chỉnh sửa thông tin liên hệ
- Chọn liên hệ theo số điện thoại/email, sau đó chỉnh sửa các trường thông tin.
f. Lưu và tải danh bạ từ file
- Lưu toàn bộ danh bạ vào file (CSV hoặc JSON).
- Tự động tải danh bạ từ file khi khởi động chương trình.
3. Giao diện người dùng (User Interface)
- Ứng dụng chạy trên dòng lệnh (CLI).
- Hiển thị menu chức năng:
- Thêm liên hệ mới
- Hiển thị danh bạ
- Tìm kiếm liên hệ
- Xoá liên hệ
- Chỉnh sửa liên hệ
- Thoát chương trình
- Sau mỗi thao tác, quay lại menu chính.
4. Công nghệ & Lưu trữ
- Ngôn ngữ: Python 3
- Lưu trữ: File CSV hoặc JSON (ưu tiên JSON để dễ mở rộng)
- Không cần cài thêm thư viện ngoài (dùng sẵn thư viện chuẩn Python)
5. Mở rộng (nếu bạn muốn sau này)
- Xuất/nhập danh bạ ra file CSV để dùng với Excel.
- Bảo vệ danh bạ bằng mật khẩu.
- Giao diện đồ họa (GUI) với Tkinter hoặc web app.
Bạn vui lòng duyệt specs trên và cho biết:
- Có cần sửa đổi, bổ sung gì không?
- Có muốn bỏ bớt hoặc thêm chức năng nào không?
- Bạn muốn lưu file bằng định dạng CSV hay JSON?
Sau khi bạn duyệt xong, tôi sẽ bắt đầu hướng dẫn từng bước xây dựng chức năng này!
Đọc thấy cũng khá là trôi, nên tôi chốt duyệt luôn:
Duyệt OK bạn nhé. Tôi muốn lưu file định dạng JSON.
Cascade trả lời lại:
Cảm ơn bạn đã duyệt specs! Chúng ta sẽ bắt đầu xây dựng ứng dụng Quản lý danh bạ (Contact Book) lưu dữ liệu bằng định dạng JSON.
Kế hoạch triển khai từng bước
- Thiết kế cấu trúc dữ liệu và file lưu trữ
- Mỗi liên hệ là một dictionary với các trường: họ tên, số điện thoại, email, địa chỉ.
- Danh bạ là một list các liên hệ, lưu vào file contacts.json.
- Xây dựng các chức năng cơ bản
- Menu CLI cho các thao tác: thêm, hiển thị, tìm kiếm, xoá, chỉnh sửa, thoát.
- Tải danh bạ từ file khi khởi động, lưu lại khi có thay đổi.
- Cài đặt từng chức năng
- Bắt đầu với: tải/lưu file, hiển thị menu, thêm liên hệ, hiển thị danh bạ.
- Sau đó: tìm kiếm, xoá, chỉnh sửa liên hệ.
Tôi sẽ khởi tạo cấu trúc code cơ bản cho bạn, bao gồm:
- Định nghĩa các hàm chính.
- Tạo file contacts.json nếu chưa tồn tại.
- Hiển thị menu CLI và thực hiện các thao tác cơ bản.
Sau khi tạo xong, bạn có thể chạy thử và chúng ta sẽ bổ sung dần các chức năng chi tiết.
Tôi sẽ tiến hành cập nhật file main.py và tạo file contacts.json cho dự án.
Edited main.py
Created contacts.json
Tôi đã khởi tạo xong cấu trúc ứng dụng quản lý danh bạ (Contact Book) với các chức năng cơ bản:
- Lưu và tải danh bạ từ file JSON (contacts.json)
- Menu CLI với các lựa chọn: Thêm liên hệ mới, Hiển thị danh bạ, Thoát
- Kiểm tra trùng số điện thoại/email khi thêm liên hệ
- Hiển thị toàn bộ danh bạ dưới dạng danh sách
Bạn có thể chạy chương trình ngay bằng lệnh:
python3 main.py
Tiếp theo:
- Nếu bạn muốn kiểm thử trước, hãy chạy thử và nhập một vài liên hệ.
- Nếu muốn bổ sung chức năng (Tìm kiếm, Xoá, Chỉnh sửa liên hệ...), hãy cho tôi biết chức năng nào bạn muốn làm tiếp, tôi sẽ hướng dẫn và triển khai ngay cho bạn!
Bạn muốn tiếp tục với chức năng nào tiếp theo?
Tôi bấm nút Accept all để đồng ý với việc sửa main.py và tạo mới contacts.json của bot.
Xong rồi thì chạy thử bằng cách bấm nút Insert in Terminal ở lệnh bash mà Cascade đã gợi ý ngay phía trên. Windsurf sẽ tự động bật cửa sổ Terminal và nhồi sẵn câu lệnh python luôn cho chúng ta, chỉ việc ENTER luôn thôi.
Test tính năng
Chọn 1 để thêm liên hệ mới xem sao:
Mở file contacts.json ra kiểm tra thử:
Thêm 1 liên hệ nữa, rồi chọn 2 để hiển thị danh bạ:
4 - Kiểm tra code mà Windsurf gen ra
Giờ chúng ta sẽ cùng mở code mà Windsurf sinh ra, xem trình bày bố cục có ổn không nhé:
File main.py:
import json
import os
CONTACTS_FILE = "contacts.json"
def load_contacts():
if not os.path.exists(CONTACTS_FILE):
return []
with open(CONTACTS_FILE, 'r', encoding='utf-8') as f:
try:
return json.load(f)
except json.JSONDecodeError:
return []
def save_contacts(contacts):
with open(CONTACTS_FILE, 'w', encoding='utf-8') as f:
json.dump(contacts, f, ensure_ascii=False, indent=2)
def show_menu():
print("\n===== QUẢN LÝ DANH BẠ =====")
print("1. Thêm liên hệ mới")
print("2. Hiển thị danh bạ")
print("3. Thoát")
def add_contact(contacts):
print("\n--- Thêm liên hệ mới ---")
name = input("Họ tên: ").strip()
phone = input("Số điện thoại: ").strip()
email = input("Email: ").strip()
address = input("Địa chỉ (tùy chọn): ").strip()
# Kiểm tra trùng số điện thoại hoặc email
for c in contacts:
if c['phone'] == phone or c['email'] == email:
print("Liên hệ đã tồn tại!")
return
contact = {
'name': name,
'phone': phone,
'email': email,
'address': address
}
contacts.append(contact)
save_contacts(contacts)
print("Đã thêm liên hệ thành công!")
def show_contacts(contacts):
print("\n--- Danh bạ ---")
if not contacts:
print("Danh bạ trống!")
return
for idx, c in enumerate(contacts, 1):
print(f"{idx}. {c['name']} | {c['phone']} | {c['email']} | {c['address']}")
def main():
contacts = load_contacts()
while True:
show_menu()
choice = input("Chọn chức năng (1-3): ").strip()
if choice == '1':
add_contact(contacts)
elif choice == '2':
show_contacts(contacts)
elif choice == '3':
print("Tạm biệt!")
break
else:
print("Lựa chọn không hợp lệ. Vui lòng thử lại.")
if __name__ == "__main__":
main()
Như vậy, nhìn vào code mà Windsurf sử dụng model GPT-4.1 (promo) gen ra cũng tạm ổn, sử dụng được.
Bot cũng gen được cả file readme.md để miêu tả/ hướng dẫn các member dự án:
# Windsurf Demo
Dự án Python mẫu đầu tiên với Windsurf.
## Chạy thử
```bash
python3 main.py
```
Gen được cả requirements.txt cùng các nội dung của nó để thêm thư viện/ framework vào dự án:
# Để trống nếu chưa cần thư viện ngoài
Tạm thời, bài viết này đã dài rồi nên tôi sẽ dừng ở đây, cũng chưa thể hiện được nhiều năng lực của tool lắm. Vậy nên, ở bài viết tới, tôi sẽ thử nhờ Cascade sử dụng 1 Python framework để viết API, sau đó dùng 1 JS framework gọi vào API đó rồi hiển thị lên giao diện web cho người dùng dễ thao tác.
Các bạn đón đọc nhé!
Bắt đầu với Windsurf - AI Code Editor