Re: [請益] 怎麼寫得清楚?

看板Soft_Job (軟體人)作者 (喲)時間14年前 (2012/03/17 12:14), 編輯推噓5(5020)
留言25則, 7人參與, 最新討論串3/4 (看更多)
※ 引述《p52189 (皮爺)》之銘言: : 大家好 : 菜鳥一隻想請教一下各位前輩 : 大家平常如何保持思路不斷,寫出來的東西清楚不亂? : 我覺得自己腦容量很小....能暫存的東西非常非常少 : 寫小東西還好,同一支程式功能一多,就會很亂 : 尤其接別人寫過的東西更嚴重... : 因為不敢亂動原本的碼,所以就會包起來然後東接西接 : 雖然是會跑,但是變得很難維護也很難debug 在工作中,我學到的一個情況就是不要想保持思路不斷,也不要想保持直接寫的清楚. 思路方面,你是什麼思考程度就是什麼思考程度. 寫作方面,現在你覺得寫得清楚,改天卻突然變得不清楚,因為你的思路會變的. 你不必擔心腦容量很小. 腦容量大的人要擔心的是思路夠不夠集中. 不管能力強能力弱,一樣都有能不能專注的問題. 我覺得,沒辦法說,用什麼方法可以直接幫你一下子就寫上適合的程式. 但是以任何寫好的程式來說,將來修改的機會多,就表示一開始並沒有給這個程式 找到合適的結構,所以一旦遇到需求不同時,會發現程式結構需要改變,需要擴充. 有一些很小的程式單元是寫好之後不必擴充的,而且外界規格改變,也絕對不會動到 這段程式碼. 你只要能掌握有效的最小程式單元,就很厲害了. 舉個例子,以我經驗來說,有段程式是進行一批運算,在運算中要儲存紀錄資料. 本來的結構如下: main: do_log (LogFileName1, Date + Time + "Started.") for loop heavy_steps_1 when error: do_log message(LogFileName1, error) when not error: do_log (LogFileName1, partial_result) heavy_steps_2 next do_log (LogFileName1, Date + Time + " Ended"). do_log(LogFileName1, Msg): write ((open (LogFileName1)), Msg) when error: do_log_log(Msg) do_log_log(Msg): write ((open (LogFileName2)), Msg) 我要寫紀錄到LogFileName1,但檔案路徑很有機會不存在,因為檔案位置有時會關機. 所以在無法寫檔LogFileName1時,有個備用方案是寫檔到LogFileName2. 但當我要改記錄資料的格式或內容時,在程式main要修改二到三段位置. 所以我想了一下,改成第二個版本: main: log ("Started") for loop heavy_steps_1 when error: log message(error) when not error: log partial_result heavy_steps_2 next log ("Ended") log(Msg): write ((open (LogFileName1)), Date + Time + " " + Msg) when error: write ((open (LogFileName2)), Date + Time + " " + Msg) 當我發現 open (FileName) 要看檔案開啟為appending或new,就需要改寫, 但假如改寫 log(Msg): 就錯了,因為以字面上來看, log(Msg): 表達很清楚. 所以我把 log(Msg): 的 opeen (XXX) 改成 open_stream (XXX): open_stream(FileName): when FileName exists: when FileName exceeds 812345 bytes: open_new (FileName) when FileName not exceeds 812345 bytes: open (FileName) when FileName not exists: open (FileName) 從程式功能來看, open_stream(FileName): 定義從指定的檔案開資料流做log, 它的動作只有看看檔案在不再,如果檔案在怎麼處理,如果檔案不在怎麼處理. 外部需求更改幾乎不會改到這個程式. 再看 log(Msg): ,是說如果可以開 LogFileName1檔案,就把訊息寫到LogFileName1, 否則開了LogFileName2並寫訊息 進去. 這裡假設環境中LogFileName2一定可以開. (如果不幸會遇到LogFileName2不可以開,就表示程式設計者自己笨,不懂得找個 基本的自保方案. 當程式遇到錯誤時,即使是無辜的錯誤,有些技術主管婊人卻 是很厲害的.) 然後主程式 main: 是程式最不乾淨的地方,要等日後慢慢將程式中的其他部份整理乾淨. 至於好不好debug,我個人偏好像這樣把同樣的功能做在一個位置,debug時只要順著 脈絡找到正確的修改位置即可. 有一種程式碼則是將同樣一大段程式,在這裡放一份, 在那裡放一份,其他地方又放一份,這種情況的debug就要靠維護者本人的記憶力和經驗, 戰戰兢兢去回想這段程式碼出現過的位置. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.112.230.130 ※ 編輯: yauhh 來自: 59.112.230.130 (03/17 13:03) ※ 編輯: yauhh 來自: 59.112.230.130 (03/17 13:06)

03/17 13:14, , 1F
我de過很多程式一下子寫前端一下子寫後端的
03/17 13:14, 1F

03/17 13:14, , 2F
一下子要看前端程式碼一下子又要看資料庫的程式碼
03/17 13:14, 2F

03/17 13:15, , 3F
常會頭昏眼花!!不過能怎樣!!前人就這樣寫啦
03/17 13:15, 3F

03/17 13:20, , 4F
程式難維護就是難維護,經過你手之後結構沒有改變,所以仍然
03/17 13:20, 4F

03/17 13:21, , 5F
難維護. 要變得好維護就要自己想辦法改寫,或者偷做一些撇步
03/17 13:21, 5F

03/17 13:22, , 6F
但最麻煩的是如果你不改寫而程式問題一大堆,主管要捅你,而
03/17 13:22, 6F

03/17 13:22, , 7F
假如你改寫但要花到相當多時間,主管還是要捅你.
03/17 13:22, 7F

03/17 13:40, , 8F
yauhh---說得對極了!!
03/17 13:40, 8F

03/17 13:41, , 9F
套一句主管說的話!!上線前是他和你的問題(進度)!!
03/17 13:41, 9F

03/17 13:41, , 10F
上線後通通是你的問題跟他沒關係了
03/17 13:41, 10F

03/17 13:52, , 11F
同意yishin
03/17 13:52, 11F

03/17 14:44, , 12F
如果功勞也跟他沒關係, 那可以考慮.... XD
03/17 14:44, 12F

03/17 18:48, , 13F
我主管人很好 但是自己覺得不能再這麼慢 冏
03/17 18:48, 13F

03/17 19:35, , 14F
我主管人也很好,只不過是表面很和善但實際上隨時會婊人
03/17 19:35, 14F

03/17 19:35, , 15F
就看到一個人笑笑的講出一堆扯翻天的話...
03/17 19:35, 15F

03/17 21:49, , 16F
我遇過明明是自己談需求和設計架構而耗掉一大半時間~到最
03/17 21:49, 16F

03/17 21:50, , 17F
後卻說是實作的人沒把握時間做好~解雇某位不適任的同事~卻
03/17 21:50, 17F

03/17 21:51, , 18F
還說是人家自己想走~如果不是後來在MSN有遇到~我還傻傻被
03/17 21:51, 18F

03/17 21:52, , 19F
騙...是不是好主管~真的要睜大眼睛看清楚...
03/17 21:52, 19F

03/17 22:17, , 20F
其實蠻容易看透一個主管夠不夠格的主管. 不過更難的是
03/17 22:17, 20F

03/17 22:17, , 21F
你知道他不夠格並且把他當個屁,卻仍要每天與他共事.
03/17 22:17, 21F

03/18 00:45, , 22F
真的非常同意--
03/18 00:45, 22F

03/18 17:14, , 23F
人很好有時候要看喔 他有可能是對你很好對別人不好
03/18 17:14, 23F

03/18 19:48, , 24F
功勞怎麼可能跟他沒關係---XD不要全吞就好了
03/18 19:48, 24F

03/18 21:00, , 25F
加油吧!各位同是看穿主管的同志們. 改天來聊聊如何自處吧!
03/18 21:00, 25F
文章代碼(AID): #1FP0-z_2 (Soft_Job)
文章代碼(AID): #1FP0-z_2 (Soft_Job)