10208 4
2016-05-08 Dodu 公司動態

關于技術人員知識體系的思考

PS:網上已經有很多類似的文章,但我依然要再造一次“輪子”,因為多少有些不同的心得。

人生總有目標和追求

不管是誰,活著總是有方向和追求的,差別可能是有些人“高尚”一些,有些人“低俗”一些,有些人對自己的方向沒有那么堅定、今天定了明天可能就變了。 無論是短期或長期、高尚或低俗的目標或追求,都無關對錯,只是個體的選擇。(恩,我也不知道自己說了什么)

優秀的程序員應該有什么特征

特征 說明
興趣 也可以說好奇,保持對計算機相關領域的興趣甚至是激動,這是一個程序員的原動力
方法 優秀的人有一半是因為有好的方法或者好的習慣,如何學習、反思、總結、歸納
邏輯 不是程序員邏輯,而是理性邏輯
極致 優秀是“對比”之后才能體現出來的,追求極致才能更好,才可能優秀
耐性 無論學習什么,都是一個過程,熬不住的自然看不到下一個山峰,通常專家至少需要2年
迎難 優秀說明你做到了多數人做不到的事情,所以難題才能證明和驗證你自己
視野 站得高看得遠、站得高窺全局,可怕的不是你不會,而是你連不會什么都不知道
謙虛 不論如何強大,總有更強大;即使你最強大,變化也會讓你不再強大;多學多看多聽多思考
實踐 理論和實踐會幫助你強化興趣、記憶、理解、掌握

興趣

興趣是原動力

興趣是一個程序員進步的原動力,促使你不斷學習、不斷積累、不斷進步;
興趣可以讓你更大可能的打破環境約束,去嘗試自己喜愛的技術方向;
興趣可以讓你在遇到困難時有更強的戰斗力,提升突破難題的可能性;
興趣可以讓你抵御各種誘惑,保持對技術的專注;
興趣可以自然而然的讓你追求把事情做的更好;

培養興趣

培養興趣最簡單的做法是“獎勵”,當你完成一個看起來有難度的事情時,大腦會獎勵你:“哇塞,我好厲害”;當你完成一個工作上的難題時,老大會表揚你:“哇塞,你好厲害!”。

簡單的來說,興趣培養可以通過不斷的自我認可和外部認可來達成。 為了避免培養過程中你被打敗,應當盡量去選擇做一些“超出你能力一些、但是努力是可以達成、短期內可以看到成果”的任務。

以學習Erlang為例(把下面的內容當做清單寫下來,每做完一個打一個勾):

期間不做任何無關緊要的事情,例如看電影、KTV、同學一起去聚餐

  • 3天內看完語法
  • 1天內搭建好環境
  • 1天把前面1和2的事情寫個博客公布出去,記得:不要復制粘貼,字要自己打,圖要自己截
  • 3天的時間學習HTML+JS+Ajax,然后寫個簡單的Todo網頁應用界面
  • 1天的時間學會使用cowboy或者mochiweb,作為webserver使用
  • 2天的時間完成 HTML+Erlang的Todo應用的前后端
  • 2天時間把3、4、5、6的事情發表到博客上去
  • 3天時間學習PhoneGap引擎的基本使用
  • 2天時間修改你的web頁面以適應PhoneGap,然后打包為Android/iOS應用
  • 2天購買一個vps(大概幾百塊一年)并配置好Erlang運行環境
  • 將你的應用安裝到自己的手機上、發送給同學,根據反饋做修改

方法

  • 善用搜索引擎,google必須保證隨時可用
  • 學會找到優質的信息來源:微信號、微博號、知乎精華帖、博客、郵件列表、github
  • 不斷逼迫自己做的更好
  • 隨時記錄筆記,推薦:印象筆記
  • 不斷實踐
  • 多做總結和思考(按天、周、月、年)
  • 做好知識管理(KM)
  • 十五分鐘工作法和兩小時工作法
  • 看二手信息,但是不要過于信任二手信息

邏輯

邏輯大概是指人們思考問題的過程和方式,而程序員思維經常被當做貶義詞,因為多數情況下程序員思考問題像個計算機,并把這種思考模式帶到了生活當中。

然而我接觸到的大多數優秀程序員都并非如此,他們邏輯清晰、條理分明、表達順暢,也許他們的詞語不見的華麗,但是基本都是易于理解。

優秀程序員并不僅僅要求有很強的數理邏輯能力,也要有很好的生活、溝通邏輯能力,很多人先天性的認為程序員就不應該是善于溝通的,不太明白為何有這樣的看法(也許是因為某些天才程序員很孤僻?然而天才孤僻很正常,不管是不是程序員)。

至于誰是優秀程序員,這里不敢隨便列舉,免得被扔磚還引發別人誤傷。大概的標準有:

  • 多數并不熱衷各種會議,更加偏愛純技術會議
  • 在各自的領域都非常有建樹,看得見的成果
  • 知識廣博不狹隘,不會是某某語言粉這樣
  • 寫出來或者講出來的東西不會停留在入門階段,往往干貨可以讓一個團隊或者公司消化很久

極致

計算機是個可量化的學科,因此我們容易知道一件事情做的如何:差、一般、較好、優秀。

對于程序員來說,極致大約可以包括四大方面:

以下大量反問,預警!

代碼開發效率

  1. 庫和框架熟悉嗎?讀過并掌握對應的源碼嗎?
  2. 接口設計合理嗎?
  3. 自動化程度如何?
  4. 語言熟悉程度如何?是否掌握語言的各種高階特性?
  5. 復雜到看不出問題還是簡單到明顯沒有問題?
  6. 熟悉git嗎?熟悉svn嗎?他們的原理如何?最佳實踐呢?

代碼運行效率

  • 統計過CPU/GPU/磁盤IO/網絡IO/內存的消耗嗎?
  • 一次磁盤IO耗時多少?
  • 玩家更新一次信息,背后發生了什么?
  • 一次system call通常耗時多久?
  • GC時發生了什么?可控嗎?

團隊協作效率

  • 了解團隊中的協作節點在哪來?如何提升協作點的效率?
  • 團隊的研發管理方式如何?有何利弊?
  • 我們真的需要這么多人嗎?

全局把控程度

  • 整個產品是如何開發、測試、發布、更新的?
  • 整個產品用到了哪些技術棧? 哪些是你掌握的?

這么多反問,其實不太友好。

程序員應該想辦法保證自己所做的每一件事情都至少是“較好”的,而不僅僅是“剛剛好”。

耐性

中國社會由于種種問題,相對于西方發達國家來說社會整體比較浮躁、急于求成。無論一個人有多么的天才,總是需要一個積累的過程。

你得知道,越是希望獲得越是要學會忍耐,快往往意味著犧牲了質量(可以一定程度克服)。

沒有多少人是年輕有為的,這個價值觀本身也不見得是對的和好的,年輕人應該奮勇激進,但是不應該追求盡早的“學有所成”。

慢即是快,簡單即復雜,簡單即強大!

迎難

人們對于困難的事情會有本能的畏懼,但是我們依然需要去克服困難。有段大概是這樣的觀點:

人類有很多生理本能,造就了很多不好的習慣,例如遲到、拖延、貪吃、貪睡、貪玩、不愛學習;
學習、減肥等對人類來說是個偽需求—因為“逆本能”,然而能夠克服這些“生理本能”的影響的人往往都是優秀的人

要想優秀,保持迎難而上的心態!

視野

“站在巨人的肩膀上”,不僅僅告訴我們應該去繼承前人,更加重要的是這樣可以看得更遠、看得更多,站的高不一定格局高,站的低則往往格局低。

設想一下:假設你回頭15年前,但是你的記憶都保留(彩票號碼當然你得忘記掉),你對這15年的規劃是否會更加合理?

學科通常都是成體系的,對一個學科要認識的更深,沒有好的辦法,只有認識的更全面才可以。

對于程序員的學習內容,我有幾個建議(可能這需要花5年、8年、10年或者更多):

1. 至少一門靜態編程語言,一門動態編程語言,一門函數性語言

2. 會web編程、app編程

3. 會大數據相關的技術:存儲、挖掘、分析

4. 掌握基礎:計算機體系結構、操作系統原理、數據結構與算法、編譯原理、計算機網絡、數據庫原理

關于程序員的信息來源,也有幾個建議:

1. 看看綜合信息類的技術網站,現在有各種聚合技術媒體,例如:開發者頭條、碼農周刊、推酷等

2. 看看國內外先進技術的關鍵字,然后搜索關鍵字去了解新的動向

3. 關注一些社區,例如github、各種郵件列表等

合理的花一些時間,保持大致計算機軟件技術相關的內容心里有數即可。

并非鼓勵程序員都變為全棧,全棧并不先天優于非全棧,而是鼓勵去看的更多、看的更廣,閱歷對任何工種都是重要的,只是閱歷的內容有所不同而已。

謙虛

謙虛直接影響了一個人接收外界信息的能力,嬰兒學習能力強大的原因之一在于:不做判斷,統統都接收了。 謙虛程度就像一張濾網,可能會過濾不對的東西,也可能會過濾很多其實很好的東西。

謙虛到什么程度? 不要謙卑就好。 謙虛也可以自信,不要自負就好。

實踐

其實這只是變為優秀程序員的一個步驟而已,根據我的觀察,多數人學習編程時死在了這個山頭。

實踐是一種快速驗證學習內容、強化學習結果的方式,大腦很復雜很難搞明白它的所有,不過我們至少知道:做過的事情大腦會更加記憶深刻。

最后

有人說,怎么沒有提到數學、英語、人際什么的,這些并非不重要,如果具備了上面的特征,這些都應該是水到渠成的(方法和結果不要混淆了)。

歡迎給我建議:  )


發表評論:

哈哈

哈哈 2016-07-25

很好
大槍

大槍 2016-07-06

這個文章寫的好啊、@@@@@@@@@@@@@@@@@@@@
大強

大強 2016-07-06

??!這篇文章寫的不錯 ?。。。?!聽說你們公司的微信一建推廣做的不錯‘?。?!很感興趣
huanan

huanan 2016-05-20

我來試試評論功能呢
    甘肃快3走势图走势图手机版