2009年9月9日 星期三

Y02 如何寫出難改又難懂的程式碼?

一直都在談如何作好分析與設計,這回就來個逆向思考的建議。

●目標:如何寫出難改又難懂的程式碼?

想像公司早上第一個到的人所要做的事如下:開鐵捲門、用識別證開門、開一號盤的15個電燈開關(1-15)與二號盤的15個電燈開關(16-30)。現要設計一個功能來實現這些行為,建議使用以下推薦的方式來撰寫程式,保證可以達到難改又難懂的特殊效果同時不會影響功能的正常執行。(此等技術暫時命名為程式碼的人工混淆化)

●Class、Method與Field的隨興命名
 效果:讓人即使看到名稱也不見得知道這就是他要找的程式。
●Class隨便放到某個Package裡
 效果:與上一招同時施展,可以讓人感覺Class在某個雲深不知處的地方。
●Class、Method與Field內外完全不寫任何註解
 效果:讓別人從眾多的程式碼反推你原本想要做什麼。如有人能完全識破此機關的話一定要選為衣缽繼承人,因為那是萬中無一的奇人。
●執行的大大小小步驟都寫在同一個Method
 效果一:搭配前一招時可以讓邏輯處理的焦點忽大忽小,明明在講進門要做的事卻一下子跳到拿出識別證的動作,完全不知道在幹嘛。
 效果二:可以保護自己想出來的程式解法,例如自己發明一個很帥的識別證拿法就可以直接寫在Method裡,其他人想要用就只能copy(因為要抽方法就得幫你改寫程式,以我所知沒幾個人有這閒工夫);有天你發現姿勢可以更帥時可以保證只有你知道,因為別人抄到的是你前一次的姿勢,跟你肯定沒得比。
●不要花時間去想執行發生錯誤時該怎麼辦
 效果一:程式碼裡一定存在著錯誤,這樣一來可以用更多的錯來證明這句話是極為正確的。
 效果二:搭配前前招使用,可以讓別人在不知道處理邏輯之餘更不知道發生錯誤要怎麼辦?同時讓老板知道只有你能搞定這樣的錯誤處理問題。(註:平時常逛逛求職網站是有助益的,因為總有一天會發生連自己都搞不定的重大問題……)

採用以上方式撰寫程式碼,將會產生下列各方面的效益:

●個人方面:
 加速個人的效率與產能(不用抽Class與Method可減少思考與重構時間)
 提升個人在開發團隊中的重要性(沒人有把握修改別人的程式)
●公司方面:
 加強與其他公司合作的意願(即使程式碼外流也毌用擔心技術被學走)
 減少額外控管程式碼的成本(只要從jar file反組譯回來就是完整程式碼)
●產業方面:
 創造更多的營業額(因應提高開發與維護的成本會增加系統的售價)
 提升開發人員的素質(無法看懂別人程式碼者會被淘汰,只留下適任者)

註:最近一個多月狂寫公司某份計劃書,因而導致這篇文章的風格被影響。

沒有留言:

張貼留言