請問各位程式設計師,是我的思維方式有錯誤嗎?

  • 2022 年 1 月 10 日
  • 筆記

你好呀,我是歪歪。

前幾天知乎給我推送了一個問題,我點進去一看,好傢夥,竟然把我血壓都看上來了是怎麼回事。

我先把問題複述一遍,聊天記錄比較長,但是看的過程中容易衝動,注意控制情緒:

最後,提問者還是說:順便請你們分析下我的思維方式是怎樣的?是個怎樣的人?

遭不住

怎麼樣,你看完之後什麼感覺?

反正我看完之後是直呼「遭不住」。

我甚至一度懷疑這個師傅是不是有什麼把柄落在徒弟手裡了啊?

這是一次錯位感非常強烈的對話,而產生錯位感的原因我認為是兩個人的認知不同。

師傅,一個正在職場打拚的大廠程式設計師。

徒弟,一個準備踏入職場的單純小菜雞。

這個師傅一直在提的是:面試、工作、offer...

這個徒弟一直在提的是:原理、底層、細節...

如果說這個徒弟學習編程知識純粹是為了愛好,學著玩,也不想著靠這個東西混口飯吃,就是想研究研究編程到底是啥玩意。

那麼很好,徒弟沒毛病,是一個值得鼓勵的學術派。

但是從這兩句話中,我猜測這個徒弟學編程不是純粹為了愛好,也是想要找份工作,進入程式設計師這個行列的:

基於「想要去面試」這個提前下,他的這個問題:

請問各位程式設計師,是我的思維方式有錯誤嗎?

有問題,那是相當有問題!

不僅是思維方式有問題,整個對話方式都是有問題的,給人一種情商有待提高的感覺。

我倒不是想批評他,我只是想基於他的這個問題,談談自己的一點看法。

思維方式

我先講個我大學的時候的故事。

我大學的專業是計科,這個專業是要學模擬電路的。但是那一年,我這門課學的是一塌糊塗,老師上課我都聽不懂,心想這玩意也太難了。

不知不覺混到期末,要考試了。

我在考試之前,下載了一整套的模電相關的影片。硬生生的在圖書館啃了一個月的時間,在磕磕絆絆的情況下,我終於在臨近期末的時候把這套影片看完了。

那一個月把自己的感動的不行了,覺得自己真牛逼:這麼難的東西,我竟然啃下來了。

學習路上就怕是誤入歧途,還自我感動。

最後去考試,我發現其實大家都考的還可以。因為考題中大部分都是書裡面的課後習題,大家拿一周的時間重點突擊一下課後習題就好了。

後來我反思了一下,我覺得自己在圖書館裡面看一個月模電影片這件事純粹太傻了,就是在浪費自己的時間。

我屬於完全是把時間用在了錯誤的地方。

我記得看影片的時候有一些比較難的地方,看不太懂,我還會去反覆看,查閱其他資料,最後其實也是一知半解的樣子。

我現在想起這件事就後悔。

我明明可以只用一周的時間突擊一下就行了,但是我卻傻傻的用了寶貴的一個月時間,期間學的還非常難受。

如果我帶著現在的認知回到大學的時候,我一定要找到那個時候在圖書館啃模擬電路影片的自己,上去就是掄圓了兩巴掌:

我們一起來複盤一下這件事啊。

首先,我看模電的初衷只是為了期末考試能過,不掛科就行。

其次,期末考試的時間是固定的,所以我的時間是非常有限的,這屬於我的資源。

最後,整個過程中我都是單打獨鬥,甚至沒有人知道我天天早出晚歸的去圖書館,其中相當一部分的時間是在看模電。

結果你也知道,這樣的投入產出比是非常的小的。

這樣的情況其實和提問題的徒弟有點像:

首先,他去學這些東西的目的是進入到程式設計師這個行業中來,只要能通過面試就行。

其次,哪怕他把時間線拉長到一年或者兩年呢,終歸來說時間也是有限的。

但是他比我好的是,有一個師傅,一個過來人,告訴他說:你先別看這個東西,對你來說收益不大,先去攻克其他的目前來說對你更有價值的東西吧。

就像是我說的,當時有人在我看模電的時候過來給我一巴掌,說:你拿一個月時間看這個玩意還不如拿點時間敲幾行程式碼呢。

我也算是能醒悟過來,但是,沒有。

我當時還走入一個怪圈,看到不懂的地方還會鑽牛角尖,還想要去嘗試一下那些賊難的附加題。研究一下「茴」的幾種不同寫法。

這就是沒有分清事情的優先順序的表現。

能分清事情的優先順序是一件非常非常非常重要的事情!

這個徒弟似乎也和我走入了同樣的怪圈,但是自己渾然不知。

但是他比我更嚴重的是,有人給他指路了,他還非覺得自己堅持的才是對的。

再舉一個我之前看書的例子。

如果你是搞 Java 開發的,那麼你一定知道有一本書叫做《深入理解Java虛擬機》。

我第一次看這本書的時候,是 2016 年的國慶節,那個時候我才畢業 3 個月時間,對於 JVM 相關的知識儲備是 0。

但是我當時知道這是一本非常好的書,所以那一年的國慶節,花了整個國慶節的時間把這本書一頁一頁的翻了一遍,而且不是走馬觀花的看,是認認真真的看,還做筆記的那種。

書里前幾章的例子,我甚至都在電腦上敲了,跑起來看了看。

但是整個讀完一遍之後的感覺是「雲里霧裡」,關上書之後就什麼都不記得了。

好在我當時知道這是比較底層的東西,所以目的也只是通讀一遍,並沒有強制要求自己要學到多少東西。

如果,我當時要求自己把這本書吃透的話,這又會是一件投入產出比非常低的東西。我完全可以拿著這個時間去學習我當時根本不了解的、但是工作中在用的框架,比如 Dubbo、Spring、MyBatis 等等。

這樣性價比會高很多。

我當時能想到時間的「性價比」這一點,也完全是因為我前面舉的模電的例子帶給我的思路。

我踩過坑了,我吸取教育了,以後再次遇到類似的時候我就知道應該避免一下了。

雖然當時沒吸收到多少東西,但是在有一定的編程經驗之後,比如兩年之後,再次翻閱《深入理解Java虛擬機》我發現能吸收很多東西進去了。

我之前圍繞這本書也寫過很多文章。

假設,如果我第一次看的時候,就被下面文章中描述的這個問題深深的吸引進去了,然後花了很多時間才搞明白原來是這麼一回事,其實沒什麼意義:

《深入理解Java虛擬機》第2版挖的坑終於在第3版中被R大填平了

又或者說,我被這個地方程式碼給吸引了,非要去研究一下為什麼運行結果不一樣,也沒有什麼意義:

《這個Bug的排查之路,真的太有趣了》

哪怕那個時候我去深入研究了什麼三色標記、記憶集、卡表、讀寫屏障、jit...這些東西,都是沒有意義的。

因為這就不是一個工作經驗不到一年的程式設計師應該掌握的東西。掌握不了是正常的,掌握了說明你牛逼,你可以把附加題給做了。

這個例子我想表達的是:

學習的順序也是一件非常非常非常重要的事情!

你可以在學習的時候去鑽牛角尖,但是別忘了,你是一個「學渣」,鑽牛角尖是「學霸」才有能力乾的事情。

所以別忘了,你提問的時候自己說的你是一個「前端初學者」,研究底層原理是「中高級程式設計師」才有能力乾的事情。

我不是說你不配去研究「原理、底層、細節」這些東西,而是我覺得你這樣的投入產出比太小了,可以說是微乎其微。

而且你的研究之路從學習的順序這個角度來說也不太對,如果你真的是想要去理解底層的東西,你應該踏踏實實的去看一下正兒八經的四年本科的專業課相關的課程,按照那個順序去學。

才有可能把「底層之路」走的稍微順暢一點。

我個人的學習經驗是如果在掌握全局之前,太過於追求細枝末節的東西,會影響到你掌握全局的進度。

而如果你不能儘快掌握不了全局,你所追求的細枝末節就如你師傅說的:

對於一個想要入行的但還沒入行的程式設計師來說,時間本來就是比較緊張的資源了。

本來好好的利用這個資源,你可以在面試的時候考到 60 分以上的,但是由於你對於資源進行了不合理的分配,一上來就要強吃原理,導致的情況就是時間節點到了,但是拿出的結果並不理想。

即使在有人提醒你的情況下,還是沒有掌握到事情的輕重緩急。也就談不上對於某個任務的資源利用最大化了。

這裡面說的任務就是通過面試。而資源之一,就是指「時間」。

如果你真的是一個程式設計師,很可能在一個任務即將提測的時候,任務還沒有完成,因為你大部分時間在研究這幾行程式碼怎麼寫更加優雅。

我認為一個優秀的實用型程式設計師的職業素養之一就是不斷在有限的開發時間和優雅的程式碼實現之間找到一個平衡點。

總之,提問者可能還是一種學生思維,我在當學生的時候,常常是手邊來一個事情就做一個事情,不具備分辨事情優先順序的能力。

自己不具備的時候,可以去請教過來人。

如果你手上的任務堆積非常的多,同時你又不知道那個任務的優先順序高的話,那麼一個明智的做法是儘快問一下給你分配任務的同事,然後告訴他:我現在手上有幾個任務,衝突了,麻煩幫我拍個優先順序吧,我自己有點拿捏不準。

先做十萬火急的事情。切忌,來一個事情就做一個事情。

情商

我之前在知乎回答這個問題的時候就提到了這一點:

為什麼他的這段對話能讓人看的血壓升高呢。

我截取幾個地方,首先是聽不進勸:

別人話都說到這個份上了,還在杠,還在杠,還在杠!

學習的路上你還會遇到無數個這樣的小問題,如果每個你都要去杠一下,得了,別學了,去當運動員吧,國家抬杠一級運動員。

再說了,我一個後端都知道你問出來的這個問題,通過瀏覽器搜索很容易就搜索到答案了。

沒有一點面向瀏覽器編程的意識,為師怎麼放心讓你踏足社會。

然後太自我了,就是那種目空一切,沒有遭受過毒打的自我。

請把這句換成:我覺得這樣可能會更好一點。

這句可以換成:我可能之前沒有和你聊過,我其實是一個比較喜歡追求原理的人,所以會比較糾結一點。

這句可以換成...

算了,換成啥都不對味,沒救了,看點相關的書,然後勤加練習吧。

下面這些都屬於治療低血壓的良藥:

如果你把這樣的性格、這樣的對話帶入到職場中,相信我,來自社會的毒打會來的又快又猛,你甚至看不到是誰出招了,你就倒下了。

還有,「快」和「准」是兩個字:

另外,徒弟在回復別人的時候提到說他是給了錢的:

這錢花的值,但是師傅的作用其實和大學老師一樣。目標是把你領到門口來,至於能不能走到門裡面就看各自的造化了。不是一直用來回答你技術問題的。

相對於精進編程能力,我個人覺得你也應該好好學學待人接物之道。

在網上衝浪的時候可以多留意一下這方面的資訊。

進入職場之後,程式碼並不複雜,複雜的是人。程式碼你可以 Debug,但是人心隔肚皮。

最後,送你一張圖,建議常常拿出來仔細觀看:

本文已收錄至個人部落格,歡迎大家來玩:

//www.whywhy.vip/

Tags: