程式設計師為什麼要持續學習(升級版)
為什麼要終身學習,持續學習?
為什麼要終身學習,持續學習?中國人有一句老話叫,活到老,學到老。大概是說總有新的知識產生,需要持續學習。回到大齡程式設計師焦慮這個話題,學習仍然是破解的不二法門。
我們來看對於程式設計師要求的一些變化。在小公司的時候,可能一個人就把頁面、java和資料庫都幹了,100人的公司都未必有dba,運維的活也將就能幹。隨著業務規模的發展,問題域的複雜度幾何級數增長,分工呈現精細化方向。幹活一個前端、一個後端、一個測試,可能還有互動,不然開不了工。精細化分工的副作用開始顯現了,分工鴻溝阻礙了效能。於是我們搞了全棧---基礎前端工作,研發同學可以學習、質量保障是研發自己的事情。作為2年前的研發工程師和現在的,需要學習的內容廣度不同了。隨著業務資料化、資料業務化的發展,搞開發不掌握一點大資料甚至AI的基礎,也很難適應時代的需要。綜上述,學習是一種能力,知識是可遷移的。
再聊一點big的視角。這2年流行一個詞,叫VUCA。大概是寶潔公司(Procter & Gamble)營運長羅伯特·麥克唐納(Robert McDonald)借用一個軍事術語來描述這一新的商業世界格局:“這是一個 VUCA 的世界。”VUCA 指的是不穩定(volatile)、不確定(uncertain)、複雜(complex)、模糊(ambiguous)。
VUCA 的狀態是這個世界組成的常態。比如美軍比較easy的幹掉了薩達姆政權,結果美軍在後面缺吃盡了苦頭,美國的軍隊傷亡每天都在增加,恐怖分子,遊擊部隊隱藏在街頭巷尾,隨時可以發起進攻。在這種情況下美軍部隊指揮官不得不重新反思和調整他們的指揮系統。美軍的指揮官把他們的反思和“學習”總結到《賦能》這本書中,其中“有改進結構,打造靈活強大的團隊”,突破深井資訊共享等方法。打造靈活強大的團隊就體現了小前臺和大中臺的思想。
舒適區與小步子原則
我們習慣在舒適區是自然的,有勵志書籍就講了,要跳出舒適區,挑戰自我。舒服不好麼?知乎有不少討論,其中一個回答比較中肯。
我們為什麼想跳出舒服圈?因為我們想成長,成長的動機來源於自己的追求和社會的期待]。例如,我想跳出總是宅在家裡的舒服圈是因為我想增強自己適應社會的能力(自己的追求),或者也可能是你的爸爸媽媽希望你能提高交際能力(社會期待)。
我著重聊一下學習和跳出為什麼是困難的,一是動力是否是自己;二是擔心失敗的焦慮,負面反饋。比如有人在朋友圈發減肥健身的照片,就可能有人在調侃A8腰不是這麼減的!因此要做調整,應該小頻度的嘗試,快速反饋,通過 stepbystep拿到正面的反饋,逐步消除潛在的對挫折的畏懼。現在幾乎所有的程式語言為啥一開頭來一個[Hello World],就不無這樣的考慮。
總結一下,我對新領域學習或者走出舒適區的觀點就是小步跑原則和即時反饋原則。查了一下資料,原來行為主義心理學家F·斯金納通過動物實驗建立了操作行為主義的學習理論,並據此提出了程式教學論及其教學模式。其程式教學原則就包含積極反應原則、小步子原則、即時反饋原則等。
[—]型人才咋破
近年,關於人才模型提出了T型人才的說法。比如來自豆瓣的一篇文章這樣說,“I”型人才是指在自己的專業領域有很深的專業水平,但是對於其他領域一無所知,這種知識結構在未來很容易被淘汰,因為外界的變化太快了,你現在的專業優勢很可能成為你未來發展的包袱。
“T”型人才的知識結構才能適應現在多變的環境。首先,你有深度的專業領域背景,同時你也有很多橫向跨領域的知識儲備,這樣不但讓你有專業優勢,更讓你有跨界優勢,當外界變化時,你可以進行知識遷移,順應外界的變化。所以,我們需要成為“T”型人才。
講得挺好,我也很認同,但最大的問題是[—]型人才,不是[I], 無特別精深的專長領域,凡事略懂一點。這個問題我大概也沒有能給個好答案,嘗試找到那個[I]是非常必要的,有適合面試評價"比較綜合"可能是一個負向詞彙。
從傳統文化看學習
學習是一件有意思的事情。孔夫子說學而時習之,不亦樂乎!大意是說學到的東西有機會付諸於實踐,這難道不是一件值得高興的事情嗎?這裡面就蘊含了讀書和實踐的一個關係。
大衛張有一系列關於學習的論述,參見http://www.ituring.com.cn/article/28775。比如前3年效應、 德雷福斯模型模型、 刻意鍛鍊Deliberate practice、 ADKAR模型等。我如果不去他的blog看看,我不可能記得全這些模型的樣子,也不知道什麼時候會應用到(我就在考慮一個問題,能不能通過中國傳統文化的經驗來談學習,本次就是一次探索求證之旅)。先看看大衛引用模型中的其在2個模型。
德雷福斯模型
德雷福斯模型是一種衡量人們工作方法和能力,反省並提高專業技能的層級模型。
它把新手到專家的技能階段分成五個層級:
新手:新手需要指令清單。新手在該技能領域經驗很少或者根本沒有經驗。這裡提到的經驗,指的是通過實施這項技術促進了思維的改變。
高階新手:高階新手不想要全域性思維。一旦經過新手的歷練,人們開始以高階新手的角度看待問題。高階新手能夠開始多多少少地擺脫固定的規則。他們可以獨自嘗試任務,但仍難以解決問題。
勝任者:勝任者能夠解決問題。你可能會看到,處於這一水平的人通常被認為“有主動性”和“足智多謀”。他們往往在團隊中發揮領導作用(無論是否有正式的頭銜) 。他們是團隊裡的好人,既可以指導新手,也不會經常騷擾專家。
精通者:精通者能夠自我糾正。精通水平的從業者需要全域性思維。他們將圍繞這個技術,尋找並想了解更大的概念框架。對於過於簡單化的資訊,他們會非常沮喪。
專家:專家憑直覺工作。專家是各個領域知識和資訊的主要來源。他們總是不斷地尋找更好的方法和方式去做事。他們有豐富的經驗,可以在恰當的情境中選取和應用這些經驗。他們著書、寫文章、做巡迴演講。
德雷福斯模型在《程式設計師的思維修煉》一書中有描述,作者也列出了一些訣竅。
-
新手使用規則,專家使用直覺
-
新手通過模仿和觀察來學習
-
專家要保持實踐來維持專家水平
特別要注意的是不要在"高階新手"這個階段停留太久或者止步不前,如圖燒菜,好些人都會燒,或者按圖索驥,也能總結經驗,但數十年也僅為不得不燒的一種狀態。
image
刻意鍛鍊Deliberate practice
首次提出“刻意練習”這個概念的是佛羅里達州立大學(Florida State University)心理學家 K. Anders Ericsson。這套練習方法的核心假設是,專家級水平是逐漸地練出來的,而有效進步的關鍵在於找到一系列的小任務讓受訓者按順序完成。這些小任務必須是受訓者正好不會做,但是又正好可以學習掌握的。完成這種練習要求受訓者思想高度集中,這就與那些例行公事或者帶娛樂色彩的練習完全不同。“刻意練習”的理論目前已經被廣泛接受。
image
當談到學習的時候,我腦袋裡浮現了很多場景。
1、某個工程師用了2天時間,最後是因為一個配置的問題(此處會心一笑的人大有人在)--我跟這位同學說,你總結一下,他回答總結不了,因為這個問題最後是中介軟體團隊去改的。----有時候學習機會就這樣浪費了。
2、第2個故事,關於罰款的故事。開會遲到咋辦,罰款!不按時交週報咋辦,罰款!簡單粗暴!--我們都是成年人,不能有更優雅的方式麼?管理學大師大衛張雖然不是罰款制度的公開倡導者,但是他也默默的支援了這一制度,因為它有效。這裡面講了一個非常樸素的道理,人類不期望被約束,同時自律是非常難的一個事情。為了維持罰款制度,我每週要觀察大家傳送週報的時間,我累不,非常累!---這裡面有一個問題,為啥要去監督?
3、關於週報的故事,為什麼要寫週報先不展開了。反正以前一直要寫。某一天我們說不寫了,肯定就沒人寫;我們說可以寫也可以不寫,基本也沒有人寫。因為寫成了一種負擔,甚至是為主管寫,那麼不寫也罷。我曾說過,與其記流水賬,不如不寫。提倡寫寫思考,比如本週處理了一個線上問題,難道沒有任何想法,深度缺陷分析?
4、人家說處處留心皆學問,可我們往往卻視而不見。曾經把我們團隊的一些線上故障和洛一他們合作張貼出來,期望走過路過的兄弟們能在某日回首之際能看看,可惜半年過去了,找一研發同學問之,你知道xx組遇到了某個故障問題嗎?-不知道;某某同學的週報不是提了這個事情嗎?--看了,沒注意;那麼知道走廊上彙總了我們半年的所有線上故障嗎?-不知道,沒看。這裡面就有一個問題,從哪裡學習,風景到處都是,卻缺乏技術的敏銳度和觀察力!--“慢慢走,欣賞啊!” 這是朱光潛先生從美學角度的一個看法,異曲同工!
傳統學習觀
我們先看看古代人是如何談論學習的,或者可以窺見學習的原則、方法和路徑。
滿招損,謙受益。(《大禹謨》)
知之為知之,不知為不知,是知也。《論語·為政》
什麼意思呢?
這2則是說謙虛的,虛懷若谷。知道就知道,一旦被捧為專家、大牛能不能說自己[unknow],是衡量能否走得更遠的一把尺子。
敏而好學,不恥下問。《論語·公冶長》
知而好學,然後能才。 ——荀子
這2則在說好學、好問的問題。問問題不丟人,關鍵在於如何問。
反模式1:你對時局有何看法?
反模式2:因為程式語言爭得面紅耳赤!恨不能殺人!最近有國外新聞說程式碼規範涉及到殺人事件,不可不慎。
反模式3:你們家快取用的什麼,用啥機房好,凡是能度孃的都在問。
徐昊說提個好問題,給個好答案。
我喜歡的提問模式是:對於xxx場景,我採用xxx方案,但是有xxx問題,我嘗試xxx解決之,結果xxx;我考慮xxx,不知道其他人有何看法或者解法? ---一句話能把背景說清楚,結果直接問題xxx問題,有何解法,為了挖掘背景用了20分鐘。和時間咋能做朋友呢?
人類習慣按自己的經驗提供答案,而提問者的場景和自己可能不一樣,甚至差別很大。在提供答案的時候不宜過於武斷,所謂拿著一把錘子就看到處都是釘子!
循序而漸進,熟讀而精思。《程氏家塾讀書分年日程·朱子讀書法》
讀書有三到,謂心到,眼到,口到。三到之中,心到最急,心既到矣,眼口豈不到乎?朱熹《訓學齋規》
口而誦,心而惟,朝於斯,夕於斯。《三字經》
學而不思則罔、思而不學則殆 《論語·為政》
這幾則說的是學思結合,並要循序漸進,無終南捷徑。從何處學?現在的網路媒體、自媒體、群、浩瀚書海、無數技術大會、公司內網.....躺在哪裡的叫資訊( information),只有內化為自己的才是知識(knowledge)。涓涓細流,飲多少全憑心意。
我個人看週報的習慣是沒有乾貨的略過,然後把這些資訊和我們的規劃、計劃的關係在腦子裡過一遍,或者在本子上畫一畫。
看週報的痛苦是某周是顯微鏡的細胞級問題,某周是放大鏡級的問題,上週的問題無法從下週來提煉。當然我們推崇少些事務性週報,多做思考。一線TL要扎到現場,更少依賴事務性內容的彙報。
我特別留意兄弟團隊犯了什麼錯,因為這個是千金難買的知識。還曾組織過對應的學習,也曾去程式碼版本管理軟體比較前後2個版本的程式碼,最後發現是缺陷分析報告沒有寫到點子上,最致命的問題不是報告中那個。
這裡特別多談一句深度缺陷分析報告,太多的報告為了交差,檢查問題的思路應調整為下一次這樣的問題我們能不能一定規避。太多的報告的action是加強程式碼review。
12-13年從轉賬業務線到核心平臺,老闆跟我講他們要向兄弟團隊學習,敬畏資金。聽多了也略煩:)但是我往心裡去了,我在想新團隊的生命線就是資金安全和穩定性。對於這部分知識我自己首先要進行掌握,我通過公司內部的2個分享平臺,搜尋關鍵字,讀了幾十份故障分析報告(現在基於安全性的要求,已經不能瞭解其他團隊的了),並對其中好些分析進行解剖比如時序圖,包括上面說的程式碼考古,後來我在團隊做了關於併發設計的分享、資損防護的分享。
TL們和架構師也是用對應的敬畏之心做事,每一行程式碼做code review堅持下來不容易,因為他們本身有大量的業務需求討論,出具架構方案方面的工作。
三人行,必有我 師焉,擇其善者而從之,其不善者而改之。《論語·述而》
弟子不必不如師,師不必賢於弟子,聞道有先後,術業有專攻,如是而已。《師說》
這部分說的是術業專攻,謙虛謹慎。文人相輕,也有技術同類相輕的。
有人講如果我的老闆換成誰xx,我不服;
我只說一個道理,公司選擇一個人做你的老闆是肯定有考慮的,你有沒有欣賞到呢?你是不是自己想的那麼NB呢?如果是,懷才不遇!?--大衛張講說,沒有懷才不遇這件事!
從後端到前端、從c++到java、從應用系統到機器學習,從大資料到雲端計算,吾生有涯而知無涯,欣賞,開放、包容,很多地方都可以學!
學貴專,寧精勿雜,寧專勿多,不以氾濫為賢。
書富如入海,百貨皆有。有之精力,不能兼收盡取,但得其所欲求者爾。故願學者每次作一意求之。——蘇軾
這裡講的突出專業,一專多能,肯定是學不完的。有一個叫牛新莊的專家專攻db2做到同時接多個銀行的諮詢,儼然是蘇秦掛六國帥印,他的一個考量就是oracle已經這麼多人了,我是不是搞點冷門呢!
對於應用系統研發知識要全面,也要有出眾之處傍身。比如分析建模能力、高併發處理、資料庫設計方面等等。始於平均,終於平淡,不可不慎!
總結一下,我的學習觀:
一:胸懷寬廣、謙虛向學
二:從資訊的汪洋挑選知識
三:保持敏銳度,尋根究底、舉一反三
四:學思結合、提煉歸納
五: 包容欣賞、術業專攻
六:一專多能、寧精勿雜
ps:在學習這件事情上,永遠在路上,心懷敬畏,共勉!!! 在此我向大家推薦一個架構學習交流群。交流學習群號:736220120 裡面會分享一些資深架構師錄製的視訊錄影:有Spring,MyBatis,Netty原始碼分析,高併發、高效能、分散式、微服務架構的原理,JVM效能優化、分散式架構等這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多。