發表文章

目前顯示的是 11月, 2018的文章

Clean Code 無瑕的程式碼 第4章 註解

       第四章內容談到註解,作者提到一個重要觀念註解不是越多越好,可以透過變數名稱、類別名稱或函數名稱表達程式碼的用途,可以少寫很多註解。軟體版本控管軟體也可以消滅大量多餘無意義的註解。 寫註解不是好事,會要寫註解表示程式碼表達能力不足。 程式會一直修改,經常會發生程式改了註解沒有跟著修改的情況,導致註解與程式碼不一致,假註解比沒有註解還要更可怕。 最好的方法是程式碼就能寫清楚,不用再寫註解。 註解無法彌補糟糕的程式碼 花時間寫註解,不如花時間整理程式。 用程式碼表達你的本意 從範例可看出可以用「物件名稱」或「函數名稱」取代註解。 有益的註解 有時候還是必須寫有益的註解 法律型的註解 法律資訊相關的註解。 資訊型註解 寫出函數的意圖,或是回傳值的格式。 可以修改函數名稱或是新增特別類別取代註解。 對意圖的解釋 寫出這段程式想要做什麼。 闡明 把難解的參數或回傳值翻譯成具有可讀性的文字。要注意註解的正確性。 對於後果的告誡 警告訊息,警告其他程式設計師會有什麼後果。 TODO (待辦事項) 註解 還沒有完成的事項,注意事項。 定期審查TODO,並且刪除不再需要的待辦事項。 放大重要性 說明程式碼的重要性。 公共 API 裡面的 Javadoc Javadoc 描寫公共 API 的使用方法。 糟糕的註解 喃喃自語 自言自語無意義的註解。 多餘的註解 與程式無關的註解。 誤導型註解 讓讀者容易誤解的註解。 規定型註解 可以不寫註解,卻被規定要寫註解。 日誌型註解 每次更新內容寫成註解。作者認為現在有軟體版本控管軟體,可以移除日誌型註解。 干擾型註解 等同多餘的註解。 可怕的干擾 同樣是多餘的註解。 當你可以使用函式或變數時就別使用註解 函式名稱與變數名稱就可以表達程式,就可以不添加註解。 位置的標誌物 有的工程師會用註解畫圖作為標記。 右大括號後面的註解 參考4-6,如果出現巢狀的情況才有意義,作者認為還是要追求函數簡短,就可以不用寫右大括號後面的註解。 出處及署名 寫程式的人有可能用自己的名子作為註解。有軟體控管軟體之後可以不需要這種註解。 被註解起來的程式碼 這種程式碼後患無窮,以後接手的工程師會不敢刪除這段註解。 有軟體控管軟體之後可以大膽刪除這類型的註解。 HTML 形式的註解 HTML 太...

Clean Code 無瑕的程式碼 第3章 函式

        第三章的主題是函式,第三章可以給讀者有很大的幫助。第三章後半部 Try/Catch 的部分可與第七章錯誤處理對照一起閱讀。 3-1重構之後變成3-2,3-1與3-2 比較起來3-2寫得比較簡短易懂。 簡短! 函式要越短越好,3-2重構之後變成3-3。 Listing 3-3 public static String renderPageWithSetupsAndTeardowns( PageData pageData, boolean isSuite) throws Exception { if(isTestPage(pageData)) includeSetupAndTeardownPages(pageData, isSuite); return pageData.getHtml(); } 區塊(Blocks)和縮排(Indenting) If、else、while及其他敘述都應該只有一行。 函式不應該大到包含巢狀結構,函式裡的縮排程度不應該大過一或兩層。 只做一件事情 等同單一職責原則,函式應該只做一件事。 如何判斷只做一件事? 從「抽象概念」判斷是否只做一件事,3-1有不同層次的抽象概念,3-2有兩層抽象概念,3-3已經無法再提取新的函式。 函式的段落 4-7 generatePrimes函式有幾個段落,宣告區、初始區、過濾區。這是做超過一件事的徵兆。 每個函式只有一層抽象概念 3-1程式沒有在同一層抽象概念 getHtml()  (高層次) String pagePathName = PathParser.render(pagePath) (中層次) .append(“\n”) (低層次) 抽象概念與細節混在一起,會讓程式碼變得更複雜。 由上而下閱讀程式碼:降層準則 程式閱讀就像由上而下的敘事,每個函式後面緊接下一個層次的抽象概念。 將函式維持在單一層次的抽象概念。 讀者可以想一想「階層式樹狀圖」就能夠理解這段內容。 Switch 敘述 寫程式無法避免Switch,3-4是常見的情況,新增一個狀況的時候就新增一個case。   作者認為這種有下列缺點   太過冗長 函式做了超過一件事 超過一個理由可以改變函式,違反單一職掌原則(SRP) 新型態...

怒火!怒火!怒火燒盡九重天!

        2018縣市長選舉有重大的歷史意義,可以用素還真的招式「怒火燒盡九重天」形容這次選舉,蔡英文領導的民進黨倒行逆施天怒人怨,就連選舉當天投票依然讓人「怒火燒盡九重天」,全民罰站運動投個票都要排隊排好久!我投票的時候排兩個小時才能投票,看新聞還有人排隊超過兩個小時以上!因為公投綁大選讓全民罰站,結果民進黨政府悍然拒絕以核養綠的公投結果,公投根本就是在愚弄人民! 這次選舉是台灣歷史的轉折點,從指標性人物可以看出台灣的「變化」。 柯文哲 蔣經國去世之後台灣威權體制結束,台灣進入新的民主化階段。台灣民主化之後也帶來「黨國黑金體制」,2000年首次政黨輪替之後依然沒有什麼變化,民進黨實際上等於國民二黨,民進黨也是從國民黨地方派系帶槍投靠轉過去,嘉義縣與高雄縣就是明顯的案例。國民黨與民進黨是兄弟黨,兩黨之間只有外表意識型態不同,本質內在都相同。 兩黨惡鬥讓台灣停滯不前也引起廣大的民怨,直到四年前柯文哲的出現才讓事情有了「轉機」。 唐湘龍對柯文哲有很好的形容詞「打著綠旗反綠旗」,柯文哲主張兩岸一家親,還曾經到過中國大陸指導對岸醫生使用葉克膜,雖然柯文哲被批評為變變變,也代表柯文哲沒有被台獨的意識型態綁架。 西元2014年台灣民眾厭惡兩黨惡鬥讓柯文哲有機會出線成為台北市長,今年2018年柯文哲驚險過關連任台北市長。 我認為在當代柯文哲的行事風格註定會成為爭議的人物,柯文哲沒有政黨奧援會讓他很難做事,有可能柯文哲最後會得到「一事無成」的結局。 「無心插柳柳成蔭」柯文哲反而有機會成為「功在後世」的政治人物,因為有柯文哲才有後來的韓國瑜,韓國瑜坦言柯文哲對他有知遇之恩。柯文哲的成功必定對韓國瑜有所啟發,韓國瑜高雄勝選有機會給台灣帶來新模式。 韓國瑜 「黨國黑金體制」國民黨選舉很依賴地方派系,說穿了就是花大錢綁樁腳,要出來參選還要得到黨中央大老們關愛的眼神,這種體制經常會出現黨意與民意脫節的情況。候選人要討好黨國大老與地方派系,基層民眾的利益只能排第三位。 民進黨全面執政之後狠狠地清算追殺國民黨,國民黨沒有錢了。國民黨要打贏選戰,再也無法用以前花大錢綁樁的方式選舉。 面對艱困的情況韓國瑜還是有辦法,韓國瑜親自參加各大政論節目、直播節目、網路空軍、義勇軍與深入基層接地氣的種種方式,創造韓流贏得高雄市長選舉的勝利,韓流的外溢效應影響全台灣可說...

Clean Code 無瑕的程式碼 第13章 平行化

       第十三章的主題是平行化,平行化又是一門大學問可以寫好幾本書,作者坦言本章只有提到平行化常見粗淺的部分,可做為讀者入門的參考。 為什麼要平行化? 平行化 將「做什麼」與「何時做」分解開來 平行化的優點 改善應用程式的產能 縮短整體回應時間 書中提到的範例有類似I/O讀取的情況最適合平行化,單一執行緒一定會拖長反應時間。 迷思及誤解 平行化總可以改善效能? 部分情況平行化才能改善效能,例如有很多等待時間、可多執行緒或多重處理器(需要硬體配合)。 平行化不需要修改原有的設計? 平行化會在系統的結構上產生巨大改變。 當利用Web 或EJB容器來處理平行化時,了解平行化所導致的問題變得不是那麼重要? 平行化會出現新的問題,有可能會出現平行化更新與死結的問題。 平行化注意事項 平行化有額外的負擔,包含程式的效能,要撰寫額外的程式碼 正確的平行化是複雜的 平行化程式的錯誤不容易重複出現 平行化會要求對於設計策略進行根本性的修改 挑戰 看範例可知內容,多執行緒程式,有可能會出現不同的答案。 平行化的防禦原則 單一職責原則 要修改方法、類別、元件只能有一個理由。 建議:保持平行化相關程式與其他程式有清楚的劃分。 程式要分為平行化部分與非平行化部分。 推論:限制資料的視野 兩個執行緒修改共享物件的同一個欄位,就會互相干擾。 可用關鍵字 synchronized (同步化) 關鍵字保護共享物件的臨界區域(critical section)程式碼。 越多更多的地方可以更新共享資料,就越容易產生下列狀況: 忘記保護臨界區域 確認有效保護,會花上重複工夫 除錯困難 建議:資料封裝,限制共享資料的存取次數。 推論:使用資料的副本 複製就可以避免出現共享的情況,可以節省鎖定的時間,會付出額外物件與需要回收垃圾的代價。 推論:執行緒應盡可能地獨立運行 儘量讓每個執行緒有自己的世界,與其他執行緒不共享任何資料。 建議:試著將資料劃分成可以讓獨立執行緒操作的獨立子集合。 了解你的函數庫 Java5提供許多平行化開發的改善,應注意下列幾點: 使用函式庫所提供的安全執行緒集合(thread-safe collections) 使用executor框架來執行不相關的工作(?) 盡可能使用非鎖定(nonblocking)的解法 有幾個函數庫類別並不提供安全執行...

2018高雄市長選情卦例

       Destiny網站有網友問卜高雄市長選情,出現一個卦例非常有參考價值,還有網友要賭雞排。六爻易卦占卜只是「輔助工具」,並不是精通六爻占卜就能夠變成神,「京房善易死於卦」占卜再怎麼強也無法改變因果律。未來時時刻刻都有可能變化,占卜如果真的準確率高,大家可以不用工作,學占卜買股票賺錢了。六爻易卦占卜也不是都沒有用處,六爻易卦可以腦力激盪幫助占卜者思考、釐清現狀。 臉書朋友問高雄市長選情 網友得卦如下:                                       時日月年  空 驛 桃 貴 羊                                              亡 馬 花 人 刃                                        癸甲壬戊  辰 申 卯 未 卯             ...

世紀直球對決 觀後感 熱鬧有餘,精采不足

       高雄市長選舉又產生一項歷史紀錄,台灣首次有直球對決模式的辯論。國民黨參選人韓國瑜與民進黨參選人陳其邁1119晚間在三立電視台展開辯論,主帥親自上陣短兵相接。看完之後覺得熱鬧有餘,精采不足。雙方都出現閃躲對方問題的情況,猜想辯論會對選舉結果影響有限,很少人會受到辯論影響改變心中支持的人選。 影片網址 雙雄對決! 陳其邁.韓國瑜 世紀首辯 | 官方公訊 | 三立電視提供 辯論三階段   申論 交叉質詢,雙方陣營可詢問對方六個問題 結論   陳申論   耳機 母豬 招商 科技園區 傳統產業升級 陳有備而來,依然是打韓搞地域情結,指責韓煽動仇很。 陳這種言論只能鞏固基本盤,無法增加中間選民的票源。 韓申論 呼籲支持韓的人正派選舉,不要惡言攻擊競爭對手。 韓施展太極拳,用陳的言論反擊陳自己,陳初選的時候也說高雄又老又窮。 韓主張高雄是沈睡的巨人 面對問題才能解決問題 高雄問題有哪些問題? 負債三千億,中央有補助,又有賣地怎麼會負債那麼多? 人口零成長 就業機會 年輕人失業率 暴力犯罪   陳第一問 陳質疑韓批評高雄又老又窮,高雄漁港發展的細節問題?  。 韓第一答 根據2017年的資料斷定高雄又老又窮,反問高雄的錢到哪裡去?二十多年立法委員你在做什麼? 韓認為財政最重要! 這回合交鋒韓處於不利的地位,陳故意問細節的問題刁難韓,韓避而不答反問高雄的錢到哪裡去?不懂的民眾容易被陳誤導韓不懂高雄市政,實際上市長抓大方向,不需要了解枝微末節。 韓第一問 錢到哪裡去了?陳要如何解決高雄財政問題? 陳第一答 陳問東答西,扯到台積電也負債很多。 說要招商,沒有什麼具體措施解決財政的問題。 轉移焦點說淹水,高雄很可憐錢少少。 陳進行人身攻擊,只會說這你不懂啦! 陳還是沒有說錢到哪裡去了?為何高雄負債三千億? 陳第二問 高雄石化產業的發展? 韓第二答 石化搬遷的問題,管線的問題。 韓轉移到太平島挖石油,經濟部核准中油太平島海域探勘石油。 韓有在思考要如何還債。  韓質疑陳是雙重標準否認同石油開採。 這一回合交鋒韓選擇迴避陳的石化產業問題。 韓第二問 韓提出毒品氾濫情況,影響家庭、教育問題。 陳第二答 陳推有成立新單位。說自己有市政經驗。反擊韓對市政不了解。 反問是否支持石化產業稅藉放...