- Trong văn hóa phát triển phần mềm hiện đại, tên của các dự án và thư viện ngày càng bị lấp đầy bởi những từ ngữ tùy ý không liên quan đến chức năng
- Trước đây, các tên như grep, awk, sed, FORTRAN, COBOL trực tiếp mô tả chức năng hoặc mục đích, nhưng gần đây những cái tên vô nghĩa lại tràn lan
- Xu hướng này tăng tốc cùng với sự lan rộng của GitHub và văn hóa startup, khiến mối liên hệ giữa tên gọi và chức năng gần như bị cắt đứt hoàn toàn
- Chi phí để hiểu và gánh nặng nhận thức tăng lên, buộc các lập trình viên phải lặp đi lặp lại việc tìm hiểu không cần thiết để nắm được vai trò của từng công cụ
- Bài viết kêu gọi khôi phục quy tắc đặt tên rõ ràng và xoay quanh chức năng, đồng thời nhấn mạnh rằng với các công cụ kỹ thuật, sự minh bạch và tính chuyên nghiệp phải được ưu tiên hơn thương hiệu
Sự thay đổi trong cách đặt tên phần mềm
- Richard Stallman trong bài nói chuyện tại EmacsConf 2022 đã nhắc đến tầm quan trọng của “những cái tên dễ nhớ”, đồng thời nhấn mạnh rằng tên gói nên cho thấy nó làm gì
- Hệ sinh thái Emacs từ lâu đã duy trì truyền thống đặt tên dựa trên chức năng như dired(trình chỉnh sửa thư mục), eshell(shell của Emacs)
- Tuy nhiên, các nhà phát triển hiện đại lại có xu hướng đặt tên công cụ bằng danh từ ngẫu nhiên, sinh vật thần thoại, nhân vật hư cấu
- Ở các lĩnh vực kỹ thuật khác, đây sẽ bị xem là thiếu tính chuyên nghiệp
Vấn đề của những cái tên vô nghĩa
- Ví dụ, các tên công cụ như “Viper”, “Cobra”, “Melody”, “Casbin”, “Asynq” không cho phép suy ra chức năng của chúng
- Tác giả nhắc đến trải nghiệm đã phải đi tìm kiếm trên mạng mới hiểu được lời giải thích về hạ tầng của một người bạn
- Trong các ngành kỹ thuật khác, tên gọi thường mô tả cấu trúc hoặc chức năng
- Ví dụ: Golden Gate Bridge, Hoover Dam, I-beam, butterfly valve đều thể hiện rõ hình dạng hoặc vai trò
- Cũng như quy tắc đặt tên IUPAC trong hóa học, tên gọi được quy định để chỉ chính xác một đối tượng
- Ví dụ: 2,2,4-trimethylpentane chỉ đúng một phân tử duy nhất, chứ không bị gọi tùy tiện là “Steve”
Quy tắc đặt tên trong quá khứ và sự đứt gãy hiện tại
- Trong thập niên 1980, các từ viết tắt dựa trên chức năng như grep, awk, sed, cat, diff là xu hướng chủ đạo
- Tên các ngôn ngữ lập trình như FORTRAN, COBOL, BASIC, SQL, Lisp cũng phản ánh mục đích sử dụng
- Từ sau thập niên 2010, sự lan rộng của các tên gọi vô nghĩa bắt đầu bùng lên
- Một số cái tên như MongoDB vẫn còn liên hệ về chức năng hay từ nguyên, nhưng sau đó trong bối cảnh GitHub và văn hóa startup, những tên vô nghĩa tăng mạnh
- Nguyên nhân được cho là xu hướng bắt chước các câu chuyện thành công thiên về thương hiệu như Google
Chi phí nhận thức và sự suy giảm hiệu quả phát triển
- Những cái tên như libsodium khiến việc suy đoán chức năng trở nên khó khăn, buộc lập trình viên phải liên tục chuyển đổi ngữ cảnh
- Thời gian bị tiêu tốn vô ích để tự hỏi “tại sao lại là sodium?”
- Càng có nhiều phụ thuộc dự án, loại thuế nhận thức(cognitive tax) này càng tích lũy
- Điều đó dẫn đến suy giảm năng suất của lập trình viên
- Tác giả chỉ ra rằng khi xử lý những câu như “Viper, Cobra, Melody…”, tài nguyên tinh thần bị lãng phí vào việc giải mã các token vô nghĩa
Những phản biện thường gặp và câu trả lời
- “Tên dễ nhớ có lợi cho marketing” → công cụ dành cho lập trình viên không phải là sản phẩm tiêu dùng, nên sự rõ ràng về chức năng quan trọng hơn
- “Tên mô tả thì nhàm chán” → sự nhàm chán là cái giá có thể chấp nhận để đổi lấy tính rõ ràng; dụng cụ phẫu thuật cũng nhàm chán nhưng chính xác
- “Đặt vậy cho vui thôi” → mọi người dùng đều phải trả giá cho cái ‘vui’ đó, và nó dẫn đến lãng phí thời gian trên toàn ngành
- “Tên hay thì đã bị dùng hết rồi” → có thể giải quyết bằng namespace, tiền tố, từ ghép; ít nhất vẫn nên chọn tên có liên quan đến chức năng
Hướng đi phía trước
- Vấn đề này được giải thích là kết quả của một thay đổi văn hóa hơn là ác ý
- Khi lập trình chuyển từ môi trường doanh nghiệp sang môi trường cộng đồng, chuẩn mực xã hội bị suy yếu
- Giải pháp là khôi phục văn hóa đặt tên
- Thay vì quy định cứng, cần cải thiện thông qua khôi phục tính chuyên nghiệp, giáo dục và áp lực xã hội
- Tên thư viện nên phản ánh chức năng, và nếu cần thì từ ghép hay cách diễn đạt dài dòng cũng nên được chấp nhận
- Ví dụ: “http-request-validator” rõ ràng hơn nhiều so với “zephyr”
- Tách biệt mascot với tên gọi
- Ví dụ: PostgreSQL dùng mascot voi Slonik, nhưng bản thân tên gọi vẫn giữ được ý nghĩa chức năng
- Nếu không phải là sản phẩm tiêu dùng cần branding mạnh, thì nên ưu tiên sự minh bạch và tính chuyên nghiệp
- Trước khi đặt theo “tên nhân vật anime bạn thích”, hãy tự hỏi “một kỹ sư xây dựng có đặt tên như vậy cho hệ thống cầu đường không?”
- Kết luận lại, cần chấm dứt sự tràn lan của các tên gọi vô nghĩa và quay lại với ngôn ngữ chuyên môn rõ ràng
- Sự rõ ràng không phải là nhàm chán, mà là sự tôn trọng đối với thời gian và nguồn lực nhận thức của người dùng
7 bình luận
Ngay cả
Awkcũng khó mà xem là một cái tên dựa trên chức năng....Nếu không đưa ví dụ vào thì chắc sức thuyết phục đã tăng thêm khoảng 10%..
Tôi cũng đồng ý ở một mức độ nào đó, nhưng có vẻ là họ không muốn bị căng thẳng vì phải đặt tên.
Tên dùng được thì đã có ai đó dùng hết rồi
Có ai biết
emacsnghĩa là gì không? Dù đúng là nó có ý nghĩa, nhưng mấy cái tên viết tắt thì nhìn qua cũng chẳng thể biết được, mà đã là tên thì… Với lại giờ chỉ đặt tên theo chức năng thôi thì cũng đã có quá nhiều dự án rồi.Nhìn kiểu đổ lỗi cho GitHub thì đúng là kiểu công kích gượng ép theo phong cách RMS thôi haha
Ý kiến trên Hacker News
Phiên bản GNU của Yacc được gọi là Bison. Pine là viết tắt của “Pine Is Not Elm”, và UNIX bắt nguồn từ UNICS, một cách chơi chữ từ MULTICS. Không rõ dd nghĩa là gì, nano là bản sao của pico, còn Postfix là từ ghép giữa ‘post’ và ‘bug fix’. C++ là phiên bản tăng dần của C, C là hậu duệ của B, còn B là hậu duệ của BCPL. Thực ra không phải các lập trình viên đã đánh mất ‘triết lý đặt tên’, mà là ngay từ đầu vốn đã không có thứ đó. Ngược lại, tôi nghĩ các dự án hiện đại như Clang, LLDB, jq, fzf, loc là ví dụ về tên hay. mise-en-place cũng là một ẩn dụ hoàn hảo cho chức năng của mise
key=value, khá không giống UNIXCác lệnh UNIX như grep, awk, sed, cat, diff có những cái tên mang tính chức năng hoặc hệ thống, nhưng thực ra chỉ có diff là còn đoán được trực giác. Gọi awk là một cái tên hay thì hơi quá lời
-libertyTôi phản bác lập luận rằng “kiểu đặt tên như vậy trong lĩnh vực kỹ thuật là tự sát sự nghiệp”. Nhìn vào danh sách mật danh của Bộ Quốc phòng Mỹ, có thể thấy rất nhiều tên cố ý mơ hồ. Hoover Dam ban đầu cũng được gọi là Boulder Canyon Project, và cái tên đó đâu có mô tả chức năng. Liệu Reitzlib có phải tên tốt hơn Requests không? Cuối cùng tên gọi còn tùy ngữ cảnh
Những cái tên như awk thật ra không phải tên hay. Nó chỉ là chữ cái đầu tên tác giả, hoàn toàn không truyền tải chức năng. Bây giờ đã có tự động hoàn thành bằng tab, nên cũng chẳng cần phải rút ngắn quá mức
Tôi đồng cảm với bài phản biện này. Các định danh bên ngoài sẽ đổi nghĩa theo thời gian, nên những cái tên mô tả quá chính xác từ đầu thường không bền. Hơn nữa, những cái tên như “X Manager”, “X Service” quá nhiều đến mức khó phân biệt
Tôi từng làm kỹ sư hiệu chỉnh động cơ tại một OEM ô tô, nơi mọi biến và hàm đều là từ viết tắt. Tháng đầu tiên mệt đến mức như muốn nổ tung đầu óc. Cuối cùng một đồng nghiệp nói “việc này giống như học một ngôn ngữ mới”, và đúng là như vậy. Tức là, nhiều tên kỹ thuật hơn không có nghĩa là giảm tải nhận thức
Tôi khó đồng ý với quan điểm “tên mang tính chức năng tốt hơn marketing”. Những cái tên dựa trên chức năng cuối cùng tạo ra một biển từ viết tắt vô tận. Sẽ có những tình huống nhầm ABDC với ADBC
Tôi ngạc nhiên khi HN có bài kiểu này. Lấy những cái tên như awk làm ví dụ rồi bảo “đã đánh mất bản chất của việc đặt tên” là mâu thuẫn. Rốt cuộc nó có vẻ chỉ là sự ác cảm cá nhân với những cái tên dễ thương. Nhân tiện, bình luận này được viết trên Firefox — chỉ nhìn tên thì không thể biết đó là trình duyệt web
Trước lập luận “tên mang tính mô tả thì nhàm chán”, các dụng cụ trong phòng mổ thật ra cũng thường được đặt theo tên người. Adson, Allis, Babcock, Kocher là những cái tên hoàn toàn không mô tả chức năng. Cuối cùng, quen rồi thì tên nào cũng có ý nghĩa. awk thì không hay lắm, nhưng diff là ví dụ ổn
Với ý kiến “lĩnh vực của chúng ta giống như một sở thú của những danh từ ngẫu nhiên”, tôi thì thích những cái tên vui vẻ. Dự án Wimsey của tôi là một thư viện kiểm thử dữ liệu, nhưng chỉ nhìn tên thì không biết được. Dù vậy, tôi thích những cái tên có tình cảm và sự hài hước như Python, Cron, Zellij. Công nghệ rốt cuộc do con người tạo ra, và cần có niềm vui. “brown-dog-2” kém tính con người hơn “cookie”