成爲Python優秀的程式設計師,需要具備的條件

成為Python優秀的程序員,需要具備的條件

優秀的Python程序員應該有什麼特徵?

興趣

興趣是原動力

興趣是一個程序員進步的原動力,促使你不斷學習、不斷積累、不斷進步;

興趣可以讓你更大可能的打破環境約束,去嘗試自己喜愛的技術方向;

興趣可以讓你在遇到困難時有更強的戰鬥力,提升突破難題的可能性;

興趣可以讓你抵禦各種誘惑,保持對技術的專注;

興趣可以自然而然的讓你追求把事情做的更好;

培養興趣

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

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

以學習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、各種郵件列表等

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

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

謙虛

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

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

實踐

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

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

最後

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

歡迎給我建議: )


分享到:


相關文章: