程式設計師工作後如何有效的學習

2021-08-28 01:10:45 字數 3565 閱讀 2692

從自己的工作談起,三年多菊廠linux c/c++通訊軟體開發,第一年收穫最多(可能因為自己自動化出身cs基礎太差),工作需要的程式設計方面技能補齊後,就可以很好的應對業務需求的開發了。「工作後,你只需要比大家多努力10%,回報則勝過50%」,親身體會真是一點不假。工作後,稍微深入點知識的學習都只能靠自己。觀察周圍同事,對技術很有熱情的並不是很多,除了一些專家大牛,很多老員工單就技術能力而言跟入職兩三年新員工的技術能力沒什麼差距,我思考了下原因,大概如下:

工作所用到的技術知識有限,很多人也沒有去深入了解背後的原理; 業務**對演算法的鍛鍊不太夠,時間長了演算法能力會減弱;

沒有那麼多特性會給你架構設計的機會,並且架構都是專家定好的; 不去主動拓寬知識面,去學習新東西,技術棧長期不更新;

基礎知識掌握的不夠透徹與深入,畢竟經典是需要反覆研讀理解的;

我工作這三年覺得自己收穫的最有用的經驗就是:問題定位能力,提前識別坑,快速填好坑。當然,也見識了一些優秀架構的設計,但也僅限於見識與使用。

先說說我自己平時工作之外的學習,基本就是下面的三項:

看看書和網上的文章:工作相關、興趣愛好、技術熱點; 動手實踐並總結部落格:類似課後題和課程設計,實踐總結;

刷刷leetcode演算法題:提公升演算法能力和寫**的手感;

自己的學習個人認為還是有效的,學習成長自己是能體會的到的,並且工作也做的不錯,只要稍微比同事多努力一點,就能有很多回報,工作後真的是這樣。但是呢,自己的水平自己清楚,並且自己的努力程度遠遠不夠。看乙個大牛的心得《如何成為一位技術專家》:

如何成為乙個技術專家?答案其實很簡單,努力學習。

從學生時代一路萬馬奔騰而來,什麼時候努力的效果最差,高三的時候,因為大家都是如此努力,工作後,你只需要比大家多努力10%,回報則勝過50%,不止在技術上,其他領域也是如此。

《最牛b的編碼套路》一文提到了技術上的訓練方法:預期留出時間,集中鍛鍊,留出技術梯度,時刻關注自己有完成目標,到達瓶頸。

程式設計師最重要素質是「不斷努力學習」,要不斷地挑戰自身能力之外的東西,運動愛好者們經年的跑步鍛鍊,可是仍然跑不過劉翔,業餘象棋看上幾千盤,仍可能被乙個初出茅廬的棋院學生殺個大敗。不斷努力學習,不斷訓練,在於發現短板,並有針對性的提高。

套路一文提到了很多訓練方法,其實我很贊同最後的兩個方法:1. 寫部落格;2. 參與開源專案。

關於寫部落格,牛人們是非重點不寫,自己則沒必要非得高大上,還要解釋一下,個人感覺剛開始寫部落格則是要養成定時習慣,有什麼寫什麼,蝦公尺再小也是肉,這個月不寫,下個月要補上。當然中間的區別是,現在我是寫給自己看的,牛人們是傳播知識。

參照大牛的文章反觀自己:開源專案沒參與過,這點自己有待提高。對於寫部落格我比較認同大牛的看法,寫部落格也就是記錄總結下自己學習筆記,方便自己回顧檢視,沒必要想著多高大上,自己也就一水平普通的程式設計師記錄點東西而已。之前在知乎看過乙個問題,是關於微軟一員工和facebook一員工pk的,覺得很有意思,我很欣賞裡面@古輪木的拖拉機的乙個回答,摘錄部分:

老鄉,江漢臣,他在乙個回答裡說自己得清華特獎的經歷是」下課做很多題目,然後提前看一些考研的題目,然後就超過了同班的同學,可以去幫助他們」,體會一下,特獎誒,清華誒,課下不應該去讀普林斯頓數學講義實現突飛猛進麼,考研試題什麼回事,太low了吧,清華peer pressure這麼弱的麼,實際上這一點都不low,這叫」祛魅」,這叫」平實」,你看zb就從來不說自己是怎麼學習的,他說自己是天才嘛,可能用的是記憶麵包,所以我們快來膜拜他。

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

單獨把刷題拿出來說,是因為刷題真的很重要,而且很有用。作為一名developer,最本質最核心的工作就是:用**把功能特性給實現,能夠使用合適的演算法,快速寫出盡量bug-free的**!工作三年來,我leetcode其實沒刷多少,100道都還差的遠,真是慚愧。不過公司內部的oj刷了100多道,因為是轉正要求,相比leetcode水了點,囧~~ 。雖然自己oj刷的不多,但是仍然可以明顯感覺到刷題讓寫**的手感提高不少,也可能是因為自己當時太菜,再次囧~~。在知乎上有這樣乙個問題:刷 leetcode 吃力正常嗎?, 很多答案都寫的很好。@coke zero的答案是說方法的,我個人很贊同:

關於學習的時間安排

技術的學習,不像是背單詞,可以零散著來,需要有完整的大塊時間集中注意力去學,尤其是啃硬骨頭時。很多難點都是靠長時間專注思考突破的,如演算法的學習,一些os底層知識點,最近大熱的機器學習等。

記得自己當時理解函式呼叫棧的記憶體布局,暫存器rbp如何乙個指另乙個,現在看很簡單的乙個知識點,但是自己當時也是集中思考了很久才徹底搞明白的,關於如何從棧空間連續的二進位制記憶體中還原出呼叫棧幀結構,也記錄了一篇部落格《linux c函式呼叫棧幀結構》作為筆記。

所以,對於技術的學習,要做到長時間的專注。如果不能做到長時間的專注,那麼學習的效果就要大打折扣了,知乎上乙個問題:如何做到長時間(4 個小時以上)精神專注?,裡面@will zhang的回答我非常贊同。ps: 贊同來自己的經歷和親身的體會,而不是因為這個答案本身的高票。摘錄部分:

我聽聞番茄工作法已久。但是我自己從來沒用過。我很好奇的是,無數的人贊同他的時候自己是否用過。對這個問題我有很多疑問,要是打斷的時候正好是我精力最集中的時候,怎麼辦?不停地這樣中斷,每一次中斷我就要儲存一次現在看到哪兒了,然後下一次開始的時候我再去進入狀態,接上思維,這個開銷可以忽略不計嗎?還有不停的設定時間提醒自己,不嫌麻煩嗎? // ps: 這個我用過,發現不適合技術學習和程式設計練習,每次時間太短!

讓你的注意力聚焦在你所做的事情上,你的處理速度趨近於你的接收速度,你的思維跟上你所做的事情的發展。然後保持,就ok了。

你就很難兩小時精神專注於教科書上,首先,你就不一定感興趣或者不想看教科書的內容,注意力就集中不了,其次就算你集中注意力開始看,你的處理速度是跟不上你的接受速度的,因為教科書的知識密度大,一頁書包含了可能很多的資訊,你大腦處理不過來。 // ps: 學有點難度的新東西,我一般適當放慢速度,筆記演算,反覆看!過快是沒有效果的,還容易注意力降低走神懈怠。

舉個閱讀的例子。閱讀長篇英文的時候,大家是不是會有經常看著看著就不知道看到哪兒去了的經歷?這時你的大腦就不是在積極主動工作,而是被動工作的。事實是,如果你一邊讀一邊想這段文字的他在表達什麼,和上一段是什麼聯絡,和文章主題是什麼聯絡,說完這一段,下一段你預期他應該講什麼,到了下一段是否符合你的預期,如果符合的話你可以加快處理速度,如果不符合你就去修正你的預期。這樣去閱讀的話,那麼你會發現你就不容易走神了。

保持運動、充足睡眠。保持運動是為了睡眠質量高,身體健康,醒著的時候精神狀態好。精神狀態好,你的機體都能發揮正常的功能,大腦能夠正常處理它接受到的資訊,眼睛能夠正常地閱讀。

要對自己誠實

認清自己的不足,坦誠面對不逃避。自己過得好不好,工作開不開心,能力有沒有提高,技術怎麼樣,自己最清楚,千萬不要自欺欺人,混混沌沌的過日子。乙個前google 程式設計師@lucida的文章寫得很好:2018,從對自己誠實開始,摘錄部分:

為什麼美國程式設計師工作比中國程式設計師工作輕鬆 加班少?

摘要 低效的加班文化需要時間改變吧。先問是不是,再問為什麼。難道美國的程式設計師就不加班嗎?他們就一天八小時工作,還想來就來,想走就走?非工作時間完全找不到人?還有什麼食物飲料都免費提供?讓我來告訴你真實的情況吧,還.真是這樣的。加班文化應該是中美兩地最明顯的不同了,形成這種差異的原因不是一兩句可以...

為什麼美國程式設計師工作比中國程式設計師工作輕鬆 加班少?

按慣例,先問是不是,再問為什麼。從知乎回答瀏覽量看,是的。那麼為什麼美國程式設計師就可以到點下班回家,而中國程式設計師就要每天 主動 無償 加班呢?仔細看了群眾們熱情的回答之後,大概可以分為幾派 1 產品經理不夠通情達理,導致效率低下 2 表演性加班,太早回家會被認為不努力工作 3 不尊重技術人才,...

程式設計師工作效率

有時候會被上級乙個問題問懵了,比如他們會問你,小陳啊,最近這個月都做了些什麼?很多時候連我們自己都說不清楚自己這段時間到底做了些什麼,好象做著做著,時間就過去了 比如只是做乙個簡單的增刪改查,過了乙個月,很可能我們做完了,當上級問起的時候,我們會說 做了增刪改查單據的功能。從上級的表情我們能明顯感覺...