程式設計入門到進大廠,分享一點學習經驗

喝水會長肉 發表於 2021-11-25

程式設計學習道阻且艱,大廠彷彿遙不可及?我總結了一套學習架構,閱讀之後,你將不再迷茫,全力迸發。


我相信大多數學習程式設計的同學都有著對大公司的憧憬。技術、聲望、薪資、福利,這些都足以成為吸引你進入大廠的理由。


但是,如何進入大廠呢?


對於很多同學來說,通往大廠的道路並不明朗,不知道是否有希望,也不知道怎麼努力,感覺遙不可及。


其實,我身邊有很多成功拿到大廠 offer 的同學,他們並不都是大家想象中的 985 名校碩士、競賽金牌、開源大佬、程式設計神童。相反,我看到了很多背景一般卻憑實力衝進大廠的同學,而且他們在工作中的表現非常出彩!


通過和這些同學的交流,我發現他們在程式設計學習和求職方法上有一些共性,再結合自己的真實經歷,我總結了一套較通用的程式設計學習和求職架構。


無論你現在處於程式設計學習的哪個階段,又或者只是對程式設計有興趣,下面的內容都會對你有一定幫助。讓你看到更清晰的未來,併為之而努力。


首先,要明確一點,程式設計學習沒有捷徑!必須明晰目標、拉長戰線、掌握技巧、持續學習、做足準備,才能立於不敗之地。


下圖是我總結的程式設計學習架構,我將程式設計學習分為 7 個部分。為什麼叫做 “學習架構” 而不是 “學習路線” 呢?因為在程式設計學習中,有些事情不是嚴格按照順序去做,而是在我們整個學習過程中都要長期堅持的。


下面詳細解釋一下這套程式設計學習架構的 7 個部分。


1. 初入茅廬,海納百川

剛開始學習程式設計時,難免會感到迷茫,如果你初入大學,會發現身邊大多數的同學選擇加入了學生會、各種社團來豐富校園生活,而不是一門心思去學習。其實這個階段,並不需要太過關心和考慮以後找工作的問題,要做的事情就是學好大學的一些通識課程,保證成績不能太差。不要提成績無用論,除了學校之外,高的績點也是簡歷的牌面,如果能取得前幾名的好成績,是絕對的加分項!


對於計算機專業的同學,剛開始並不會接觸到很深入的知識,也很少有機會去開發一個完整的作品。基本都是學習 C、C++ 等程式語言,因為涉及和能夠學習到的知識相對豐富。但是,想要學好程式設計,課本上的知識是遠遠不夠的,一定要自學!


自學什麼呢?


其實剛開始的時候大家並不知道自己擅長什麼、真正喜歡什麼、以後想做什麼、從事哪方面的工作,因此,可以 “海納百川”,多瞭解和嘗試各種程式語言、技術框架、專業知識等。比如在課堂教的程式語言之外,去自主學習下 Web 網站開發或者 java。


怎麼自主學習呢?看書?


過去幾十年,我們的學習幾乎一直依賴書本。但是如今,網際網路上資源非常豐富,為我們自學程式設計提供了很大的方便。可以選擇看紙質書、電子書,但是一定不要直接去啃那些很複雜的理論書籍,而是選擇一些輕鬆有趣、相對簡單、案例豐富的書籍。除了看書之外,可以選擇 W3Cschool、實驗樓、FreeCodeCamp 等線上學習網站,邊學邊敲程式碼練習。還可以去 B 站上搜尋一些視訊教程,可能要比啃書學習要輕鬆得多!


但是,無論你選擇何種方式去學習,一定要邊學邊練習,不必侷限於一些習題或書中的程式碼片段,可以試著發揮自己的創意,去編寫一些簡單的網站或者實用的小工具,相信你會收穫成就感,逐漸對程式設計產生興趣。


這個階段,除非你有非常明確的學習方向,否則沒有必要對某一門技術過於執著,畢竟計算機領域很多技術和知識點是相通的,前期先多學習一些簡單易懂的知識,會讓程式設計學習輕鬆有趣一些。


2. 興趣使然,縱橫交貫

上一個階段重在培養我們對程式設計學習的興趣,當你學習了一些程式設計知識和程式語言後,你已經對很多零碎的知識產生了印象,後面學習新知識也會比之前更加容易和迅速。


這個階段是你程式設計能力開始突飛猛進的時候。由於時間和精力有限,你要做的是從你已經學到的知識庫中挑選出相對感興趣的部分,比如某一門程式語言(比如 Java),或者是某一個領域(比如 NLP)。然後對這部分知識進行相對深層次的學習,可以去讀一本經典的書籍,瞭解這門技術的特性,甚至是閱讀相關原始碼。


在重點深入學習一門技術的同時,還需要繼續保持開放,接觸更多的新知識,而不是深陷其中、無法自拔。計算機的很多知識是相互關聯的,如果多學習一些不同方面的知識,我們更容易將那些零碎的知識點串聯成網,從而開拓思維,得到更大的收益。


但是,演算法、資料結構、計算機網路等知識點比較特殊,即使沒有興趣,也要認真地去學習!因為它們可以培養你的思維,提升你的程式設計能力,對於程式設計師來說太重要了。畢竟大多程式語言都是相通的,語言只是工具,思想才是武器。


聽起來可能比較抽象,但在實際面試和工作中往往這些零碎的小知識會發揮巨大的作用。比如,面試網際網路大公司時,基本每一輪面試都會考察幾道演算法題目;面試後臺開發崗位,也一定會問到計算機網路、作業系統的知識。在工作中,我們也經常會用到一些演算法的思想來解決問題,比如滑動視窗、時間輪、布隆過濾器等。


這個階段,我推薦大家選擇主流的技術和框架進行深層次的學習,比如 Java 語言的 SSM 和 SpringBoot 框架。主流的技術教程多、文件多、遇到問題更容易解決,而且通常容易上手,能做出一些個人作品,增加興趣和成就感。


3. 有的放矢,十年磨劍

如果你已經對某個程式語言或知識領域產生了濃厚的興趣,或者已經能夠得心應手地開發個人作品,那麼恭喜你進入到下一個階段。


本階段要做的是確定自己的職業方向,做到有的放矢。


為什麼沒有在一開始就讓大家明確目標呢?**因為確定目標的時機很重要,過早或過晚都不好。**很多人在上大學前可能對某一個職業特別憧憬,整天嚷嚷著自己一定要成為自己想成為的人,但是直到你真正接觸這個職業或者其相關的知識一段時間,你可能才意識到自己並不適合。比如我小時候想當律師,整天看 CCTV 12,也啃了幾本法律書籍,但是後來自己記性差了,而且發現自己對程式設計的興趣更大,因此也放棄了之前的目標。慶幸的是,我不是在大學期間才放棄律師這個職業,沒有耽誤到我學習程式設計知識。大學時間短暫,沒有太多的時間給我們去迷茫和折返。


既然已經有了喜歡的程式設計技術和領域,確定職業目標就相對簡單了。每個人有不同的選擇,建議先從自己的興趣出發,選擇和自己的興趣和所學技能相匹配的崗位。同時,也要考慮到目前的市場需求,最好看一些資料和調研,不要選擇冷門職業。還有一些其他納入考慮的點,比如薪資、工作時長、地點等等。確定職業後,還可以進一步地去選擇公司。建議給自己定一個最高的目標,比如進入網際網路大廠,要相信自己,只有飢餓的狼才能吃到美味的飯。


確定好職業目標後,就要根據職業,堆積打磨自己的技術棧。這是一個十年磨劍的過程,重在堅持。


首先要確認你的目標崗位需要哪些相關的技術,推薦直接到大網際網路公司的招聘官網來看對某崗位的技術要求,比如 Java 開發可以看阿里和美團官網、C++ 看騰訊官網、Golang 或 PHP 看位元組跳動官網。


知道要重點學習哪些技術後,要制定一個明確的計劃,將大的目標拆解為依次去學習每項小的技術,可以參考網上的一些學習路線,按照主次對技術知識進行排序,並規定好學習每個技術花費的時間,從而有一個整體預期,少走彎路。而不是雜亂無章地去學習,主次不分。


比如 Java 後臺開發崗位一般會要求 Java 基礎程式設計、Java 併發程式設計、資料庫、計算機網路、作業系統、設計模式等,相應的技術棧可以是:Java、MySQL、SSM 框架、Redis、Linux 等等。確定技術棧後,要按照計劃,對每一項技術進行全面且系統的學習,推薦閱讀一些經典書籍,比如 Java 可以看《 Java 核心技術卷 1 》、《 Java 程式設計思想 》等。


如果要進大公司,程式設計學習就不能僅僅止步於 “會用”,而是要懂得 “巧用”、“精用”,甚至能夠對知識點進行復刻和創造。比如學習 MySQL 要去了解其底層的資料結構和調優策略,學習 Spring 框架時要熟悉其底層的設計模式和依賴注入的原理等。更重要的是,不能紙上談兵,要有能力去靈活運用學到的知識來開發一個專案,企業需要的是能解決實際問題的人才。


學完這些知識後,你就可以踏實地在簡歷上寫 “熟練運用 xxx 技術” 啦!


4. 學以致用,寧靜致遠

不止針對計算機技術類崗位,網際網路公司的很多其他崗位,比如產品、運營、策劃,都要求學生有較強的實踐能力。但是學校的課本知識多少有些過時和應試教育,大多停留在理論層面,實踐創新部分還是要靠學生自我驅動。如果不懂得自學和實踐,真到找工作的時候,簡歷上沒有專案經驗,空空如也,是極大的劣勢。


在學習技術的過程中,一定要邊學邊練,java學習交流:737251827  進入可領取學習資源及對十年開發經驗大佬提問,免費解答!否則可能當你用心看完一本書後,開啟電腦發現自己一行程式碼都寫不出來,再回過頭來翻書找程式碼,就浪費了不少的時間。


剛開始動手寫程式碼時,如果沒有什麼創意,不知從何開始,可以按照網上的視訊教程做一個簡單的 Demo(小樣),並且將這些 Demo 好好儲存。後面學到新的知識後,可以選擇自己現有的 Demo 進行改造和包裝,比如新增新的功能、優化效能等等,儘量做出完整的作品,並用這些作品去完成課程設計作業、參加作品類競賽、申報科創專案、申請軟體著作權、專利等等。如果某個作品做的非常好,甚至可以考慮將其正式上線,說不定就發家致富了呢?


積累了作品,你的簡歷就多了 “專案經歷”、“競賽獎項” 等內容,而這些內容,是面試官非常看重的。


在正式找工作前,建議大家先去找一份和目標崗位相關的實習。曾經看過一份校園招聘資料,資料表明,入職頭條的員工中 50% 都曾經在頭條實習,而網易員工中有超 70% 的同學都有實習經歷。


實習就像正式員工跳槽一樣,不是非要一步登天。第一段實習經歷沒必要有太高的要求,但是最好要和自己的職業目標相契合,能夠感受真實的企業環境、學習到很多的工作經驗、在團隊中實踐自己的技術知識。不用擔心自己水平不夠,無法通過面試。其實在參加面試的過程中,能夠更快、更針對性地發現自己的不足,並且在面試後進行復盤和總結,能夠得到更快速的成長。


怎麼去找第一份實習呢?其實現在有很多幫助大學生找實習的正規平臺,比如牛客網、實習僧 APP、找學長學姐內推、或者直接在企業招聘官網投遞簡歷等。


寧靜致遠 是我個人很喜歡的一種境界,大家在找實習或者正式求職時難免會受到外界環境的影響。比如小李拿到了世界 500 強的 offer、年薪百萬,或者小王成天抱怨找工作難、競爭激烈。然而這些誇耀或負面情緒和我們又有什麼關係呢?就像考場裡做卷子,提前交卷的一定考得最好麼?誰知道最後你的分數會不會比他高呢?


我們應該關聯上下文去看待各種人事、情況和情緒,確實有很多拿到好的 offer 的同學,他們也許比你聰明,也許比你有背景,但更多的是他們曾經付出了更多的努力,捨棄了很多休閒娛樂的時間。找工作難、無法通過面試、產生負面情緒也一定是有原因導致的,企業中的面試官不會都戴有色眼鏡看人,可能還是我們沒有足夠多的付出或者有一些失誤,又或者其他人比我們更努力、更幸運。我們要做的是和優秀的同學多交流,發現他們身上的閃光點,分析他們成功的原因,向他們學習經驗和方法。多和優秀的人交流,自己也會變得優秀。同時,我們要吸取每一次失敗的經驗教訓,記錄下來,多多自省。然後更重要的是,保持寧靜,按照自己的規劃,一步一步往前走就好。


5. 鋒芒畢露,放手一搏

如果你已經按照上述的階段努力過,不僅有了一定的技術知識儲備、還有專案經驗,或者是一段實習經歷,那麼恭喜,你已經具備了一定硬實力!下面你要做的就是利用一些軟技巧,在求職時,將你的優勢與亮點鋒芒畢露。


首先,整理一份完美的簡歷。簡歷是一個人求職的門面,即使你的口頭表達能力有多優秀,見不到面試官也就毫無用處,因此要儘可能地在簡歷上展示自己。


程式設計技術類的求職簡歷通常包括幾個部分:


個人簡介:包括基本資訊、照片、學校、成績等。


個人技能:列舉你熟悉的技術知識,也就是你的技術棧。


競賽獎項:列舉你曾經參加的競賽和獲得的獎項。


專案經歷:列舉你做過的專案,比如課程設計、學習作品、競賽作品、實習專案等。


科研學術:列舉你的學術研究和科研成果。


實習經歷:介紹你的實習情況,在哪實習、做過什麼、帶來什麼成果。


其實,編寫簡歷是有很多技巧的,下面列舉一些常用技巧:


簡歷必須一頁,排版整潔,保持清爽,且色調不宜過暗或過亮,可以使用淡藍色 。


要分析自己的個人優勢,對各板塊排序,把亮點放上面 。


簡歷上的文字內容精煉,用詞儘量專業,拒絕口語化,你的簡歷終究是要給專業的面試官看的,不用擔心他看不懂。


專案、實習經歷介紹中,可用 STAR 分析(場景、任務、行動、成果)來梳理自己的核心工作,其中,成果最重要,最好列舉明確的資料,比如使用 xx 技術將專案的併發量提升了 30%。每個專案的介紹不宜過長,給面試官提問的空間。


利用簡歷去引導面試官。很多面試官都會從簡歷中挑選他感興趣的專案或技術去展開提問,因此必須足夠熟悉寫到簡歷中的專案和技術,並提前想好對策。比如專案中用了哪些技術,為什麼用,有什麼亮點,怎麼去優化等。


寫完簡歷後,自己通讀幾遍並找專業的 HR 來進行點評,還可以多閱讀借鑑他人的簡歷。


針對不同的崗位和崗位描述,準備不同的簡歷,在部分細節和內容上調整。比如投遞產品和運營崗,你的專案和實習介紹就要分別側重這兩種不同的職位。


內容允許適度誇大,但絕對不能欺騙!這個小技巧尤其適用於沒有特別多的專案的同學,但也要注意不要被面試官戳破哦。


準備好簡歷後,要多多練習自我介紹。自我介紹的重點是通過講述自己的校園經歷、學習過程、競賽、實習、研究等來突出你的學習能力、溝通能力及解決問題的能力。其他的部分,如個人性格,用幾個成語帶過就好,屬於正確的廢話。自我介紹快結束時一定要提及自己最擅長的方向、專案或技術,很多面試官都會從自我介紹展開提問。


面試是應聘者和麵試官之間的博弈,一場完美的面試是由你來引導面試官,讓他對你產生興趣、產生信賴,而不是被他牽著鼻子走。至於你是第一次來面試還是老油條,從自我介紹就可知一二了。


面試過程中,在不過分誇大的前提下,大膽展示自己吧!很多面試官都喜歡愛思考、善於交流、有發散思維、有執行力的同學。


程式設計技術崗位的面試通常會要求寫演算法題,所以一定要每天堅持刷幾個小時左右的演算法,這裡推薦 LeetCode 演算法刷題平臺,以樹、連結串列、動態規劃、棧、佇列、深度優先搜尋、廣度優先搜尋等知識為主。如果是線下面試,面試官可能會給你一張白紙,讓你在上面寫出演算法程式碼;如果是線上面試,可能會使用一些線上面試平臺,要求程式能夠正確執行,難度會更大。但是無論何種形式,都不要慌,由於時間有限,一定要理解題意,想清楚在寫,字跡公正、縮排得當。即使做不出來,也要試探性地向面試官說出自己的想法,通常面試官會給出友好的提示。


還有一點非常重要!要記得提前關注自己目標公司的招聘時間,多數網際網路公司雖說 “金九銀十” ,但是很多公司的提前批從 7-8 月份就開始面試和錄用了,因此必須提早準備,合理安排日程。建議大家爭取下大公司暑期實習的 offer,有機會直接轉正,拿到轉正 offer 後再去其他公司面試說話都自信了很多。


最後,不要過度自信,也不要盲目悲觀。要多投遞一些企業,多一個機會、多一個選擇總是好的。不要覺得麻煩,畢竟都已經努力那麼久了,放手一搏吧!


6. 歸納總結,方法唯上

歸納總結不僅僅是在學習程式設計或者求職中,是我們一生都要去堅持的好習慣。學到了知識,要總結;完成了專案,要總結;參加了競賽,要總結;每天的實習工作,要總結。只要是你做過的有意義的事,無論成功或失敗,都值得總結。


有的同學會認為總結和寫文件一樣,沒有必要浪費時間。但實際上,總結並不是草草寫一下就完事了,而是要針對某件事,從零開始全面覆盤,回顧目標、回顧工作、提問自己 5why(為什麼要這樣做,而不是那樣做?等等)、針對優缺點進行分析、思考如何改進完善等。


通過歸納總結,可以減少重複錯誤、優化工作、發散思維,最終提煉出一套適合自己的學習工作方法論。有了高效系統的方法,也能幫助你在今後的工作中快速適應和晉升。


寫完總結後,必須進行儲存,推薦使用雲盤,比如騰訊微雲、阿里雲盤、OneDrive、印象筆記等,方便自己去查閱和回顧。學了知識不總結,或者寫了總結不儲存,就像是小熊掰棒子,徒做無用功。


此外,總結不止是給自己看的,也同樣能幫助到他人。尤其對於公司來說,技術方案和工作總結有著巨大的意義。幾乎所有企業,大到公司,小到個人,都會維護自己的知識庫,沉澱技術和業務的同時,也方便給新人提供參考和指導。


值得一提的是,很多同學抱怨自己的工作過於重複,無法成長。我覺得工作必然會重複,但重複不代表無法成長,如何從工作中提煉共性、多提出想法來改進現狀,才是值得考慮和關注的。


7. 春風化雨,顆粒歸倉

如今,我們生活在一個萬物互聯的時代,各種程式設計網課、培訓資料、專案實戰、開放原始碼、線上直播課等,為我們營造了春風化雨的學習環境,我們應該充分利用這些資源,分類收藏,顆粒歸倉。


但有時資源過多,也會對我們造成困擾。因此,我們要有選擇地使用資源,看的多了,自然能分辨好壞;要注重資訊時效性,比如學習新框架時,儘量不要看出版超過 1 年的書籍。


此外,除了這些靜態資源。我們還可以線上上線下,多認識一些優秀的前輩和小夥伴們,和大家一起學習討論,甚至可以合作參加比賽,開發一些作品。畢竟一個人堅持會很孤單,如果在程式設計學習的路上,和一些小夥伴一起前行,到時收穫的就不止有程式設計能力的提升,還有更重要的友誼。


總結

其實學習程式設計和求職的過程就像是做了一次大資料推薦。


起初,你面前有太多的程式設計知識和技術,眼花繚亂,不禁感到迷茫。然後通過一段時間的學習和摸索,你對程式設計產生了一定的興趣,開始挑選幾個相對感興趣的技術去學習,過濾掉了一些不感興趣的技術。隨著你學的知識越來越多,你的喜好也逐漸明朗,你開始為自己確定求職目標,確定了主要學習程式語言和技術方向。而後你需要日復一日堅持學習程式設計,並通過專案實戰、參加競賽、找實習等方式提升自己的程式設計實踐能力。最後放手一搏,將自己的技術展現給面試官,併成功地通過面試,找到自己心儀的工作。


整個過程中,你的每個行為其實都會影響最後的面試結果,從而決定你的就業去向。java學習交流:737251827  進入可領取學習資源及對十年開發經驗大佬提問,免費解答!究竟面試官能不能從海量人選中鎖定你呢?


學習程式設計和求職的道路並不平坦,我們會無數次因為寫不出程式而發愁、因為一個小的漏洞而熬夜、因為面試失敗而否定自己;但是同樣會因為程式的成功執行而欣喜、因為漏洞的修復而歡呼、因為通過面試而自豪。


你現在做的每個努力,都有意義。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010294/viewspace-2844144/,如需轉載,請註明出處,否則將追究法律責任。