# Clean Code * Ch1 - 無瑕的程式碼 1. 重構程式碼不要說待會 *(勒布朗克法則 Law later equals never)* 2. 每個Function、Class、Module 都要能表達單一的意圖 3. 真正用心照料過的程式碼,你會找不到可以改良的地方 4. 撰寫程式是為了解決問題而存在,而不是把問題複雜化 5. 撰寫程式碼的難易度,取決於周遭程式碼的可讀性高低 * Ch2 - 有意義的命名 1. 名稱要能代表程式意圖 2. 使用很好被搜尋的名字 3. 使用能唸得出來的名稱 4. 不要用會造成混淆的單字 5. 取出用get、修改用set * Ch3 - 函式 1. 開發有兩項準則,一是簡短;二是比一更簡短 2. 函式應該只做一件事,並且把這件事給做好 3. 用高中低層次將每個函式拆到只剩一個抽象概念 4. 軟體歷年來的創新,都是為了消除重複的程式碼 5. 寫程式要像說故事一樣,簡單明瞭無冗詞贅字 * Ch4 - 註解 1. 好的註解提升程式碼的用意,反之則是變更亂 2. 若某些細節容易被忽略,就可用註解強調重要性 3. 若程式碼本身就能清楚表達意思就不用寫註解 4. 被註解掉的程式碼是最可怕的,會讓人不敢動它 5. 條列式註解是很容易弄亂模組且枯燥乏味的 * Ch5 - 編排 1. 程式碼的編排要井然有序,並且要保持一致 2. 要像報紙一樣利用空行將不同區塊給區分開來 3. 關係緊密的程式碼要盡可能的離彼此相近一點 4. 檔案 > 類別 > 方法 > 主程式 > 子程式 5. 一行程式碼的寬度應以不滾動捲軸往右為基準 * Ch6 - 物件及資料結構 * Ch7 - 錯誤處理 1. 將商業邏輯與錯誤處理的區塊給切割開來 2. 將第三方庫與自定義錯誤給包裹(wrap)起來 3. 發生錯誤時應提供詳細資訊(who、how...) 4. 不要回傳Null,因為會添加判斷Null的負擔 5. 也不要傳遞Null,除非該函式已做相關處理 * Ch8 - 邊界 1. 別在系統傳遞第三方API,否則一變動就會大量修改 2. 同上,也能封裝第三方API,寫進自訂的API方便控管 3. 用學習式測試來熟悉第三方API,一邊測試一邊開發 4. 可以用ADAPTER來作為已知與未知的API之間的橋樑 5. 同上,之後只需修改ADAPTER,達到隔離邊界的效果 * Ch9 - 單元測試 1. 撰寫單元測試,可以增加對系統的信心,也不怕會改壞 2. TDD(測試驅動開發),先寫完測試後再進行功能開發 3. 測試也需整潔,同時要有可讀性與清楚表達意圖 4. 建立假資料 > 對假資料進行操作 > 驗證回傳結果 5. 一個測試一個概念,每個測試都只有一種存在的理由 6. F.I.R.S.T 快速:執行得快、獨立:不該互相依賴 7. 複用:不受環境限制、驗證:呈現結果、及時:TDD * Ch10 - 類別 1. 單一職責 (Single Responsibility) 2. 開放封閉 (Open Close) 3. 里氏替換 (Liskov Substitution) 4. 介面隔離 (Interface Segregation) 5. 依賴反轉 (Dependency Inversion) * Ch11 - 信長的野望重製小隊- 2020新年快樂✧*。٩(ˊᗜˋ*)و✧*。 在這新的一年我們會繼續努力... 【基本資訊】 職務:遊戲產品工程師 公司:響雨互動娛樂有限公司 工作地點:遠端 薪資條件:55,000 回覆相關:面試後7日內無論錄取與否都會進行通知。 【工作內容】 第一階段 1. 維護Dota2信長運行、串接Rank配對系統、Skin系統等等 2. 維護資料站官網 第二階段 1. 開發信長相關的新遊戲(使用unreal engine) 2. 以循序漸進的方式開發信長相關的遊戲。 公司產品相關影片連結: https://www.youtube.com/watch?v=163AueG-OI8 【必要技能】 無 【加分條件】 *熟悉Dota2地圖製作 *熟悉JS、TS、Angular等網頁開發相關技能 *熟悉Steam、Android、IOS等各式平台上架流程 *熟悉C++、Unreal Engine專案開發 *熟悉Rust、Actix專案開發 *熟悉Lua、OpenResty, Lapis專案開發 *熟悉Linux系統 *熟悉Mysql資料庫