1 điểm bởi GN⁺ 8 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Những dự án cá nhân bị bỏ dở từ lâu phù hợp để thử nghiệm công cụ hỗ trợ lập trình vì mục tiêu là hoàn tất phần triển khai hơn là học cái mới
  • Tác giả đã triển khai lại một shim để phơi bày YouTube Music qua OpenSubsonic API, giúp các client Subsonic khác nhau có thể kết nối theo cùng một cách
  • Sau khi cố định trước cấu trúc tối thiểu và quy ước triển khai, tác giả làm việc theo các vòng lặp ngắn, đồng thời chạy sinh stub dựa trên đặc tả OpenAPI và kiểm thử kết nối với client thực tế
  • Bản triển khai ban đầu chỉ khớp với đặc tả đã nhanh chóng vỡ vụn khi kết nối thực tế, và tác giả phải lặp lại việc kiểm tra log request cùng bổ sung kiểm thử đơn vị cho đến khi đạt mức có thể tìm kiếm và phát nhạc
  • Nếu đó không phải là một stretch project để học tập mà là một dự án đơn giản là bạn muốn nó tồn tại, thì công cụ hỗ trợ lập trình có thể giúp biến công việc bị trì hoãn thành một dịch vụ thực sự dùng được

Bối cảnh dự án và cách tiếp cận

  • Một dự án cá nhân từng đụng tới từ lâu nhưng chưa thể hoàn thành là đối tượng phù hợp để thử nghiệm công cụ hỗ trợ lập trình bằng AI
    • Thứ được hồi sinh lần này là một shim nối giữa YouTube Music và OpenSubsonic API
    • OpenSubsonic được dùng như một hợp đồng API cho phép tách biệt client và server của dịch vụ stream nhạc
    • Phía server dùng Navidrome, client desktop là Feishin, còn Android dùng Symfonium
  • Shim này phơi bày YouTube Music theo chuẩn OpenSubsonic API để có thể kết nối từ bất kỳ client nào
    • Với việc truy vấn metadata, tác giả dùng ytmusicapi, còn phần streaming thì gọi yt-dlp theo cách lập trình
    • Phần stream cơ bản nối vào khá dễ, nhưng vẫn còn rất nhiều việc đuôi dài để triển khai đầy đủ mọi endpoint theo đúng chuẩn
  • Dự án này phù hợp với công cụ hỗ trợ lập trình vì trọng tâm là triển khai một đặc tả rõ ràng hơn là giải quyết vấn đề mới lạ hay độc đáo
    • Tác giả thực hiện như một thử nghiệm viết lại từ đầu bằng Claude Code và Opus 4.6

Thiết lập ban đầu

  • Điểm khởi đầu là một dự án tối thiểu với cấu trúc đã được giới hạn trước
    • Tạo project bằng uv rồi thêm các dependency fastapi, pydantic, ytmusicapi, yt-dlp
    • main.py được đổi thành file main mẫu của FastAPI và đặc tả OpenAPI của OpenSubsonic được đặt vào thư mục
    • Trong README chỉ ghi ngắn gọn vai trò của server, các thư viện sử dụng, URL tài liệu và vị trí của openapi.json
    • Thêm một file TODO trống và tạo CLAUDE.md bằng /init
  • Trong CLAUDE.md, tác giả ghi riêng quy ước triển khai để giảm bớt chỉ dẫn lặp lại
    • Yêu cầu type annotation và docstring cho tham số phương thức lẫn giá trị trả về
    • Việc mô hình hóa dữ liệu được thống nhất theo quy ước Pydantic V2
    • Docstring phải có các phần args và returns theo kiểu Google
    • Test được thống nhất theo phong cách pytest hiện đại, dùng hàm cấp cao, assert và fixture
  • Điểm khởi đầu này được đóng gói thành một git repository

Luồng triển khai MVP

  • Cách làm việc vận hành theo chế độ lập kế hoạch và các vòng lặp ngắn
    • Tác giả ném công việc tiếp theo vào prompt rồi kiểm tra những điểm thiếu sót hay vấn đề trong kế hoạch ban đầu
    • Nếu chệch hướng, tác giả cung cấp thêm liên kết tài nguyên liên quan hoặc, khi có nhiều lựa chọn, yêu cầu công cụ tìm cách làm quen thuộc hơn bằng công cụ tìm kiếm
    • Sau mỗi lượt, tác giả dùng "Accept and clear context" để xóa ngữ cảnh rồi lặp lại
  • Bản triển khai đầu tiên tập trung tạo stub chỉ cho các endpoint JSON kiểu mới từ đặc tả OpenAPI
    • Dù endpoint XML cũ và endpoint JSON mới cùng tồn tại, phạm vi được thu hẹp để chỉ xử lý phần mới
    • Sau khi triển khai, có thêm một bước xác minh để kiểm tra lại toàn bộ phương thức đã đúng chưa
    • Dù đã có đặc tả, lần thử đầu vẫn có lỗi, và phần lớn được bắt ra ở vòng kiểm tra thứ hai
  • Sau những thay đổi lớn, tác giả chạy lại /init để cập nhật CLAUDE.md theo trạng thái mới
  • Bước tiếp theo là xác định và ghép vào tập tính năng tối thiểu cho tìm kiếm và streaming
    • Mục tiêu là mức tối thiểu để có thể kết nối một client Subsonic, tìm bài hát và phát nhạc
    • Tìm kiếm dùng ytmusicapi, còn streaming dùng yt-dlp

Các vấn đề bộc lộ khi kết nối thực tế và cách hiệu chỉnh

  • Một bản triển khai nhìn qua khá thuyết phục xuất hiện rất nhanh, nhưng khi gắn thực tế vào Feishin thì sụp đổ ngay
    • Tác giả kiểm thử trực tiếp bằng client và chuyển log request của server cho Claude Code để sửa lặp đi lặp lại
    • Cũng có những khác biệt chi tiết mà chỉ đặc tả không cho thấy, ví dụ hậu tố .view của endpoint phải được lột bỏ
  • Mỗi khi phát sinh lỗi, tác giả lại viết thêm kiểm thử đơn vị để ngăn hồi quy
  • Chỉ sau vài vòng lặp, âm thanh thực sự bắt đầu phát trong Feishin
    • Vấn đề cốt lõi là các endpoint stub không trả gì cả
    • Phần lớn endpoint cần được đổi sang trả về response đúng cấu trúc, dù nội dung vẫn để trống
  • Tuy vậy, MVP ở mức này không khác quá nhiều so với POC cũ, và tính hữu dụng thực sự vẫn phụ thuộc vào lượng việc đuôi dài phía sau

Công việc đuôi dài và mở rộng toàn bộ tính năng

  • Theo tài liệu OpenSubsonic, API có khoảng 80 endpoint trải trên 15 nhóm
  • Phạm vi cần cho MVP tương đối nhỏ
    • getLicense, getUser, getGenres, getMusicDirectories trả về các collection trống nhưng hợp lệ
    • getSong được xử lý như một pass-through, trả lại nguyên ID từ query parameter và điền các giá trị mặc định
    • search3 được triển khai bằng một lời gọi ytmusicapi đơn giản
    • stream dùng lời gọi yt-dlp được bọc bằng asyncio.to_thread để trích ra URL định dạng "bestaudio"
    • getCoverArt lấy URL ảnh bìa bằng yt-dlp
  • Để hỗ trợ đầy đủ tính năng của client Subsonic, vẫn cần thêm việc
    • Các lời gọi ytmusicapi được thêm bộ nhớ đệm trong bộ nhớ đơn giản để tránh giới hạn sử dụng
    • Tác giả dùng sqlite để lưu metadata nhạc và triển khai toàn bộ endpoint trong nhóm browsing
    • getTopSongs cũng được xử lý bằng cách truy vấn danh sách top songs
  • Trong lúc streaming, bài hát được lưu xuống đĩa để tránh tải lại
    • Nếu client ngắt kết nối endpoint stream trước khi quá trình tải xong, cần thêm xử lý để dọn dẹp file chưa hoàn tất
  • Những việc này vốn dĩ cũng có thể làm thủ công, nhưng là phần mà trước giờ tác giả chưa bao giờ làm xong, và vì không có kế hoạch triển khai công khai nên những phần khó như xác thực vẫn tiếp tục bị bỏ qua
  • Cuối cùng, chỉ trong những khoảng thời gian buổi tối ngắn ngủi, tác giả đã tạo được một dịch vụ hoạt động được mà client Subsonic có thể kết nối tới, và đặt tên dự án là Sub-standard

Nên dùng cho trường hợp nào

  • Thay vì đẩy công cụ hỗ trợ lập trình vào mọi nơi, tác giả vẫn giữ mối lo về sự suy giảm năng lực do lệ thuộc
  • Các dự án cá nhân được chia lớn thành hai nhánh
    • Stretch project để học hỏi và phát triển
    • Dự án mà đơn giản là bạn muốn nó tồn tại
  • Dự án lần này thuộc nhánh thứ hai, và công cụ hỗ trợ lập trình rất hợp để hiện thực hóa điều mong muốn mà bấy lâu chưa thể hoàn thành
    • Tác giả đã thực sự có được một dự án mà bình thường có lẽ chẳng bao giờ động tới, và cảm giác đó giống như giảm bớt được một chồng sách chưa đọc
  • Tiêu chí quan trọng không phải là có làm các dự án thuộc nhánh thứ hai hay không, mà là liệu bạn có tiếp tục song song với các dự án học tập thuộc nhánh thứ nhất hay không

1 bình luận

 
Ý kiến trên Hacker News
  • Dạng dự án bị bỏ dở mà tôi gặp nhiều nhất là game
    Tôi có hàng chục thư mục dự án bị ngưng giữa chừng, và giờ tôi đang chấp nhận lại chúng như những thử nghiệm
    Tuần trước tôi thử khởi động lại một cái với Claude, và nó thực sự rất hợp, còn giúp chỉnh lại hướng đi ngay lập tức
    Vì tôi đã nói trước đó là một dự án từng bị bỏ dở, nên nó thúc tôi hoàn thiện vòng lặp gameplay V0 trước rồi từ đó tìm ra cái vui để mở rộng tiếp, nhờ vậy tôi không bỏ cuộc nữa
    Tôi đưa ý tưởng thiết kế game thì nó viết ra code chạy được, đưa bài báo về thuật toán procedural thì nó triển khai luôn, còn brainstorm item, làm graphic asset, thậm chí hỗ trợ xây dựng lore
    Tổ hợp Claude Code + Godot thực sự rất vui, lâu lắm rồi tôi mới thấy dùng máy tính lại thú vị đến vậy

    • Đây là lần đầu tôi thấy ai gọi LLM là he thay vì it
      Không phải để chỉ trích, nhưng thấy vừa khá thú vị vừa hơi khó chịu
    • Tôi thì ngược lại hoàn toàn
      Tôi từng có hàng chục thư mục thử nghiệm, và giờ khá nhiều trong số đó đang trở thành dự án thật
    • Điều thú vị dạo này là lôi lại các dự án từng bắt đầu bằng agent driven development vài tháng trước hoặc cả năm trước rồi bị kẹt mà bỏ dở, sau đó tiếp tục đẩy chúng đi với Claude hoặc codex mới nhất
      Giờ có cái đã chạy được, cũng có cái vẫn quá phức tạp để agent xử lý
      Dù vậy, việc làm app cá nhân đang ngày càng dễ hơn
      Có lẽ chẳng bao lâu nữa chỉ cần nói kiểu “Alexa, hãy tạo cho tôi một app iPhone chụp ảnh đồ ăn trong tủ lạnh để thu thập thông tin dinh dưỡng, đồng bộ với app tập luyện, đối chiếu với nguyên liệu phù hợp mục tiêu trong app sức khỏe, rồi email cho tôi các nguyên liệu tốt hơn theo ngân sách, khu vực và hạn chế ăn uống” là trong 15 phút sẽ có app
    • Có vẻ Godot không phải công cụ được thiết kế để hợp với LLM
      Ví dụ, tôi từng gặp vài file tres bị sai, và việc để LLM tự sinh ID cũng khá bất ổn
    • Về procedural, tôi cũng đang thử nghiệm đưa LLM vào như một phần của procedural loop
      Kiểu như phủ một lớp tường thuật sống lên trên nó
      Model chạy local vẫn còn chậm và yếu, nhưng xem nó tạo ra kết quả gì vẫn khá thú vị
  • Quá tuyệt vời
    Giờ đây có cực kỳ nhiều phần mềm cá nhân
    Hôm qua tôi vừa làm một trình soạn thảo văn bản native tích hợp hoàn toàn vào MediaWiki, có cả tự động hoàn thành liên kết và hỗ trợ nhập cú pháp
    Loại phần mềm này gần như chẳng có giá trị với ai khác, nên chẳng ai có lý do để làm ngoài tôi, mà trước đây tôi cũng không làm nổi vì tốn quá nhiều thời gian
    Nhưng khi giao phần code cho agent thì nút thắt không còn là triển khai mà là sự chú ý của tôi, và cách nhét những việc cá nhân kiểu này vào các khoảng trống trong đầu lại rất hợp
    Đúng là một thời điểm tuyệt vời

    • Vài tuần trước tôi cuối cùng cũng hoàn thành bản Quake 2 mod bắt đầu từ năm 1998
      Nhờ AI mà tôi vượt qua được burnout sau COVID và đống dự án dở dang chất đống
      Hôm nay tôi cũng sửa xong một công cụ RDP liên quan đến terminal, và đang quay lại xử lý issue đã mở trên OpenRA từ 10 năm trước
      Engine đã nhanh hơn 10 lần và pathfinding giờ nhìn chung cũng hoạt động đúng
    • Thật sự quá lớn
      Tôi có khoảng 120 công cụ cá nhân, và đúng là nút thắt đã chuyển từ triển khai sang chuyển đổi ngữ cảnh
      Vì thế giờ tôi để một file markdown ở mỗi thư mục gốc của dự án, và mỗi khi dừng lại thì ghi trạng thái cùng bước tiếp theo vào đó
      Như vậy lúc quay lại sẽ không mất 20 phút để khôi phục xem “mình đã làm tới đâu rồi?”
      Đằng nào cũng không ai khác dùng, nên chẳng có áp lực xử lý edge case hay tài liệu hóa, chỉ cần giải quyết chính xác vấn đề của tôi rồi chuyển sang cái tiếp theo
    • Tôi tò mò không biết trước đây mình đã sống lâu thế nào mà không có AI
      Nhìn vào vụ bùng nổ năng suất hiện tại, chắc cũng phải mất khá nhiều thời gian mới tích được từng ấy nhu cầu nhỏ
    • Tôi còn làm cả app để lên kế hoạch Scavenger Hunt cho lễ Phục Sinh
      Nghĩ đến độ ngách của nó mà buồn cười
  • Vốn dĩ tôi đã biết code nhưng không có thời gian, và AI là một bước ngoặt thật sự giúp tôi đưa các dự án mã nguồn mở ra thế giới
    Giờ tôi đang rất hào hứng làm các app GUI local cho Linux mà trước đây còn chẳng đủ động lực để bắt tay vào

    • Sambervise: https://github.com/edward-murrell/sambervise
      Đây là app GUI Linux để quản trị từ xa Samba 4 Active Directory Domain Controller
    • Krbtray: https://github.com/edward-murrell/krbtray
      Đây là app system tray GTK3 để quản lý vé Kerberos cho Linux Mint / Cinnamon và các môi trường GTK dùng GtkStatusIcon
    • Cái này thực sự khiến tôi ngả hẳn về AI coding
      Vì cả hai đều đúng kiểu ứng dụng mà tôi từng tìm kiếm và thực sự cần
    • Một thay đổi quan trọng khác là chi phí refactor quy mô lớn đã giảm mạnh
      Nhờ coding assistant, tôi có thể thử các thay đổi cấu trúc sâu, bao gồm cả thiết kế module, trong ít thời gian hơn nhiều so với trước
      Tất nhiên không phải không có cái giá, vì một số model thường tạo ra code không đạt chuẩn về khả năng bảo trì
      Việc tiết kiệm thời gian viết code không có nghĩa là bạn không còn phải mất thời gian sửa đi sửa lại, dọn dẹp, hay bổ sung system prompt và file instruction
  • Tôi không đồng ý lắm với ý lo rằng dùng công cụ quá nhiều sẽ bị deskilling
    Tôi là người thuộc thế hệ millennial, và tôi làm đồ nội thất bằng dụng cụ cầm tay cùng các kiểu ghép gỗ cổ điển
    Tôi không học từ ai cả, chỉ tự học qua tài liệu trên mạng, nhưng cuối cùng vẫn học được những gì mình muốn
    Tôi không sợ sau này mất kỹ năng đó, vì nếu cần thì học lại là xong
    Sách, video, công cụ và gỗ sẽ không biến mất
    Dùng AI không tạo ra một lỗ đen trong não chỉ vì bạn không còn gõ code bằng tay thường xuyên
    Nó không giống Alzheimer khiến bạn mất thông tin vĩnh viễn, chỉ là cần hâm nóng lại một chút rồi sẽ vào guồng rất nhanh
    Những người từng code rồi chuyển sang quản lý, vài năm sau quay lại cũng chỉ hơi rỉ sét thôi rồi lại bắt nhịp được
    Đặc biệt với dự án cá nhân thì chẳng cần phải đốt token Opus
    Cứ dùng gói rẻ với thứ như MiniMax, chạy trong container ở yolo mode, rồi cung cấp context, prompt, web search và hệ thống ticket kiểu beads là được
    Vì đâu có việc gì gấp, nên chỉ cần giữ đúng trình tự brainstorm → plan → implementation → testing, và chuẩn bị sẵn cách test thực tế chứ không chỉ mock hay unit test, thì cuối cùng vẫn có thể hoàn thành trong khi tiết kiệm thời gian lẫn tiền bạc

  • Cách đây 12 năm tôi từng muốn làm một app đơn giản hiển thị ngày/tuần/tháng của mình còn lại bao nhiêu bằng độ dài thanh, đồng thời biểu diễn thời tiết như nhiệt độ cao nhất, thấp nhất và lượng mây cũng bằng thanh
    Tôi làm được phần nào bằng text và ASCII, nhưng không thể tạo ra giao diện đủ tốt để muốn dùng mỗi ngày, và rốt cuộc cũng không làm nổi GUI đồ họa
    Thế là tôi mô tả giao diện đồ họa mình muốn cho Claude Code rồi chạy thử, và nó tạo ra đúng cái app tôi cần, còn tìm ra cả lỗi ở bộ phân tích ngày tháng mà tôi không hề biết
    Giờ tôi luôn để app đó ở một góc màn hình
    Tiếp theo tôi định làm một app iPhone tự động tắt báo thức vào những sáng bọn trẻ không phải đi học
    Tôi hoàn toàn không biết gì về app iPhone và cũng không có thời gian để học, nên trước đây chưa bao giờ dám nghĩ đến
    Với app cá nhân thì Claude Code thật sự rất xuất sắc, và vì chất lượng code không quá quan trọng nên dùng luôn kết quả của nó là đủ tốt

    • Claude Code thật sự rất hợp với app cá nhân
      Trình quản lý clipboard trên Mac mà tôi dùng suốt nhiều năm bắt đầu dở chứng sau một bản cập nhật hệ điều hành, còn các app thay thế trên App Store thì lại thiếu đúng các tính năng tôi muốn
      Thế là sau khi đọc bài về SwiftUI vibe coding của Simon Willison, tôi tự làm bằng Claude Code
      Cần lặp vài lần, nhưng giờ nó chạy trên menu bar của Mac với đầy đủ tính năng tôi muốn và còn hơn thế nữa
      Đặc biệt, khi tôi hỏi CC về ý tưởng tính năng bổ sung, nó đề xuất cả một danh sách dài những tùy chọn tôi chưa từng nghĩ tới, và việc cho nó triển khai luôn những thứ tôi chọn thật sự khá ấn tượng
      Cách đây hai ngày tôi lại muốn có một trình soạn thảo markdown chuyên dụng, giống component chỉnh sửa markdown mới của LibreOffice nhưng nhỏ hơn và nhẹ hơn
      Thế là tôi dùng GPT 5.5 để phác thảo và CC để triển khai, và chỉ sau hai phiên vibe coding thì gần như đã có xong một app Mac native nhẹ, có thể mở/tạo file, chỉnh sửa kiểu word processor, và lưu ra canonical markdown
      Mới chỉ còn thiếu bảng markdown, và hôm nay tôi định để nó làm tiếp phần đó
      https://simonwillison.net/2026/Mar/27/vibe-coding-swiftui/
      https://news.ycombinator.com/item?id=47298885
    • Đúng là vậy
      Tôi thích tự làm mọi thứ, nhưng đôi khi chỉ muốn nhanh chóng có được thành phẩm
      Khi muốn có một công cụ cá nhân phục vụ mục đích cụ thể mà không phải đốt trọn cả cuối tuần, sự hỗ trợ của LLM thực sự rất tuyệt, và chất lượng code cũng không quá quan trọng
    • Thậm chí có khi bạn còn không cần tự làm app
      Trên iPhone, có thể giải quyết bằng ứng dụng Shortcuts mặc định
      Bạn tạo một shortcut tắt toàn bộ báo thức, rồi đọc tín hiệu như lịch để bật tắt báo thức vào ngày hoặc giờ cụ thể, và cho nó chạy theo lịch định kỳ là được
  • Tôi nghĩ side project thường không đáng làm nếu bạn không thật sự muốn làm
    Nếu quá trình và trải nghiệm là chính thì đó là giải trí, còn nếu kết quả là chính thì đó là công việc
    Nếu làm nhiều side project chỉ vì kết quả, thì rốt cuộc bạn đang làm việc trong thời gian rảnh, mà như vậy có thực sự còn là tự do không thì tôi nghi ngờ
    Xã hội hiện đại vốn đã đòi hỏi ở chúng ta quá nhiều kết quả, nên ít nhất side project tôi vẫn muốn giữ lại cho tinh thần
    Tuy vậy, vẫn có thể có ngoại lệ nếu bạn tin vào một mục đích vì lợi ích lớn hơn, và kiểu mục đích đó có thể làm cho chính quá trình cũng trở nên phong phú hơn

    • Tôi có nhiều sở thích, và lập trình chỉ là một trong số đó
      Có những lúc tôi cần phần mềm để làm cho một sở thích khác thú vị hơn, nhưng lại không muốn lấy thời gian của sở thích X để tự viết phần mềm đó
      Hơn nữa, đôi khi loại việc đó cũng không phải kiểu code mà tôi thấy vui
      Đây chính là sweet spot của coding có LLM hỗ trợ đối với tôi, và thực tế tôi đã làm vài app phụ trợ để tận hưởng tốt hơn các sở thích khác
      Vẫn là thời gian cho sở thích, chỉ là sở thích đó không nhất thiết phải là code
    • Nếu bạn code chỉ để được code thì đúng là như vậy
      Nhưng nếu bạn có một itch muốn giải quyết hoặc một hoài bão muốn thực hiện mà trước đây thiếu thời gian hay động lực, thì tôi không hiểu vì sao phải xem nó là lao động trong thời gian rảnh
      Những dự án từng nuốt trọn cuối tuần hay kỳ nghỉ giờ có thể dựng được bộ khung chỉ trong 15 phút, và điều đó còn gần như đối lập với công việc hơn là giống công việc
    • Tôi đồng cảm với góc nhìn này, và thấy đó là một thái độ khá lành mạnh
      Tôi đã lập trình hơn 30 năm, nhưng lúc nào cũng thấy hài lòng với app dòng lệnh, mãi gần đây mới học Qt để gắn UI desktop đúng nghĩa
      Đường cong học tập rất dốc, nhưng giờ tôi cũng đã vượt qua được phần nào
      Nhưng rồi tôi đăng ảnh chụp màn hình ứng dụng lên LinkedIn kèm dòng miễn phí và mã nguồn mở, và lại nhận hàng trăm bình luận từ những kiểu người LinkedIn vốn cũng chẳng định thuê tôi
      Những phản hồi kiểu “chúng tôi muốn tích hợp nó vào workflow của mình” hay “bạn không phải người đầu tiên thử cái này” chẳng hề tạo động lực, ngược lại chỉ khiến tôi có cảm giác mình đang làm lợi cho người khác hoặc nhận về những lời phê bình vô ích
      Tôi bị sốc đến mức buông tay khoảng một tháng, rồi cuối cùng nhận ra thứ mình thích thật ra là chính quá trình học Qt và nhìn những chương trình cũ của mình sống dậy
      Thế là giờ tôi đối xử với nó như project car của riêng mình
      Cứ tiếp tục tháo ra sửa vào, đập đi làm lại hoàn toàn data model để xem ưu nhược điểm của các thiết kế khác nhau, tự làm graphic view, rồi thử thêm cả dịch ngôn ngữ
      Về mặt chức năng thì nó đã xong từ lâu, nhưng tôi có chừng năm phiên bản với cấu trúc bên trong hoàn toàn khác nhau, và đó mới chính là điều vui
      Tôi dùng nó suốt cả ngày trong công việc, và sẽ không bao giờ nhắc đến nó trên LinkedIn nữa
  • Trong repo cá nhân của tôi có tới ba bản thử app ghi chú, và cả ba đều mắc kẹt trong khoảng trống giữa ý tưởng và thời gian rảnh
    Nhưng nhờ Claude Code, tôi đã hoàn thành đúng cái mình thực sự muốn chỉ trong hai tháng
    Bản thân quá trình làm ra nó là sở thích tuyệt nhất tôi từng có, tốt hơn game hay lướt vô tận rất nhiều
    Khi một ý tưởng tôi ấp ủ nhiều năm cuối cùng cũng được phát hành, ứng dụng đó mang một phần con người tôi sâu hơn trong nó, và tôi nghĩ sắp tới sẽ có nhiều solo builder làm ra những thứ như vậy hơn rất nhiều

    • Nhưng ai sẽ mua nó lại là chuyện khác
      Tôi không có ý hạ thấp việc làm lại dự án cũ, nhưng thị trường có khả năng sẽ tràn ngập những dự án cực kỳ chuyên biệt
      Ngày xưa hộp phần mềm còn có bảng thông số kỹ thuật, còn bây giờ có lẽ chúng ta sẽ cần một thứ giống ngôn ngữ mô hình hóa mới để mô tả mục đích sử dụng và phạm vi của chúng
  • Trải nghiệm của tôi cũng gần như y hệt
    Một side project dùng để tổng hợp so sánh đã bị kẹt ở mức hoàn thành 20% hơn một năm, mỗi tháng tôi lại mở nó lên một lần, nhìn danh sách việc cần làm rồi mệt mỏi đóng tab lại
    Nhưng chỉ cần vài cuối tuần ngồi cùng Claude là tôi đã vượt qua được bức tường “nửa vời” đó
    Điều khiến tôi ngạc nhiên không phải tốc độ thuần túy, mà là chi phí tái nhập cuộc biến mất — trước kia, muốn làm gì tiếp thì tôi phải mất cả tiếng nạp lại code cũ của mình vào đầu
    Tôi ghét kiểu hype phóng đại, nhưng phần lớn những người chế giễu các công cụ này có vẻ thật ra chưa từng thử dùng chúng cho những công việc buồn tẻ như vậy để thấy chúng hữu ích đến mức nào

  • Lúc nào tôi cũng có nhiều ý tưởng hơn khả năng gánh vác, và trong số đó có không ít cái khá hay
    Nhờ các công cụ AI, giờ tôi có thể hiện thực hóa được nhiều cái hơn thành thứ ít nhất là chạy tạm ổn
    Trớ trêu là giá trị của kiểu hiện thực hóa đó đang giảm rất nhanh
    Vài tuần trước tôi làm một thư viện tìm kiếm nhỏ chạy trong trình duyệt, không cần server, hỗ trợ phần lớn query kiểu term/matching và aggregation theo phong cách Elasticsearch, còn gắn cả ANN vector search bằng WebGPU
    Gần như cứ “thêm tính năng X đi” là nó có ngay, và tôi đã dùng nó trên vài website thật rồi
    Nó không scale được lớn, nhưng cho blog hay trang tài liệu thì rất ổn, và trang tài liệu ở https://querylight.tryformation.com/
    Nó hoạt động đúng như tôi hình dung, và tôi cảm giác có thể bổ sung thêm cả những tính năng đuôi dài của Elasticsearch mà không phải bỏ quá nhiều công
    Trong khi đó phản ứng trên GitHub lại khá hờ hững
    Giờ ai cũng bận dùng AI để làm thứ của riêng mình nên không còn quá hào hứng với nỗ lực của người khác nữa, và thật ra điều đó cũng dễ hiểu
    Nếu cần thư viện tìm kiếm thì bạn có thể tự sinh ra, hoặc để AI chọn giúp một cái đủ dùng
    Ngay từ đầu thì việc làm ra cái này cũng đâu phải lao động khổng lồ
    Giá trị kinh tế của kiểu dự án này đang giảm rất nhanh
    Dù vậy tôi vẫn tiếp tục vì thích tạo ra mọi thứ, và tôi cũng cho rằng việc làm quen với đường cong học tập của các công cụ này là quan trọng
    Phía trước vẫn còn rất nhiều việc phải làm, nhưng mọi người sẽ mong đợi kết quả ổn với chi phí thấp hơn, và để đáp ứng kỳ vọng đó thì cần thành thạo công cụ
    Cuối cùng, khi phạm vi khả thi mở rộng thì mức chuẩn của tham vọng cũng sẽ tăng theo, nên nếu nghĩ AI sẽ làm thay hết và con người không còn bị kỳ vọng nữa thì đó là một sự lầm tưởng
    Bản thân tôi cũng đã làm việc những khoảng thời gian rất dài trong vài tháng qua

  • Trong nhiều năm, mỗi tuần tôi lại nảy ra vài ý tưởng sản phẩm, nhưng tất cả chỉ nằm trong Apple Notes
    Thế mà chỉ trong một tháng vừa qua, tôi đã biến ba ý tưởng trong số đó thành beta dùng được thật sự, và giờ đang dùng cả ba mỗi ngày