- Được xây dựng để giúp các lập trình viên vừa học tập vừa trải nghiệm những thử thách sáng tạo thông qua 73 ý tưởng dự án lập trình
- Mỗi dự án bao quát nhiều lĩnh vực khác nhau như mạng, hệ thống, AI, đồ họa, bảo mật, cơ sở dữ liệu
- Phần lớn ý tưởng được thiết kế để tự tay hiện thực các nguyên lý công nghệ cốt lõi, nhờ đó có thể học song song cả lý thuyết lẫn thực hành
- Mỗi mục đều kèm theo các liên kết tới bài báo khoa học, tài liệu chính thức, hướng dẫn, giúp chỉ ra lộ trình học tập rõ ràng
- Mang lại cơ hội để nhìn nhận lập trình không chỉ là viết mã mà còn là nghệ thuật của khám phá và sáng tạo
Tổng quan
- Nhiều lập trình viên muốn bắt đầu side project nhưng không biết nên làm gì
- Trên Internet có rất nhiều ý tưởng quen thuộc và nhàm chán
- Bài viết này giới thiệu 73 dự án thú vị và có giá trị học tập cao
- Mỗi dự án được xây dựng để người học có thể trực tiếp hiện thực và tiếp thu một khái niệm kỹ thuật cụ thể
Dự án về mạng và hệ thống
- BitTorrent client: hiện thực một trình tải tệp để tìm hiểu cách hoạt động của mạng P2P
- DNS server: xây dựng máy chủ bao gồm nhận truy vấn, phân tích gói tin, phân giải tên miền và bộ nhớ đệm
- Container runtime: học kernel namespace,
chroot, và cô lập tiến trình mà không cần Docker
- TCP/IP stack: tự hiện thực giao thức TCP/IP trong không gian người dùng của Linux
- Load balancer: hiện thực phân phối yêu cầu giữa các máy chủ backend, kiểm tra trạng thái và duy trì phiên
Dữ liệu và hệ thống phân tán
- RAFT protocol: hiện thực hệ thống hỗ trợ đồng thuận phân tán và khôi phục khi xảy ra lỗi
- Redis clone: xây dựng cơ sở dữ liệu trong bộ nhớ bao gồm các lệnh cơ bản, lưu bền RDB, sao chép và giao dịch
- Kafka broker: hiện thực hệ thống log phân tán xử lý việc tạo topic và các yêu cầu sinh/tiêu thụ thông điệp
- SQL engine và optimizer: học quá trình thực thi và tối ưu hóa truy vấn bằng cách mô phỏng cấu trúc của SQLite
- Hệ thống CI: xây dựng hệ thống tích hợp tự động theo dõi kho Git, chạy kiểm thử và báo cáo kết quả
Trí tuệ nhân tạo và thuật toán
- Wordle solver: chương trình suy đoán từ sử dụng các khái niệm lý thuyết thông tin và entropy
- Trình tạo deepfake: hiện thực biến đổi khuôn mặt bằng Optimal Transport
- Random forest: tự hiện thực cây quyết định và random forest để giải các bài toán phân loại
- Neural network framework: xây dựng framework deep learning bao gồm tensor, autograd và optimizer
- Thiết kế tiến hóa: mô phỏng tự động tiến hóa cấu trúc cơ khí bằng thuật toán di truyền
Đồ họa và phát triển game
- Ray tracer: kết xuất cảnh 3D gồm hình cầu, mặt phẳng và ánh sáng
- OpenGL renderer: hiện thực một renderer nhỏ để rèn luyện nền tảng lập trình đồ họa
- Làm lại Dangerous Dave: tái hiện trò chơi cổ điển bằng SDL
- Chess engine: hiện thực trò chơi cờ vua bao gồm cả UCI engine
- Procedural Crossword: tạo ô chữ tự động bằng lan truyền ràng buộc
Bảo mật và mật mã
- Authentication server (JWT/Sessions) : hiện thực mã hóa, thời hạn hết hạn của token và quản lý phiên
- Hệ thống bỏ phiếu ẩn danh: thiết kế cơ chế bỏ phiếu mã hóa bằng zero-knowledge proof (ZKP)
- VPN: xây dựng mesh VPN chuyển tiếp lưu lượng mà không cần máy chủ trung tâm
- Thử nghiệm malware: kiểm tra phản ứng của tường lửa trong môi trường máy ảo
- Zip archiver: tự hiện thực các chức năng nén, mã hóa và đóng gói
Phát triển web và ứng dụng
- Web server: hỗ trợ xử lý yêu cầu HTTP, phục vụ tệp tĩnh, routing và reverse proxy
- Trình soạn thảo cộng tác: hiện thực trình soạn thảo văn bản phân tán dựa trên CRDT
- Browser engine: xây dựng một engine đơn giản có thể phân tích HTML/CSS và render
- Video editor: trình biên tập phía client chạy ngay trong trình duyệt
- Browser extension: lưu và tự động điền mật khẩu, biểu mẫu và trạng thái clipboard
Trực quan hóa dữ liệu và tìm kiếm
- Googlebot: tạo web crawler để học cấu trúc cơ bản của hệ thống tìm kiếm
- Wikipedia search engine: hiện thực thuật toán lập chỉ mục, tokenization và xếp hạng
- Knowledge graph: trực quan hóa quan hệ giữa các thực thể và tự động cập nhật từ web
- Google Maps engine: hệ thống bản đồ lập chỉ mục dữ liệu đường sá, địa hình và địa điểm
- Hệ thống CDN caching: thiết kế cấu trúc cache ngăn các yêu cầu lặp lại đối với tài sản tĩnh
Phần cứng và hệ thống nhúng
- Hệ thống laser tag: hệ thống phát hiện thời gian thực sử dụng mã hóa IR và giao tiếp MQTT
- Ứng dụng nhà thông minh: dự án IoT hỗ trợ điều khiển thiết bị IR, lập lịch và tự động hóa
- Trình giả lập Game Boy Advance: tái hiện cấu trúc CPU, bộ nhớ, đồ họa và đầu vào
Blockchain và tài chính
- Bitcoin node: hiện thực chức năng tải xuống và xác thực block
- Bot giao dịch chứng khoán: thực hiện giao dịch tự động bằng hệ thống hướng sự kiện
- Bỏ phiếu ẩn danh và smart contract: hệ thống bỏ phiếu đáng tin cậy dựa trên blockchain
Kết luận
- 73 dự án nhấn mạnh cách tiếp cận mang tính thử nghiệm, học bằng cách tự tay hiện thực công nghệ cốt lõi
- Mỗi ý tưởng đều nối tới tài liệu chính thức, bài báo khoa học và hướng dẫn, từ đó thúc đẩy việc học thông qua thực hành
- Đây là những gợi ý thực tiễn giúp bạn khám phá lại lập trình như một nghệ thuật của khám phá và sáng tạo
1 bình luận
Ý kiến trên Hacker News
Một số người cho rằng danh sách này trông như do AI tạo ra, nhưng tôi lại nghĩ việc ‘tự làm từ đầu’ mới là cách tốt nhất để giảm phụ thuộc vào AI
Ở Nhật, quá trình này được gọi là ‘tu hành (修行, Shugyo)’. Người thợ dành thời gian dài mài công cụ không phải vì hiệu quả, mà để hiểu bản chất của thép
Tự tay làm Redis hay Git không phải vì thành phẩm, mà là để xây dựng mô hình tư duy thông qua những va chạm trong quá trình đó. Đây chính là phần mà AI không thể thay thế
Xin giới thiệu bộ ý tưởng dự án tôi làm: Challenging programming projects every programmer should try
Đây là danh sách từ codecrafters.io. Nền tảng này cho bạn triển khai dự án theo từng bước và cung cấp kiểm thử tích hợp cùng cộng đồng
Tôi cũng đang làm dự án ‘Build your own Redis’ và thấy khá thú vị. Không phải do AI tạo, có vẻ là tập hợp các ý tưởng nhận được từ cộng đồng
Tôi cực kỳ khuyến nghị tự làm một client BitTorrent. Đặc tả đơn giản, còn các vấn đề chi tiết thì rất thú vị. Cảm giác hoàn thành rồi tự tải kernel Debian xuống rất đáng giá
Nếu triển khai thêm magnet link hay chức năng seeding thì sẽ học được sâu hơn nữa. Trải nghiệm này khiến tôi quan tâm đến hệ thống P2P và DHT (như Chord)
Danh sách này hơi kỳ. Ví dụ #58 là triển khai malloc, vốn là chủ đề khá khó với người mới, mà ngay #59 lại bảo tự làm giao thức streaming từ đầu
Tôi muốn biết mọi người nghĩ gì về thử thách lập trình /g/ của 4chan. Cách phân loại độ khó có vẻ hơi tùy tiện. Ví dụ nói bootloader khó hơn trình biên dịch C thì khá lạ
Liên kết ảnh tham khảo
.mdthì tốt hơnTự làm những công cụ hay giao thức nhỏ nhưng hoàn chỉnh là rất tốt. Sự thỏa mãn đến từ tính rõ ràng và cảm giác hoàn thành, hơn là quy mô
Tôi hơi nghi liệu đây có phải là ‘astroturfing’ (quảng bá trá hình) không
Có dự án chỉ mất một ngày, nhưng cũng có dự án ở quy mô đồ án tốt nghiệp đại học hay thậm chí luận văn thạc sĩ
Nhìn danh sách này làm tôi thấy mình không phải một lập trình viên giỏi
Nếu muốn bắt đầu, nên xem các công trình đi trước trong lĩnh vực bạn quan tâm. Ví dụ có thể tham khảo công việc của Adam Dunkels. Vì dành cho embedded nên nhỏ gọn và dễ hiểu
Nếu cần, cũng nên tận dụng công cụ AI để hỗ trợ hiểu code hoặc sinh code