※ 本文為 layzer 轉寄自 ptt.cc 更新時間: 2019-06-06 14:07:21
看板 Soft_Job
作者 標題 Re: [請益] 後端工程師要如何更優秀
時間 Wed Jun 5 12:17:53 2019
大概提一些個人覺得有用的觀念, 可以做的方向以及建議順序
一些個人覺得蠻有用的觀念, 寫在前面
* 聚焦在目的, 而不是工具/方法/手段
打個簡單的比方,
做出好吃的料理是目的, 而用什麼器具、料理方法、調味方式是手段,
具焦在用的器具或調味品或許能讓你找到最棒的鍋子 (?) 跟調味料之類的,
但另一方面也可能讓你一旦沒有那特定的鍋子可用就成了料理白痴
反之具焦在做出好吃的料理,
思維上就會是 "有哪些工具/哪些材料的前提下, 如何能做出好吃的料理"
也會促使你研究、實踐各種手段來試著達到該目的,
並反思優/劣/利/弊/能如何再改善調整等, 多加上反思會更能進步
* 凡是都有代價
有這個觀念, 你就不容易只是停留在 "用工具/方法/手段" 的階段,
它會促使你學一樣新東西時,
主動搜尋
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
I don't love the single responsibility principle
Personal site of Marco Cecconi ...
Personal site of Marco Cecconi ...
然後是一些能精進的方向
* 讓程式易讀、易改、容易擴充、不容易改東壞西
這部份就是你目前有在嚐試的 OOP/SOLID, 剛開始這就很夠了,
前面有人推的 Clean Code 跟 Clean Architecture 也可以看看,
ref: https://www.books.com.tw/products/0010579897
https://www.books.com.tw/products/0010786994
網路上還找得到有人對 Clean Code 做的重點整理
ref: http://gitqwerty777.github.io/cleancode/
clean code(無瑕的程式碼)心得 | qwerty
僅節錄我認為有助益的。(書中有蠻多java的重構範例) ...
僅節錄我認為有助益的。(書中有蠻多java的重構範例) ...
其它像 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.books.com.tw/products/0010309237
https://www.books.com.tw/products/0010399556
不過要注意, 目的是 讓程式易讀、易改、容易擴充、不容易改東壞西,
而 OOP/SOLID 其它原則和模式等則是 工具/方法/手段,
要時時注意使用它們有沒有什麼代價, 是不是過了某個界線就會讓代價大於好處,
以免為了貫徹手段而忘了目的
* 讓程式效能好,執行速度快、使用的資源少
這部份說來很多很雜
首先 OS 是要的, 不用全部很熟, 但最少有一些基本知識,
例如速度是硬碟 < 記憶體, 記憶體不足會引發 Thrashing
Process 吃的資源比 Thread 多,
例如速度是硬碟 < 記憶體, 記憶體不足會引發 Thrashing
Process 吃的資源比 Thread 多,
多 Thread 對 IO bound 比對 CPU bound 的問題有效果
存取同一變數需要處理鎖定問題等
然後資料結構跟演算法是必要的, 這部份雖然不用急著補, 但補越多效果就越好,
最開始先知道 Array/List/Linked List/Queue/HashSet/HashMap 等的差異
就會有不少的幫助, 推薦經典教科書 Introduction to Algorithms
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 溝通,
多了解領域知識, 就能更好的和 SA/SD 溝通,
更了解前端或機器/系統, 就能更好的和前端工程師或維運人員溝通,
也對開發及查問題有幫助,
比方前後端怎麼分工, 哪些前端處理哪些後端做, 沒反應是不是前端就沒送,
連不到請維運開一下防火牆,
一直掛是不是清硬碟的排程沒有跑或實體機器資源不夠等等
建議順序
大至上就是 前置少, 影響大的優先, 前置多, 影響較小的放後面,
但也不必一個學完才學另一個, 可以併行,
看個人取捨
OOP/SOLID 及各種其它原則等
前置: 使用的語言的基礎
影響層面: 大, 影響到日常開發、效能調整、測試除錯等各個層面
需要時間: 極長, 基本上等同於你的開發生涯,
會不斷在不同情境下有不同的想法, 持續修正
unit test
會不斷在不同情境下有不同的想法, 持續修正
unit test
前置: 使用的語言的基礎, unit test 工具
影響層面: 大, 做各種修改時可以更放心大膽的改,
改完後幾秒內知道有哪裡壞掉
需要時間: 短, 基本上有固定套路
設計模試
前置: 使用的語言的基礎, 及一些較進階的語法
影響層面: 大, 影響到日常開發、效能調整、測試除錯等各個層面,
需要時間: 極長, 基本上等同於你的開發生涯,
會不斷在不同情境下有不同的想法, 持續修正
OS
會不斷在不同情境下有不同的想法, 持續修正
OS
前置: 無
影響層面: 中, 主要是對效能調整及除錯有幫助
需要時間: 長, 很多東西一下子可能不太能理解,
需要時間: 長, 很多東西一下子可能不太能理解,
建議記錄下來後先略過, 時不時再回頭重看及查資料
不必非要搞清楚後才繼續, 快速增加能吸收的東西比較重要
資料結構跟演算法
前置: 基本邏輯, 一些些基本數學
影響層面: 大, 除了效能, 也影響架構程式及整體系統的能力
需要時間: 極長, 基本上等同於你的開發生涯,
會不斷在不同情境下有不同的想法, 持續修正
容器、CI/CD、shell/batch script
會不斷在不同情境下有不同的想法, 持續修正
容器、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 (臺灣)
※ 文章代碼(AID): #1Szq9umH (Soft_Job)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1559708280.A.C11.html
※ 同主題文章:
06-02 10:42 ■ Re: [請益] 後端工程師要如何更優秀
06-03 11:50 ■ Re: [請益] 後端工程師要如何更優秀
● 06-05 12:17 ■ Re: [請益] 後端工程師要如何更優秀
推 : 感謝大大1F 06/05 12:24
→ : 最近是怎樣 U值文大噴發2F 06/05 12:41
大概大家看到想精進的人都很興奮 XD
推 : 感謝分享3F 06/05 12:42
推 : 推 講的很詳細!!4F 06/05 12:52
推 : 這篇讚5F 06/05 13:33
推 : 大推 你人真的非常好6F 06/05 14:22
看情況, 只能說人都有不只一種面貌 @@
推 : 推推7F 06/05 14:36
推 : 好文推8F 06/05 16:56
推 : 謝謝大大,提供好的文讓軟工版起飛QQ9F 06/05 19:45
→ : 不要再躲了,快去自首,你就是兇手。10F 06/05 22:27
對不起我承認桌上的銅鑼燒是我吃晫的 QQ
推 : 推 幫找個錯字 exception 那邊應該 cache => catch11F 06/05 22:41
已改 0rz
※ 編輯: lovdkkkk (36.231.217.216 臺灣), 06/05/2019 23:18:58
推 : 推推,真的謝謝你的分享!12F 06/06 00:13
推 : 推13F 06/06 00:36
推 : 近期真的U值文連發,給推14F 06/06 07:10
推 : 好文15F 06/06 07:55
推 : 好文 謝謝分享16F 06/06 09:42
推 : 讚17F 06/06 09:52
推 : 推18F 06/06 10:38
推 : 好文推推19F 06/06 11:50
推 : 推! 謝謝你的分享20F 06/06 12:41
--
※ 看板: layzer 文章推薦值: 0 目前人氣: 0 累積人氣: 424
回列表(←)
分享