1 điểm bởi GN⁺ 2025-01-12 | 1 bình luận | Chia sẻ qua WhatsApp
  • Nhận thức về hiệu ứng Makefile

    • Hiệu ứng Makefile là hiện tượng không viết một công cụ phức tạp hoặc xa lạ từ đầu, mà sao chép một ví dụ từng hoạt động tốt trước đó rồi chỉnh sửa lại.
    • Hiệu ứng này thường xuất hiện khi nhiều kỹ sư sử dụng các công cụ như Make.
    • Khi trong quá khứ đã có công việc tương tự được thực hiện, kỹ sư sẽ sao chép Makefile cũ rồi sửa cho phù hợp với tình huống mới.
  • Vấn đề và tác động

    • Vấn đề ở giai đoạn thiết kế: công cụ quá phức tạp hoặc bất tiện khi dùng ngay từ đầu.
    • Cấu hình CI/CD: thường sao chép rồi chỉnh sửa cấu hình YAML trong GitHub Actions hoặc GitLab CI/CD.
    • Cấu hình linter và formatter: sao chép các bộ quy tắc mặc định giữa các dự án rồi siết chặt hoặc nới lỏng theo nhu cầu.
    • Hệ thống build: mọi thứ không tầm thường cuối cùng đều trở nên giống với hệ thống build trước đó.
  • Vì sao hiện tượng này quan trọng

    • Thiếu hỗ trợ chẩn đoán và gỡ lỗi: phải chạy công cụ lặp đi lặp lại nhưng thông tin cung cấp lại ít.
    • Cản trở học tập: chỉ một số chuyên gia hiểu rõ công cụ, còn những người khác sao chép rồi chỉnh sửa với lượng kiến thức tối thiểu.
    • Vấn đề bảo mật: công việc bảo mật đòi hỏi kiến thức sâu, và các hệ thống có hiệu ứng Makefile có thể gây ra sự nhầm lẫn giữa mã và dữ liệu.
  • Những điểm cần cân nhắc khi thiết kế công cụ

    • Liệu công cụ có cần khả năng cấu hình hay không.
    • Liệu có cần cú pháp riêng hay không.
    • Liệu có thể tái sử dụng cú pháp hiện có hoặc các thành ngữ quen thuộc hay không.
    • Liệu việc sao chép-dán có thường xuyên xảy ra hay không.
  • Các hiện tượng tương tự hiệu ứng Makefile

    • Tương tự cargo culting hoặc sự bình thường hóa lệch chuẩn, nhưng hiệu ứng Makefile nói về kết quả của một thiết kế cụ thể.
    • Hiệu ứng Makefile về bản chất không hẳn kém hiệu quả hay xấu. Đây là điều cần được nhận thức khi thiết kế công cụ và hệ thống.

1 bình luận

 
GN⁺ 2025-01-12
Ý kiến Hacker News
  • Các hệ thống phức tạp thường phát triển từ những hệ thống đơn giản. Một hệ thống được thiết kế phức tạp ngay từ đầu thường không hoạt động tốt, và nên bắt đầu từ một hệ thống đơn giản

  • Make và Makefile rất đơn giản nếu không được autoconf tự động tạo ra. Nếu được autoconf tạo ra thì đừng chỉnh sửa, và nếu có thể thì tốt nhất là không dùng autoconf. Hãy viết hoặc sao chép một ít mã để dùng cho dự án rồi cải thiện khi cần. Sau đó sao chép đoạn mã đó sang dự án khác để chỉnh sửa, rồi phản ánh các thay đổi trở lại dự án gốc. Qua nhiều dự án, có thể tách nó thành thư viện và công bố mã nguồn mở

  • Khoảng 10% lập trình viên có khả năng bắt đầu một thứ gì đó ngay từ đầu. 40% làm việc bằng cách sao chép và dán mã, còn 50% thì ngoài các câu đố LeetCode ra hầu như không biết gì nhiều. Nhiều Makefile được tạo nên từ việc sao chép và dán

  • Cargo Cult Development là cách phát triển mà người ta không hiểu nguyên lý của công nghệ mà chỉ bắt chước bề ngoài. Đó là cách làm kiểu sao chép, dán, thử nghiệm và tinh chỉnh với hy vọng nó sẽ chạy

  • Makefile có thể là một phép so sánh chưa phù hợp. Nhiều đoạn mã được sao chép từ web có rất nhiều phần không được dùng đến. Xóa bỏ các phần không cần thiết là một thói quen tốt

  • Các công cụ hay hệ thống mà lập trình viên phải tương tác bị xem là không đủ giá trị để học một cách thường xuyên. Những thứ như cấu hình CI được xem là kiểu "cài xong rồi quên", còn phần phức tạp thì đội khác xử lý. Cần cung cấp công cụ và tài liệu phù hợp để lập trình viên có thể dễ dàng tiếp cận

  • Những công cụ như LaTeX thường được dùng không thường xuyên nên nhiều người bắt đầu bằng cách sao chép và dán. Các công cụ ít dùng thì rất khó nhớ

  • Make được tài liệu hóa rất tốt, và nếu người dùng đọc tài liệu thì có thể dễ dàng hiểu được. Tuy nhiên, nhiều công cụ lại thiếu tài liệu, khiến người dùng khó hiểu cách sử dụng

  • Công cụ phức tạp là cần thiết, nhưng nếu hiệu ứng Makefile xuất hiện trong một ứng dụng đơn giản thì điều đó có nghĩa là công cụ đang quá phức tạp. Với các dự án nhỏ, Makefile có thể là lựa chọn phù hợp

  • "Copy-Pasta Driven Development" chỉ ra các vấn đề phát sinh do sao chép và dán mã. Các công cụ như Copilot có thể làm vấn đề này trở nên trầm trọng hơn