透過用戶思維談程序員的進階之路


最近讀了一本關於產品的好書《用戶思維+ 好產品讓用戶為自己尖叫》,雖然是一本產品相關的書,但是全書都在圍繞如何讓你的用戶變得更優秀展開討論。作者的觀點很明確也很獨到,可持續成功的產品都是由推薦(口碑傳播)產生的。而激發這些推薦的是用戶對自己的感覺,也就是我們的產品或服務幫助他們做了什么或成為什么樣子。這可能也是知識付費這幾年火熱的原因之一吧。

這本書的作者可謂將用戶思維挖掘到了極致,這一點在此書中隨處可見。可以這么講,這本書本身就非常的用戶思維,在關鍵的觀點或知識點上,總是配有恰到好處的生動插圖,讀起來毫不費勁,想象一下《Head First》系列圖書的畫風。奧對了,這本書的作者Kathy Sierra就是Head First系列圖書的策划人之一。

我在讀這本書的時候,更多的是將自己當成了書中的用戶。所以讀完之后最大的感觸就是,我能不能運用書中講的這些讓自己變得更優秀呢?畢竟用戶思維就是一切從用戶出發。思考過后,我覺得是可以的。從這個角度而言,這本書已經超出了討論如何做好產品的范圍,着重的是用戶思維中的思維這兩個字。而這種思維就是譯者序中提到的成長型思維模式。這也是我寫此文的目的,希望這種成長型思維能對自己的進階之路有借鑒意義。如果能對大家也有所幫助,那就再好不過了。

如何做到保持理想成長曲線呢?

用戶理想成長曲線:

mark

若是順着成長曲線向右上方移動,最終我們將達到專家(某一領域)的高度。但其實我們大多數人只是想變得更好一些而已,一點點進步就會非常明顯。那么如何做才能順着成長曲線向右上方快速移動,甚至接近理想曲線呢?或許可以從專家身上找到答案,首先我們需要了解一下什么是專家?

專家不只是指他們知道什么。重要的是,他們能將已有的知識應用到實踐中。而且,他們可將這一過程一次次地重現。在一個領域中,給定一項具有代表性的任務,專家的完成情況更好、更可靠。

然后我們再來看看專家是如何做的?

  • 持續不斷地構建技能
  • 保持渴望成功的願望

持續不斷地構建技能

構建技能

要想具備專業能力,就必須構建專業技能。技能的構建就是將一項技能由“不能做”移動到“能做”。能做又划分為兩種類別:費力(不可靠)和精通(可靠、已內化)。

我們設想中的技能構建過程可能是這樣:

mark

但是,這不是一條通向高水平專業能力的有效途徑:

mark

我們看一下專家是如何做的:
mark

  • 專家從不停止增加新的技能。
  • 專家既有意識地構建技能,也無意識地構建技能。
  • 專家會改進現有的技能。

我們應該格外注意這個過程:

mark

刀不磨要生銹,那些無需我們有意識練習的技能將慢慢退化。所以僅僅使用是不夠的,還需要拿出來有意識的練習。

刻意練習

我們經常會有這種感覺,在某一項技能的練習上,我們付出了努力,也付出了時間,但是效果就是不理想。很多人可能會將此歸咎為自己笨,沒有天賦;其實並不是,很有可能是自己練習的姿勢不對。

在時間一樣的情況下,專家會將更多的時間放在刻意練習上,注意可以刻意練習不是刻意地練習。可以練習有助於防止陷入平庸,這是因為:精通半個技能完勝一堆半生不熟的技能

mark

通常情況下,更細粒度的子技能學習法是構建技能的最佳途徑,但是沒有人願意把一周的時間都用在簡單的練習上。刻意練習總是恰好超出我們當前的能力范圍(舒適區)。這一點非常重要,如果我們練習那些遠超出當前能力的技能,很可能會因為太困難、長時間沒有反饋而放棄。而如果一直練習沒有難度沒有挑戰的技能,后果可能會更嚴重,我們在平庸階段進行的練習越多,對平庸技能的強化就越大,並且練習造成的影響是永久的。

mark

刻意練習的簡明原則:完成一項細粒度的任務,經過一到三組45-90分鍾的練習就能達到95%的精通度。

如果無法達到這一要求,我們可以將任務划分為更小的子任務,或者降低要求和標准。

  • 如果這項任務或技能過於復雜(未精通的技能過多),就將其划分為更細粒度的子任務或子技能mark
  • 如果這一任務並不復雜,只是難度太高了,則降低要求或標准

mark

但是大多數人在大多數的專業能力成長曲線上遇到的最大問題是,階段B堆積了太多東西。與一次只做一件事情相反,我們想要同時學習和練習的東西太多了。這種形式的技能堆砌會拖慢進步速度、扼殺進步。

mark

專家將更多的時間放在刻意練習,給了我們借鑒的意義。程序員這個職業,不學習就會被淘汰,學習就意味着要構建新的技能,豐富自己的技能庫。這個時候就可以運用上面的刻意練習的方式。首先我們要明確自己學習的目標,學習此技能能幫助我們完成什么,是否值得我們學習,切莫貪大貪全,應該確定自己的核心競爭力是什么。以閱讀優秀源碼(至於為什么閱讀源代碼,后面有提到)為例,一般一個項目的源碼到了值得閱讀學習的階段,此項目應該已經比較成熟了。那么此項目的代碼量以及代碼難度應該都是不小的,如果從最新最全的版本開始看起,很容易就因為太困難放棄了。那么此時就可以進行任務拆解,可以從比較早期的版本看起,這個時期的代碼量比較小,代碼設計要比較好理解。或者是可以研究此項目中其中一個功能,掌握以后再切換到別的功能上。例如研究數據庫,數據庫發展到現在,其中的實現無比復雜。那么我們就可以從其中的幾個主要的功能特性入手,比如索引、鎖之類。

此外我們需要格外注意上面提到的兩個問題,一個是階段B堆積了太多東西,我們想學習的東西太多,但是精力有限。此時應該收縮戰線,專注構建最重要的技能。精通半個技能完勝一堆半生不熟的技能。另一個是我們在平庸階段進行的練習越多,對平庸技能的強化就越大,並且練習造成的影響是永久的。有很多工作年限比較久的程序員,專業能力還不如剛工作幾年的新人。究其原因,都是因為不努力嗎?不然,他們也努力了,只不過他們待在舒適區的時間太長了。

感性接觸

我們會經常聽到這么一個觀點,中國人學不好英語,是因為中國人從來不用英語,只是單純的死記硬背。同樣的道理,專家之所以成為專家,是因為專家周圍的環境更好,他們接觸了大量高質量的專業技能。中國有句古話,“近朱者赤,近墨者黑”,也是同樣的道理。放在現在就是,如果你身邊都是優秀的人,那你多半也差不到哪里去。但是,除非滿足特定的條件,否則簡單地接觸專業人士並不能幫助你構建專業能力

書中有個很生動的例子,小雞性別鑒定。辨別剛出生的小雞的性別異常困難,但是更早的辨別出小雞性別,將公雞和母雞分開,有助於更快的進入雞蛋生產環節。在20世紀初,日本人開發了一套鑒別小雞性別的方法,但是只有很少的幾位專家掌握了這一技能。現在的關鍵是培訓具備這一技能的新手,便可以大規模應用這一技能。問題是身為掌握這一技能的專家也不知道自己是如何做到的。你的大腦能夠學習一些你無法學習的東西,這不是什么魔法,而是感性知識。

他們是這樣培訓新人的,讓新人隨意指出小雞的性別,只是隨意的猜測。然后小雞性別鑒定專家給予新人反饋,對,不對,不對,對。新人的每次猜測都會得到專家的反饋。終於,隨着時間的流逝,新人在小雞性別鑒定方面的表現越來越好了。只不過這時候新人還是不知道這是為什么?

其實在接觸足夠多的反饋之后,你的大腦在無需意識介入的情況下,開始發現模式和潛在的結構,伴隨着更多的接觸,你的大腦開始精心調整它的感知能力,最終找到真正的解決方案。你的大腦能夠覺察更加細微的特征,將信號和噪聲區別開來,即使你無法解釋其中的原理。

所有領域的專家都在學習和利用無意識的感性知識,他們的大腦知道的東西遠比展現出來的多得多。

mark

當你接觸了大量多樣化的實例時,你的大腦便開始觀察什么是不變的。在感性學習能夠發揮作用的地方,“發現”其實比“講授”更有效。我們的目標就是通過展現更好的實例,幫助自己變得更加優秀。

現在知道為什么要讀源碼學習了吧,而且要讀優秀的源碼。你無需觀察優秀程序員是如何編寫代碼的,只需要閱讀很多優質代碼即可。所以不要把自己寫不出好代碼的原因歸咎於身邊沒有大牛,也不要妄想着要是有個大牛帶帶我寫代碼就好了。

那么要不要看爛代碼呢?要看!因為有時候這不是你想不想看的問題,而是你不得不看,是項目就會有爛代碼。當你確實需要展示或者閱讀錯誤或不良的實例時,要營造不適感。我曾經和我的組員說,有時候閱讀爛代碼反而比閱讀優秀代碼進步更快。但是前提是你要能識別出什么是好代碼,或者什么是爛代碼。當你看到爛代碼時,你就會打心底里嫌棄,然后就是想辦法去改造它,這就是進步的機會啊。學習鑒別“不良”實例的最佳辦法,就是學習“優秀”實例的潛藏模式。《重構 改善既有代碼的設計》這本書就是這樣做的,首先明確指出爛代碼都有哪些特點,然后才是針對這些特點的代碼重構方法和解決方案。

保持渴望成功的願望

排除障礙

如何能保證自己順着理想成長曲線不斷前進呢?要知道在願望和現實之間存在着一條鴻溝。有一些東西干擾了我們,有兩種不同類型的干擾性鴻溝。

  • 技能鴻溝

mark

  • 關系鴻溝

mark

第一次學習編程的你會遭受很多痛苦。任何一件值得你付出的事情,都是如此。所以當我們面對困難時,第一件事就是要承認困難。人們之所以在遭遇困難時放棄,並不是因為他們遭遇了困難。這是因為他們不知道他們的境遇是正常的。這是因為他們不知道他們的努力方向是正確的。這是因為他們不知道其他人也會在同一階段遭遇困難。那些放棄的人們,沒有意識到,困難只是暫時的,也是正常的。

在承認困難之后,我們還要對成長曲線上可能會遇到的問題做出預測和補償。預測出可能會干擾我們前進的因素。比如我自己在看書時,會將手機靜音放到自己夠不到的地方去。這樣我就不會一直惦記手機會不會有消息,等到看完書再處理就是了。然后要對自己遇到的困難做出補償,以編程為例,我們遇到的問題基本上前輩們都遇到過,這個時候善用搜索引擎就非常有用了。論壇和社區也非常重要。

進步+回報

我們知道了阻礙我們前進的因素,但是吸引我們前進的因素是什么呢?我覺得是成就感。成長路線上所收獲的,會讓我們獲得成就感。如果我們沒能從進步中獲得任何好處,一切將變得沒有任何意義。所以規划好成長路徑圖就非常重要了,僅僅知道有這么一條成長路徑存在,就是強烈的動機來源。

對於程序員而言,制作一份技能清單,內容涵蓋從初級到高級的技能。然后將其划分為不同的級別和層次。一種可行的做法是,在每個層次所花費的時間是前一個層次的兩倍。即使這條路徑不是最佳也無所謂,因為重要的不是路徑,而是取得進步。讓我們大膽一些,盡管嘗試就是了。另外使用領域特定的專業術語進行交流,不僅有用,而且也是一種激勵。所以和同事交流,或者寫博客分享我們的技巧都是很好的激勵方式。

維護認知資源

1999年,Baba Shiv教授以及165位大學生一起開展了一項簡單的實驗。他要求一半的學生記憶一個7位數,其余學生記憶一個2位數。

mark

上圖中的結果,可能很多人認為是大腦在工作之后需要更多的卡路里,需要吃點蛋糕補充能量。但是研究人員向我們揭示了一個違反直覺、令人震驚的事實:

意志力與認知加工能力從同一個資源池中獲取能量。

記憶7位數的參與者選擇蛋糕,不僅是因為他們大腦需要更多的熱量,還因為這項記憶性任務耗盡了他們抵抗蛋糕誘惑的意志力。所以我們應該確保自己把稀缺、易耗的認知資源用在正確的事情上。核心任務就是減少資源泄露

減少認知泄露

  • 要想減少認知泄露,應該把認知工作委托給外部世界(這樣它就不會滯留在用戶的大腦中)

    我們的大腦每次只能專注於一件事情,對於未完成或者中斷的任務,我們的大腦會為其保留一個“后台進程”,多任務切換會耗盡大腦的能量。人們更容易記住未完成或不完整的任務,這就是蔡加尼克效應

  • 要想減少認知泄露,不要讓用戶選擇

    選擇是一種代價昂貴的認知開銷。之前看過一篇文章,講的是不要在你的卧室內學習或者工作。這一點我深以為然,學習本來就是一件違反人性的行為,選擇在卧室內學習或者工作,很可能整個周末都是在起床學習工作還是躺在床上休息中的糾結中度過。所以干脆不要給自己選擇的機會,我現在就是周末會抽一天很早起床,然后直接去公司,斷了自己想偷懶的想法。

  • 要想減少認知泄露,幫助用戶內化技能

    位於階段B的技能會消耗大量的認知資源,位於階段C的技能所消耗的認知資源則很少。所以我們寧願只精通一項技能,也不要同時學習過多的技能。

  • 要想減少認知泄露,減少對意志力的需求

    自控力和意志力是昂貴的認知資源開銷。要想減少用戶對意志力的需求,就假設它們根本不存在,幫助他們養成習慣。習慣只需要很少的意志力或者無需意志力。但是我們的關注點應該不僅僅在於養成新的習慣,我們必須升級或者替換掉那些容易招致平台期和中等技能困境的不良習慣。

穿越大腦的垃圾過濾器

我們的大腦總是努力區分噪聲和信號,這其實是好事,只不過我們無法控制這個過濾器。所以我們需要做另外一件事,阻止大腦把我們應該關注的事情當成垃圾

我們必須幫助大腦同意:

  • 這是一件值得關注的事情
  • 這是一件值得集中注意力的事情
  • 這是一件值得記住的事情

大腦喜歡即學即用式學習,而不是儲備式學習。這也是為什么同樣的工作時間,不同的人能力提升卻差別很大。如果你的工作是極具挑戰性的,那么你就需要一直學習新的技能來滿足工作的需要,並且都是即學即用式學習,這可是我們的大腦所喜歡的。相反,你的工作沒有任何挑戰性,即使你在不斷學習,但是始終用不到學到的新技能。我們經常會有這種感覺,很多當時學會的東西,過一段時間基本就忘卻了,因為我們的大腦不喜歡儲備式學習。所以我們可以利用技能映射驗證知識的有用性,通過將知識映射為技能來驗證(減少)必須學習的知識。直接把多余的知識刪除、刪除、刪除。

mark

利用應用場景說服大腦。當我們學習很抽象的技能,不好理解和記憶時,可以嘗試利用應用場景來說服大腦。例如在學習Redis的5種基本數據結構(現在是6種了)時,就可以思考每種結構可以應用在什么場景?hash可以用於記錄帖子的點贊數、評論數和點擊數;zset可以用於記錄熱榜帖子ID等等。

最后

努力吧,騷年,成就卓越的自己

mark

作者:CoderFocus

微信公眾號:

聲明:本文為博主學習感悟總結,水平有限,如果不當,歡迎指正。如果您認為還不錯,不妨點擊一下下方的推薦按鈕,謝謝支持。轉載與引用請注明作者及出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM