有編程基礎,辭職每天自學四小時編程,做git項目,刷leetcode。會比大廠在職的程序員成長慢嗎?

ww13142010


話說,為什麼每天只自學 4 個小時,是不是有點少?


這個情況要根據不同的情況來講。從大的方向上看,要區別對待新手和老手。


如果是基礎較差或者甚至是基本沒啥基礎的話,那一般情況,肯定沒有在大廠裡面成長的快。但如果你是一名老程序員,經常有獨立的思考。那麼應該是自己獨立做事會成長的更快。


為什麼這麼說呢?


先說新手為什麼是去大廠成長快。這個問題其實很好理解。


進入企業工作,可以最快地開拓你的眼界,讓你明白企業需要的是什麼人才。按照市場的標準更好的打造自己。還有,公司有更多實際挑戰的機會,可以最大化發掘你的潛力。優秀的公司有明確的員工成長體系,有好的導師帶你,這些都是你的資源。


當你沒有什麼經歷時,獨立學習的過程其實是一個摸索的過程。沒有太多經歷的話,眼界必然有限,目標是模糊的,很多時候,你根本不知道自己在做的事情對未來會產生多大價值。


你不會知道一個成熟的工程師應該具備哪些技能。或許你認為把一門編程語言學會就是全部了,你認為會寫個小遊戲就牛逼了。但這些真的啥都不是。


IT 是門技術活。很多時候在網上找的資料並不適合現在的你,需要很多前期的基礎準備。比如,你學 C 語言,網上的教程可能是 Linux 的,視頻中老師的操作 666,但是你壓根看不懂,那就會產生這個老師太菜,講的東西一點都聽不懂。但真的是如此嗎?那是因為這個課程並不適合你啊,本來就不是為你準備。


學習是一個長期的過程,要不斷嘗試實踐,不斷地進行迭代。這要一個清晰的計劃,但如何定製一個合適的計劃,不是閱歷不足的你可以做到。如果能做到是一份適合你的計劃呢?


有些閱歷比較資深的人會以提供諮詢的方式進行收費,和這個也有很大關係。有些人會選擇去參加培訓機構,還有人會選擇線上教程進行學習。參加培訓最省事,路線別人定的,你腦子清楚了,努力跟著走就是了。如果是選擇教程,無論是書還是視頻,都需要自己選擇。如果選擇難的方式,你能學成,說明你前途無量,未來成長空間更大,因為如何學習是一項非常重要的技能。


總結起來,自學規劃太難,每個人的情況不同。


那為什麼老程序員適合自學呢?


老程序員見識的東西多了,知道什麼場景下用什麼技術,眼界開闊。在經歷過長期的磨鍊後,學習能力早就是大增了。並且,可能的情況是,他已經在一門語言中混得風聲水起,此時,即使學一門新的技術,或者有點新的想法,都可以自己嘗試了。通常,這時候的我們已經清晰的瞭解了自己,可以定製出一套適合自己學習的規劃。所謂,舉一反三,很多技術都是殊途同歸。


為什麼是比在工作環境能更好的學習呢?這就牽涉到一個問題,那就是,隨著工作年限增加,程序員也不僅僅是程序員了,需要處理大量的瑣事。工作環境並不是一個適合集中精力學習的地方。


如果你是某方面的專家的話,在公司處於技術核心的位置,而且公司還有很大成長的機會,那你可以在公司繼續努力。但這種機會少的可憐,如果五六年的業務代碼的程序員,公司很多技術夠用就好。你發現你已經成為了周圍人心中的大牛。而且,公司沒有合適的技術氛圍,簡直虛度光陰。我們每天疲於應付各種人事,壓根沒有成長機會。


為了逃避這種環境,一些人可能在這個時候會選擇出來獨立創業,可能是偏向技術方向的獨立自由職業者,做自己的工作室,或者選擇其他崗位。之所以能做到這些,真的是我們成熟了,已經有了獨立的能力。


波羅學


毋庸置疑的:會。

我自己在it行業已經混了十年,給你講個真實的例子:我公司以前有個哈工大的研究生,在做行政工作的。覺得編程工資高,有前途,就自己自學java編程,據說自學了有2,3年。然後來公司的時候,技術總監面試摸了一下底:能幹活,就是初級工程師的水平,在公司java開發水平屬於墊底的。如果不是老闆介紹來的,估計都沒有面試機會。如果在公司上班的程序員,3年如果項目成長夠快的話,都可以成為高級程序員了。

為什麼會有這麼大的區別?編程是一門實踐科學,需要不斷的去解決現實中的問題,才能不斷獲得成長。自學練手的項目做出來就好了,並沒有什麼實際的用戶去使用,給你提各種奇葩的需求。實際項目給客戶用之後會出現各種各樣你想不到的問題,產品,客戶,測試,項目經理,運維,甚至客服都會對你的項目產生各種影響。大廠的程序員的項目都是影響千萬用戶,甚至上億用戶體量,一點點細節沒注意到,就是成千上萬用戶被影響。就像玩遊戲一樣,你一直在新手村砍些什麼花花草草怪物升級,輕鬆經驗少,別人已經在下大副本,過一次副本經驗值夠你刷新手村怪物好幾個月。時間久了,差距自然就天壤之別了。

所以,要進步快就是準備個差不多,就趕緊去面家公司上班,去實際的項目中去鍛鍊成長,會比自己閉門造車效率高多了。


子安之路


刷 leetcode 我知道,你在 leetcode 上做算法題,刷算法,可能想通過這種方式來提高自己的算法能力,畢竟程序員面試的時候,算法是比較重要的一環。

但是做 git 項目是什麼鬼?git 是什麼?是代碼管理工具, 是一個開源的分佈式版本控制系統,可以有效、高速地處理從很小到非常大的項目版本管理。題主貌似沒明白什麼是 git 吧?這樣的話,在家自己學習容易誤入歧途啊!

你應該想說的是在 GitHub 上學習一些開源項目吧?GitHub 是一個開源項目的社區,是可以進行代碼管理,裡面有很多開源項目值得學習。


建議你在自學編程期間一定要搞清楚各種工具和技術之間的概念,概念都搞不清楚的話,容易學著學著就走錯路了,就跟古代武俠上的人一樣,閉關練功,容易走火入魔。


一個人的成長和學習,無非這兩條道路,一個是自我主動學習,一個是在工作實踐中提升自己。

但是一個人真正的提升,是堅持兩條道走路,而不是隻堅持其中一個。


自己在家學習,自學當然不錯,但是自己學的時候,其實成長和提升的都比較慢,並不是自己在家學習的時候,很難控制自己的時間,無法控制懶惰,也無法合理管理時間,拋出去這些因素之外,更重要的是自己學習,是一個相對緩慢的過程,自己學習很容易誤入歧途,在學習的過程中會經常走彎路,所以會緩慢,有時候,會跟實踐脫節。一旦這樣的,你學習的成本會大大提高,學習的效率會大大降低。


而在工作和項目實踐中學習提升的話,是結合實踐的,實踐是檢驗真理的唯一標準,實踐也是矯正你學習路線的一種方式。在項目實踐中,會經常遇到一些現實性的問題,實踐性的問題,而這些問題,可能會讓你攻堅克難,你一旦把他們克服了,提升有可能是質的改變。這是自主學習不能相比的。


自學,往往都是一直在學,而不是在克服困難,學的時候,看別人講,看書都覺得對,但是隻有實踐的時候,才知道你自己有沒有掌握。而實踐真正的項目,往往會遇到很多問題,解決問題才會讓自己有質的飛躍。不僅讓你學習了,而是也提高了自己的解決問題的能力。


尤其是編程這個行業,我感覺編程重要實踐,所以在項目中歷練比自己學提升的更快,更好。


非著名程序員


我自己在一線互聯網行業也從業3年了,也是從小白一路走過來的,這個問題還得的從自己的現有實力出發來分析。

如果是新手:

推薦去大廠工作。新手什麼概念呢,就是知道一些編程語法和熟悉一些編程框架,比如Java常用的SSM(Spring+SpringMvc+mybatis)等,沒有太多的實際開發經驗。對於新手來說,編程知識可能給不是他們最缺的,而是實戰經驗。因為很多實戰經驗是光靠學習基礎知識、刷題是體驗的不到的。雖然刷leetcode對程序員鍛鍊思維和算法能力有很大的重要性,但是在實際開發中用到的還是相對較少。另外就是做git項目,github上頂級項目基本都是根據實際業務場景研發的,脫離了業務場景這個頂級項目就沒有靈魂了,對於一個新手來說,連業務場景都不清楚怎麼能參與github頂級項目呢。參與github上的普通項目其實對自己成長和經驗來說提升真不如去大廠工作來的快。而且在大廠可以多請教一些公司的大佬,會得到不錯的成長。

如果有3-5年工作經驗:

推薦先刷leetcode等然後再去大廠實踐。這裡3-5年的工作經驗並不是僅僅指具體的3-5年工作經驗的同學,實際上指的是有工作經驗接觸過不少業務場景,但是對一些技術原理、算法等並不是很瞭解,又想進一步提升自己的人群。這部分人群如果在公司繼續做項目有成長但是不大,大部分工作都是基本的CRUD。所以想提升自己就要從底層、原理入手。這時候刷leetcode可以提升算法能力。同時可以參與一些在工作中實際應用過的github開源項目,如zookeeper等,這樣不僅可以提升自己對技術原理的掌握,還增加了自己參與頂級開源項目的經歷(這個對找工作來說很重要)。從底層原理提升自己後就可以去大廠實踐下,看看大廠是如何將這些底層技術用到實際業務中去的。

總結:不能盲目的去說哪種方式提升更快,而是從自身具體情況出發。新手建議去大廠工作提升自己。有開發經驗但是想提升自己對底層知識認知的同學,可以先刷leetcode算法、瞭解相關技術原理、參與一些gittub開源項目提升自己,然後在去大廠實踐。


Java讀書筆記


本人是一個前端工程師。我的觀點:自學比大廠在職成長更慢。


分析一下,github項目應該是指參與到開源項目的開發。這個我有一點發言權:我參與了harbor的一個較為獨立功能的前端開發。

我學到了什麼呢?PR的分支管理?前端代碼的整體架構?還是說變量函數的命名規範?emmm....其實都有學到一點東西。學到最多的估計是熟悉了Angular的代碼並進行開發,畢竟在此之前,我都是Vue陣營的。整體來說,開源項目和實際項目有一定的差距。而且開源項目的邏輯複雜度並不一定不會比實際項目高。就算harbor有多語言配置、各種組件高度抽象。

再一個非常現實的問題,如何參與到開源項目?我的經歷估計沒啥可複製性:我司後端在工作項目中用到了harbor,然後根據業務需求提出了新的特性反饋給社區,然後我參與到了其中。emm...開源項目經驗也是來自於實際工作,就很現實。據我個人瞭解,開源經驗一般是解決issue、完成feature、或者是在某個生態圈自己產出項目。這裡面對開發者的要求也是一步步往上升。


leetcode我不是很熟悉,不過在類似的學習平臺上也做過些算法題。工作中作用蠻大的,建議去刷,過程中要著重看下別人的思路,漲見識!


最後說下,我為什麼認為大廠的在職員工成長更快。

1.同事間互相補充,溝通更方便。項目有需要用到的新框架,新組件。可以直接在群裡發個消息,基本上會有人知道,然後可以很快上手,解決問題。比如我之前調研了xterm,實現了瀏覽器的shell功能。同事在其他項目裡或新需求有用到,就不需要再去從頭開始瞭解。比如我想把ts引到項目中來,有個同事之前在另外的項目實踐過了。那我就可以少踩很多坑。


而一個人的話,碰到坑,基本只能去論壇、社區裡求助;新知識需要一個人找資料、再去消化。當然,這樣的獲益會大一些,只是時間成本會大更多。


2.項目督促學習。每個deadline,需要我們有完成需求,或者有文檔產出。舉個例子:我接手的項目需要我去調研openShift的UI項目。迭代出調研報告。那我就得去好好看,我還得思考怎麼和實際項目結合起來。

自己學習的話,說實話,這裡是非常大的坑。很容易沒有重點;或者說學到了東西,沒有實踐的機會,知識學到了也很容易遺忘。


ps: 工作的成長快,其實也有個大前提:不能只做一些重複的業務工作。


Humiliter


慢!而且這本身就是一種錯誤的學習方式!
自己學習編程和企業實際開發完全是兩回事,自己學習永遠固定在自己的思維當中,你並不瞭解企業開發中的技術是什麼。

最近幾年我在面試Java程序員的過程中發現一個嚴重的問題就是,剛畢業的學生和培訓班出來的程序員嚴重與企業開發所要求的的人才脫節。這些人技術可能真的不錯,Git開源項目也學習了很多,leetcod的題也刷了很多,但是唯一缺乏的就是對某一實際業務場景的思維理解能力,無法將學習到的技術融會貫通,在被問到某一個實際的業務場景中,面試者並不知道該使用什麼技術去解決問題。就像我們學習了很多英語單詞,但是當與老外對話的時候,我們常常忘記改使用什麼單詞與他溝通。

所以,長期自學編程並不是一件明智的策略,我的建議:

不管學習什麼語言,只要掌握基礎內容,就應該找一個公司去實習,從初級程序員做起。當你參與公司的項目中,你會發現你的技術會快速成長。在企業項目開發中,你才會學習到企業真正需要的技術,通過接觸不同的項目,你才會有實際開發的經驗,才能鍛鍊你的思維能力,才能鍛鍊你的團隊協作能力。而自學編程這種封閉式學習模式,是最不可取的。


阿邁達聊技術


前面部分是在講知識,後面部分是在講技能。兩者不具有可比性。

一般集中學習編程和刷題,是在找工作之前做的,用於短期內提高自己的知識儲備;在職工作,大部分時間都在解決實際問題,很少會有連續的時間供你去集中學習,但是在職工作,卻可以不斷提高自己的編程技能。

知識和技能在IT工作中都是需要的,你有編程基礎,這點你肯定可以理解。有了知識儲備,可以幫助你在工作中提出更優的方案;但是如果空有知識儲備,缺乏編程技能,知識及無法再實際項目中實施,就無從談論更優的方案了。

知識可以在短期內突擊,但是編程技能是不可以的。以linux shell為例,你花一週突擊一下shell各種命令和工具用法,寫shell虎虎生風。入職之後幹2個月window客戶端,再給你看shell腳本,肯定和看盲文差不多。很多非IT工作的朋友,在稍微瞭解了一點編程的東西之後,都會提同樣的問題:“你們記憶力怎麼這麼好?能記住這麼多命令和用法”說實話,除非你是天才,不然,每個函數,每個命令,都是一遍遍的查資料,用了無數遍之後,才爛熟於心的。

所以,不要太指望通過學習來達到一個非常高的點,畢竟編程是要解決實際問題,,很多實際問題是有時間限制的,因此,對編程技能的要求是非常高的。如果你是天才,那就另算;如果不是,脫離工作的學習一定要有個目標和範圍,完成目標之後,就加入到工作中來,提高自己解決問題的技能。

再囉嗦一點,有些知識,比如設計模式,其實是從實際的工作經驗中總結出來的東西,如果不參與實際的項目,單純去學習這個東西的話,是很難理解。沒有實際的應用場景,你總覺這種模式和另外一種模式,半斤八兩,沒啥區別。


坑哥職場說


如果你的做git項目是指參與到大型項目的開發中的話,那完全不會,在國內有莫名其妙的大公司情懷,其實國外很多大神都不是在所謂的大公司,都是出名後被大公司挖去的。

你可以給自己制定好規劃,找一個現在流行的框架,比如kubernetes或flink,加入社區,前期先從contributor做起,後面努力下成為PMC,有志者事竟成,只要目標堅定,一定能成



機械視角


每天自學四個小時,刷網上的項目,也只能說可能會比那些混日子的在職程序員成長快一些;至於和大廠的在職程序員比(正常工作),我認為是趕不上的。


編程的實質是解決實際問題

  • 敲代碼不是閉門造車,很多時候還是要結合業務場景來做開發;

  • 如果一個程序員開發一個需求,我認為需求分析和設計的時間應該佔50-60%甚至更多,實際敲代碼可能只有一小部分;

  • 網上的大部分項目,很少有複雜的業務場景的,這個對程序員分析問題、解決問題是沒有任何幫助的;

  • 相當水平的兩個程序員,放到不同的項目組中,一個項目高峰期一萬個用戶,一個項目高峰期一千萬個用戶,他們的成長速度肯定是不一樣的;很多時候程序員都是被業務逼著成長的!

編碼只是程序員的能力之一

雖然編碼是程序員最重要的能力,可以算作程序員的核心競爭力,但是程序員的成長,單單提高編程水平是不夠的:

  • 溝通能力:一個項目不可能完全由一個人負責,在開發過程中需要和需求人員(產品經理)、測試、運維、其他項目的開發人員做溝通;彼此說的話,對方是否可以充分理解,這都是非常重要的;

  • 架構設計的能力:程序員成長到一定程度的時候,肯定會參與架構設計方面的工作;通常這些架構設計,都是結合業務場景做的;(有一次提到了業務場景)

  • 管理能力:咱也不能當一輩子一線程序員不是,從帶幾個新人,到帶一個項目,再到管理一條產品線,都需要管理經驗的積累。

個人建議,不要辭職,在下班之後自學編程,同時騎驢找馬,去找一份程序員的工作,並且不要挑公司的大小,儘量不要在乎工資得高低。

如果有公司原因招聘你,果斷跳槽,然後工作中成長,同時保持下班後自學,再過幾年,說不定題主可以找到一份大廠的工作。

我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。


會點代碼的大叔


如何能夠更快的成長,掌握更多的知識?

這裡就涉及到學習方式的討論了。

本人也是IT這行,因此說下我的個人看法總結:

成長的速度依次遞增。

1.看書籍、博客等(通過閱讀相關的專業書籍)。

2.看視頻(買一些老師的課程來學習)。

3.寫總結,寫文章,記錄到個人公眾號中。

4.寫項目。


可能大家在看書和看視頻有分歧,因為看視頻可能花的時間要比看書的時間話的長。我個人認為一個好的老師講解相關知識可以讓自己少走許多彎路,很多老師很好的思想觀念可能你沒想到,但是老師備課的時候肯定都有了解過,會在講解的時候介紹到。

大家可視自身情況定。


寫項目是最快的成長方式


題主也說了做git項目,但是自己做始終有限,比如並沒有應用到實際的場景當中,沒有讓用戶真正的使用。而企業的項目就不同了,都是經歷過最真實的用戶場景考驗。實際中出現的問題要比自己做的項目出現的問題多的多。當你在解決問題的同時就是你成長的過程。


因此自學肯定沒有在大廠參與過實際場景解決的程序員成長的快!


分享到:


相關文章: