看板 Soft_Job 關於我們 聯絡資訊
※ 引述《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