跟敬姐讀《程式設計師的自我修養》

2023-11-30 06:01:07

最近剛讀完陳逸鶴老師的《程式設計師的自我修養》,結合敬姐十幾年的程式設計師生涯,分享給大家。

短視訊為王的時代,為什麼要閱讀?

敬姐也曾經有過這種想法,讀過的書,不管當時覺得多麼震撼和共鳴,過一段時間好像都會忘記。那我們還為什麼要花費時間去閱讀呢?我贊同這本書裡面的一段話:

閱讀就像是跨越時空的對話,這本書中的一些文章可能讓你產生共鳴,一些可能對你有所幫助,而另一些你可能並不喜歡甚至感到厭惡,但這恰恰說明你在閱讀的過程中進行了思考,我的想法蹦到了你的腦子裡,衍生出你的新想法,這個連鎖反應在你腦中反覆激盪,最終讓你看得更加透徹,思考得更深入,而這才應該是本書的真正目的和意義所在。

另外關於閱讀範圍,不要只侷限於技術書籍。我們可以涉獵任何歷史、經濟、人文、藝術類的書籍,它們都能夠幫助你豐富自己的知識和思想,使你變得更加全面和完善,而這反過來又能幫助你建立信心。

關於修煉技術硬實力

從業程式設計師十幾年,並沒有成為業界大佬,還是個認真的螺絲釘。關於書中提到的對程式設計師的幾點啟示,還是有感而發:

「優秀的程式設計師往往會被同天才或高智商的人聯絡在一起,但我想告訴你,你周圍所看到的那些天才只是在你沒看到的時候花了更多時間工作或者學習而已,當你也堅持這麼做時,你也會變得和他們一樣優秀。」

身邊確實遇到過一些優秀的同事,無論技術水平,還是做事風格,都值得學習,除了聰明,他們的努力是不容置疑的。

我們使用的技術在變,軟體領域的實踐方法在變,我們所做的專案在變,公司的組織架構在變,我們自己的職位和角色在變,甚至還有我們的老闆也如走馬燈般換來換去。面對層出不窮的新技術,我們要去理解軟體領域最根本的知識,掌握一些最佳實踐。比如瞭解GOF模式最佳實踐有助於我們快速掌握各種框架的原理;理解SOA或者微服務架構;理解DEVOPS運維理念;此外還需要掌握網路運維、效能調優、程式碼優化各方面的最佳實踐。這些最佳實踐或由此衍生出來的框架、工具都是那些富有經驗的程式設計師通過大量實踐,總結出來的最優秀的軟體開發思想。

關於一些軟技能

開發技能是你的硬實力,而附加技能則可以看作是你的軟實力,只有同時具備這兩方面技能,才能成為一名優秀的全棧工程師。

適當的自我行銷

除了那些經常掛在嘴邊的誠實守信、踏實肯幹、嚴謹之外,我們不難發現,那些業界大佬普遍具備的一種能力就是自我行銷,這一點對程式設計師同樣適用。自我行銷往往能夠有效地放大你所做的努力,並且在你成功的道路上起到催化劑的作用。

建立自己的個人品牌

比如打造一個個人網站、寫技術部落格等。在建立個人品牌的初期,很少有人會關注你,寫一個技術部落格會是不錯的選擇 ;還有就是開源自己的業餘專案。

跳出程式設計師思維

程式設計師們其實是依靠他們所特有的程式設計師思維在進行程式設計,而他們中的佼佼者正是那些有著更高思維成熟度的優秀程式設計師們。我們必須通過大量地學習程式設計之外的各種知識來完善自己的知識體系,並從中獲得不同的視角。

新一代的程式設計師不僅需要具備很強的程式設計能力,我們還要學會跳出程式設計師思維,站在使用者、設計師、產品經理的不同角度去進行分析和判斷的能力。那些真正優秀的程式設計師在與使用者進行溝通時,總是試圖去理解使用者所提出需求背後的真正原因,因為他們知道使用者往往會按照自己對問題的理解去給出他們認為正確的方案,而很多情況下,他們所給出的並不是正確或是最優的。那些優秀的程式設計師會站在使用者的角度,認清問題,並像專家一樣給出他們認為最優的方案。

團隊的力量

你不應該成為一匹獨狼,優秀的程式設計師絕不孤單,他們的身邊不乏志同道合者,這可能也是他們能夠變得越發出色的原因吧。

一些最佳實踐

重構新思路-微服務

持續重構就是我們給系統做的保養,這對於保證系統的穩定執行非常關鍵。  在做關鍵功能重構時所採用的步驟:

  • 詳細Review該功能的需求。
  • 針對需求,完善自動化單元測試案例。
  • 將這部分單元測試的執行引入到每次自動化構建中。

作者介紹了利用微服務進行重構的方案,這個沒有實踐,不失為一種新的思路:

「微服務並非是一個全新的架構方法論,而是對SOA——面向服務架構的一次升級。它的出現源於雲端計算、容器技術、DevOps等技術,以及全新運維理念的不斷成熟。 由於採用微服務架構,所以我們並不會在原有系統上進行重構,而是建立一個新的基於Spring Boot的專案,將原有系統的功能,逐步拆分成一個個服務,並將它們新增到新的專案中,然後利用一些開關設定,將原有功能平滑地切換到新的基於微服務的系統中,這是與以前系統重構的一個很大區別。      
由於採用微服務架構,所以我們並不會在原有系統上進行重構,而是建立一個新的基於Spring Boot的專案,將原有系統的功能,逐步拆分成一個個服務,並將它們新增到新的專案中,然後利用一些開關設定,將原有功能平滑地切換到新的基於微服務的系統中,這是與以前系統重構的一個很大區別。  」

測試

關於單元測試:測試一定是用來證明特定需求是否得到滿足的,你應該為那些可能存在不確定性的需求或者對外提供的服務來編寫全面的測試案例,而不僅僅是為了滿足測試覆蓋率,去給那些明明知道必然正確的實現細節做測試。

優秀程式碼

優秀的程式設計師不僅熟練掌握一門程式語言的語法和語意,他們還會:

  • 掌握這門語言的使用哲學:包括那些最佳實踐、設計模式及它們背後所蘊含的原則。
  • 他們能夠熟練地使用IDE,他們不依賴選單,而是使用快捷鍵來操控程式碼,從查詢檔案、文字編輯到格式化程式碼、文字替換都儘可能使用快捷鍵,這使得他們的開發工作更加連貫,也更高效。
關於程式碼易讀性

作者的觀點有些獨到,卻也有幾分道理「因為程式碼並不是自然語言,它本來就是難以閱讀的,況且程式碼是否易讀不僅與程式碼本身有關,還與閱讀程式碼的人對系統的理解程度,以及他們自身的技術水平有關 「。

為什麼團隊要構建自己的應用框架?

在大多數情況下,構建應用框架的目的並不是為了給開發者提供一個比Spring更強大的框架,恰恰相反,它們在大多數時候,是為了限制框架的使用,而使整個系統變得更加標準且易於維護。 架構師應該承擔起應用架構、程式碼規範制定、系統介面定義、技術風險識別、指導團隊開發等很多工作。

關於程式碼設計

我總是不鼓勵程式設計師們去寫過多Hack Code或為了引入那些不必要的可設定功能而使整個系統過於複雜。千萬不要在剛瞭解一個新的技術或者模式的時候,手裡拿著錘子,看啥都像釘子。

關於35歲

都說不想當將軍的不是好士兵,可是敬姐多年來一直樂於當個好士兵,和自己團隊的小夥伴衝鋒陷陣拿下眾多專案,並以團隊為榮。與優秀者同行,你也將變得更加優秀。

最近幾年,所有大中長都降本增效,於是35歲畢業不再是戲謔,而是身邊的現實。直接的方向和良藥本人也沒有找到,但是從個人角度而言,三十多歲正是經驗十足、生活穩定、性格各方面都有所積累的好年紀,希望整個環境能慢慢改變吧。

至少在我們還有機會從事自己喜歡的行業時,努力做好自己的每一件事,即便是一個螺絲釘,也要留下自己的一絲痕跡。即便大環境卷也好,反捲也罷,要保持自己的初心不改。

有很多因素會使一名程式設計師走向平庸,而最最直接的便是失去對程式設計的熱情和興趣。當一名程式設計師不再能夠感受程式設計所能帶來的樂趣時,程式設計對他來說,只是一項不得不去完成的工作,而他也將失去繼續學習的動力,無法再與優秀沾邊了。

關於前途,作者提到:「像企業一樣運作:即使你沒有成立公司,你也應該把自己當作一個公司來進行運作。這意味著你需要懂得最基本的銷售、市場、財務及商務知識。 請記住,一名自由程式設計師總是需要很長的時間才能建立起自己的行業聲譽,而一個草率的決定往往就能使之前的所有努力化為烏有。」

關於生活

關於程式設計師職業,有一種普遍的印象,格子衫、面對電腦、孤言寡語、不懂生活,也許片面了些,但是反映了一個普遍問題, 那便是程式設計師不懂得生活。我希望每個程式設計師都能明白工作、技術、寫程式碼這些並不是你存在的意義,而生活才是,你需要懂得生活,並且學會生活。

拿敬姐本人來說,其實從小沒有運動的習慣,結果工作沒幾年就出現頸椎病和滑鼠手的症狀。後來有意識的開始鍛鍊,結識尊巴舞蹈,到現在變成了一種愛好。個人感覺身體健康狀況和精神狀態都有了明顯的改善。

程式設計師普遍有熬夜的習慣,其實對於每個人來說睡眠都非常重要,通過犧牲睡眠來獲得一兩個小時的時間,到頭來只會是惡性迴圈,得不償失。合理安排時間,提升效率,努力做到11點睡覺。

最後

寫部落格的這些年,主要都是伴隨著技術棧的技術文章系列為主,第一次寫非技術類的文章,也歡迎大家多多分享自己的觀點