Các lập trình viên tranh luận liệu cuộc chiến định dạng code có thể được giải quyết bằng công nghệ thập niên 1980

Nhóm Cộng đồng BigGo
Các lập trình viên tranh luận liệu cuộc chiến định dạng code có thể được giải quyết bằng công nghệ thập niên 1980

Một bài blog gần đây đã khơi lại những cuộc thảo luận sôi nổi về một trong những vấn đề dai dẳng nhất của lập trình: tranh cãi về định dạng code. Tác giả nhớ lại cách thầy giáo khoa học máy tính của họ đã đề cập rằng vấn đề này thực sự đã được giải quyết từ hàng thập kỷ trước bằng một hệ thống gọi là DIANA , lưu trữ code dưới dạng biểu diễn trung gian thay vì văn bản thuần túy.

Phản ứng của cộng đồng lập trình cho thấy sự chia rẽ sâu sắc về việc liệu theo đuổi những giải pháp như vậy có đáng giá hay chỉ đơn giản tạo ra nhiều vấn đề hơn là giải quyết.

Các tính năng của hệ thống DIANA (thập niên 1980)

  • Lưu trữ mã dưới dạng biểu diễn trung gian thay vì văn bản thuần túy
  • Cho phép mỗi lập trình viên cá nhân hóa tùy chọn định dạng
  • Hỗ trợ biên dịch tăng dần và tái cấu trúc nhanh chóng
  • Được sử dụng trong máy trạm Rational R1000 để phát triển Ada
  • Cho phép chỉnh sửa AST trực tiếp (chỉnh sửa phép chiếu)

Ưu thế của văn bản thuần túy vẫn là vua

Nhiều lập trình viên cho rằng việc rời xa văn bản thuần túy sẽ phá vỡ những công cụ cơ bản giúp phát triển phần mềm hiện đại hoạt động. Triết lý Unix về các công cụ dựa trên văn bản có thể kết hợp như grep, diff và sed đã chứng minh độ bền vượt trội. Những công cụ này hoạt động trên mọi nền tảng và ngôn ngữ lập trình, tạo ra một nền tảng phổ quát mà các lập trình viên dựa vào hàng ngày.

Mối lo ngại là các định dạng chuyên biệt sẽ khóa các nhóm vào các IDE hoặc toolchain cụ thể, giảm tính linh hoạt và làm cho các tác vụ đơn giản trở nên phức tạp hơn. Một lập trình viên chỉ ra rằng ngay cả khi bạn có thể tìm kiếm biểu diễn trung gian, bạn sẽ cần chạy các formatter theo chiều ngược lại chỉ để biết phải tìm kiếm gì, điều này hoàn toàn đánh bại mục đích.

Các lập luận chống lại việc lưu trữ code dựa trên IR

  • Phá vỡ khả năng tương thích với các công cụ Unix phổ biến (grep, diff, sed)
  • Yêu cầu công cụ chuyên biệt và bị khóa vào IDE
  • Tăng thêm độ phức tạp mà lợi ích tối thiểu
  • Quản lý phiên bản và patch trở nên khó khăn hơn
  • Văn bản thuần túy vẫn là định dạng dễ chuyển đổi và dễ tiếp cận nhất

Vấn đề Bikeshedding vẫn tồn tại

Bất chấp những thách thức kỹ thuật, sự thất vọng với các cuộc tranh luận về định dạng vẫn có thật. Cộng đồng rộng rãi thừa nhận rằng tranh cãi về phong cách code thường là bikeshedding không hiệu quả - tập trung vào những chi tiết tầm thường trong khi bỏ qua công việc quan trọng hơn.

Tôi quá bận rộn với việc kỹ thuật phần mềm thực sự để quan tâm đến việc chính xác mọi thứ được đặt ở đâu - tôi hứa sau một tuần bạn sẽ quen với bất kỳ định dạng nào mà nhóm của bạn quyết định.

Các ngôn ngữ hiện đại như Go đã cố gắng giải quyết điều này bằng cách đưa ra quyết định định dạng ở cấp độ cú pháp và cung cấp các formatter có quan điểm như gofmt. Mặc dù không phải ai cũng yêu thích những lựa chọn cụ thể, hầu hết lập trình viên đều đánh giá cao việc có quyết định được đưa ra cho họ.

Các Giải Pháp Định Dạng Code Hiện Đại

  • Go: gofmt cung cấp định dạng có quan điểm rõ ràng và phổ quát
  • Python: Trình định dạng Black loại bỏ hầu hết các lựa chọn định dạng
  • JavaScript: Các cấu hình Prettier và ESLint chuẩn hóa phong cách code
  • Unison: Chỉ lưu trữ AST, tương tự như cách tiếp cận DIANA
  • Chrome DevTools: Làm đẹp code đã được minify theo yêu cầu

Mối quan tâm về khả năng tiếp cận và typography

Cuộc thảo luận không hoàn toàn về sở thích cá nhân. Một số lập trình viên đã nêu ra mối quan tâm về khả năng tiếp cận, lưu ý rằng một số lựa chọn định dạng nhất định có thể thực sự ảnh hưởng đến khả năng đọc đối với những người có nhu cầu khác nhau. Những người khác lập luận rằng định dạng code phục vụ mục đích typography, giúp truyền đạt ý nghĩa và cấu trúc mà các công cụ tự động có thể bỏ lỡ.

Điều này làm tăng thêm sự phức tạp cho ý tưởng rằng tất cả định dạng chỉ đơn thuần là sở thích chủ quan có thể được trừu tượng hóa.

Thí nghiệm hiện đại và giải pháp từng phần

Một số lập trình viên đề cập rằng những mảnh ghép của tầm nhìn này đã tồn tại. Chrome DevTools có thể làm đẹp JavaScript đã được minify theo yêu cầu. Một số nhóm sử dụng Git hooks để áp dụng các quy tắc định dạng khác nhau cục bộ so với từ xa. Ngôn ngữ lập trình Unison thực sự chỉ lưu trữ cây cú pháp trừu tượng, tương tự như cách tiếp cận DIANA .

Tuy nhiên, những giải pháp này vẫn là các giải pháp ngách thay vì được áp dụng rộng rãi, cho thấy các rào cản thực tế vẫn còn đáng kể.

Cuộc tranh luận làm nổi bật một căng thẳng cơ bản trong phát triển phần mềm giữa sự tinh tế của các giải pháp lý thuyết và thực tế lộn xộn khi làm việc với các công cụ và quy trình làm việc hiện có. Trong khi hệ thống DIANA thập niên 1980 đã giải quyết cuộc chiến định dạng cho người dùng của nó, sự phát triển phụ thuộc đường dẫn của các công cụ phát triển hiện đại khiến các cách tiếp cận tương tự trở nên khó thực hiện ngày nay.

Lưu ý: DIANA ( Descriptive Intermediate Attributed Notation for Ada ) là một biểu diễn trung gian có cấu trúc cây được sử dụng trong môi trường phát triển Ada , đặc biệt là hệ thống Rational R1000 .

Tham khảo: Formatting code should be unnecessary