|
|
jocosn
白銀驢友
. 積分: 1386
. 精華: 2
. 文章: 2945
. 收花: 9537 支
. 送花: 3671 支
. 比例: 0.38
. 在線: 1295 小時
. 瀏覽: 19041 頁
. 註冊: 7464 天
. 失蹤: 1466 天
|
|
|
|
|
|
|
#1 : 2006-7-22 05:43 AM
只看本作者
|
送花
(20)
送出中...
|
|
|
寫出無法維護的程式
寫出無法維護的程式 - 簡介 (How To Write Unmaintainable Code)
原作 Roedy Green ©1997-2004 Canadian Mind Products.
中譯 Fred Wang(王富民) (http://fmwang.blogspot.com)
簡介
為了得到Java程式設計師的聘僱機會, 我寫了這些技巧給雇主有關如何讓寫出來的程式難以維護, 而這些維護者必須跟在你旁邊幾年才有辦法做最簡單的修改. 更進一步你若虔誠地遵循這些規則, 你可以確保終身被雇用, 因為除了你以外, 沒有人希望進入維護程式的煉獄. 另外, 如果你虔誠地遵循這全部的規則, 甚至連你自己都可能無法維護這些程式.
不要做的太過分. 你的程式不該看起來完全沒有可以維護的希望, 而是只是一定程度的問題. 否則會有被重寫或重構的風險
這篇論文分成下面段落(原來各段落為網頁上的連結)
a.财 基本原則General Principles
b.财 命名Naming
c.财 偽裝Camouflage
d.财 文件Documentation
e.财 程式設計Program Design
f.财 程式模糊化Coding Obfuscation
g.财 測試Testing
h.财 語言的選擇Choice Of Language
i.财 對付其他人Dealing With Others
j.财 寫你自己的東西Roll Your Own
k.财 掌握語言的弱點Tricks In Offbeat Languages
l.财 混雜的技術Miscellaneous Techniques
m.财 哲學Philosophy
n.财 沒有鞋的鞋匠The Shoemaker Has No Shoes
o.财 貢獻者Contributors
p.财 運作白蟻Operation Termite
基本原則General Principles
要搞垮維護程式設計師, 就要先了解他在想什麼. 他有你龐大的程式且他沒有時間全部讀完並了解這些程式. 他要快速的找到他要改的地方, 並確定沒有因為更改而產生額外問題並順利上線
他檢視你的程式猶如看廁所的捲紙筒, 一次只能看到程式的一個小片段. 你要讓他無法得到程式的全貌. 你儘可能的讓他很困難的才可以找到他要找的程式. 更重要的是, 你要讓程式儘可能笨拙的讓他忽略掉一些重要的部分
程式設計師會習慣於某些設計慣例, 但是你可以在程式每隔一段程式就偷偷的違反這個慣例, 迫使他必須仔細的檢視每一行程式
你可以根據不同語言的特性, 洽當的誤用這些特性, 就可以創造出無法維護的程式
命名
寫無法維護的程式許多的技巧是在變數與方法命名上,這些技巧並不會被編譯器視為錯誤,這讓你有大量的自由使用這些技巧把維護程式者搞得昏頭轉向。
1. 用嬰兒命名的方式命名
買本嬰兒命名書,那麼你就不缺變數名稱。例如一些容易輸入的字如Fred。其他像鍵盤上鄰近的字如adsf等。
2. Single Letter Variable Names用單一字母的變數名稱
如果用a, b, c 這類的字就無法用簡單的文字編輯器找到使用它的地方。而且沒有人可以猜的出來這變數是幹麼用的。
3. Creative Miss-spelling 使用有創意的錯別字
如果你要用描述性的變數及功能名稱,就用拼錯的字,或有些對有些錯的組合如 SetPintleOpening Set PintalClosing,這樣就讓一些工具的搜尋功能無法發揮作用。
4. Be Abstract 用抽象的字
在功能及變數的命名上用一些抽象的字,如 it, everything, data, handle, stuff, do, reoutine, perform及數字如routineX48, PerformDataFunction, DoIt, HandleStuff and do_args_method等。
5. A.C.R.O.N.Y.M.S. 用縮寫
用縮寫字讓程式更精簡。真正的男子漢不用解釋這些縮寫, 因為他們生下來就懂得這些字。
6. Thesaurus Surrogatisation 辭典代理人
為避免無聊,使用辭典儘可能尋找一些相同動作的可替代性詞彙,如 : display, show, present。將有重要差異但相似的功能使用相同的字來描述,例如print表示”write to a file”, “put ink on paper”, and “display on the screen”。不要為特定目的的專案編寫明確定義的語彙表,這樣是不專業的,因為違反結構化設計資訊隱藏的原則。
7. Use Plural Forms From Other Languages 使用別種語言的複數形式
使用世界語(Esperanto), 克林貢語Klingon(出自電影星際大戦http://www.kli.org) and 哈比語(Hobbitese出自電影魔戒) 等語言,讓您往世界和平的目標邁進。
8. CapiTaliSaTion 將字中的每個音節的第一個字用大寫
For example: ComPuteRasTerHisToGram().
9. Reuse Names 重用名稱
在程式語言允許的範圍內給classes, constructors, methods, member variables, parameters and local variables相同的名稱。另外在相同的{}區塊重複使用local variable名稱,這樣可以讓維護程式的人可以仔細的檢查每一個instance的範圍。特別在Java,可以讓一般的methods偽裝成constructors。
10. Åccented Letters 使用重音字母
使用一般的編輯器很難區分重音字母上的斜線( í )
11. Exploit Compiler Name Length Limits 利用compiler在名稱長度的限制
如果編譯器只判別名稱的前八字元,那麼就變更結尾字元,例如一個用var_unit_update(),另一個用var_unit_setup()。編譯器將兩個都視為var_unit。
12. Underscore, a Friend Indeed用底線
Use _ and __ as identifiers.
13. Mix Languages 混合語言
混用兩種語言(人與電腦)。如果你的老闆堅持你使用他的語言,就告訴他,你只能用你自己的語言組織你的思想,如果這種方式沒有用則控告他語言歧視。
14. Extended ASCII 用ASCII擴充碼
ASCII的擴充碼拿來作變數名稱,包含ß, Ð, and ñ等字元。這些字在一般簡單的文字編輯器沒有複製貼上的話是幾乎無法輸入的。
15. Names From Other Languages 用別種語言命名
用外國語言字典當作變數名稱的來源。例如用德語的punkt表示point。維護程式的人如果沒有你對德語的了解,則將會享受到翻譯多國語言的經驗。
16. Names From Mathematics用數學運算子的名稱:
e.g.: openParen = (slash + asterix) / equals;
17. Bedazzling Names 用令人迷惑的名字
選用與內涵無關的字作為變數名稱,這可以混淆讀者,因為他們試著去了解程式邏輯時,很難不去聯想到該字的意義,而這個字的意義和資料本身是不相干的。
e.g.: marypoppins = (superman + starship) / god;
18. Rename and Reuse 重新命名及重用命名
這招在Ada這個程式語言特別有效。讓一些地方參考到舊的名字,留下陷阱給別人
19. When To Use I 使用i的時機
不要把i用在最內層的迴圈變數。大膽的用i在其他目的,特別是非整數變數,然後用n作為迴圈索引。
20. Conventions Schmentions
不管Sun Java命名慣例。例如inputFilename與inputfileName只有大小寫的差異。
未完,有興趣者自行觀看下列原文
http://mindprod.com/jgloss/unmain.html
或
http://www.freevbcode.com/ShowCode.Asp?ID=2547
[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
|
|