編程東西學得多是不是一定是壞事?

我現在在公司比較閑,有時間自己學習,於是我學習了前端JS,後端.NET ,JAVA,C++,演算法,Haskell,MYSQL,我還學習了一些業務上面的東西,我對我自己的職業規劃有一個清晰的認識,我知道我想要什麼,因為我覺得眼界開闊總不是壞事,但是身邊總是有人會說,你看那人又買書,學得完不?

想聽聽各位大大的看法,我學的都是基礎,我想弄懂為什麼,而不僅僅是這樣做。


不管這是不是題主的求贊帖,在不影響工作的前提下多學學各種知識當然好,該贊就得贊。

在工作之後,水平是否能持續提高,下班後的幾個小時挺重要的。能找到志同道合的人一起討論各種問題更是很好的驅動力。

要是能在知識面與深度之前做點權衡,選定一些領域深入鑽研進去,或許是更好吧。

話說Matz大大發明Ruby語言也就是工作清閑自己有空鼓搗鼓搗自己的興趣愛好搞出來的。勵志不 &>_&<


一個誤區是,知道的越多,你可能無法專註一個東西。導致你看似知道的挺多,但其實都是半吊子。

確實會有這樣的情況,尤其是,你發現總是在重複的學習某些技巧,而不是真的思考它的原理的時候,看的多反而會消耗精力。

但是,那些真正厲害的人,絕不可能只對一門技術精通。我從來不相信只學java就能打遍天下無敵手的。技術棧、技術視野、和其衍生都是墊腳石,能幫助你抵達一個高度。

所以,編程東西學的多是不是一定是壞事? 這個問題是沒有答案的,你如果每天看的都是21天入門,那麼你永遠在入門。不在於你學了多少,而在於,你在學了很多後,反饋是怎樣的?是不是會有自己的思考?是copy,wow it"s works。還是,你認真的思考,設計者的原意是什麼? 如果是我來做,我會這樣實現么?理由是什麼?

對,最重要的是自己的思考。一旦你開始思考,那麼,很多新的術語技術,你可能一下子就猜到這是不是新瓶裝舊酒還是真的是創新,值得不值得你花費一個下午去弄懂?

花哨的東西總是很容易佔據你的精力,比如當你學習ruby的block,你似乎發現這是一個不錯的向同事炫耀的機會,或者你發現了一塊nodejs的語法糖,或是一段優美的lisp。當你知道這些的時候,你需要認真的想一想,這些東西到底是什麼? 出於什麼樣的原因存在。解決了什麼樣的問題。

當你的學習越多的時候,你可以橫向比較,這使得你更容易理解一些東西的本質。前提是,你要停止炫技。停止被一些花里胡哨的賣點佔據大多數時間。

你可能知道星際爭霸2這款遊戲有三個種族,但職業玩家通常只使用一個種族。但,他仍舊對其他種族非常精通,甚至在世界頂尖。他知道每一個種族的弱點和抵抗方式。編程也是一樣,你知道了許多東西,並互相比較,學習長處,但選擇一個棧作為興趣最強的方向,不斷的反饋進化。

所以,多或是少 都無法說明問題。

問題在於,這麼多東西給你的正反饋有多少? 你為此做過的思考勝於數量。當然了,數量多是必須的。


結論擺最前面: 學習能創造價值的東西。不管是廣度還是深度,只要你能用其創造價值,那就是值得學的。

ps: 這個價值不一定是短期可見的價值,也有可能是長期價值,未來能創造的價值。

我拿 cs 本科畢業的學生舉例。

我們知道cs專業學習的科目很廣,我曾經戲稱之為 數學、硬體、軟體 各佔1/3,然後我們在看看軟體有哪些內容,xx語言,數據結構,演算法,編譯原理,圖形學,操作系統等。

可以看出其實任何一個能從cs專業里畢業的人,廣度都很高的,畢竟每門科目他都考了60分以上。

但即便cs專業,真正學的好的也只是前20%,真正牛逼的只是5%。

so why?

難道廣度真的不如深度嗎。

我這裡想給出一個很簡單的公式。

一個人擁有的知識的價值和 = 所擁有的各個領域知識的價值的和。

不過這裡面的單位不是你考試多少分,考試科目的試卷通常只考核了你所在領域的10%左右的知識,試卷是老師出的,而有些科目比如操作系統編譯原理,平均而言老師對這些領域所懂的知識肯定不到5%,所以試卷以外的90%也非常重要。更何況不同知識也是有權重的,能創造價值的知識更有用,學校里的老師對於這些知識了解的更少。

說了這麼多到底什麼意思呢,意思就是,知識的廣度和深度都很重要,但最重要的是你所擁有的知識所能創造的價值,這些價值不是靠試捲去衡量,不是靠知乎里吹逼去衡量,而是在真實世界裡能給世界帶來什麼來去衡量。

比方說你學會了看起來很沒用的lisp,如果你不能把函數式的思想借鑒到你日常編程或者思考中,那或許就真的沒什麼價值,但假如能,那就有價值,對你日常編程或者思考有越大改善,那就有越多的價值。

又比方說溝通能力,看似和編程沒關係,但如果你和你同事通過良好的溝通更好的完成一個產品,那麼這就是有價值的。又如領導組織能力,如果你能帶領幾個同事一起成功落地一個能創造價值的架構,那麼這是有非常大的價值的。而這些其實也是知識,而且是非常有價值的知識,更是我們需要去學的,但這些知識不少甚至是跨界的,從廣度而言相比你說的其實是更廣的,但對於程序員也是非常重要的。


JS,後端.NET, JAVA 這三樣會一樣,吃喝不愁,會兩樣好酒好肉,你他媽會三樣,來問是不是壞事。那些只會X,卻說X是天底下最牛逼的Y的人,才是壞事。

我得說Haskell是裝逼利器,沒用。

但是!學過Haskell用Java 8,9手感不同。你要在點Net上F#,直覺更好。所以你只管牛逼,不問好壞,技術最後是一個東西。


那應該是引起別人的技術焦慮了。。。。


學得多不是壞事,但貪多嚼不爛是壞事,淺嘗輒止但自以為很懂也是壞事。

你自己所說「學的都是基礎」,和「想弄懂為什麼,而不僅僅是這樣做」,有這種想法已經比那些上速成培訓班想三個月就薪水翻倍的人強多了。但從文字描述中看不出你是只讀了書本還是實踐過了這些編程知識。如果是前者,你需要多實踐,至少把書中示例和習題都做一遍;如果是後者,這些前端後端資料庫的知識已經足以讓你編寫一個完整的項目了,在做的過程中你會發現自己對很多知識理解不深入、不完整的地方,通過解決實際問題才能把知識點串起來。

如果這些都做過了,怎麼還會有這些疑問呢?要麼繼續學下去要麼就該投簡歷了不是嗎?


你這個叫沒有方向,沒有目標。

跟你學的多少沒關係。


如果「我對我自己的職業規劃有一個清晰的認識,我知道我想要什麼」,那就不要在意外界聲音,有不同看法實屬正常。

如果學了這麼多,經過時間的檢驗,思考一下自己還剩下些什麼?這也是必要的,因為這可能是你的主打方向。在主打方向上發力、深入,謂之「專家」;成為「專家」後在其他方面博覽眾長,謂之「大家」。

感覺題主跟我愛好方式有點像。

至於「這麼多書看得完嘛」的問題,像我半夜醒來看個個把小時的書也是常事,對於別人而言也許「不可思議」,對我來說卻是習以為常。


李笑來的《把時間當做朋友》有提到你面臨的這種情況。他們之所以議論你,甚至拖你後退。根本原因是因為他們恐慌。他們知道你做得對,但他們又堅持不了。大家一起在井裡當青蛙不好嗎,就顯你出頭? 類比是學習知識一種非常重要的途徑。而大量知識積累才能讓你的大腦在遇到新知識時從中調出用於類比的知識,這將極大加快加深你對新知識的接受速度和程度。有點投資理念的人都知道複利的威力,你現在所作的事情就是在進行複利的積累。三五年之後這將給你帶來你自己都不敢相信的成效。你現在唯一需要做的就是堅持。堅持到讓那些人閉上嘴就可以了。


不是壞事,出來顯擺也不是好事。


贊同ghost,僅僅補充一下看法。

.NET ,JAVA,C++,JS,甚至演算法什麼的,都只是工具。同樣是毛筆,有人只會用其作畫,而有人卻用其成為畫家。

所以問題不在於你對工具數量掌握的多少,而是如何去運用。

工具,是為了解決問題而生,考慮好為什麼要掌握這個工具,這個工具能解決什麼問題,不能解決什麼問題,而不是僅僅只是:哦,這個工具是這麼用的啊。

如果你只是純粹為了掌握工具而去學習,那麼建議你不要浪費時間。工具有不同的局限性,久而不用也會手生,何況還是CS系的東西,半衰期太短,學完擱端時間你可能就永遠也用不上了。真若用的時候,你知道它變成了什麼樣子,還記得這個工具該如何解決相應問題嗎?不要誤認為固守不變,也不要輕信自己的記憶。

當然,在CS系要想混好,也不得不掌握大量工具,大量的方法與手段。但是,是為了連接,孤立的去學習工具收效甚淺。所以,不要認為掌握大量工具你就知道會如何連接,看題主列舉了 .NET ,JAVA,C++,我擔心反而恰好是孤立。你為什麼要學這些?,NET什麼場景下需要用C++解決?

至於工具背後的一些不同的方式思想,也同樣重要。比如同樣一個功能實現,你既可以自己寫幾百行完成,也可以套一個框架幾行完成,那麼什麼時候你不能選擇這個框架呢?你自己寫一個小demo項目,可能也就幾個文件,但如果你進入一個成百上千文件的項目里,你看待問題的角度又會不一樣。工具還是那些,但是方式思想已經不是你學語法時期那個樣子了。

有個職位叫全端,但是不要認為掌握一堆工具就可以稱之為全端了,全端的意義在於靈活的運用各類不同的工具,將自己的知識經驗連接起來解決各種問題。

工具,只是基礎。不要僅僅把目光局限在工具的數量上,怕是浪費時間。

那麼,問題便是:工具學得多,是壞事嗎?不好意思,這個問題不成立。

工具必須要掌握,多種工具的掌握也在所難免,重點在於你的掌握與運用


時代是會變的,終生學習是個好習慣。題主你可以等那些人找不到方向,跑到知乎上問「做xxx的看不到前景了怎麼辦?」的時候,再懟回去不遲。


與別的答主意見不同的是,

【除了工作要用的知識,我不建議你深入了解別的領域,淺嘗輒止就好】

了解這些知識的用途和大致原理後,在腦子裡建一個索引,以後用到的時候再深入學習。

不要把時間精力浪費在眼花繚亂的新技術上。把計算機科學基礎知識掌握牢,學什麼新技術都會很快。


自己的興趣,管別人怎麼說呢。。

我們領導喜歡讀書,於是我們部門被要求必須買一本書(給報銷),每周一早上開會分享讀書心得。

等你當上領導也可以這麼干,讀書心得說的不好的,計入績效考評。


看你學的質量怎麼樣啊。

比如認真研究了 Essentials of Programming Languages ,不說學術怎麼樣,一般工業上的編程語言對你來說就不存在學不學了。

比如搞定了資料庫系統原理,一般的資料庫應用也無所謂學不學了。

比如大概摸懂了體系結構的脈絡,很多玄學的東西就不那麼玄學了。

於是「會大部分編程語言」「會大部分資料庫應用」「懂很多奇技淫巧」看起來很多其實也沒什麼含金量。


你列的這個單子任何一項都夠我學個至少1年……

請收下我的膝蓋


種類多並不是壞事,但是只是種類多那就是壞事了


…工具可以多,哪個方便操起哪個就是搓代碼。

但是一定要有專長,精通的。可以是業務,也可以是語言。

不然就是雜了。

就像蕭峰各家武功隨手拈來,但是他不雜,他內功修得純。

反觀姑蘇慕容?


是壞事,會變得淺嘗輒止,到處裝逼。
何況,有本事的人在公司會比較閑?

一直在說「我只懂java」的兩個架構師半小時前在我背後討論,一個說「我只懂一點點java,搞不定,只能這樣試試了」,另一個附和道「是的是的,我也是的,我們就試試好了。」

我上去一腳一個踹趴下,叫你們兩個裝逼不帶我!咱調開源CAS按照基本法好不好!仔細看文檔調參數,不願意調參數你們動不動改寫人家內核你們要不要臉!


樓主勇敢的露出你20k+的工資單。

我保證沒人會bb你看書。

他們只會讚美你,大神就是愛學習。

我最討厭的程序員就是,

吹牛逼的時候,啥都簡單。這個我會,那個我做過。嘴上功夫了得。

一寫代碼。不好意思,太久沒用,我全忘了。


推薦閱讀:

宅總用的這是什麼編輯器?
沒有基礎,想學python和玩樹莓派,請問我可以怎麼做?
普通人想要達到輪子哥的 C++ 水平的一半需要多少年?
如何寫出優秀的代碼注釋?
為什麼大多數 Shell 都不支持類似於 PuTTY 的『選中複製』和『右鍵粘貼』?

TAG:演算法 | 編程 | Java |