按期喝雞湯

程序員工做後如何有效的學習

版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接和本聲明。
本文連接: http://www.javashuo.com/article/p-eobtqjuc-dp.html

工做三年多了,作技術不能只顧埋頭搬磚,也要按期回顧,思考將來,不要讓本身成爲那種一年經驗用了十年的開發者,這點要時刻提醒本身。菊廠工做三年多,不少有能力的小夥伴都離職了,去百度搞雲計算的,去阿里搞AI的,去大疆的,去美團的…對本身有觸動嗎?那是確定,沒有才是假的,可是本身卻在溫馨區裏每天循序漸進的過着,績效薪水都還不錯,可是技術能力呢?原本就不高,還遇到提升瓶頸了,囧~ 反觀周圍的老同事,好多搞管理了,帶版本管項目,每天拉通對齊端到端… 既然想走技術路線,就該好好想下工做後如何有效的學習了。git

工做中積累的侷限

從本身的工做談起,三年多菊廠Linux C/C++通訊軟件開發,第一年收穫最多(可能由於本身自動化出身CS基礎太差),工做須要的編程方面技能補齊後,就能夠很好的應對業務需求的開發了。「工做後,你只須要比你們多努力10%,回報則賽過50%」,親身體會真是一點不假。工做後,稍微深刻點知識的學習都只能靠本身。觀察周圍同事,對技術頗有熱情的並非不少,除了一些專家大牛,不少老員工單就技術能力而言跟入職兩三年新員工的技術能力沒什麼差距,我思考了下緣由,大概以下:程序員

  • 工做所用到的技術知識有限,不少人也沒有去深刻了解背後的原理;
  • 業務代碼對算法的鍛鍊不太夠,時間長了算法能力會減弱;
  • 沒有那麼多特性會給你架構設計的機會,而且架構都是專家定好的;
  • 不去主動拓寬知識面,去學習新東西,技術棧長期不更新;
  • 基礎知識掌握的不夠透徹與深刻,畢竟經典是須要反覆研讀理解的;

我工做這三年以爲本身收穫的最有用的經驗就是:問題定位能力,提早識別坑,快速填好坑。固然,也見識了一些優秀架構的設計,但也僅限於見識與使用。github

工做外有效的學習

先說說我本身平時工做以外的學習,基本就是下面的三項:面試

  • 看看書和網上的文章:工做相關、興趣愛好、技術熱點;
  • 動手實踐並總結博客:相似課後題和課程設計,實踐總結;
  • 刷刷LeetCode算法題:提高算法能力和寫代碼的手感;

本身的學習我的認爲仍是有效的,學習成長本身是能體會的到的,而且工做也作的不錯,只要稍微比同事多努力一點,就能有不少回報,工做後真的是這樣。可是呢,本身的水平本身清楚,而且本身的努力程度遠遠不夠。看一個大牛的心得《如何成爲一位技術專家》算法

如何成爲一個技術專家?答案其實很簡單,努力學習。 
從學生時代一路萬馬奔騰而來,何時努力的效果最差,高三的時候,由於你們都是如此努力,工做後,你只須要比你們多努力10%,回報則賽過50%,不止在技術上,其餘領域也是如此。 
《最牛B的編碼套路》一文提到了技術上的訓練方法:預期留出時間,集中鍛鍊,留出技術梯度,時刻關注本身有完成目標,到達瓶頸。 
程序員最重要素質是「不斷努力學習」,要不斷地挑戰自身能力以外的東西,運動愛好者們經年的跑步鍛鍊,但是仍然跑不過劉翔,業餘象棋看上幾千盤,仍可能被一個初出茅廬的棋院學生殺個大敗。不斷努力學習,不斷訓練,在於發現短板,並有針對性的提升。 
套路一文提到了不少訓練方法,其實我很贊同最後的兩個方法:1. 寫博客;2. 參與開源項目。 
關於寫博客,牛人們是非重點不寫,本身則不必非得高大上,還要解釋一下,我的感受剛開始寫博客則是要養成定時習慣,有什麼寫什麼,蝦米再小也是肉,這個月不寫,下個月要補上。固然中間的區別是,如今我是寫給本身看的,牛人們是傳播知識。shell

參照大牛的文章反觀本身:開源項目沒參與過,這點本身有待提升。對於寫博客我比較認同大牛的見解,寫博客也就是記錄總結下本身學習筆記,方便本身回顧查看,不必想着多高大上,本身也就一水平普通的程序員記錄點東西而已。以前在知乎看過一個問題,是關於微軟一員工和Facebook一員工PK的,以爲頗有意思,我很欣賞裏面@古輪木的拖拉機的一個回答,摘錄部分:編程

老鄉,江漢臣,他在一個回答裏說本身得清華特獎的經歷是」下課作不少題目,而後提早看一些考研的題目,而後就超過了同班的同窗,能夠去幫助他們」,體會一下,特獎誒,清華誒,課下不該該去讀普林斯頓數學講義實現日新月異麼,考研試題什麼回事,太low了吧,清華peer pressure這麼弱的麼,實際上這一點都不low,這叫」祛魅」,這叫」平實」,你看ZB就歷來不說本身是怎麼學習的,他說本身是天才嘛,可能用的是記憶麪包,因此咱們快來膜拜他。markdown

做者要表達的是什麼?大牛靠的也是科學的方法和踏實的努力。吹捧神化之類的真的也沒必。不盲目崇拜,不妄自菲薄,踏踏實實學習,博客寫的東西簡單不low,LeetCode題目作不出來也沒啥,靜下心來學習就是了。天才是極少數,大部分牛人仍是厚積薄發一步步積累出來的,靠的仍是樸實科學的方法,再加上多一些勤奮。在關於LeetCode刷題難不難時,不少北美FLAG員工也現身說法了,初期都會難,練的多了就行了。本身知道的讀書時的大神,工做後的大牛同事,靠的都是平時踏實的努力。網絡

關於LeetCode刷題

單獨把刷題拿出來講,是由於刷題真的很重要,並且頗有用。做爲一名developer,最本質最核心的工做就是:用代碼把功能特性給實現,可以使用合適的算法,快速寫出儘可能bug-free的代碼!工做三年來,我LeetCode其實沒刷多少,100道都還差的遠,真是慚愧。不過公司內部的OJ刷了100多道,由於是轉正要求,相比LeetCode水了點,囧~~ 。雖然本身OJ刷的很少,可是仍然能夠明顯感受到刷題讓寫代碼的手感提升很多,也多是由於本身當時太菜,再次囧~~。在知乎上有這樣一個問題:刷 LeetCode 吃力正常嗎?, 不少答案都寫的很好。@Coke Zero的答案是說方法的,我我的很贊同:架構

  1. 不要貪圖數量,刷300-400題足以幹掉FLAG,每一個tag精選5-10個表明題目足矣,不必每一個都刷。
  2. 對於精選出來的經典題目,要反覆熟悉。反覆的意思是能背下來……對,咱們智商低的人就是這樣的(挺胸擡頭)。固然,是背思路,不是背代碼。這裏推薦用Python刷題,由於Python比較方便把代碼直接翻譯成思路,Java容易被語言細節纏繞而迷失思路。若是對其餘語言能熟悉到思路無縫轉換的程度也沒問題。 // PS: 我的認爲做爲一個C/C++ coder仍是用C++吧。
  3. 怎麼背思路呢?推薦一個背單詞利器——艾賓浩斯曲線app,好比iPhone上的memory helper之類。把刷過的題號輸入進去,每隔一個艾賓浩斯遺忘節點,就提醒你一次,而後在腦中回憶思路,回憶不清楚的拿出來再看一遍。回憶幾回之後,有時間就再寫一遍熟悉代碼。
  4. 死記硬揹帶來理解。背多了,你會發現各個tag的本質,及其之間的聯繫。好比麻煩的backtracking(Google特別愛出),這東西的本質是什麼,跟recursion、dfs、dp之間是什麼關係?爲何它的複雜度老是指數或更大,緣由是什麼?而後你打開算法導論(或stackoverflow)發現了新世界……原來backtracking說的是所有解空間的窮舉搜索,既然是窮舉固然很慢,但它思路其實很是直觀,和linear search同樣都是一個一個搜過去而已。因此,下次看到所有解空間窮舉類問題,就能夠先想到basic backtracking,窮舉一遍,而後再想怎麼優化。相似的哲學性總結很常見,隨便翻開一本面試輔導都能看見一大堆,但不經歷本身想本身寫並在反覆死記硬背中熟練的過程,那些結論是沒有意義的,即便記住了,一陣不練也忘了。不少人說死功夫下多了就開竅了就是這個意思。固然,有的人徹底沒有觸類旁通的能力,但大部分人是有的,因此反覆熟練經典題以後,能夠解決掉新題。// PS: 頗有同感!
  5. 若是有時間還能夠聯繫一下算法題和其餘CS知識,絕大部分算法題都來自實際應用。好比Trie, LRU, HashMap,圖論這些都是和industry應用聯繫很緊密的。知道應用背景,就會發現LC上的題都是最最最最簡單的濃縮版,心態上就沒那麼畏難了……
  6. 若是有條件,反覆刷一年甚至兩年是最好的。見過它十遍以上的時候就不以爲它有多難了,即便細節不記得了,心態上不會怕。
  7. 儘可能不要中止刷題,天天都作一道,實在沒時間作也必定要拿出艾賓浩斯app回憶一下。不要一天10道,沒有意義。一年,兩年,三四年後,就漸漸不拿這東西當回事了,來新題也能立刻crack。即便轉cs,也有一兩年時間來熟悉算法題。我以爲刷題應該piecemeal,儘可能早開始,堅持到退休,這個是吃飯的手藝,就像witcher的劍:一個獵魔人能夠不吃飯,不睡覺,但不能不時時擦拭本身的劍。

按期刷題,是作的針對性訓練,這個是通常項目給不了的。CoolShell博主,前阿里P9,陳皓2018年都還時不時的刷題,更新本身的Github-repo: LeetCode, 讓人十分欽佩。

關於學習的時間安排

技術的學習,不像是背單詞,能夠零散着來,須要有完整的大塊時間集中注意力去學,尤爲是啃硬骨頭時。不少難點都是靠長時間專一思考突破的,如算法的學習,一些OS底層知識點,最近大熱的機器學習等。

記得本身當時理解函數調用棧的內存佈局,寄存器rbp如何一個指另外一個,如今看很簡單的一個知識點,可是本身當時也是集中思考了好久才完全搞明白的,關於如何從棧空間連續的二進制內存中還原出調用棧幀結構,也記錄了一篇博客《Linux C函數調用棧幀結構》做爲筆記。

因此,對於技術的學習,要作到長時間的專一。若是不能作到長時間的專一,那麼學習的效果就要大打折扣了,知乎上一個問題:如何作到長時間(4 個小時以上)精神專一?,裏面@Will Zhang的回答我很是贊同。PS: 贊同來本身的經歷和親身的體會,而不是由於這個答案自己的高票。摘錄部分:

  1. 我聽聞番茄工做法已久。可是我本身歷來沒用過。我很好奇的是,無數的人贊同他的時候本身是否用過。對這個問題我有不少疑問,要是打斷的時候正好是我精力最集中的時候,怎麼辦?不停地這樣中斷,每一次中斷我就要保存一次如今看到哪兒了,而後下一次開始的時候我再去進入狀態,接上思惟,這個開銷能夠忽略不計嗎?還有不停的設置時間提醒本身,不嫌麻煩嗎? // PS: 這個我用過,發現不適合技術學習和編程練習,每次時間過短!
  2. 讓你的注意力聚焦在你所作的事情上,你的處理速度趨近於你的接收速度,你的思惟跟上你所作的事情的發展。而後保持,就OK了。
  3. 你就很難兩小時精神專一於教科書上,首先,你就不必定感興趣或者不想看教科書的內容,注意力就集中不了,其次就算你集中注意力開始看,你的處理速度是跟不上你的接受速度的,由於教科書的知識密度大,一頁書包含了可能不少的信息,你大腦處理不過來。 // PS: 學有點難度的新東西,我通常適當放慢速度,筆記演算,反覆看!過快是沒有效果的,還容易注意力下降走神懈怠。
  4. 舉個閱讀的例子。閱讀長篇英文的時候,你們是否是會有常常看着看着就不知道看到哪兒去了的經歷?這時你的大腦就不是在積極主動工做,而是被動工做的。事實是,若是你一邊讀一邊想這段文字的他在表達什麼,和上一段是什麼聯繫,和文章主題是什麼聯繫,說完這一段,下一段你預期他應該講什麼,到了下一段是否符合你的預期,若是符合的話你能夠加快處理速度,若是不符合你就去修正你的預期。這樣去閱讀的話,那麼你會發現你就不容易走神了。
  5. 保持運動、充足睡眠。保持運動是爲了睡眠質量高,身體健康,醒着的時候精神狀態好。精神狀態好,你的機體都能發揮正常的功能,大腦可以正常處理它接受到的信息,眼睛可以正常地閱讀。

要對本身誠實

認清本身的不足,坦誠面對不逃避。本身過得好很差,工做開不開心,能力有沒有提升,技術怎麼樣,本身最清楚,千萬不要自欺欺人,混混沌沌的過日子。一個前Google 程序員@lucida的文章寫得很好:2018,從對本身誠實開始,摘錄部分:

  • 如今回看之前本身的博客,悲哀的發現本身已遠沒有當年對技術的熱情,或是對人生目標的清晰——上學時本身的想法很單純——寫最好的程序,而後以此做爲基石找到一份好工做。如今看這個目標是實現了:找到了一個對應屆生而言還不錯的工做,本身還寫了一篇如今看起來十分好笑的 心路歷程,當時那篇文章被各類轉發,本身的虛榮心也獲得了極大知足。
  • 好笑的是,我在 Google 裏工做不順,並無本身想辦法改變現狀,而是在工做之外的地方尋找慰藉,以填補本身的虛榮心。在這段時間,我建立了本身的獨立博客 lucida.me,並花費大量業餘時間撰寫了諸如 Sublime 教程和程序員必讀書單之類的質量長文。這些文章的反響很好,我由於這些文章也成爲了讀者口中的大牛。虛榮心再次獲得知足。
  • 然而與網絡的「成名」相比,本身在現實工做中毫無進展。本身在 Google 3 年始終停留在入門級別(通常來講,正常表現一年半到兩年就能夠升一級),儘管有換組和項目被砍這些因素,但無能否認,本身前三年的工做(也許是最寶貴的三年),完全的 doomed。在 Google 時有很多人經過個人博客找到我,想和我約飯聊天(他們可能認爲我真的是大牛吧),都被我本身的偷偷的躲掉了——我並不想讓他們看到現實中的本身。
  • 2017 這一年中,我在 FB 寫了很多東西,也結識了很多新的朋友。讀了一些書,也得到了一些新的技能(開車,攝影,舉重)。最大的收穫,是終於能夠誠實的面對本身,不會由於本身在線上和線下的不一致而產生自我認知矛盾。
  • 與其在網絡上打扮成本身但願別人所看到的本身,不如對本身誠實,在現實中成爲本身但願的本身。但願這篇文章能夠終結我本身的浮誇,終結我 5 年前寫的那篇文章的「詛咒」。Stay hungry, stay foolish, and be honest to myself。這是 18 年的第一篇文章,但不會是最後一篇。但願我能夠經過寫做,鍛鍊本身的思考能力,總結本身的收穫,清晰本身的目標,讓本身對本身更誠實。

真情實感的故事,總能引發共鳴。想成爲本身指望成爲的本身,首先要坦誠面對真實的本身。改變不是一蹴而就,而是從天天的一點一滴作起,謹以此文督促本身的改變!

相關文章
相關標籤/搜索