14 điểm bởi GN⁺ 2025-12-12 | 7 bình luận | Chia sẻ qua WhatsApp
  • 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

 
epdlemflaj 2025-12-13

Ngay cả Awk cũng khó mà xem là một cái tên dựa trên chức năng....

 
roxie 2025-12-15

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%..

 
kandk 2025-12-15

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.

 
qpolsa95 2025-12-13

Tên dùng được thì đã có ai đó dùng hết rồi

 
khris 2025-12-13

Có ai biết emacs nghĩ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.

 
cgl00 2025-12-13

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

 
GN⁺ 2025-12-12
Ý 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

    • dd bắt nguồn từ câu lệnh DD trong JCL. Ban đầu nó được lấy từ cách mô tả tệp trên mainframe IBM, và lệnh dd của UNIX được tạo ra để trao đổi tệp với mainframe. Vì vậy nó có cú pháp kiểu key=value, khá không giống UNIX
    • dd theo truyền thống thường bị đùa là “delete disk” hoặc “destroy data”, vì nó hay được dùng để ghi đè các khối đĩa
    • C++ có nghĩa là toán tử tăng hậu tố của C. Tức là nó có cùng giá trị với C nhưng tăng lên sau khi được đọc, một ẩn dụ hoàn hảo
    • GNU, Emacs cũng là các từ viết tắt đệ quy. Perl, Python, Java, Go, Pascal, Git, Mercurial, CVS cũng đều có ý nghĩa tên gọi rất khác nhau. Rốt cuộc, tôi nghĩ tranh cãi về tên gọi chỉ là ồn ào vô nghĩa
    • Back Orifice 2000 chỉ cần nhìn tên là biết nó làm gì, nhưng BitchX thì không
  • Cá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

    • Việc những cái tên này có vẻ tự nhiên chỉ là ảo giác do quen thuộc. Bây giờ có vô số utility và thư viện, nên việc tạo khác biệt bằng tên gọi là điều bắt buộc
    • Libiberty là một trong những cái tên buồn cười nhất. Nó được đặt như vậy để có thể liên kết bằng tùy chọn -liberty
    • cat không phải là viết tắt của concatenate mà đến từ catenate. Tiền tố ‘con’ bị lược bỏ vì thừa. Đây cũng là một ví dụ thú vị về mặt ngôn ngữ học
    • awk, sed, cat không hẳn là tên hay, mà chỉ là những cái tên quen thuộc. grep lại giống tượng thanh hơn, tạo cảm giác “tóm được” mẫu
    • Những từ viết tắt hay rút gọn kiểu này giống như biệt ngữ chuyên ngành, học một lần rồi sẽ thấy tự nhiên. Ngày xưa hiệu quả gõ phím rất quan trọng, nên khác biệt giữa cat và concat ảnh hưởng tới năng suất
  • Tô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

    • Trong hóa học cũng có rất nhiều cái tên vui nhộn. Ví dụ như các thuật toán hay gói phần mềm SHAKE, RATTLE, CHARMm, Amber. Tên dễ thương còn phổ biến hơn trong sinh học
    • Khí tượng học cũng không ngoại lệ. Hiện tượng cực quang mang tên STEVE là một ví dụ tiêu biểu
    • Mật danh quân sự được đặt cố ý ngẫu nhiên để che giấu ý nghĩa, và các dự án nội bộ trong công ty đôi khi cũng làm vậy
    • Trong sinh học cũng tương tự, có những cái tên như Sonic hedgehog protein
    • Thiên văn học đặc biệt nổi tiếng với những tên viết tắt tệ nhất. Có thể xem ví dụ ở liên kết này
  • 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 thích những cái tên giàu sáng tạo. Nếu việc đặt tên khó khăn, đó là dấu hiệu khái niệm chưa đủ rõ. Một cái tên lý tưởng là ban đầu nghe lạ, nhưng khi biết ý nghĩa thì sẽ khó quên. Việc đội A/B testing của Spotify tự gọi mình là “ABBA” là ví dụ xuất sắc nhất
    • Tất nhiên còn tùy mục tiêu. Nhưng tập trung vào một việc và đưa điều đó vào tên gọi cũng là một nguyên tắc tố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

    • Trong lĩnh vực thông tin di động cũng vậy. Nếu cố học thuộc mọi từ viết tắt thì chẳng bao giờ xong. Ví dụ AP có thể là Application Processor hoặc Access Point tùy ngữ cảnh. Dù vậy vẫn phải dùng vì nó ngắn hơn MSISDN
    • Xem video về kỳ thi lấy bằng taxi ở London, người ta nói mức độ mệt mỏi do học đến mức cấu trúc não thực sự thay đổi. Những hệ thống đặt tên phức tạp về bản chất tạo ra gánh nặng 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 cũng từng làm ở tổ chức như vậy, và kết quả là xuất hiện những cái tên như CoreMainHttp và MainHttpCore, thậm chí các API khác nhau nhưng trùng tên cùng tồn tại. Những cái tên như “DataOrgUtils” còn lưu lại cả tên tổ chức đã biến mất. Cuối cùng ngay cả tên dễ thương cũng hội tụ lặp đi lặp lại. Những meme văn hóa như Phoenix, Keymaster, Simpsons, Star Wars cứ lặp lại mãi
    • Tác giả đã bỏ qua việc các công cụ này sống sót qua cạnh tranh. Tên dễ nhớ đã giúp ích cho khả năng sinh tồn của chúng
  • 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

    • Những cái tên như awk thời đó cũng có ý nghĩa riêng. Phần mềm hiện đại phải tính đến nhóm người dùng rộng hơn, nên cần cân bằng giữa tính chuyên môn và sự thú vị. Không phải tôi ghét tên dễ thương, chỉ là trong bối cảnh nghề nghiệp thì nên thận trọng hơn. (Bình luận này được gửi bằng msmtp — một SMTP client mô tả đúng chức năng như tên gọi)
  • 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

    • Ai từng bị ghim Kirchner cắm vào người chắc sẽ đồng cảm với điều này
  • 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”

    • Nhưng những cái tên như “data-testing-library” sẽ mất ý nghĩa ngay khi có bản thứ hai xuất hiện
    • Những cái tên có cấu trúc như Project.Parser.Pcapng của .NET thì tốt trong nội bộ dự án, nhưng trong bối cảnh độc lập lại không hữu ích
    • Ngược lại, có người lại tìm thấy niềm vui ngay trong tính chuyên môn, và xem những cái tên dễ thương là gây xao nhãng. Cũng có quan điểm cho rằng sự thỏa mãn đến từ tinh thần thủ công mới là niềm vui thật sự