26 điểm bởi GN⁺ 2025-01-08 | 8 bình luận | Chia sẻ qua WhatsApp
  • Làm việc trong các codebase quy mô lớn là một trong những việc khó nhất đối với kỹ sư phần mềm. Rất khó có được trải nghiệm này thông qua các dự án cá nhân hay dự án mã nguồn mở
    • Hàng triệu dòng code, 100-1000 kỹ sư cùng làm việc đồng thời, codebase đã tồn tại ít nhất hơn 10 năm
    • Đòi hỏi một năng lực riêng để hiểu được trạng thái tích lũy của độ phức tạp và thời gian

Sai lầm lớn nhất là thiếu tính nhất quán

  • Sai lầm phổ biến nhất là phớt lờ codebase hiện có và tự triển khai chức năng theo cách riêng. Điều này làm mất tính nhất quán và khiến codebase càng hỗn loạn hơn
    • Thông thường họ cố giảm tối đa việc tương tác với codebase hiện có để giữ cho phần code của mình “sạch sẽ”, đồng thời tự triển khai độc lập để tránh phần code “legacy” sẵn có
  • Tính nhất quán giúp giảm độ phức tạp của codebase và khiến các đợt cải tiến trong tương lai trở nên dễ dàng hơn
  • Ví dụ, khi triển khai API endpoint, điều quan trọng là phải làm theo phương thức xác thực hiện có. Điều này giúp bạn đi qua bãi mìn của codebase một cách an toàn
  • Nếu không có các pattern nhất quán, mọi đoạn code sẽ phải được cập nhật thủ công, và việc này sẽ ngày càng khó hơn

Các yếu tố quan trọng khác

  • Hiểu cách dịch vụ thực sự được sử dụng
    • Xác định các API endpoint chính được dùng thường xuyên nhất và các đường đi quan trọng (hot path)
    • Cần xử lý cẩn trọng với các thay đổi trong phần code được sử dụng nhiều
  • Tầm quan trọng của kiểm thử và giám sát
    • Trong các dự án lớn, không thể kiểm thử mọi trạng thái nên chỉ kiểm thử các đường đi chính
    • Viết code theo hướng phòng thủ và dựa vào triển khai dần dần cùng giám sát
  • Hạn chế thêm dependency
    • Dependency gây ra vấn đề bảo mật và làm tăng chi phí bảo trì
    • Nếu thực sự cần thiết, hãy chọn dependency đáng tin cậy
  • Xóa code một cách thận trọng nhưng chủ động
    • Phân tích dữ liệu production để loại bỏ các lệnh gọi một cách an toàn rồi mới xóa code
    • Loại bỏ code không cần thiết sẽ giúp codebase dễ bảo trì hơn
    • Đây là một trong những công việc có giá trị nhất trong codebase quy mô lớn
  • Làm việc với PR nhỏ và xử lý trước các thay đổi ảnh hưởng đến code của đội khác
    • Điều này giúp các chuyên gia miền nghiệp vụ phát hiện vấn đề và ngăn ngừa sự cố

Vì sao codebase quy mô lớn lại quan trọng?

  • Giá trị của codebase quy mô lớn
    • Phần lớn các công ty công nghệ tạo ra doanh thu từ các codebase quy mô lớn
    • Làm việc với “codebase legacy” chính là công việc thực tế của công ty
  • Cần hiểu trước khi tách code
    • Muốn tách một codebase quy mô lớn, trước hết phải hiểu đầy đủ cách toàn bộ hệ thống vận hành
    • Không thể tái thiết kế ở quy mô lớn nếu không có sự hiểu biết đó

Tóm tắt

  • Codebase quy mô lớn mang giá trị kinh doanh quan trọng
  • Điều quan trọng nhất là duy trì tính nhất quán
  • Trước khi triển khai tính năng mới, hãy nghiên cứu code hiện có và làm theo các pattern sẵn có
  • Nếu không làm theo pattern hiện có, bạn phải có lý do thật sự thuyết phục
  • Hãy hiểu code được sử dụng như thế nào trong môi trường production
  • Vì không thể kiểm thử mọi trường hợp, đừng phụ thuộc quá mức vào kiểm thử mà hãy dựa vào giám sát và triển khai dần dần
  • Chủ động tận dụng các cơ hội xóa code nhưng phải xử lý cẩn trọng
  • Làm việc theo các PR nhỏ để các chuyên gia miền nghiệp vụ có thể review

8 bình luận

 
kallare 2025-01-10

Tính nhất quán đúng là quan trọng, nhưng vì thế mà trì hoãn việc cải thiện code hoặc tiếp tục lặp lại những pattern sai sẵn có thì cũng không phải cách hay... đúng là một vấn đề khó. Vì nếu cố giữ sự nhất quán, có khi lại thành ra tiếp tục tích lũy cùng một khoản technical debt.

 
regentag 2025-01-09

Hơn bất cứ điều gì khác, phải tuân thủ các quy tắc viết mã.
Đặc biệt là quy tắc thụt lề...

 
roxie 2025-01-10

Bạn đang ở trong một lĩnh vực mà không thể áp dụng tooling có thể tự động bắt lỗi sao..? hu hu

 
regentag 2025-01-10

Vâng.... hu hu

 
roxie 2025-01-10

Tôi khóc giúp bạn đây.. hu hu hu hu hu hu hu hu

 
bbulbum 2025-01-09

Quy mô của dự án != độ trưởng thành của nó
Tôi đồng ý rằng tính nhất quán là cực kỳ quan trọng, nhưng tôi cho rằng không nên lấy դա làm cái cớ để hạ thấp mức độ ưu tiên của việc cải thiện codebase.
Vì dự án luôn sống, luôn vận động và tiếp tục phát triển, nên nếu không thể cải thiện vào thời điểm thích hợp thì sẽ cần nhiều thời gian và công sức hơn để xoay chuyển lại điều đó sau này.

 
beoks 2025-01-09

Tôi cũng đồng ý. Tôi đang làm việc với một dự án đã hơn 20 năm tuổi, nhưng có rất nhiều phần thực sự còn non nớt so với hiện tại.
Tính nhất quán có ưu điểm là có thể nâng cao khả năng hiểu mã nguồn, nhưng vì giới hạn của cấu trúc sẽ dẫn đến giới hạn của tính năng và kìm hãm sự phát triển của dịch vụ, nên tôi nghĩ đôi khi cũng cần những đợt cải tổ mạnh tay.

 
GN⁺ 2025-01-08
Ý kiến trên Hacker News
  • Khi một codebase hiện có thiếu tính nhất quán, điều quan trọng là đưa vào cách làm mới, tài liệu hóa nó và nhận phản hồi. Cần cố gắng duy trì tính nhất quán với mã hiện có.

    • Ngay cả khi mã hiện có tệ, vẫn quan trọng là làm việc theo cách nhất quán với phần mã xung quanh.
    • Nếu các thành viên trong nhóm không hợp tác, việc nhấn mạnh các vấn đề của mã hiện có và giải thích rằng cách tiếp cận mới chỉ mang tính thử nghiệm sẽ hữu ích.
  • Cần dùng các công cụ của codebase hiện có, nhưng việc xây dựng một codebase mới có thể thú vị hơn.

    • Codebase càng bị kết dính chặt thì việc thay đổi càng khó, và nếu thiếu độ bao phủ kiểm thử thì có thể phát sinh vấn đề.
  • Để chia nhỏ một codebase lớn, trước hết cần phải hiểu nó; nếu một nhóm thiếu kinh nghiệm thử làm điều này thì khả năng thất bại rất cao.

    • Nếu một nhóm mới không hiểu hệ thống hiện có, dự án có thể thất bại.
  • Có nhiều nỗ lực cải thiện một cách ngẫu nhiên trong các codebase lớn.

    • Điều quan trọng là tìm ra phần cần cải thiện và đánh giá phần nào thực sự tạo ra tác động tích cực.
    • Quan trọng là biết phần nào cần cải thiện và biết khi nào nên dừng lại.
  • Việc duy trì sự tiến hóa của codebase là khó.

    • Tính nhất quán tuyệt đối không cho phép thử nghiệm, mà không có thử nghiệm thì cũng không có thành công.
  • Nếu codebase lớn và thiếu nhân lực, sẽ mất nhiều thời gian để người mới đạt được năng suất.

    • Làm việc trong môi trường như vậy có thể không tốt cho sự nghiệp.
  • Giữ codebase gọn gàng có nghĩa là chỉ làm lượng công việc tối thiểu cần thiết để phát hành tính năng.

    • Đây có thể là một lựa chọn chiến thuật của những kỹ sư khôn khéo về mặt chính trị, với mục tiêu là phát hành tính năng.
  • Tính nhất quán không phải là điều quan trọng nhất, và việc cải thiện từng phần của codebase là điều tốt.

    • "Phản mẫu tầng dung nham" có thể tạo ra một hệ thống tốt hơn so với việc cố duy trì tính nhất quán.
  • Câu nói "thiếu nhất quán là một sai lầm chí mạng" là đúng 100%.

    • Theo triết lý "đến Rome thì làm như người Rome".
  • Ba châm ngôn của người kỹ sư:

    • rõ ràng, nhất quán, ngắn gọn
    • đặt nỗi đau đúng chỗ
    • chiến đấu với entropy