作者brianhsu (墳墓)
看板Soft_Job
標題Re: [閒聊] Your Code Sucks
時間Wed Aug 24 09:46:53 2011
※ 引述《iman00b (I'm a n00b)》之銘言:
:
: 所以,每當聽到有人看著別人的代碼說很爛時,我只會微微一笑,讓我想起我當年的天真
: 和盲目自信。的確,我以前堅信自己是個出色的開發人員,堅信知道每種算法的最優設計
: 。我很想念當時的自大,但是我很高興現在學到的這些理念,我知道,我唯一能鄙視的代
: 碼只能是我自己的代碼,鄙視的原因就是我不能使它變的更好。
: --
: → viper9709:推~~原本的人會那樣寫一定有它的理由~~ 08/23 23:22
老實說,這一篇我只有一半同意而已。
因為現實中的狀況,可能是寫出你手上這個程式的人,根本對程式設計、資料結構連最
基本的概念都沒有,然後第二手維護的人其實也不懂,到了你是第三手的時候,你發現
這程式真是他X的一整個莫名其妙。
舉例來說,當我看到我接手維護的 Java 程式出現了以下的狀況時,我實在找不到任何
『理由』來說服我自己這是合理的。
什麼狀況?!狀況一:
public class CommonUtils {
public void println(String s) { System.out.println(s); }
}
public class XXX extends CommonUtils { // ... }
public class XXX extends CommonUtils { // ... }
是的,所有的類別都繼承了這個 CommonUtils,我真的不知道有什麼『理由』可以
說服我這樣做是『合理』的,唯一的解釋就是原本寫的人想偷懶,而且根本連最基
本的物件導向概念都沒有,就跑來寫 Java 程式了。
你說啊可能他對剛出來的 Java 還有新興的物件導向理論不熟啊(畢竟這個程式是
從 Java 1.4 時開始出現),但要來寫程式總得對基本的資料結構和其特性有些概
念吧?
我們的程式是做資料轉換的,所以經常會有批次處理的需求,而批次處理的時候,
需要給定兩個參數,一個是要匯入的 ID,一個是匯入的檔案來源目錄。
問題來了……請問,你要怎麼存這個批次處理的 (id, 來源目錄) 的列表?
答:LinkedHashMap<String, String>!!
靠!這不是擺明了你連 HashTable/HashMap 的概念是什麼都不曉得嗎?也就是說,
這隻程式在做批次處理的時候,你沒辦法連續匯入來自兩批不同的檔案到同一個
ID 中……你有看過只能處理一份資料的批次處理嗎……?!orz...OB
我唯一能想到的『理由』就是,他根本不知道 HashMap 是啥,只是看到這個東西
能夠存 key/value pair,不用自己刻一個就拿來用了,卻根本沒想過這東西本質
上就不適合拿來處理批次處理這樣的事情。
沒錯……原本的人會那要寫一定有他的理由,不過前提是原本的人是真的會寫程
式啊!>_<
--
~
白馬帶著她一步步地回到中原。白馬已經老了,只能慢慢地走,
'v'
Brian Hsu 但終是能回到中原的。江南有楊柳、桃花,有燕子、金魚……
// \\
( 墳 墓 )
/( )\
但這個美麗的姑娘就像古高昌國人那樣固執。 【白馬嘯西風】
^`~'^
http://bone.twbbs.org.tw/blog 『那都是很好很好的,可我偏不喜歡。』
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.109.19.6
推 qrtt1:相當認同。 08/24 09:55
→ xxtuoo:看不順眼 就順手改一改唄.. 08/24 10:43
→ zekewang:key pair value, value改成自定的class不就可以了?? 08/24 11:22
→ zekewang:value class是要用何種方式定義file path就看個人吧 08/24 11:23
→ zekewang:或是使用HashMultimap 不是也可以? 08/24 11:24
推 andymai:同意~~~不過除非必要~我還是不會動手改別人已經可以用的東 08/24 13:02
→ andymai:西~尤其是繼承來繼承去~整個架構亂成一團~有用物件導向比 08/24 13:03
→ andymai:沒用還慘的情況下...有心改它真的是佛心來的... 08/24 13:03
→ iman00b:老闆: 只要會動的程式 就是好程式 08/24 14:12
→ iman00b:MIS: 效能不夠 是機器太慢 08/24 14:12
→ zekewang:我想說的是如果原本程式是key:String, value:String 08/24 15:06
→ zekewang:是否在實際上這樣的使用就足夠了,而不需要 HashMultimp 08/24 15:08
→ zekewang:當然好不好維護或是擴充,則是見仁見智, 如果需求萬年不變 08/24 15:09
→ zekewang:或許一開始是時程關係或是Schedule定義的不清楚所致 08/24 15:10
推 leav:原文有個重點是: 不要預設立場, 至於你提的第一點我大概猜得 08/24 19:27
→ leav:到理由: 保留重新導向的可能性 08/24 19:28
推 atpx:看公司吧....以前我呆過一家號稱會訓練非本行的公司 08/25 00:19
→ atpx:結果當然在學習期的時候寫的爛code自己都不想維護了 08/25 00:20
→ atpx:待在這類公司的高手可能就會有像原po一樣的感覺 08/25 00:21
→ atpx:不過這類的公司不一定是不賺錢的喔~ 08/25 00:21
推 aappe:Hi (揮手) 08/25 00:43
推 littlethe:推一個,我相信人性本惡,就是有人懶惰或沒用大腦寫 08/25 02:04
→ littlethe:我認為與其計較誰的code寫得好不好,不如去建立規範 08/25 02:06
→ AvatarH:原po的意思是HashMap<ID, LinkedList<來源目錄>>嗎? 08/25 13:24
→ brianhsu:不,就是單純的 HashMap<String, String>,你沒看錯… 08/25 17:34