作者yauhh (喲)
看板Soft_Job
標題Re: [請益] 怎麼寫得清楚?
時間Sat Mar 17 12:14:50 2012
※ 引述《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)
推 yishin0517:我de過很多程式一下子寫前端一下子寫後端的 03/17 13:14
→ yishin0517:一下子要看前端程式碼一下子又要看資料庫的程式碼 03/17 13:14
→ yishin0517:常會頭昏眼花!!不過能怎樣!!前人就這樣寫啦 03/17 13:15
→ yauhh:程式難維護就是難維護,經過你手之後結構沒有改變,所以仍然 03/17 13:20
→ yauhh:難維護. 要變得好維護就要自己想辦法改寫,或者偷做一些撇步 03/17 13:21
→ yauhh:但最麻煩的是如果你不改寫而程式問題一大堆,主管要捅你,而 03/17 13:22
→ yauhh:假如你改寫但要花到相當多時間,主管還是要捅你. 03/17 13:22
推 yishin0517:yauhh---說得對極了!! 03/17 13:40
→ yishin0517:套一句主管說的話!!上線前是他和你的問題(進度)!! 03/17 13:41
→ yishin0517:上線後通通是你的問題跟他沒關係了 03/17 13:41
推 dyco:同意yishin 03/17 13:52
推 ledia:如果功勞也跟他沒關係, 那可以考慮.... XD 03/17 14:44
→ p52189:我主管人很好 但是自己覺得不能再這麼慢 冏 03/17 18:48
→ yauhh:我主管人也很好,只不過是表面很和善但實際上隨時會婊人 03/17 19:35
→ yauhh:就看到一個人笑笑的講出一堆扯翻天的話... 03/17 19:35
→ andymai:我遇過明明是自己談需求和設計架構而耗掉一大半時間~到最 03/17 21:49
→ andymai:後卻說是實作的人沒把握時間做好~解雇某位不適任的同事~卻 03/17 21:50
→ andymai:還說是人家自己想走~如果不是後來在MSN有遇到~我還傻傻被 03/17 21:51
→ andymai:騙...是不是好主管~真的要睜大眼睛看清楚... 03/17 21:52
→ yauhh:其實蠻容易看透一個主管夠不夠格的主管. 不過更難的是 03/17 22:17
→ yauhh:你知道他不夠格並且把他當個屁,卻仍要每天與他共事. 03/17 22:17
推 yishin0517:真的非常同意-- 03/18 00:45
→ fatb:人很好有時候要看喔 他有可能是對你很好對別人不好 03/18 17:14
→ yishin0517:功勞怎麼可能跟他沒關係---XD不要全吞就好了 03/18 19:48
→ yauhh:加油吧!各位同是看穿主管的同志們. 改天來聊聊如何自處吧! 03/18 21:00