Vụ án về việc phân biệt chữ hoa chữ thường

Bài viết được dịch từ blog Coding Horror

Lời bàn của Vinacode:

Ở bài viết này thì mình cũng không bàn luận gì nhiều, mình chỉ xin làm rõ một chi tiết là trong bài này tác giả sử dụng tên Keanu Reeves làm ví dụ (đó là tên của một nam tài tử ở Hollywood).

Một trong những vấn đề nguy hại nhất của các ngôn ngữ lập trình dựa trên ngôn ngữ C đó là chúng phân biệt chữ hoa và chữ thường. Trong khi quyết định này có thể có ý nghĩa vào năm 1972 khi mà ngôn ngữ này được tạo ra, một điều kỳ lạ là tại sao sai lầm của Kernighan và Ritchie lại bị ghi nhớ mãi một cách mù quáng trong 30 năm vừa qua.

Sẽ là tốt hơn nếu các ngôn ngữ lập trình không phân biệt giữa chữ hoa và chữ thường.Sẽ là tốt hơn nếu các ngôn ngữ lập trình không phân biệt giữa chữ hoa và chữ thường.


Tôi nhận ra đây là một vấn đề thuộc về tôn giáo. Tôi không cố thử thay đổi suy nghĩ của bất cứ ai. Tôi chỉ đơn thuần là nói lên tiếng nói bất mãn với tình trạng hiện tại mà thôi. 30 năm sau đó, liệu việc phân biệt chữ hoa chữ thường vẫn còn có ý nghĩa? Julian tại trang OddThinking đã đưa ra một lý lẽ rất thuyết phục rằng không nên duy trì nó nữa trong bài viết The Case for Case-Preserving, Case-Insensitivity (Vụ án về chữ hoa chữ thường):

Giả sử tôi tuyên bố rằng “KEANU REEVES quấy rối mấy con voi”. Liệu tôi có thể nhận là mình không phỉ báng nam diễn viên nổi tiếng của Hollywood, chỉ bởi vì tôi đã đánh vần tên anh ta bằng toàn chữ viết hoa? Liệu tôi có thể khai với quan tòa rằng KEANU REEVES là một định danh chưa được khai báo và vì vậy toàn bộ câu tuyên bố của tôi về mặt ngữ nghĩa là vô giá trị? Dĩ nhiên là không. Ngôn ngữ tiếng Anh đủ mềm dẻo để nhận ra rằng “KEANU” và “Keanu” là cùng một tên. Thậm chí khi viết địa chỉ gửi thư là “KeAnU rEeVeS” thì bức thư đó cũng sẽ được phân phát đến đúng người.

Nếu máy tính cũng có thể làm điều này một cách chính xác, thì nó cũng nên làm như vậy. Nếu phần mềm thất bại trong việc sửa lại cho đồng nghĩa giữa chữ hoa và chữ thường, thì đó là một sự thất vọng nặng nề.

Đối với tôi, ví dụ của sự thất bại này xuất hiện trong cả Python và PHP. Mỗi ngôn ngữ này đều có cùng một tập điểm yếu “chết người”: chúng có phân biệt hoa thường đối với các định danh, nhưng chúng lại là ngôn ngữ kịch bản nên không phân giải các định danh vào thời điểm parse-time. Tôi luôn bị rơi vào những bẫy này. Phần lớn sự thất vọng của tôi trong lúc debugging đó là phải dành nhiều thời gian để sửa lại những tên định danh bị gõ sai – thường là không được phát hiện cho tới một vài phút sau khi chạy thử. Lỗi chính tả phổ biến nhất mà tôi phạm phải đó là gõ không đúng chữ viết hoa. Và có hai lỗi về viết hoa phổ biến mà tôi thường phạm phải đó là: NẮm GIữ PHím SHift QUá LÂu, và không nhất quán trong kiểu chữ CamelCasing (kiểu chữ lưng lạc đà) để đặt tên kiểu như “fileName” (Tôi chẳng bao giờ cảm thấy thỏa mãn về việc liệu đó là một hay hai từ!)

Tuy nhiên điều bạn cảm thấy về việc phân biệt chữ hoa chữ thường, thì quan trọng nhất là: liệu nó có ảnh hưởng đến năng suất của bạn? Câu trả lời không thể phủ nhận là có, như Scott Hanselman đã viết:

Tôi đã mất một giờ trong ngày hôm nay để ngồi debugging một vấn đề có thể chỉ đơn giản là “SignOn” != “Signon”.

Nếu tôi cứ có một xu cho mỗi lần viết sai định danh chữ hoa và chữ thường, thì giờ có lẽ tôi đã có 7 hoặc 8 đô-la rồi. Tôi hoàn toàn nghiêm túc đấy.

Bài học: nếu biết bất cứ cái gì mà bạn đang làm việc trên đó có phân biệt chữ hoa chữ thường, thì bạn hãy viết một mẩu giấy Post-It để nhắc nhở và dán mẩu giấy đó vào ngay màn hình của bạn.

Không có điều gì chúng ta có thể làm với những công cụ và ngôn ngữ đang tồn tại mà có phân biệt hoa thường, nhưng chúng ta có thể chắc chắn rằng mình không ghi nhớ mãi những sai lầm trong quá khứ. Trừ khi bạn có một lý do vô cùng thuyết phục để làm một cái gì đó có phân biệt hoa thường, còn việc không phân biệt hoa thường sẽ có tính người hơn và là lựa chọn thiết kế thân thiện. Thiết kế phần mềm mà nhằm mục đích dễ hơn cho máy móc thì chẳng thể nào mà tốt nhất được cả.

Các bài viết liên quan:

Về tác giả bài viết:

Jeff_atwood_coding_horrorJeff Atwood là một chuyên gia công nghệ tại Mỹ, hiện đang sinh sống và làm việc tại Berkeley, CA. Anh là một kỹ sư phần mềm chuyên về công nghệ Microsoft .NET, và là một blogger nổi tiếng trong cộng đồng công nghệ với blog Coding Horror, anh là người sáng lập và kiêm Giám đốc điều hành (CEO) của trang web hỏi đáp uy tín Stack Overflow và cũng là đồng sáng lập của Stack ExchangeDiscourse.

8 comments on “Vụ án về việc phân biệt chữ hoa chữ thường

  1. Em cũng khá băn khoăn điểm này của C ( cũng như các ngôn ngữ khác mà phân biệt hoa và thường), và cũng vì thế nên em thích cú pháp VB hơn.
    hông biết có phải là do sợ khan hiếm cách đặt tên biế, hay là do một lý do gì khác, tại sao không bỏ cái tính năng khá khó chịu này đi 🙂

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s