背景
今天,我們來討論一個問題:技術實力的本質究竟是什麼?
在工作中,你可能會遇到,為什麼他的實力不如我,他卻可以晉升?
在面試中,你可能會遇到,我把系統效能優化了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等手段實現。
在技術方面,我們應該學習你所在領域的通識,並做好技術儲備以應對未來需求的變化。
在社交方面,我們應該持續學習溝通能力,表達能力,思維能力,總結能力,並落實到工作生活中。
好了,今天的分享就到這裡。
最後,我想問,你支援本文的觀點嗎?
歡迎留言討論,共同進步。