36 điểm bởi GN⁺ 2025-01-08 | 1 bình luận | Chia sẻ qua WhatsApp
  • Bài viết tóm tắt trải nghiệm lập trình với LLM (mô hình ngôn ngữ lớn) trong 1 năm qua
  • LLM đã giúp tăng năng suất, và rất khó quay lại cách lập trình không dùng chúng
  • Tác giả chủ yếu tập trung vào môi trường lập trình Go và đang phát triển một công cụ tên là sketch.dev

Bối cảnh

  • Bắt đầu từ sự tò mò với công nghệ mới.
  • Bị cuốn hút bởi khả năng của LLM trong việc tạo ra các câu trả lời phức tạp cho câu hỏi hoặc viết mã lập trình
  • Mang lại cảm giác hứng thú và tiềm năng tương tự như khi Internet mới xuất hiện
  • Nhận ra lợi ích ròng khi công cụ tạo ra đoạn mã “hầu như đúng”, và nỗ lực đưa điều đó vào sử dụng thực tế

Các trường hợp sử dụng chính

  1. Tự động hoàn thành (Autocomplete)

    • Tăng năng suất bằng cách xử lý các tác vụ lập trình lặp đi lặp lại bằng tự động hoàn thành
    • Đặc biệt, các mô hình FIM (Fill-In-the-Middle) là thiết yếu cho công việc hằng ngày
  2. Thay thế tìm kiếm (Search)

    • Trả lời chính xác hơn công cụ tìm kiếm cho các câu hỏi lập trình cụ thể (ví dụ: thiết lập độ trong suốt của nút trong CSS)
    • Câu trả lời của LLM có thể sai, nhưng tác giả chấp nhận giới hạn đó và vẫn sử dụng
  3. Lập trình dựa trên hội thoại (Chat-driven Programming)

    • Đây là lĩnh vực khó nhất nhưng cũng có giá trị nhất.
    • Thay người dùng thực hiện các công việc ban đầu như tạo file mới, tìm kiếm thư viện.
    • Mục tiêu của lập trình hội thoại là giảm bớt sự bất tiện hiện tại và biến năng lực của LLM thành thứ thân thiện hơn với người dùng

Cốt lõi của lập trình hội thoại

  • Vì sao dùng hội thoại?

    • Hữu ích để tạo bản nháp đầu tiên khi năng lượng giảm dần sau một ngày làm việc
    • Xem rồi chỉnh sửa bản nháp ban đầu hiệu quả hơn so với viết từ đầu
  • Cách làm việc với LLM

    1. Đặt mục tiêu công việc rõ ràng và ngắn gọn
    2. Đọc, kiểm chứng và chỉnh sửa mã
    3. Tận dụng lỗi trình biên dịch để giải quyết vấn đề nhanh chóng
  • Viết kiểm thử hiệu quả

    • LLM rất nhiệt tình trong việc viết kiểm thử và có thể xây dựng môi trường kiểm thử kỹ lưỡng hơn
    • Có thể mở rộng từ kiểm thử dựa trên ví dụ sang cả fuzz test

Ví dụ: bộ lấy mẫu phân vị

  • Mục tiêu: Viết một thuật toán bằng Go để lấy mẫu các tứ phân vị của luồng dữ liệu
  • Quy trình
    1. Dùng LLM để viết bản nháp đầu tiên
    2. Cải thiện mã trong khi sửa lỗi biên dịch
    3. Viết lại mã kiểm thử để tạo cấu trúc dễ đọc hơn

Khả năng của cấu trúc mã mới

  • Nhiều package nhỏ hơn, nhiều kiểm thử hơn

    • Package nhỏ cung cấp ngữ cảnh mã rõ ràng hơn, hữu ích hơn cho cả LLM và con người
    • Tăng khả năng kiểm thử độc lập và biên dịch
  • Ví dụ: API wrapper

    • Khuyến nghị dùng wrapper mỏng chỉ triển khai phần cần thiết thay vì thư viện chính thức quy mô lớn
    • Giảm chi phí bảo trì và học tập

Hướng đi tương lai: sketch.dev

  • Go IDE cho LLM
    • Cung cấp môi trường lập trình lấy LLM làm trung tâm
    • Hỗ trợ phản hồi kiểm thử tự động, sửa lỗi trình biên dịch, tích hợp Go module, v.v.
    • Tăng cường hợp tác giữa con người và LLM để tạo ra môi trường làm việc hiệu quả hơn

1 bình luận

 
GN⁺ 2025-01-08
Ý kiến Hacker News
  • Tác giả vốn đã là một kỹ sư phần mềm đẳng cấp thế giới, từng làm ở Google và là đồng sáng lập/CTO của Tailscale. Điều đáng ấn tượng là LLMs khiến ông ấy làm việc hiệu quả hơn.

    • LLMs hữu ích khi phác thảo các ý tưởng mới.
    • Trước đây ông ấy lấy cách triển khai từ cơ sở dữ liệu, còn hiện tại LLMs tạo ra chúng theo thời gian thực.
  • LLMs giúp giảm năng lượng khởi đầu cho công việc.

    • Giảm rào cản khi thử những điều mới.
    • Không có chiều sâu ở mức con người, nhưng có kiến thức rất rộng.
    • Hữu ích cho những người làm nhiều loại lập trình khác nhau.
  • Khi dùng LLMs, chỉ nên dùng trong những lĩnh vực mà bản thân hiểu rõ.

    • Chỉ tiết kiệm thời gian khi có thể dễ dàng nhận ra phần nào sai.
    • Có ích cho việc tìm kiếm.
  • LLMs có tiềm năng như một công cụ phát triển phần mềm.

    • sketch.dev đưa ra ví dụ gọn gàng ngay từ lần thử đầu tiên.
    • Cần những LLMs được huấn luyện bám sát tài liệu chính thức của ngôn ngữ.
    • Việc nhân hóa LLMs gây khó chịu.
  • Tương tự như việc dùng công cụ tìm kiếm.

    • Việc dùng đúng từ khóa là rất quan trọng.
  • Cảm thấy không có nhiều thôi thúc phải dùng LLMs.

    • Thích tận hưởng quá trình tự tay viết mã.
    • LLMs có thể làm tăng chi phí.
  • Với người không phải lập trình viên, LLMs là trợ giúp rất lớn.

    • Rút ngắn đáng kể thời gian viết mã.
    • Hữu ích cho các dự án cá nhân.
  • LLMs hữu ích trong việc viết các ứng dụng đơn giản.

    • Chỉ cần mô tả sản phẩm khả dụng tối thiểu là có thể sinh mã.
    • Nợ kỹ thuật có thể tích tụ rất nhanh.
  • Với những người lập trình như một sở thích, LLMs cũng rất hữu ích.

    • Giúp thiết lập cấu trúc dự án và sinh mã.
    • Tuy nhiên, các chỉ dẫn mơ hồ có thể gây ra vấn đề.
  • LLMs chủ yếu được dùng cho tự động hoàn thành và tìm kiếm.

    • ChatGPT hữu ích trong việc tối ưu hóa mã hiện có.