看板 Soft_Job 關於我們 聯絡資訊
大概提一些個人覺得有用的觀念, 可以做的方向以及建議順序 一些個人覺得蠻有用的觀念, 寫在前面 * 聚焦在目的, 而不是工具/方法/手段 打個簡單的比方, 做出好吃的料理是目的, 而用什麼器具、料理方法、調味方式是手段, 具焦在用的器具或調味品或許能讓你找到最棒的鍋子 (?) 跟調味料之類的, 但另一方面也可能讓你一旦沒有那特定的鍋子可用就成了料理白痴 反之具焦在做出好吃的料理, 思維上就會是 "有哪些工具/哪些材料的前提下, 如何能做出好吃的料理" 也會促使你研究、實踐各種手段來試著達到該目的, 並反思優/劣/利/弊/能如何再改善調整等, 多加上反思會更能進步 * 凡是都有代價 有這個觀念, 你就不容易只是停留在 "用工具/方法/手段" 的階段, 它會促使你學一樣新東西時, 主動搜尋 XXX advantages/disadvantages/drawbacks XXX vs OOO XXX OOO tips XXX best practice 然後認真仔細地看上二三十篇文章, 去了解它的好與壞, 這讓你在學東西的廣度與深度上能有很大的改善 比如說 SRP 你可能就會找到這個 https://sklivvz.com/posts/i-dont-love-the-single-responsibility-principle 然後就可以看一看, 想一想, 再吸收成自己的東西 然後是一些能精進的方向 * 讓程式易讀、易改、容易擴充、不容易改東壞西 這部份就是你目前有在嚐試的 OOP/SOLID, 剛開始這就很夠了, 前面有人推的 Clean Code 跟 Clean Architecture 也可以看看, ref: https://www.tenlong.com.tw/products/9789862017050 https://www.tenlong.com.tw/products/9789864342945 https://www.books.com.tw/products/0010579897 https://www.books.com.tw/products/0010786994 網路上還找得到有人對 Clean Code 做的重點整理 ref: http://gitqwerty777.github.io/cleancode/ 其它像 KISS, Composition over inheritance, convention over configuration 也都是簡單又好用的一些原則 ref: https://bit.ly/2WoLIPI , https://tw.twincl.com/programming/*662v , https://bit.ly/316hYFO 另外可以學一下設計模試, 像 深入淺出-設計模式、 重構--向範式前進 都是不錯的書, ref: https://www.tenlong.com.tw/products/9789867794529 https://www.books.com.tw/products/0010309237 https://www.books.com.tw/products/0010399556 不過要注意, 目的是 讓程式易讀、易改、容易擴充、不容易改東壞西, 而 OOP/SOLID 其它原則和模式等則是 工具/方法/手段, 要時時注意使用它們有沒有什麼代價, 是不是過了某個界線就會讓代價大於好處, 以免為了貫徹手段而忘了目的 * 讓程式效能好,執行速度快、使用的資源少 這部份說來很多很雜 首先 OS 是要的, 不用全部很熟, 但最少有一些基本知識, 例如速度是硬碟 < 記憶體, 記憶體不足會引發 Thrashing Process 吃的資源比 Thread 多, 多 Thread 對 IO bound 比對 CPU bound 的問題有效果 存取同一變數需要處理鎖定問題等 然後資料結構跟演算法是必要的, 這部份雖然不用急著補, 但補越多效果就越好, 最開始先知道 Array/List/Linked List/Queue/HashSet/HashMap 等的差異 就會有不少的幫助, 推薦經典教科書 Introduction to Algorithms https://www.tenlong.com.tw/products/9780262033848 https://www.books.com.tw/products/F011708546 其它比較雜、需要了解後端程式以外的部份 像了解使用的語言/框架的資源耗用狀況, 了解使用的伺服器對應不同的負載情形該如何設定, 這在不同語言/伺服器會不同, 例如 nodejs/nginx 和 Java/JBoss 就差很大 了解資料庫的運作也會有幫助, 能協助你規劃哪些事情由程式處理, 哪些靠 SQL 解決, 如何能盡量減少 lock 等等 對前端的認識也會有幫助, 能協助你決定流程該如何切分, 哪些事可以在使用者操作途中處理等等 不過以上這些有點雜, 可以放比較後面 * 讓程式容易佈署、設定 例如用設定檔或 DB 開設定的 table 而不要程式寫死, 讀檔時設法使用通用的方式等, 例如 JAVA 包成 jar, 包成 war 跟跑在 IDE 能用的資源讀取方式會有差異 這部份留意一下你的程式會更容易應用在多種情境, 而不會換個 package 形式就各種跳 error 這也是不急, 有空再了解就好 * 讓程式容易驗證、除錯 這有幾個部份, 適當的 Exception handle 方式, 不要隨便自己 catch 掉, 並設法讓 error log 有足夠的資訊且容易查閱, 自動測試則能讓你經常測, 早期發現問題較容易修, 對容器、CI/CD、shell/batch script 的熟悉 則能讓你容易佈署整個測試環境做整合測試 初期先以 log 及 unit test 為主就很夠能改進很多了, 有空再往下摸 * 能更好的和不同職能的人溝通 這部份就只能靠多了解其它部份的相關知識, 多了解領域知識, 就能更好的和 SA/SD 溝通, 更了解前端或機器/系統, 就能更好的和前端工程師或維運人員溝通, 也對開發及查問題有幫助, 比方前後端怎麼分工, 哪些前端處理哪些後端做, 沒反應是不是前端就沒送, 連不到請維運開一下防火牆, 一直掛是不是清硬碟的排程沒有跑或實體機器資源不夠等等 建議順序 大至上就是 前置少, 影響大的優先, 前置多, 影響較小的放後面, 但也不必一個學完才學另一個, 可以併行, 看個人取捨 OOP/SOLID 及各種其它原則等 前置: 使用的語言的基礎 影響層面: 大, 影響到日常開發、效能調整、測試除錯等各個層面 需要時間: 極長, 基本上等同於你的開發生涯, 會不斷在不同情境下有不同的想法, 持續修正 unit test 前置: 使用的語言的基礎, unit test 工具 影響層面: 大, 做各種修改時可以更放心大膽的改, 改完後幾秒內知道有哪裡壞掉 需要時間: 短, 基本上有固定套路 設計模試 前置: 使用的語言的基礎, 及一些較進階的語法 影響層面: 大, 影響到日常開發、效能調整、測試除錯等各個層面, 需要時間: 極長, 基本上等同於你的開發生涯, 會不斷在不同情境下有不同的想法, 持續修正 OS 前置: 無 影響層面: 中, 主要是對效能調整及除錯有幫助 需要時間: 長, 很多東西一下子可能不太能理解, 建議記錄下來後先略過, 時不時再回頭重看及查資料 不必非要搞清楚後才繼續, 快速增加能吸收的東西比較重要 資料結構跟演算法 前置: 基本邏輯, 一些些基本數學 影響層面: 大, 除了效能, 也影響架構程式及整體系統的能力 需要時間: 極長, 基本上等同於你的開發生涯, 會不斷在不同情境下有不同的想法, 持續修正 容器、CI/CD、shell/batch script 前置: 一些些基本命令列指令, 基本 OS 操作 影響層面: 中, 主要是佈署與測試的部份, 需要時間: 中, 基本操作可以很快上手, 建議可以先挑一組工具學會使用, 之後再慢慢補上其它相關知識 ※ 引述《csjs87 (思念的季節)》之銘言: : 各位年薪三百萬的大神們好,小弟不才又上來請益了。一年前為了選擇資策會的課程在版上發了問,有幸獲得許多人的回覆。 : 從資策會畢業、順利找到工作也一陣子了,現在月薪37k,主要是協助開發後端。但我碰到一些對於自己不足的地方,想再次請教各位。 : 一、 : 因為公司沒有一套完整的教育訓練或是架構的教學,所以即使我有嘗試在我負責做的小工具、api中盡量使用"我認為的oop觀念"、"solid的開發原則"。但還是不曉得是否正確,同事們大多也都很資淺,加上沒有太多時間幫我看(專案忙)。我要怎麼檢視自己的code是良好、容易維護的呢? : 二、 : 偶爾會看版上或是104徵才需要什麼樣的能力,為將來不管跳槽或是談薪水更有籌碼。我印象中常看到的有雲端架設相關(aws、azure)、程式設計上(單元測試、graph api)、其他(CI/CD、Docker容器、TDD)。雖然都有查過也大致知道是什麼,但也僅此而已,更不曉得知識還很淺薄的我有沒有誤會什麼。 : 三、 : 最後是一些比較底層的資料結構、計算機概論這類都幾乎是0知識。雖然計概有自己看台大開放課程的計算機概論,是多少有學到一些,但又好像不是我現在急迫必要的知識。聽說資工有本聖經恐龍本,看過目錄發現,很多都是我常常看到的陌生詞彙。I/O、thread、Process等等,我覺得好像不看懂這些我就很難更精進。 : 其實我本身不是“非常”熱愛寫程式的人,我會在寫code的時候為解出bug感到開心,也會邊騎車邊想程式的事,看到好像很神奇的新技術新聞也會很興奮,也想做side project,想使用新知識。但到了休假日,也很少真的著手進行。 : 總之我現在稍微有點迷惘,對於程式這條路我覺得我才剛起步,也不想離開。但學海無涯,光上面就太多東西要學。 : 根據我自己的感覺,只知道自己暫時還不太想鑽研前端。而對於我上面提到的各種知識,能怎麼安排、規劃比較好?謝謝大家。 : ----- : Sent from JPTT on my Sony G8142. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.154.169 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1559708280.A.C11.html
NAVYmaker: 感謝大大 06/05 12:24
MOONY135: 最近是怎樣 U值文大噴發 06/05 12:41
大概大家看到想精進的人都很興奮 XD
devilkool: 感謝分享 06/05 12:42
oceanblue21: 推 講的很詳細!! 06/05 12:52
b81314: 這篇讚 06/05 13:33
expup: 大推 你人真的非常好 06/05 14:22
看情況, 只能說人都有不只一種面貌 @@
v9290026: 推推 06/05 14:36
jeremy616: 好文推 06/05 16:56
cz75: 謝謝大大,提供好的文讓軟工版起飛QQ 06/05 19:45
lwtech: 不要再躲了,快去自首,你就是兇手。 06/05 22:27
對不起我承認桌上的銅鑼燒是我吃晫的 QQ
genius945: 推 幫找個錯字 exception 那邊應該 cache => catch 06/05 22:41
已改 0rz
genie920: 推推,真的謝謝你的分享! 06/06 00:13
umum29: 推 06/06 00:36
frankshih: 近期真的U值文連發,給推 06/06 07:10
molopo: 好文 06/06 07:55
showken: 好文 謝謝分享 06/06 09:42
IamTD: 讚 06/06 09:52
qwe85158: 推 06/06 10:38
aliasber66: 好文推推 06/06 11:50
LinNine: 推! 謝謝你的分享 06/06 12:41
cocoyan: 推 06/06 17:16
jack42107: 還是鼓勵大家支持天瓏書局啦 06/07 15:35
補上天瓏連結
jack42107: CD完了 補推 06/07 15:47
kasimEnix: 軟工需要更多的優文! 06/07 19:01
jlshoo: 推個 06/08 13:38
boy955403: 推推 感謝大大分享 06/08 18:18
※ 編輯: lovdkkkk (36.226.172.204 臺灣), 06/09/2019 11:20:53
king4647: 推 06/10 13:47
mirror0227: 實用推 06/11 13:22
vincentbiao: 推用心,感謝大大 06/11 22:25
games5602: 推 06/14 14:23
nicks0904: 推好文 07/04 20:38
cotbel: 推優質好文 07/09 23:15
ccnancy: 謝謝分享請收下我的膝蓋 04/23 11:35
papple23g: 推 內文很多都是痛過才知道重要qq 08/16 05:03