技術實力的本質是什麼?

彤哥讀原始碼發表於2021-02-03

背景

今天,我們來討論一個問題:技術實力的本質究竟是什麼?

在工作中,你可能會遇到,為什麼他的實力不如我,他卻可以晉升?

在面試中,你可能會遇到,我把系統效能優化了10倍,為什麼面試官還是看不上我?

為什麼?到底是為什麼?

如果你有同樣的困惑,或者徹夜難眠,我認為你需要停下來思考一下了。

可能是你的學習方法錯了,你並不是不努力,只是努力的方向錯了。

我舉個簡單的例子:

我的父母特別勤奮,當我還是個小屁孩的時候,他們每天早上四五點就要起床磨豆腐賣豆腐了,一年四季如此,他們的目標也很簡單,就是把我和哥哥送入大學,當然,最後他們的願望也確實實現了。

你說他們努力嗎?是的,很努力。

但是,你說他們很成功嗎?不見得。

所以,你看,有時候並不是說,你努力了就一定會成功。

更不用說我們做程式設計師的,有那麼多的知識要學習,就拿java來說,你真的就只需要學習java本身的東西嗎?資料庫要不要學?各種框架要不要學?快取要不要學?

有這麼多東西要學習,學得過來嗎?通宵達旦地學也學不過來呀。

話題

所以,技術實力的本質到底是什麼?

我認為技術實力的本質是解決問題的能力,或者換個說法,技術源於業務,技術是為業務服務的。

這麼說,可能大家不樂意了,你莫不是產品弟弟派過來的間諜?!

我再舉個簡單的例子:

在很久很久以前,這個世界上沒有火,突然有一天,一道閃電劃過,劈在了樹上,著了火,引起了森林火災,後面火滅了,人去撿被火燒熟的動物屍體吃,嗯,味道竟然很好。

後面,人就形成了一種共識,火燒過的肉很好吃。

所以,他努力的想掌握生火的技能,經過一番嘗試,終於習的了鑽木取火的技能,從此,可以天天吃烤肉了。

在這個故事中,業務是什麼?技術是什麼?

業務其實是吃烤肉,技術是取火,鑽木取火是取火的一種方式,除了鑽木你還可以使用打火機。

忽然有一天,一個人說我要喝水,你卻給他打火機,你說你解決了他的問題(業務)了嗎?

並沒有,打火機雖然是更高階的技術,但是對於喝水這個需求並沒有什麼卵用。

所以,技術實力的本質是解決業務問題,你解決的業務問題越大越複雜,代表你的技術實力越強。

增強

那麼,如何才能增強自己的技術實力呢?

我認為分成以下幾個步驟:

首先,領悟業務,引導業務,這個你可以去學習一些DDD的思想,並落地到你的業務中,可以幫助你快速理清業務邊界,甚至引導業務未來的方向。

其次,學習通識技術 + 技術儲備 ,學習一些你所在領域的通識,並儲備一些在現在和未來能幫助你解決業務問題的技術。

在這麼多技術中,我認為最重要的是學習你所在領域的通識。

通識是什麼呢?

我們以java為例,java其實也有很多方向,比如web開發,物聯網,大資料,那我們看看這3個方向要學習哪些東西:

1、web開發:資料結構與演算法,設計模式與設計原則,jdk原始碼,spring全家桶,mybatis,MySQL,等等

2、物聯網:資料結構與演算法,設計模式與設計原則,jdk原始碼,netty,mqtt

3、大資料:資料結構與演算法,設計模式與設計原則,jdk原始碼,hadoop,hbase,elasticsearch,flink,等等

所以,你看java領域最重要的就是資料結構與演算法,設計模式與設計原則,jdk原始碼,那麼,他們就是java領域的通識。

你可能會問我搞大資料的為什麼要看jdk原始碼?

那你可以去看看大資料的那幾個框架都是什麼語言寫的,不懂jdk原始碼,你能看得懂hadoop的原始碼,我是不信的。

通識差不多這樣,那怎麼做好技術儲備呢?

我們以web開發為例,假設現在你們的業務量是10萬每天,預估未來可能會達到100萬,甚至1000萬每天,那你可以想象一下你們的架構將如何演變。

首先,儲存方面,肯定不能單庫了,所以,必須學習類似mycat、sharding sphere等分庫分表方案。

其次,查詢方面,分庫分表之後沒辦法做模糊查詢了,肯定要上搜尋,所以,必須學習elasticsearch等搜尋技術。

最後,併發方面,併發量有大幅度提升,介面效能要不要優化?jvm要不要優化?要不要加快取?要不要聚合日誌?等等。

甚至,為了動態擴容,可能還要上k8s等容器化技術,統統都要學習。。

所以,這麼簡單的分析一下,就知道要學習哪些儲備技術了,我這裡只拋磚引玉,並不是說這就是全部。

你可以排一個優先順序,一個一個去學習這些技術,但是,並不是說每一個都要去達到原始碼這種級別,你只要去掌握他們用到哪些底層技術,適用於哪些場景,有什麼優缺點,有什麼坑,簡單的使用案例,我認為掌握到這種程度就夠了,真正遇到需要用到這個技術的場景的時候,你能信手拈來即可,然後再去深入學習。

比如,訊息佇列kafka,它是怎麼部署的,它的快用到了什麼技術,它如何保證資料不丟失,如何進行主從資料複製,使用在什麼場景,等等。

其實,研究多了,對於一種新的技術,它使用的底層技術也就那些,比如oscache,幾乎所有分散式框架都會使用。

所以,你是不是可以研究一下這些框架都使用到的技術,他們是不是又可以成為新的通識。

最後,持續學習溝通能力,表達能力,思維能力,總結能力,並落實到工作生活中。

最後一部分如果用一個詞來概括的話,可以稱之為社交能力

你寫了一個特別牛逼的框架,但是你不會表達出來,別人也不知道你在說啥,有什麼用?正所謂天才與傻子只是一步之遙,可能是我們無法理解傻子,或者說傻子不會表達自己。

你在工作中是不是隻會悶頭幹活,交給你的活都能搞定,但是,你就是比不過那個PPT寫的好的,那是你的思維能力和總結能力不如別人。你可能只列舉了你做過哪些東西,但是,他會歸類總結,最後以結構化的方式呈現出來,甚至還可能通過對以往資料的彙總,預測下一年的方向,這個在老闆看來是更重要的東西。

所以,你必須學習思維能力和總結能力,而且是持續學習持續實踐,這方面的能力是貫穿一生的,即使以後你不做程式設計師去送外賣了,可能也能比別人賺得多。

總結

好了,最後總結一下今天的分享:

技術實力的本質是解決問題的能力。

在業務方面,我們應該學習如何快速理解業務,可以通過DDD等手段實現。

在技術方面,我們應該學習你所在領域的通識,並做好技術儲備以應對未來需求的變化。

在社交方面,我們應該持續學習溝通能力,表達能力,思維能力,總結能力,並落實到工作生活中。

好了,今天的分享就到這裡。

最後,我想問,你支援本文的觀點嗎?

歡迎留言討論,共同進步。

相關文章