每位開發者都該看:如何在四十歲後還能繼續從事軟件開發?

這是一個 42 歲的開發者所寫經驗分享文章.而且列出一些他 18 年多身爲軟件開發者的經驗談.許多部分看完後都會但願本身當時就可以瞭解,因此很推薦不管是新手或是老手都要好好閱讀這一篇文章。前端

故事很長,一切從 1997 年開始講起.那是一個使人懷念的年代(FF7 發售,微軟入股蘋果,鐵達尼號電影上映),那是做者第一年身爲軟件開發者的年份。當時他的第一份工做是從事 ASP 而且在微軟的平臺上面使用 EditPlus。十八年過去,做者一共作過六份工做,其中被炒魷魚兩次,出過兩本書,從事過很多演講。他整理了他的一些心得,但願年輕的開發者(或是有志將軟件開發做爲終生志業的人)一些建議,條列以下:編程

  1. Forget The Hype (忘記各類程序語言與架構的炒做與熱潮)後端

很多的新的語言與技術來來去去,做者不是要你別去學習新事物,而是不要由於有太多的新事物而恐慌或是自我放棄。持續鑽研你目前在學習的,而且能夠每一年挑一些你有興趣的項目深刻了解。性能優化

[反觀我本身]:各類後端與前端語言來來去去,我把時間花在學習 Python(會持續), Ruby,Scala(會持續)與 Golang(會持續)。透過使用 Golang 能夠有更多的時間去了解系統架構與直接面對問題,讓寫代碼變得更有趣。架構

  2. Choose Your Galaxy Wisely(慎選你的星系)併發

爲了維持原文的意思,我仍是使用星系這個字。這邊指的是你學習跟從事的技術要慎選,舉例而言,微軟星系(泛指: .Net、C# ….)或是 Apple 星系(Objective C++、Swift …)。慎選你喜歡的星系,由於那會影響你將來的發展。socket

[反觀我本身]:過去十年主要針對微軟星系,目前主要就是後端的 Ubuntu 星系 ,各類後端程序語言都是我目前主要的重點,固然還有 Docker 相關技術。分佈式

  3. Learn About Software History(瞭解各類軟件的歷史)ide

做者認爲若是你喜歡一種程序語言、一種架構,你就須要好好的瞭解它的由來與故事。微服務

[反觀我本身]:好比說我喜歡 Golang ,我就應該要了解如下的一些問題:

  • Golang 是誰發明的?

Ans:由 Google 內部的三位大神 Robert Griesemer,Ken Thompson(C 語言的共同發明者)與 Rob Pike(UTF-8 的共同發明者),在 2007 年於 Google 內部共同起草發明。

  • 他主要解決什麼問題?爲什麼之前作不到?

Ans:根據第一份 Golang Talk

緣由爲:

  1. Go fast!
  2. Make programming fun again.
  3. 世界在變,可是系統語言卻已經十年沒變。
  4. 系統語言每每編譯太久。
  • 爲什麼之前作不到:(在舊的程序語言上作不到)

新增函式庫不是一個正確的方向。

須要重新思考整個架構來開發新的程序語言。

  • 目前這個技術的最新情況如何?

Ans:Golang 目前是 1.6.2 (2016/05/03) ,而且支援 HTTP2 而且能夠透過 gomobile 在手機上也可使用相關套件。

  4. Keep on Learning (持續學習!)

不論你喜歡哪些新的技術或是新的程序語言,你都應該持續的學習,裡面而且建議:

每一年學習一個新的程序語言。

每一年讀六本書。(做者推薦 Peopleware、The Psychology of Software Programming、Facts and Fallacies of Software Engineering、Agile!: The Good, the Hype and the Ugly、Rework 跟 Geekonomics,都是好書。)

[反觀我本身]:

程序語言部分: 2014 (Ruby, Scala) 2015 (Go, Swift) 2016 尚未決定.

讀書部分:每一年讀沒有超過六本書,可是讀過很多論文而且有上過一些 MOOCs。

  5. Teach(指導其餘人)

這邊指的不是必定要開堂授課,你能夠寫一篇部落格來說解你學習的新事物,由於教導是最好的學習方式。

[反觀我本身]:還好部落格歷來沒停過,我的也認爲寫部落格的過程可讓我不斷地檢視我瞭解的部分,而且弄懂全部的細節(但願!),不過仍是但願可以多多指導其餘人(好比說 meetup 或是 talk)。

  6. Workplaces Suck(工做場所糟糕透了)

不要去指望軟件公司會給你任何職涯的規劃,相反的很多公司會將你認爲是另一種的勞工,只會將你放在你擅長的位子,因此也有軟件公司變成血汗工廠的相關文章。做者同時也認爲開放性座位對於須要高度腦力工做的軟件工做者是一種最很差的設計(使用 「cancer」 這個詞)。而對於工做上的指派,做者也建議你們應該要好好了解每一個任務的內容.有任何疑問應該要提出來討論,對於不瞭解的事物盲從是最很差的,應該不惜抗拒權威或是離職纔是正確的選擇,不要讓這樣的工做風氣扼殺了你的熱情。

[反觀我本身]:我一貫對於任何」不合理」的任務指派都會有意見,甚至不斷地提出抗議。(固然結果可能都很差!)可是若是由於這樣就不提出,那麼咱們還剩下什麼呢?

  7. Know Your Worth(瞭解自個人市場價值)

這篇是要你們充分的瞭解本身的市場行情(也就是薪水),根據這篇文章一般一個軟件工程師應該要能創造出他本身薪水等級的十倍價值。事實上可能遠遠不止如此,因此做者建議咱們要勇敢地去爭取更多的薪水,甚至你能夠公開你的薪水等級,讓更多人知道你是否被低估(或是高估)任何(自認爲)有你相同能力的人,都應該拿到同樣的待遇。

[反觀我本身]:這件事情還真是難作到,在一間公司待久以後,最容易下降的就是薪水提高的幅度。這件事情還得努力學習,讓本身的市場價值更高.同時咱們也要不斷檢視,咱們本身能不能創造出本身薪水的十倍價值。

  8. Send The Elevator Down (虛心地接受任何意見)

這邊個人解讀可能跟做者原先的不一樣。他有提到膚色與種族的優點,可是我想到的倒是你的職位,你可能會聽到許多來自於部下或是後輩的建議(或是批評)。不要快速地想要反駁或是抵制,充分的瞭解事後,或許能夠坦誠本身的看法或許是有盲點的,必要時甚至能夠道歉而且快速修正。如同許多書上有提到的:「你僱用一個員工,必定是要比你還強的,這樣你才能將事情交給他辦,你本身作更須要更大視野的任務。」

[反觀我本身]:參加社羣后,最容易有這種感受:太多使人欽佩的後輩了,每一個人都有着淵博而清楚的知識。咱們不須要否定,更不須要去挑惕或是批評,咱們要謙虛的接受而且吸取,成爲咱們本身的營養。

  9. LLVM(一個自由軟件專案,是一種編譯器的基礎建設,以 C++ 寫成)

做者認爲 LLVM 會是下一個重要的資訊業的星系(Galaxy) ,目前已經有許多的程序語言支援 LLVM 了。因此做者建議咱們能夠花一些時間去了解,或許去學習相關的程序語言。

[反觀我本身]:雖然 Python 與 Swift 都有學習,可是還不是我最上手的程序語言之一。這一個部分我會好好謹記於心,好好學習。

  10. Follow Your Gut(相信你的直覺)

做者在 2000 年就以爲 .NET 會引領接下來的幾年,在 2007 年 iPhone 的發表會就瞭解他的相關技術會是緊接着幾年的發展趨勢。

固然,這是做者的直覺。可是,你也應該充分地相信你的直覺,而且努力的去追求與學習。

[反觀我本身]:我在 2014 年開始學習許多不一樣的程序語言, Python, Ruby, Objective C, Java, Swift, Scala 與 Rust。最後學習到 Golang,我直覺認爲 Golang 會是 Server-side (或是說 Service-side)最重要的程序語言之一,因此我會努力學習。

 11. APIs Are King(API 是王道)

這邊很推崇好的 API 設計是很重要的,不只僅影響 server 與 client 的溝通,更會影響到好的軟件品質。也提出 chunky is better than chatty (簡單的說:就是不要將 API 拆的太精簡,使得 API call 須要往來至關的屢次。)

同時做者也建議不要太依賴 REST ,不彷看看 socket.io, ZeroMQ, RabbitMQ, 或是 Erlang。而且也應該開始架設本身的機器人。

[反觀我本身]:沒有想過,原來 chunky 的設計準則在某些情況下居然比 chatty 更好,這得好好學習。我有架設本身的機器人來幫助我處理一些平常伺服器維護的瑣碎事項。

 12. Fight Complexity(將複雜的事情簡單化)

永遠要秉持着 KISS 原則(「Keep it short and simple」)來處理任何事情. 面對困難或是負責的事情,有着很多工具能夠幫助你將設計簡單化。

[反觀我本身]:我一直認爲可以越有能力的人,越可以將複雜的事情簡單的講解,或是寫成一段簡單的程式碼來實現,這個能力是咱們都要不斷學習的。

 Conclusion(結論)

「年齡永遠不會是一個問題,只要你的心不斷催促你持續寫代碼,持續製造新的東西,你永遠都會是年輕的。」

這是做者給咱們的結論,他也但願咱們可以保持一顆年輕的心,不斷學習。 

在這裏也給你們推薦一個學習交流羣:650385180,裏面會分享一些資深架構師錄製的視頻錄像:有Spring,MyBatis,Netty源碼分析,高併發、高性能、分佈式、微服務架構的原理,JVM性能優化、併發編程這些成爲架構師必備的知識體系。還能領取免費的學習資源,如下的課程體系圖也是在羣裏獲取。

 

舒適提示

若是你喜歡本文,請分享到朋友圈,想要得到更多信息,請關注我。

有什麼想法能夠評論留言。

相關文章
相關標籤/搜索