在這一篇文章 Falsehoods Programmers Believe About Names: MicroISV on a Shoestring 提到了程式設計師對於名字所保持的錯誤認知,我覺得很有趣,簡單的翻譯了各點。這張清單有些玩笑,也有些項目是使用西歐語系的人們才會有的問題。
- 每個人都只有一個正式的名字
- 每個人都只使用一個名字
- 每個人,在這個時間點,只有一個正式的名字
- 每個人,在這個時間點,只有使用一個名字
- 每個人有正好 N 個名字(N可以是任何數量)
- 每個人的名字都能放進某個訂定數量的空位中
- 每個人的名字都不會改變
- 每個人的名字雖然會變,但是只會在特別的一些時候時會變。
- 每個人的名字都是用 ASCII 編碼寫的。
- 每個人的名字都是只由一個編碼寫的。
- 每個人的名字都能對應到 Unicode 字元
- 人名是有區分(英文)大小寫。
- 人名沒有區分(英文)大小寫。
- 有些人的名字有前綴或後綴,但是你能夠安全地忽略這些。
- 人名不會含有數目字
- 人名不會全都是(英文)大寫
- 人名不會全都是(英文)小寫
- 人名可以排序。所有系統只要使用一樣的排序方法排同批名字,就會得到相同的排序結果。
- 每個人的姓跟名必須是不同的。
- 每個人與親戚都使用一樣姓氏。
- 每個人的人名都是獨一無二的。
- 每個人的人名幾乎都是獨一無二的。
- 好吧但是人名應該夠多元,所以不會有百萬個人同用一個名字。
- 我的系統永遠不用管中國來的名字。
- 或者是日本名字。
- 或是韓國名字。
- 或者是愛爾蘭,英國,美國,西班牙,墨西哥,巴西,秘魯,俄國,瑞典,波札那,南非,千里達,海地,法國,或者是克林貢帝國。這些都有常見卻奇特的命名方式。
- 那個克林貢帝國只是個玩笑對吧?
- 你那該死的文化相對論!在我的社會中,人們至少同意了一套名命標準。
- 世界上有個能夠無損地把名字轉換後再反轉回來的演算法。(對,只要你的演算法能傳回輸入值。你得一顆星星。)
- 我可以安全地假設這本髒話字典中不包涵任何人的名字。
- 每個人的名字都是出生時拿到的。
- OK,也許不是出生時,但至少很接近出生時。
- 好啦,好啦,在出生後一年內。
- 五年內?
- 你在開玩笑,對吧?
- 當兩個不同的系統有同一人的資料時,會用這個人的同一個名字。
- 在一個設計優良的系統中,兩個不同的資料輸入端拿到一個人的名字時,一定會輸入在位元上都相同的字串。
- 那些名字能把我系統弄壞的人是奇怪的異類。他們應該有個像是「田中太郎」一樣可接受的名字。(譯註:這是在英文句子裡插入日文的常用名字,反而變得不常用)
- 每個人都有名字。
之後的回應還加了幾條:
- 人名不會含有標點符號
- 人名不會含有除了單引號外的標點符號
- 每個人在不同國家的名字都一樣
- 每個人只能有一個社會地位稱謂(在德國,有兩個學位的人會用兩個 Dr 表示)
- 每個人都有姓跟名
- 名字一定有兩個字母以上
還有一些奇怪名字的人
- Nicholas If-Jesus-Christ-Had-Not-Died-For-Thee-Thou-Hadst-Been-Damned Barbon(奇特的宗教性質中間名)
- 那個原本叫做 Prince 的人(原本叫做 Prince 的知名音樂家,自己後來改名為一個不能發音的符號,導致大家開始這樣稱呼他)
- Nǃxau 演上帝也瘋狂的主角
- Ángel Agustín María Carlos Fausto Mariano Alfonso del Sagrado Corazón de Jesús Lara y Aguirre del Pino
- Standing beside the road waiting for a bus
在 Slashdot 上的討論中,有幾個人提到了解決的方法:不要把名字特別區分為姓跟名分開來儲存,而是讓使用者直接輸入完整的姓名,存在一個 Unicode 的文字欄位中。此外也提供另一個文字欄位,讓使用者輸入他的日常生活常用名。而系統可以在法律需要時使用完整姓名,而在一般問候時使用常用名稱。
雖然這張清單有很多都是極端的例子,不過我覺得最重要的,還是「人名不會含有除了單引號外的標點符號」這條。有像是 O’Raily 之類名字的人,常常會因為 SQL injection 的因故,而不能在網站上使用自己正確的名字。程式設計師在處理姓名時,還是應該使用正確的方式好好處理標點符號,而不是直接把他們拒絕掉。