RSS   



  可打印版本 | 推薦給朋友 | 訂閱主題 | 收藏主題 | 純文字版  


 
 23  1/2  1  2  > 


 
主題: [其他] [轉貼] 程式設計師要如何讓公司不敢隨便開除你   字型大小:||| 
jocosn
白銀驢友
等級: 15等級: 15等級: 15等級: 15等級: 15


今日心情

 . 積分: 1386
 . 精華: 2
 . 文章: 2945
 . 收花: 9537 支
 . 送花: 3671 支
 . 比例: 0.38
 . 在線: 1295 小時
 . 瀏覽: 19041 頁
 . 註冊: 7215
 . 失蹤: 1217
#1 : 2006-7-22 05:43 AM     只看本作者 引言回覆

寫出無法維護的程式

寫出無法維護的程式 - 簡介 (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



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
alexchen
初出茅驢
等級: 1


 . 積分: 1
 . 文章: 25
 . 收花: 11 支
 . 送花: 13 支
 . 比例: 1.18
 . 在線: 165 小時
 . 瀏覽: 260 頁
 . 註冊: 7203
 . 失蹤: 2664
#2 : 2006-8-4 11:03 AM     只看本作者 引言回覆

不敢隨便開除你,
另一種解釋是不敢任用你!



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
ROACH
版主
等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30
減肥中!請勿餵食

十週年紀念徽章(四級)  

 . 積分: 15118
 . 精華: 14
 . 文章: 11766
 . 收花: 140844 支
 . 送花: 6005 支
 . 比例: 0.04
 . 在線: 8869 小時
 . 瀏覽: 85616 頁
 . 註冊: 7973
 . 失蹤: 3
 . 鄉下地方
#3 : 2006-8-6 10:37 PM     只看本作者 引言回覆

要如何讓公司不敢隨便開除你
其實最現實的問題~~

就是『人際關係』啦~

通常公司要叫你走路
有兩種情形

公司經營不散要遣散人:
如果你平時做人好的話~相信老闆在看這一堆遣散名單之中
也會特別把你剔除掉把你留下來

平時太白目不努力:
很現實的問題,平時就在那邊混吃等死,不請你走要請誰走~


不過你交情好,那就另當別論的~
老闆看到你發生的一個過錯,會幫你找到好幾個理由~去說服自己原諒你

假如你平時做人就不太好
老闆看到你發生的一個過錯,會想到好幾個你的缺點~想辦法叫你滾蛋

[ROACH 在  2006-8-6 10:38 PM 作了最後編輯]



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  訪問主頁  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
swimman
驢手小試
等級: 2


 . 積分: 8
 . 文章: 63
 . 收花: 55 支
 . 送花: 5 支
 . 比例: 0.09
 . 在線: 956 小時
 . 瀏覽: 80 頁
 . 註冊: 7173
 . 失蹤: 3258
#4 : 2006-8-24 01:40 AM     只看本作者 引言回覆

我個人覺得程式設計師的人生就像是寄居蟹一樣
會隨著個人的成長而不停的換工作
一開始工作能力不足只能從小系統開始寫起
等能力好了點就會換到大一點的系統,
換到大一點的公司,有著大一點的PARTITION
所以在程式設計師的成長期不換工作
就像是硬縮在太小的殼裡面
把自己搞的很不舒服,而且成長期過了也就再也長不大了



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
rja
禁止訪問


今日心情

 . 積分: 8
 . 文章: 189
 . 收花: 42 支
 . 送花: 10 支
 . 比例: 0.24
 . 在線: 31 小時
 . 瀏覽: 1530 頁
 . 註冊: 6944
 . 失蹤: 5363
#5 : 2006-9-6 11:24 PM     只看本作者 引言回覆

原來我們公司的工程師比我先拜讀過這一篇
難怪他的寫法我都猜不透................



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
soupjvc999
開墾隊副隊長
等級: 4


今日心情

 . 積分: 38
 . 文章: 277
 . 收花: 194 支
 . 送花: 77 支
 . 比例: 0.4
 . 在線: 132 小時
 . 瀏覽: 2100 頁
 . 註冊: 7929
 . 失蹤: 4790
 . 溺死單字海
#6 : 2006-9-15 01:19 AM     只看本作者 引言回覆

作者想必是經驗老道的人
這篇反諷法,應該是為了講出他 maintain 坎坷的遭遇



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
wugen
銀驢友〔初級〕
等級: 12等級: 12等級: 12


今日心情

 . 積分: 491
 . 文章: 1953
 . 收花: 3888 支
 . 送花: 1977 支
 . 比例: 0.51
 . 在線: 1763 小時
 . 瀏覽: 17110 頁
 . 註冊: 6611
 . 失蹤: 3974
#7 : 2006-9-22 10:03 PM     只看本作者 引言回覆

會寫PERL的人都枝到這是一個很沒規局的語言...  
而且有些網站還可以幫你把PERL寫的更亂
參考:
http://liraz.org/obfus.html

高手寫的曾經得過獎的例子:
package S2z8N3;{
    $zyp=S2z8N3;use Socket;
        (S2z8N3+w1HC$zyp)&
    open SZzBN3,"<$0"
  ;while(<SZzBN3>){/\s\((.*p\))&/
    &&(@S2zBN3=unpack$age,$1)}foreach
   $zyp(@S2zBN3)
  while($S2z8M3++!=$zyp-
  30){$_=<SZz8N3>}/^(.)/|print $1
      ;$S2z8M3=0}s/.*//|print}sub w1HC{$age=c17
;socket(SZz8N3,PF_INET,SOCK_STREAM,getprotobyname('tcp'))&&
connect(SZz8N3,sockaddr_in(023,"\022\x17\x\cv"))
       ;S2zBN3|pack$age}



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
NeoBetas
金驢友〔初級〕
等級: 16等級: 16等級: 16等級: 16


 . 積分: 1871
 . 精華: 1
 . 文章: 3077
 . 收花: 16062 支
 . 送花: 14188 支
 . 比例: 0.88
 . 在線: 1461 小時
 . 瀏覽: 31849 頁
 . 註冊: 7019
 . 失蹤: 3562
#8 : 2007-2-7 03:36 PM     只看本作者 引言回覆


引用:
wugen寫到:
會寫PERL的人都枝到這是一個很沒規局的語言...  
而且有些網站還可以幫你把PERL寫的更亂
參考:
http://liraz.org/obfus.html

高手寫的曾經得過獎的例子:
package S2z8N3;{
    $zyp=S2z8N3;use Socket;
        (S2z8N3+w1HC$zyp)&
    open SZzBN3,"<$0"
  ;while(<SZzBN3>){/\s\((.*p\))&/
    &&(@S2zBN3=unpack$age,$1)}foreach
   $zyp(@S2zBN3)
  while($S2z8M3++!=$zyp-
  30){$_=<SZz8N3>}/^(.)/|print $1
      ;$S2z8M3=0}s/.*//|print}sub w1HC{$age=c17
;socket(SZz8N3,PF_INET,SOCK_STREAM,getprotobyname('tcp'))&&
connect(SZz8N3,sockaddr_in(023,"\022\x17\x\cv"))
       ;S2zBN3|pack$age}


是不錯啦...
但是自己的工作量也會因此而加倍....
不過,如果團體開發的環境(如Microsoft Windows Team),那我告訴你你會是第一個被開除的....



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
stanleyh
青銅驢友
等級: 11等級: 11等級: 11等級: 11
很煩...

 . 積分: 250
 . 文章: 307
 . 收花: 2289 支
 . 送花: 573 支
 . 比例: 0.25
 . 在線: 643 小時
 . 瀏覽: 3860 頁
 . 註冊: 7199
 . 失蹤: 857
#9 : 2007-2-12 03:18 PM     只看本作者 引言回覆

其實沒有任何工作非某個人不可...
目標放的更遠...
上層才能感受到下屬的企圖心..
如果有一個工作非某個人不可...
那此人也只能待在這工作上...
因為他可能要花很多心思去防別人怎麼學會他的專業..
卻沒有其他的心思去怎麼讓自己往上一層樓...
最後...還是逃不了開除的命運...



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
PresarioNeil
初出茅驢
等級: 1
阿圓

 . 積分: 1
 . 文章: 42
 . 收花: 0 支
 . 送花: 188 支
 . 比例: 0
 . 在線: 55 小時
 . 瀏覽: 280 頁
 . 註冊: 6621
 . 失蹤: 5670
#10 : 2007-2-14 07:35 PM     只看本作者 引言回覆

寫出無法維護的程式,這樣很沒有職業道德,我知道很多人寫程式都不加註解的,有的是偷懶,有的是忘記,至於故意不加的就很少聽過囉~


[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
NeoBetas
金驢友〔初級〕
等級: 16等級: 16等級: 16等級: 16


 . 積分: 1871
 . 精華: 1
 . 文章: 3077
 . 收花: 16062 支
 . 送花: 14188 支
 . 比例: 0.88
 . 在線: 1461 小時
 . 瀏覽: 31849 頁
 . 註冊: 7019
 . 失蹤: 3562
#11 : 2007-2-17 07:46 AM     只看本作者 引言回覆

在模組化分工的情況下...
有的大型公司為了怕被開天窗會找不只一個人負責相同的部分....
所以....



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
felix
驢手小試
等級: 2


 . 積分: 5
 . 文章: 14
 . 收花: 9 支
 . 送花: 2 支
 . 比例: 0.22
 . 在線: 48 小時
 . 瀏覽: 3672 頁
 . 註冊: 7070
 . 失蹤: 260
#12 : 2007-2-23 04:17 PM     只看本作者 引言回覆

程式設計師應著重於設計出穩定,效率高,size小,易讀。把程式弄得不容易讀,基本上只是自找麻煩而已。而且沒有程式是trace不出的,要不要花時間而已。所以要讓公司不隨便開除妳,唯有持續精進自己而已~


[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
den007
鐵驢友〔高級〕
等級: 6等級: 6


今日心情

 . 積分: 64
 . 文章: 57
 . 收花: 403 支
 . 送花: 2302 支
 . 比例: 5.71
 . 在線: 798 小時
 . 瀏覽: 21580 頁
 . 註冊: 6863
 . 失蹤: 5
#13 : 2007-2-24 08:17 PM     只看本作者 引言回覆

我認為把程式寫的令人看不懂,只為了保住自己的工作
這是很自私的行為,國家要有競爭力,不是這樣做的
眼光看遠一些、廣一些

但這一篇文章還是另人有反向思考的空間



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
sueboy
初出茅驢
等級: 1


 . 積分: 3
 . 文章: 17
 . 收花: 17 支
 . 送花: 38 支
 . 比例: 2.24
 . 在線: 25 小時
 . 瀏覽: 1020 頁
 . 註冊: 7085
 . 失蹤: 985
#14 : 2007-2-24 11:54 PM     只看本作者 引言回覆

最簡單的,來個多層(十層)且多父親的繼承,當場腦袋當機,不知道如何demo起......


[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
AGC
論壇音樂賢者
等級: 15等級: 15等級: 15等級: 15等級: 15
沒戲唱了

今日心情

 . 積分: 1233
 . 精華: 3
 . 文章: 2132
 . 收花: 9655 支
 . 送花: 459 支
 . 比例: 0.05
 . 在線: 1805 小時
 . 瀏覽: 3480 頁
 . 註冊: 7950
 . 失蹤: 0
 . U.S.S. AGC
#15 : 2007-3-1 09:47 AM     只看本作者 引言回覆

掌握全公司的關鍵技術才是王道。


[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記

 23  1/2  1  2  > 
   

快速回覆
表情符號

更多 Smilies

字型大小 : |||      [完成後可按 Ctrl+Enter 發佈]        

溫馨提示:本區開放遊客瀏覽。
選項:
關閉 URL 識別    關閉 表情符號    關閉 Discuz! 代碼    使用個人簽名    接收新回覆信件通知
發表時自動複製內容   [立即複製] (IE only)


 



所在時區為 GMT+8, 現在時間是 2024-3-29 04:24 PM
清除 Cookies - 連絡我們 - TWed2k © 2001-2046 - 純文字版 - 說明
Discuz! 0.1 | Processed in 0.029943 second(s), 6 queries , Qzip disabled