Re: [請益] 怎麼寫得清楚?
※ 引述《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
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
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
03/17 13:52, 11F
推
03/17 14:44, , 12F
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
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
03/18 19:48, 24F
→
03/18 21:00, , 25F
03/18 21:00, 25F
討論串 (同標題文章)
Soft_Job 近期熱門文章
PTT職涯區 即時熱門文章