程序猿划水指南

程序猿划水指南

20 世紀中葉,艾倫·圖靈爲了減少人類生產中機械重複的活動,
創造了計算機的原型–圖靈機

turing

當下,很多同行卻在使用計算機來做重複的機械的編碼活動。
如若我們不提高自身的工作效率和工作手段,接踵而來的就是無盡的加班、疲憊的身心,枯燥的生活。
那麼,有能讓我們能提高工作效率,每天愉快的“划水”的辦法嗎?
我認爲答案是肯定的,接下來我分享在平日工作中所用到的辦法和它們背後的原理。

提升閱讀代碼的效率

在我們平日的工作中,有件事一定是躲不過的,那就是閱讀源碼。
我們可能是通過源碼學習新內容,或是探究原理,又或是去修復bug。
但是,很多人或多或少的都會遇到這樣的問題,那就是看的過程中非常迷茫,每一個在屏幕上出現的字母,你都想去弄懂他到底是代表了什麼含義。結果,花了大把時間卻不得要領。
其實,學術上用認知過載來描述我們遇到的這種狀況。

confused

接下來,我們一起來看看,到底什麼是認知過載。

什麼是認知過載

認知過載是指你的工作記憶(或短期記憶)所能處理的信息總量。
當你的工作記憶所接收到的信息量超過了你所能順利處理的信息量時,認知超載就會發生,同時會導致無效的決策。
上世紀 80 年代,澳大利亞教育心理學家 John Sweller 在教學設計的研究中開始研究認知相關領域內容。
他的工作成果最終整理成Cognitive Load Theor,Learning Difficulty, and Instructional Design(PDF)
雖然這些策略最初都是被應用於教育領域,但這個理論有更寬泛的應用場景。
比如,航空公司就把這個概念應用到他們的飛機和航天飛機上。
如果在這些高風險的環境中,飛行員的大腦處理太多的信息,那麼這些信息可能導致致命的後果。
雖然,在我們看源碼的過程中沒有這麼高的風險,但是,避免認知過載會減少我們閱讀源碼的時間,同樣是挽救了我們可能會浪費的生命。
認知過載的理論中,將我們認知中的負荷分成了下列的三種類型。

  • 固有負荷:是內容本身的複雜性。內容越具有挑戰性,學習者就越有可能遭受過度的認知負擔。
  • 外來負荷:在進行學習和認知過程中需要排除一些不需要的內容所帶來的認知負擔。
  • 相關負荷:是指理解可以幫助學習者認知需要的信息的信息所帶來的負荷。

我來分享一下,我在閱讀代碼的過程中會通過什麼樣的方式來避免這三個維度的負荷過載。
 overload

怎麼避免閱讀源碼中的認知過載

  1. 專注核心調用鏈:一般情況下,方法名和變量名已經說明了某行代碼具體的行爲和動作;除非是核心方法,請不要再進入下一層閱讀,這樣會導致內容本身的複雜性陡升。
  2. 閱讀方法或註釋中的 Example:在成熟的開源項目的源碼中,方法和類上都會有比較詳細的註釋。但是,直接通過上面的 Example 去了解的話,會更快,也能避免相關負荷過載。
  3. 關閉 IDE 上不需要的源文件和功能的子窗口:關閉 IDE 中不需要的窗口可以減少外部信息對閱讀源碼帶來的外來負荷增加。

我相信,在嘗試上面三個方法後,你閱讀代碼的功力肯定能更上一層樓。
不過我這還有一個辦法也能避免認知過載,那就是去提前儲備數據結構、設計模式、編譯系統等的相關概念。
因爲,成熟開源系統的代碼貢獻者一般都會有比較強的相關方面的知識。
當他們在編寫代碼的時候應用這些知識信手拈來,但是,當你在閱讀代碼的時候沒有這些相關知識做鋪墊。
那可能第一行代碼就會讓你出師未捷身先死。

時間管理

勤奮不一定有好報,要聰明地工作。

busy
你曾經有沒有這樣的感覺:

  • 上班開始就都在忙,下班遙遙無期。
  • 功能沒少做,代碼沒少寫,bug 也沒少修,可是領導就是不滿意。
  • 除了上牀睡覺就沒有其他時間是自己的,睡着後還他麼的可能被電話喊醒


沒有誰願意用這種方式去工作。

時間四象限法

時間四象限法,是美國的管理學家科維提出的一個時間管理理論。
把工作按照重要和緊急兩個不同的程度分爲四個“象限”:

  • 既緊急又重要(如客戶投訴、即將到期的任務、財務危機等)
  • 重要但不緊急(如建立人際關係、人員培訓、制訂防範措施等)
  • 緊急但不重要(如電話鈴聲、不速之客、部門會議等)
  • 既不緊急也不重要(如上網、閒談、郵件、寫博客等)

time.jpg

時間四象限法的應用

優先排序:

當有新的任務分配給你的時候,你不要去立馬就開始做。你應該先將新的任務放到任務列表中進行排序。

屏蔽打斷

在程序猿的寫代碼的過程中,大忌就是中途打斷思維。
當我進行深入思考或者編寫複雜代碼的時候,會屏蔽外界對我的打斷。
最通常的方式就是,退出所有的通訊軟件,關閉手機,找一個沒有人會找得到你的地方。
如果找不到這個地方,如果有人來找你的話,讓他們將需要跟你溝通的內容通過Email 或者是在通訊軟件上留言。

任務分流

distribution
其實,並不是所有任務都需要你一個人來完成。
當你在非常大負荷的狀態下進行工作,本身效率是非常低的,而且錯誤率會陡然上升。
這時候,你應該找到領導或者同事將一些任務進行分流。
當在正常負荷之下工作,你才能提供最高的工作效率和最低的錯誤率。

刻意練習

每個人在剛剛出生的時候是什麼都不會的,我們大多數的生存和生活的技能都是通過後天慢慢學習而來。
但是,大多數人爲什麼有着一樣的先天資質,卻比同齡人有着更加優秀的能力呢?
其實,那是因爲優秀的人中的大部分,在有意識或無意識的在進行着刻意練習。
如若我們能將生活和工作中所使用的技能用的更爲熟練時,想必我們就有更多的時間能夠用來“划水”了。

刻意練習能幹什麼

我們先從刻意練習能給我們帶來什麼說起。
理論的發現者心理學家安德斯·艾利克森,通過一個實驗來證實刻意練習能給帶來什麼效果。
每秒讀一個隨機的數字,然後讓你最後複述出來。
普通人在完全沒有經過訓練的情況下只能記住 7-9 個數字。
但是,安德斯·艾利克森針對一個實驗對象通過刻意練習來記憶數字。
2 年後,實驗對象能成功的複述出 82 位數字。
接下來就跟着我一起,瞭解一下是什麼樣的練習讓一個普通人變的這麼厲害

刻意練習是發生在舒適區以外的

學習被分爲了三層

  • 舒適區:已經完全掌握的區域,沒有學習難度的知識或者習以爲常的事務。

  • 學習區:還沒有完全掌握的區域,對你來說有一定挑戰,感到不適,但不至於太難受。

  • 恐慌區:超出自己能力範圍太多的事務或知識,心理感覺會嚴重不適,可能導致崩潰以致放棄學習。

Comfortable

刻意練習是發生在學習區的;
因爲舒適區對於你來說太輕鬆了,什麼都練習不到;
但是,恐慌區又太過於困難,無法堅持下去。
這就像是我們在寫代碼一樣,如果你剛學了一門語言,就讓你去做一個非常困難的業務,那你肯定是什麼都做不了的。
但是,如果讓你去做不那麼容易,但是卻還是能繼續堅持下去的業務,那麼你肯定是能在這個過程中學習和提升。

刻意練習需要明確的目標和精確的計劃

爲了能去有效的練習我們的技能,我們必須是有目標的和有計劃的。
如果只是和《異類》中所提到的單純練習 10000 小時,就希望能達到效果的話,那結果肯定是令人失望的。

刻意練習需要有效的反饋

在進行刻意練習時,有效反饋非常重要,因爲你可以及時調整和改進。
反覆做一件事情的目的在於找出不足,並進行改善和提高。不斷進行自我檢測,獲得有效反饋,並及時進行改進和調整,纔是真正的刻意練習。

101.jpg

總結

我認爲工作是需要儘可能用最佳的性價比去完成他,單純的無目的的加班、盲目的在一個方向的投入過多的資源,這些是對生命和時間的浪費。
從古至今的勞動者和生產者都視圖用各種各樣的方式來增加單位時間下的生產效率。
上到國家的歷法軍事兵法,下到百姓生活中的二十四節氣、度量衡、成語;人類進化的歷史長河之中就是在不斷優化工作方式、總結方法、提煉指導思想。
雖然,軟件工程和其他行業比起來還非常的年輕,不過我們依然在不停的用各種方式來提高我們的工作效率。
敏捷思想、極限編程、TDD、DDD、六邊形架構、設計模式等等,這些不也是行業翹楚們在生產生活中不斷的積累總結和提煉的麼。
程序員是一羣愛學習的人,只要我們去找到適合自己的方法,一定也能讓加班越來越少,代碼質量越來越高,工作越來越出色。

參考文獻

博主的其他文章

如何走出問題的迷宮
Vim 上手不求人( gif 版)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章