摘要:不久前,在團隊內部和大家做了一次分享,內容就是這次要講的用認知和人性來提升自己的技術水平,大家反響不錯,所以這次整理一下也分享給大家。
不久前,在團隊內部和大家做了一次分享,內容就是這次要講的“用認知和人性來提升自己的技術水平”,大家反響不錯,所以這次整理一下也分享給大家。
最初我是想用“借優秀的產品經理思維來做最棒程序員”的這個標題,但想想還是要有同理心,技術同學平時和產品同學已經是相愛相殺了,就不刺激大家啦。但是必須要說的是優秀的產品經理思維和優秀的程序員思維確實是殊途同歸的,兩者是想通的,就是來自認知和人性。
這里我不會過多去梳理認知和人性的概念,后面會用很多例子來說明,保證通俗易懂,只想先提2個概念:
對人性的理解能幫助提升認知
狹義的技術是指java,php,android,spring,vue等的掌握和實踐,它們只是幫助你提升認知的工具,卻絕不等同于認知。
下面我來逐一舉例說明
例子1-技術選型問題:今年開始慢慢火的一個移動端跨平臺技術是google發布的"flutter",如果你作為一名移動端的開發人員來評估這門技術是否值得選型作為公司產品的語言框架,你怎么能保證評估不會看走眼?
認知:flutter強化了跨平臺的生產效率,且性能比前端框架更好。
解釋:很多同學會想,怎么第一句感覺就像廢話一樣,人家官方文檔也是這么寫的,這叫什么認知。別急,所謂的認知,就是能夠提煉成外人看上去貌似一句很普通的話,但只有經過深度思考的你才知道它真正的價值。在flutter沒有出現前,我存在一個認知偏差,我認為客戶端一定會被前端諸如react,vue這樣的技術取代。因為它們既可以跨平臺,也可以隨時更新,符合互聯網快速變化的節奏。但我的認知存在一個非常嚴重的漏洞,那就是跨平臺和隨時更新在客戶端技術里的占比各應該是多少?哪個更重要?經過分析思考,以我們公司當前用戶量的發展階段,提升跨平臺的生產效率且不損失太多性能更重要,所謂的運營快速需求變化有時候可以通過事先想清楚,而降低頻率。
flutter帶來的生產效率提升,不僅僅是一個開發可以同時產出android和ios兩端應用。更在于產品經理以后只需要和一個開發溝通需求細節,不會再擔心出現android和ios功能細節實現偏差的問題了。由于有了這樣的認知,雖然flutter作為新技術,還有需要完善的地方。但這不是主要問題,我們愿意為它去冒險,在我們的產品里去盡快實踐。
人性:最后多說一句,為什么google先做了kotlin后又做了flutter呢?我的認知是:大公司兩個部門做重復輪子很正常,互相競爭,看誰更好。一個想試探性取代java以避免被oracle捏住命脈(如果接受的人多,將來把底層的jvm再抽掉),一個野心更大希望統一所有平臺,不同部門的想法而已。大家不要把google的布局想得那么純粹技術化,大家都是人嘛。人脫離不了:競爭,征服,自保的人性。:)
例子2-查線上問題問題:覺得查線上問題很痛苦,壓力很大,查得也不快怎么辦?
認知:1 查線上問題是成本最小的,鍛煉邏輯思維的方式,相比寫代碼更有效率。 2 查問題要看本質,抓住案發第一現場
解釋:很多同學碰到線上問題的時候,都很痛苦,因為要加班了耽誤我學習技術的時間,所以有時查問題態度也不積極。這個認知是非常錯誤的,大家平時都會認可優秀程序員的核心特質看的是思維邏輯,而不是用哪個語言哪個技術。那如果是思維邏輯優先,寫代碼就能比查線上問題更能提升嗎?顯然不是,大家知道我們在寫代碼時,往往要花費很多時間在編寫冗余代碼(如get,set代碼,配置文件),普通的crud邏輯,編譯,部署等這些非核心點上,它們并不能幫助我們提升思維(動手寫代碼前的思考才是最核心的)。但是查線上問題就不一樣了,你不需要寫任何代碼,但是需要在很短時間內,讓自己理清思路,按正確的步驟去查出代碼的核心問題,底層系統的核心問題。你需要對系統很了解,對業務邏輯很了解,對代碼細節很了解,這真是一個幾乎沒有任何冗余步驟,但是卻能快速提升嚴謹思維的好方式!
怎么讓查問題更有效率?其實很簡單,我們如果借鑒名偵探柯南的想法,那就是“抓住案發第一現場”。舉兩個例子,對于JAVA這樣的靜態語言,查詢線上日志的方法是非常重要的。很多同學發現某個請求出問題了,就去看當次請求的日志,這種方式不一定準確。因為對于靜態語言,它的案發第一現場可能已經不是當次請求了,很有可能是首次發生這個問題的時候,或者服務器剛剛啟動的時候(靜態語言的”緩存”特色)。當你發現上層的業務系統發生了mysql死鎖的報錯,就不要太糾結于上層業務系統的日志了。應該去看mysql的bin log,抓住這個案發第一現場,看看到底發生了什么。不知道怎么解決線上問題,99%是因為連案發第一現場都沒找到,等你找到了,基本也有解決方法了。
人性:每個人都喜歡做省力的事情,喜歡的事情。但是人往往有偏見,根本沒有想明白查線上問題的價值,就認為這是一個很low的事,是不可取的。對自己不了解的,未知的事物,應該敬畏和學習。
例子3-技術面試問題:很多同學的技術經驗已經很扎實了,也能寫出很穩定的代碼,但是作為技術面試官,為什么老是會看走眼呢?
認知:對應聘者而言,能否獨立解決問題是能通過面試的及格線,應聘者專業技術的掌握程度只決定offer薪資的高低。
解釋:是不是覺得又來歪論拉?恩,繼續解釋一番。首先問你,你為什么要招人,我想信很多人都會這么說:當然是找你來幫我干活啊,我現在天天干到11點,累死了,急需人幫忙啊。恩,所以你很清楚,這個人是要能獨立解決問題的,能幫你分擔的,不是來了還要你天天在那里盯著的。但是我們看到很多同學的內心認知是混亂的,雖然他能看懂這句話,但是在面試的時候他會這么做:準備10個左右他擅長的技術細節問題,一個個問,應聘者只能答出5個,廢柴,不送。答出7個,恩,可以進來。答出10個,還說了1個我不知道的,好牛逼,絕不能讓他看出來我比他弱,否則進來后還怎么帶他。但是這個和你之前痛恨的應試教育又有什么區別呢?這種招聘方式有很大的風險招進來的人是研究手機屏幕從幾樓摔下去不會碎,而不是研究讓屏幕顯示更清晰的人。
正確的方式應該是:讓他講一個之前投入度比較高的項目,描述下自己是怎么獨立去解決問題的。對每一個點的描述,只要你覺得還不能體現他“獨立解決問題”的能力,那就繼續扒皮深問,直到他竭盡全力,被你”逼到墻角”。特別優秀的人被逼到墻角后,具備現場把墻砸掉的能力,這樣的人是死也不能放過的,具體什么意思大家可以去體會思考。
之前我們曾經面試過一個性能測試工程師,從技術細節看對性能測試的工具和方法是比較了解的。在項目描述中我們問了他一個問題:你之前通過性能壓測發現的服務端問題,有去了解過發生的原因嗎?他給的答復是:因為我們是外企,制度比較明確,開發也是另外一個部門,所以我沒有去了解。不好意思,這個回答基本體現了沒有獨立解決問題的能力乃至意識。碰到一堵很小的墻,他都沒有辦法獨立解決,好奇和學習的欲望也很弱。他在技術細節上的積累只是因為看了幾本書,用了幾次工具,這些都只是為了應付面試和不懂的領導,根本沒有深入實踐,他未來的瓶頸一定非常大。
只要能夠獨立解決問題,就一定能通過面試,有些技術不了解,最多就是被砍點薪資而已。在這一點上,10年工作經驗的同學還真未必比得上2-3年工作經驗的同學,如果沒有獨立解決問題的能力,那只是多累積了一些所謂的專業經驗,但還是無法解決問題。很多大公司喜歡校招優秀的畢業生,也是這個原因,雖然這些學生還沒有實際工作過,但已經具備了很強的獨立解決問題能力。我們曾經招過一名同濟大學的測試實習生,有一次她獨立組織了部門的團建活動,搞得井井有條,方方面面都考慮到了,這樣的同學做好技術只是時間問題。:)
人性:應聘者的人性有哪些呢?懶:影響獨立解決問題的意識。 要面子:比如剛剛舉的例子,拿公司制度掩蓋自己無法獨立解決問題的現狀。(并且他自己是意識不到的,因為他內心的認知是混亂的) 盲目自信又不自信:對自己做的熟的東西盲目自信,對沒接觸過的技術很不自信。
例子4-最嚴重的線上故障問題:到底是什么原因,會導致嚴重的線上故障呢?是我們團隊的技術水平不高,還是流程問題才造成了如此嚴重的故障呢?
認知:個體的過失很難造成嚴重的線上故障。真正的原因是:集體性的認知出錯。
解釋:在現代微服務的架構下,各服務之間的解耦性已經做得非常好了,總體來說出現全面嚴重問題的概率已經降得非常多了。就像一個國家一樣,不怕局部的腐敗,怕的是整個鏈條的腐敗。舉個例子,如果一個系統上線前,需要在數據庫里配置一個關鍵的參數,如果不配置會導致很多請求處理錯誤。但是開發同學發生了錯誤的認知,潛意識里認為配置不是寫代碼=配置沒有寫代碼技術含量高=配置沒有寫代碼重要,最后把它忘了。測試同學認為測試配置不是測試新寫的代碼=優先測試新寫的代碼,再測試配置=測試代碼比測試配置更重要,最后把它也忘了。那這基本上是救不回來了,上線后一定會發生嚴重的問題,每個鏈條的檢查機制都失靈了。堅決預防集體性的認知出錯,就可以避免很多嚴重的問題。
集體性的認知出錯往往是從一些小現象開始的,比如我們的團隊曾經發生過一次正常的項目延期,原因是周五到了,沒有完成測試,為了避免倉促上線出問題,所以延期一天發布。其實到這里都是非常正常的,但是當測試同學在釘釘群里發出這個原因的時候,有一些同學發出了大拇指的表情。注意,這個時候大家是沒有犯錯的,但是認知已經出現了偏差,變成了“以后就算測不完,只要說項目風險,就可以延期”。群里很多同學都看著,一旦這個集體性的認知偏差形成,未來項目的延期就會越來越多。所以需要立刻出來說一句:因為風險項目暫時不上可以,但是延期的原因要總結反思。 通過這樣一句讓大家心里不太舒服的話,盡快把集體性認知偏差扭轉過來。馬云說過”小事要大做”,就是這個道理,不大做,等發生大事的時候就來不及了。
人性:盲目自信:對自己做的領域有天然的偏見,哪個重要,哪個不重要。隨大流:別人也這么做了,應該不會錯,還省力,我也這么做。懶:默守所謂的安全方案,其實在那個場景下已經不安全了,但是內心認知出現偏差,懶得去破局改進。
例子5-如何看待代碼邏輯復用問題:對于代碼邏輯的復用,大家的看法往往不一樣,有些同學認為只要是有公共性的代碼都該不斷抽出通用函數復用。有些則認為對重要的通用邏輯才該復用,過度復用反而增加成本。
認知:能力該復用,業務不該復用。分久必合,合久必分。
解釋:這里提出了兩個認知,我們來分別解釋下。能力該復用,業務不該復用,這個很好理解。能力是指對這個系統有價值的功能,會長期存在且擴展下去的。而業務是一個泛指,既可以表示單一的產品需求,也可以表示某個局部的功能。比如你的應用里接入了一個支付寶支付,對支付這個事情我們判斷下來是一個基礎核心能力,且將來很有可能也要接入微信支付,所以應該抽出公共的函數。再比如對于客戶端的登錄頁面和注冊頁面,雖然渲染邏輯90%是一樣的,但是不應該復用,因為它們是單一功能,不是能力,貿然復用反而帶來了很大的風險。
分久必合,合久必分,這個的理解就很有意思了。大家都知道,這句話的出處來自三國演義,說的是一個國家分裂久了就會合并,合并久了也會分裂,其實對代碼邏輯的復用也是如此。大家在合并抽出公共函數時,會發現有10%-20%的邏輯不是那么順眼,總感覺暫時放在里面是可以的,但將來可能會拆出來。那么在寫公共函數時,就要特別注意這部分邏輯。它雖然暫時在函數里,但是需要做到和上下文相對隔離,甚至還可以加入明顯的換行和TO DO,為下一次的拆做好準備。而在拆出一些獨立邏輯的時候,也要思考這些邏輯可能和其它的哪些邏輯有機會是合起來的,那么盡量放在一個類里,一個包里,為后續的合做好準備。
人性:不要刻舟求劍,妄圖用一套規則來應對外部復雜變化的世界,要因地制宜,實事求是,學會變通。
例子6-開源的意義問題:為什么現在很多中國的互聯網公司開始重視開源的宣傳了?
認知:開源直接決定了公司的成本收入,以及人才儲備
解釋:是不是要崩潰了,開源無償寫代碼,然后免費給別人用,不是在消耗公司成本嗎?別急,還記得馬云說過的一句話嗎,“免費的才是最貴的”。恩,這個道理同樣適用于開源。今天中國很多的互聯網公司已經非常明白了,甭管你的開源技術到底好不好用,宣傳一定要大,一定要讓大家參與進來。
帶來的好處太多了,因為用了你的開源消息隊列,之后就會用你的云計算平臺。因為程序員都很懶,開發環境和線上保持一套嘛,你后面一定能賺大錢。因為開源項目非常知名,讓你公司的技術形象立刻高大起來(先不管這個項目到底創造了多少有價值的產品),每年校招的優質學生資源盡收囊中,其他公司要搶人,只能花更多的錢。而每年中國優秀的畢業生就那么多,早就供需失衡,誰搶到了大部分,那之后在技術上一定能保持絕對優勢。最后萬一公司財報不好看了,不好意思開始收授權費,就像google收android的費用一樣。不作惡只是口號,開源帶來了無比巨大的利益,不能賺錢,誰開源?!現在微軟也懂了這個道理,成為了開源社區的標桿,但在早期的鮑爾默時代可是出現了認知偏差呢。
人性:開源者的人性:追求利益,喜歡聲譽。 接受開源的人:渴望進步,賺便宜,崇拜權威。
關鍵點:如何提升認知內心簡單:
內心越簡單的人,將來能到達的境界就越高。大家千萬不要誤解了,我說的不是思想淺薄,而是內心簡單純粹要像少年一樣。一個很好的例子,郭靖,用世俗的眼光來看他天資不高,開始學什么都慢。但是他有一個很大的優點,就是想法簡單,無私心,持之以恒。報家仇,報國仇,保護好他愛的人,不會去想是不是別人騙了他,他多做一點是不是虧了。20歲就達到五絕水平,最后終于融合“降龍十八掌”、“九陰真經”和“左右互搏”三大蓋世武功為一體,武林尊為“天下第一俠士”。
內心越簡單,就越不會花費額外的精力在一些無關緊要的事上面。隨著時間的推移,你的認知水平就一定能提升得更快。不要去想今天你學的語言明天是否還流行,先利用當前語言訓練好你的思維模式。不要去想我作為測試給開發指出太多問題后,開發會不會不爽,做為測試你的核心是保證產品質量。不要去想今天我幫組內的開發分擔了額外的代碼編寫,我是不是虧了,這些付出一定會在將來某個時候兌現,因為你比他們有更多的代碼實踐。
相信跨界的力量:
ipod+手機誕生了iphone,手機+錢包誕生了支付寶,c,python+java誕生了go,人類的創新其實都是來自于跨界的結合。很多時候大家去看一個技術大神,會認為他一定是看了很多專業的書,看了很多牛逼開源項目的代碼,寫了很多項目才達到現在的這個水平。然后又看到別人的興趣愛好:音樂,滑雪,畫畫,牛逼,大神就是大神,做好技術的同時還能“兼顧”這些興趣。
這個認知完全錯了好嗎,我告訴你,寫代碼看書固然很重要,但如果他沒有這些興趣,他在技術上可能根本達不到今天的程度。一個有畫畫功底的人,理解向量,理解數據的PCA分析就是快好嗎。一個財務出身的人,寫支付系統的代碼就是不容易出錯好嗎。人類的大腦從來都是一個網狀的,互相關聯的知識圖譜,根本不存在靠”單一事物”修煉成功的好嗎。千萬不要成為技術上的孔乙己,天天學各種API的寫法,和學習茴香豆的茴字有幾種寫法沒有任何區別。在方案想不出來的時候,在代碼水平感覺到瓶頸的時候,在看不懂一些專業書籍的時候,一定要跳出來,和自己的興趣結合,和自己經歷結合,和自己的生活結合,這樣才能突破瓶頸,提升到更上一層的認知。
相信更高認知人的指引:
科幻神作三體里,外星人看地球人就像紙片一樣,在三體人的眼中,地球人是二維的,而不是三維的。回到現實中,高認知的人看低認知的人也是一樣的,不是低認知的人不夠努力,而是你的知識圖譜里比高認知的人少了一些維度。所以不管你怎么努力,你會發現仍舊無法超過他,他還比你輕松,學霸給大家留下的陰影就是這么來的。
在實際工作中,你的leader,你的架構師只要不是水貨,往往他們的認知就是比你高的。一旦你覺得這個人的本性是靠譜的,你就該無條件去相信他給你的建議和指引。因為他能看到在你那個維度上感受不到的東西,照他的話去實踐幾次,你才有機會到達他那個維度,才能升級認知。不過在現實情況中,我們往往看到很多leader和架構給下面的同學苦口婆心說了很多,但是他們不理解,反而更叛逆。這份痛苦我懂,你是拼了命想拉他到你那個維度,但是他還年輕著呢。:)
持之以恒地實踐:
人就是一個如此奇妙,如此復雜的生物,不管你看多少書,看多少源碼,寫多少demo,你不真刀真槍地去實踐,去寫代碼,這些知識無論如何都無法進入你大腦的知識圖譜。它們永遠只能是“狹義上的知識”,而不是“有價值的認知”。相信大家人生中都有過類似的經歷了,越是辛苦的實踐,越是堅持,你最后的收獲一定越大。簡單來說,認知不通過持之以恒的實踐是不可能升級的。
還有一點我必須要強調,實踐應該盡量和公司的項目去結合,而不是依靠于自己寫demo。這里面有一個很大的誤區,自己私下寫demo經常是沒有“明確,高壓的”目標的(人性總是偏懶的),這種實踐往往很難提升認知。而公司的項目往往不同,會提出"支持多少用戶訪問",“為什么你每次開發都不能更快一點”(核心挑戰的是你架構的擴展能力),“為什么這個功能這么卡”(性能優化),這些“明確的,高壓的”目標能督促你去拼命提升自己的認知(只是寫demo是很難給自己設下這些障礙的,是反人性的)。當然從結果來看,又是公司的壓榨剝削拉,讓我們回憶一下前面說的,如果你覺得這個公司是靠譜的,那就讓我們的“內心簡單一點”,持之以恒地實踐升級認知吧。:)
最后總結一下,現在已經不是一個單純比拼知識量的時代,而是比拼認知高低的時代。作為程序員我們并不特殊,和市場,財務,產品,運營的這些同學一樣,核心看的是認知,并不存在誰比誰困難,誰比誰辛苦的這種淺層比較。
而我們學習的那些語言,框架,工具,和我們大學時期學習的微積分,高等物理沒有區別,都只是幫助我們不斷訓練提升認知的實踐工具,而不是認知本身。讓我們不要再局限于程序員狹義技術的范疇內,把提升自己的認知作為最重要的目標,我們要努力做到“既是程序員,也不是程序員”。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72827.html
摘要:不久前,在團隊內部和大家做了一次分享,內容就是這次要講的用認知和人性來提升自己的技術水平,大家反響不錯,所以這次整理一下也分享給大家。 不久前,在團隊內部和大家做了一次分享,內容就是這次要講的用認知和人性來提升自己的技術水平,大家反響不錯,所以這次整理一下也分享給大家。最初我是想用借優秀的產品經理思維來做最棒程序員的這個標題,但想想還是要有同理心,技術同學平時和產品同學已經是相愛相殺了...
摘要:科技博客很多,但質量高的不多,發現質量高的,但又記不住,所以索性把它們都記下來。促進軟件開發領域知識與創新的傳播是創意工作者們的社區。 科技博客很多,但質量高的不多,發現質量高的,但又記不住,所以索性把它們都記下來。 米撲博客,深耕寫博客近十年,總結了許多好博客,主要偏向互聯網、科技資訊、技術分享 本文原文,來自于米撲博客分享:IT,互聯網,科技,技術博客網站推薦 國內科技博客 極客公...
摘要:科技博客很多,但質量高的不多,發現質量高的,但又記不住,所以索性把它們都記下來。促進軟件開發領域知識與創新的傳播是創意工作者們的社區。 科技博客很多,但質量高的不多,發現質量高的,但又記不住,所以索性把它們都記下來。 米撲博客,深耕寫博客近十年,總結了許多好博客,主要偏向互聯網、科技資訊、技術分享 本文原文,來自于米撲博客分享:IT,互聯網,科技,技術博客網站推薦 國內科技博客 極客公...
閱讀 1158·2023-04-26 01:35
閱讀 2513·2021-11-02 14:44
閱讀 7639·2021-09-22 15:38
閱讀 2204·2021-09-06 15:11
閱讀 3719·2019-08-30 15:53
閱讀 795·2019-08-29 16:54
閱讀 630·2019-08-26 13:48
閱讀 1762·2019-08-26 13:47