程式設計師對於人名的錯誤認知

在這一篇文章 Falsehoods Programmers Believe About Names: MicroISV on a Shoestring 提到了程式設計師對於名字所保持的錯誤認知,我覺得很有趣,簡單的翻譯了各點。這張清單有些玩笑,也有些項目是使用西歐語系的人們才會有的問題。

  1. 每個人都只有一個正式的名字
  2. 每個人都只使用一個名字
  3. 每個人,在這個時間點,只有一個正式的名字
  4. 每個人,在這個時間點,只有使用一個名字
  5. 每個人有正好 N 個名字(N可以是任何數量)
  6. 每個人的名字都能放進某個訂定數量的空位中
  7. 每個人的名字都不會改變
  8. 每個人的名字雖然會變,但是只會在特別的一些時候時會變。
  9. 每個人的名字都是用 ASCII 編碼寫的。
  10. 每個人的名字都是只由一個編碼寫的。
  11. 每個人的名字都能對應到 Unicode 字元
  12. 人名是有區分(英文)大小寫。
  13. 人名沒有區分(英文)大小寫。
  14. 有些人的名字有前綴或後綴,但是你能夠安全地忽略這些。
  15. 人名不會含有數目字
  16. 人名不會全都是(英文)大寫
  17. 人名不會全都是(英文)小寫
  18. 人名可以排序。所有系統只要使用一樣的排序方法排同批名字,就會得到相同的排序結果。
  19. 每個人的姓跟名必須是不同的。
  20. 每個人與親戚都使用一樣姓氏。
  21. 每個人的人名都是獨一無二的。
  22. 每個人的人名幾乎都是獨一無二的。
  23. 好吧但是人名應該夠多元,所以不會有百萬個人同用一個名字。
  24. 我的系統永遠不用管中國來的名字。
  25. 或者是日本名字。
  26. 或是韓國名字。
  27. 或者是愛爾蘭,英國,美國,西班牙,墨西哥,巴西,秘魯,俄國,瑞典,波札那,南非,千里達,海地,法國,或者是克林貢帝國。這些都有常見卻奇特的命名方式。
  28. 那個克林貢帝國只是個玩笑對吧?
  29. 你那該死的文化相對論!在我的社會中,人們至少同意了一套名命標準。
  30. 世界上有個能夠無損地把名字轉換後再反轉回來的演算法。(對,只要你的演算法能傳回輸入值。你得一顆星星。)
  31. 我可以安全地假設這本髒話字典中不包涵任何人的名字。
  32. 每個人的名字都是出生時拿到的。
  33. OK,也許不是出生時,但至少很接近出生時。
  34. 好啦,好啦,在出生後一年內。
  35. 五年內?
  36. 你在開玩笑,對吧?
  37. 當兩個不同的系統有同一人的資料時,會用這個人的同一個名字。
  38. 在一個設計優良的系統中,兩個不同的資料輸入端拿到一個人的名字時,一定會輸入在位元上都相同的字串。
  39. 那些名字能把我系統弄壞的人是奇怪的異類。他們應該有個像是「田中太郎」一樣可接受的名字。(譯註:這是在英文句子裡插入日文的常用名字,反而變得不常用)
  40. 每個人都有名字。

之後的回應還加了幾條:

  • 人名不會含有標點符號
  • 人名不會含有除了單引號外的標點符號
  • 每個人在不同國家的名字都一樣
  • 每個人只能有一個社會地位稱謂(在德國,有兩個學位的人會用兩個 Dr 表示)
  • 每個人都有姓跟名
  • 名字一定有兩個字母以上

還有一些奇怪名字的人

在 Slashdot 上的討論中,有幾個人提到了解決的方法:不要把名字特別區分為姓跟名分開來儲存,而是讓使用者直接輸入完整的姓名,存在一個 Unicode 的文字欄位中。此外也提供另一個文字欄位,讓使用者輸入他的日常生活常用名。而系統可以在法律需要時使用完整姓名,而在一般問候時使用常用名稱。

雖然這張清單有很多都是極端的例子,不過我覺得最重要的,還是「人名不會含有除了單引號外的標點符號」這條。有像是 O’Raily 之類名字的人,常常會因為 SQL injection 的因故,而不能在網站上使用自己正確的名字。程式設計師在處理姓名時,還是應該使用正確的方式好好處理標點符號,而不是直接把他們拒絕掉。

發表迴響

您的電子郵件位址並不會被公開。 必要欄位標記為 *

*

您可以使用這些 HTML 標籤與屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>