程序員新人如何在業餘時間提升自己的專業能力,該提升哪方面的?
我大學學的電子,跟軟體相關的只學了C語言,畢業後才開始做程序員寫程序,兩年內做過單片機開發、前端到現在做的比較久的遊戲開發。
雖然學過不只一門語言,可總覺得自己還是門外漢,因為沒受過系統的學習,也沒什麼人培養,都是工作要求寫什麼就是什麼,永遠只懂皮毛。什麼設計模式、演算法、測試方法、編譯過程、腳本工具、Linux、SSH、加密演算法、資料庫、伺服器等等許多知識都是一知半解甚至根本不懂,想去學又不知道從哪下手,而且因為水平有限工作進度很慢 每天都要加班,也沒多少時間。這樣的情況讓我覺得越來越沮喪,越來越煩躁。難道成為程序大牛真的需要天賦嗎?我甚至有時候學一個語言的功能都要很久才會用,比如C#的delegat、event,當初看了半天資料總算明白了,一到寫程序想用又不會,還要回去翻書,這樣來回好幾次。為什麼那麼多大牛懂那麼多東西,想做什麼隨手就能寫個程序出來。我自己想做個什麼功能的時候,就一頭霧水,而且寫的程序好像就是if while swich這些東西套來套去的。我是真的喜歡做程序員,希望一輩子都能做下去。可我不想做一輩子碌碌無為原地踏步的程序員。希望各位前輩能給我一些指點,讓我少走些彎路。
成為大牛,天賦自然是有幫助的,但是不管有沒有天賦都需要大量的時間。我以前大學畢業的時候,之前有9年的時間基本上每天都在搞編程,都還沒成為大牛。你如果【工作進度很慢 每天都要加班,也沒多少時間】,那不太樂觀啊。
首先,題主不要灰心。
至少您是喜歡程序員這個職業,你比那些不喜歡代碼技術高一點的程序員情況樂觀的多,我堅信:憑著興趣和堅持總會有所成就的。不是軟體專業的根本就無所謂的。據我所知的很多優秀程序員都不是相關專業,自學成才。
要有耐心,不要有僥倖心裡,不要覺得「這個反正以後也用不到」,一定把自己模糊的地方弄明白。
多寫代碼,多看代碼。你的工作會讓你對代碼更加熟練,如果實在沒有時間,就認真的做好自己的工作,並且思考。爭取在工作中有所收穫。
多問。不要怕自己的問題很low,只要自己有進步,就是值得的,當然,要爭取自己解決問題,思考過再問。
試著寫一個自己的技術博客吧。我現在就在寫,個人覺得,博客可以使自己思考,如果要把一方面的知識講出來,自己就需要很好的理解,經過各種代碼的實驗。通常,你寫完一個方面的內容之後,會有更深的理解,還有成就感,這也是一個你與別人討論的一個好地方。再次重複「耐心」,不要放棄。
其實學多少語言都不重要,重要的是思想,沒有思想是寫不出代碼的。java,c,linux命令,這些,我覺得不是很重要,我覺得理解「指針」,面向對象這些概念,並且有這樣一種思維的方式才重要,慢慢去體會。
最後,不要相信 @姚冬的話,我不相信天賦,我覺得天賦很大一部分是「經驗」而已,代碼寫的多了,會有一種很熟練的思維方式,會有一種「感覺」,就像打球的手感一樣,即使接觸一種新的技術,也會學習的很快,這是建立在很大的努力的基礎上的。這就是我所理解的「天賦」。所以,請一定不要放棄。
我是一個大一學生,也正在學習中。沒有資格給您什麼建議,這是我的一些「天真」的「心得」。
以上。共勉。首先推薦一本書:http://book.douban.com/subject/4924164/
作為一個失敗者,我來說說我是怎麼失敗的吧。
我跟你一樣都是電子專業,自己學的c,自己學的c++,java,rails,python,laszlo,flex,django,flask,struts2,hibernate,clojure,golang以及省略一堆我想不起來的東西。
列那麼多不是為了炫耀,而是想說,這是我失敗的一個原因:貪多,還有一個,膚淺。
過去的幾年,我花了太多時間學習語言跟框架,這些最無聊了,尤其是框架。前不久去搜狐面試,面試的人比我年輕,他們問我看過什麼開源項目嗎?我想了想,沒有,至少沒有認真看過。如果我過去的幾年,把工作中常用的框架源碼,原理了解一下,自己山寨一個,那這次的尷尬就不會出現。當然,為了面試看源碼有點動機不純,對我們使用的工具有最起碼對好奇心是一個優秀對程序員的一個素質。更不用說通過看源碼可以學習一些技巧,思想。
當然只是看源碼仍然成為不了一個高手,只是比一般程序員懂得多點罷了。想成為高手,還是得多寫代碼,我個人有個很大的缺點,那就是學得多,寫的少。有些人是憑嘴巴給人印象的,有些人是憑自己的作品給人印象的,高手都是一拳一掌練出來的。
決定要寫了,接下來就要決定寫什麼了,看你個人興趣了,你列了一堆東西,有些很通用,有些很深奧,但你知道自己對什麼感興趣么?你最崇拜圈子裡的哪個大牛?你想以後在哪個領域工作?
你是要自己設計一門語言揚名,還是要想在找個摳性能的工作折騰演算法。知道自己想做什麼了接下來就容易了,雖然有些領域確實挺難的,但設計模式,測試方法,linux,伺服器之類的,我猜你自己沒折騰過,對吧?但每個知識或者技能,花點時間掌握一下,你會發現沒那麼難,挑自己最感興趣的,慢慢鑽下去,不知道你工作多久了,既然打算做一輩子程序員,那你有十幾年的時間去把那些難的東西都搞定,不才浮躁愚笨如我,也在找工作都時間看了一個開源項目的源碼,你有十幾年的時間,恐慌什麼。
最近被不少高手面試,也跟群里的人聊了一些,其實牛人也是一步步練出來的,有些機緣好,成就就大,機緣不好,雖然無名但也遠超我這種浪費時間精力的人。這個世界埋沒有天賦的人,也給肯努力的人機會。
至於加班,我第一年工作的時候,有段時間10點下班,11點到家,然後學習到2點,不過學的都是用不到的,因為好奇就看了。時間還是要自己擠的,要知道,如果你水平高了,就能去一些好的公司,有些公司可能就很人性化了,越是環境糟糕,越是要努力,不掙扎不反抗只會沉入泥潭。
有些人確實有天賦,但我們不一定要跟他們比,我們最主要的對手還是我們自己,那個碌碌無為的自己,那個看到高手就顫慄的自己,那個對神秘領域恐懼的自己,我們就是滅掉自己身上那些無能,懦弱,懶惰,我們就是要做更好的自己,在成為更好的自己的過程中,能順便讓人喜歡,讓人驚嘆,給人幫助,那是最好不過,但是不要忘了自己的初心。
總之,想好自己要成為什麼樣的高手,設計好計劃,拒絕誘惑,拋開不必要的借口跟負面情緒,向未來牛逼的自己出發吧!
PS:說了那麼多,都是自己最近的反思,不是為了勸誡樓主,只是有感而發。半夜寫字,腦袋有點發昏,也不知道自己在說什麼,題主看看就過吧。我本科也是學電子的,寫(屎一樣的)單片機C程序,目前正在努力(試圖)成為大牛。
對於演算法,程序語言這類知識,只能多看書,按照書上的內容多實驗。而且,不能看**天速成那些書,至少得看英文原版的演算法導論,SICP這類的適合入門的經典著作,提升思想(bi)水平(ge)。速成口水書看多了,程序會變得很屎。
對於linux這類工具,在用的時候不能不求甚解,遇到不明白的地方必須搞清楚原理,慢慢積累經驗。
遇到不懂的東西,請善用搜索引擎,不要用百度。 英文bing或者google都可以。stackoverflow是你的好朋友,知乎上也有很多大牛。
寫程序的時候,多思考,多分析,對現有的代碼多反思,爭取下次寫得更好。
對了,英文必須學好,口語無所謂,閱讀一定要達到看技術文檔不需要查字典的水平。
加油吧。作為一名害羞的程序猿來說,我必須先匿個名!!我可以負責人的告訴你,新人出來,需要做的是學好自己的基礎,不要想著每天一定要編輯一個掉屌炸天的程序來,反而這樣會讓你覺得你是個渣渣,所以你需要做的就是編一些比較基礎的程序,學習一些比較基礎的課程,在實驗樓哪個網站上面的課程就很多了,從基礎到大牛的課程都有,你可以跟著課程的節奏自己的腳步去學習它,很多時候我是會在上面學習簡單課程以後就去做一下挑戰的課程,穩紮穩打, 你一定會有很大的進步,我以前也是小白,在實驗樓的這段時間的學習我成長很多,相信我,實驗樓是一個讓你成長的地方哈!!!
慢慢積累吧,幹什麼都一樣。
樓主還是要有信心 我還不是學電子的 我是學地質類專業的 參加了個培訓就來參加工作了 用樓主一樣 算是愛好吧 不過效率不高 我想是因為非科班畢業吧 基本的思維和工作方法都沒有知道 尤其是現在在晶元設計公司做嵌入式 硬體軟體都是一堆一堆的剛聽說 移植個代碼還總各種毛病 壓力也很大 想提高 不知道怎麼去學習 也挺亂的 可能把工作相關的儘可能多學習深點可以吧 然後就是別把自己逼慘了 不然丟了信心和激情
沒事多和你的同事交流啊,其實這個世界上「大牛」畢竟是少的,幹嘛一味追逐這些虛名呢,做自己喜歡的事情,每天都在進步,哪怕是一點點。
推薦閱讀:
※如何知道自己是什麼級別的前端程序員?
※IT 人士都用什麼殺毒軟體?
※現在學機器學習會不會成為下一個通信的犧牲品?
※怎麼用通俗的語言解釋大數據和雲計算?
※在命名文件或者變數時,你會使用下劃線還是連字元,為什麼?