本文寫給計算機專業或者非計算機專業的大學生,如果你以后想成為一名程式員,那么,你就一定不要錯過這篇文章!
1.確定方向
1.1選擇比努力更重要
關于方向的選擇其實越早確定越好,生活中我們要面臨無數個選擇,前幾天看的一個黑客相關的美劇中有句臺詞說的不錯:
lifeisbinary,生活就是二進制,一個個0101組成的,每一次抉擇,選了就是1,不選就是0,另外也有一句話說:“人一生要面臨很多選擇,但是真正能決定你命運的只有幾個”,沒錯其實就是這樣,
如果你是計算機專業的學生,那么到底是考研還是就業就是首先要面臨的問題,本文是面向確定了畢業要作業的大學生的,所以關于這個抉擇,不再贅述,
就業的話,本文標題是碼農,實際是指所有計算機相關的技術工種,包括開發、測驗、運維等,
很多選擇本身并沒有對錯或優劣,只有適合不適合,
不要濫用勤能補拙,這個詞語一度被很多人奉為圭臬,但同時成了枷鎖,我相信這個詞,但是要考慮現狀,要考慮投資回報率,你在自己并不擅長或不感興趣的領域深耕了四年,最后不一定能獲得多少成績,當然如果你能在畢業后繼續深耕幾年或許是可以的,但是我希望每一位大學生在畢業的時候都能有一份好的作業,并且如果你并不喜歡某一領域的話,那么我相信你一定不會堅持下去,所以我們一定要找到適合自己的方向!
那么如何發現自己對什么感興趣呢?我也不知道很好的辦法,我只知道一個樸素的方法——嘗試,趁著年輕,就要多嘗試,千萬不要大三了都還不知道自己興趣在哪,想做什么,適合什么,所以大一大二努力去碰釘子吧,
1.2演算法還是開發
資料結構和演算法很重要,無論是面試還是作業,無論你從事哪方面的技術,不過演算法雖然重要,但并不適合每個人都花費大學全部的精力去鉆研,
相信很多學校都有ACM競賽相關的社團或組織,很不幸,我們學校沒有,我大一的時候也花了很多精力刷題,但是硬體條件不太允許,氛圍太缺乏,如果你覺得自己能夠在ACM比賽中游刃有余,那么恭喜你,你可以一心一意搞演算法,如果你覺得自己在這個程序中十分吃力,挫敗感頻生,那么也不要氣餒,或許有另一條路是屬于你的,選擇開發,有演算法功底深厚是很棒的事,但是僅僅只有演算法同樣是不夠的,計算機海洋還有很多未知等著你探索,
演算法崗包括資料挖掘、機器學習之類的(怎么樣,高大上吧,反正我不懂),要說明的是想做演算法的同學最好選擇讀研繼續深造,因為大企業在演算法崗的招聘上對本科生是很不友好的,還是要申明一句,你做開發也不能忽視演算法和資料結構,起碼面試還是經常考的!記住一句:
演算法功底好的人,運氣都不會差
對于本科生而言做開發還是相對容易的一條道路,不過開發的技術路線也是不勝列舉:前端、后臺(PHP后臺、Java后臺等等)、移動端(安卓和iOS)、游戲開發、資料庫(比如做DBA)……,這里我肯定不會去推薦你去學哪一種,我沒有能力也不適合,只有你自己才能發現自己的興趣以及好奇心之所在,
我能做的只是在浩如煙海的技術觀點中,幫一個個本科生排疑解惑,
1.3認識技術
關于技術,很多本科生都存在諸多誤區,初學者總喜歡追隨牛逼的技術,實在過于盲目,找準自己的定位最重要,
誤區1:圖形化的東西比非圖形化東西更牛逼
多見于初學者,尤其是計算機專業新生(我大一的時候就是),當時學校教了點C語言,一直都是控制臺程式,面對黑視窗,我就各種百度看看怎么弄出圖形化的東西,那時候才知道GUI這個縮寫是啥意思(當初知道這個縮寫的全稱還小激動了一下下,果然我還是太年輕了),然后知道了WIN32、MFC這些名詞,,確實只能說是知道名詞,當時對著視頻教程做了計算器,就是用VC++拖拖控制元件,視頻里的人敲一句代碼,我就敲一句,后面雖然弄出來了,但是感覺自己什么都不懂,只是依樣畫葫蘆,這時我才意識到,還有很多基礎沒有打勞,
八卦一下,現在桌面客戶端的開發作業并不多,所以大家謹慎選擇這一技術方向,桌面端GUI技術一度火爆(MFC、Qt、WinForm、WPF、Swing……),但如今早已是互聯網及移動互聯網時代,所以大家真的要慎重選擇,不過還是可以學習一下的,至少能加深你對編程語言以及設計模式的理解,
誤區2:非圖形化的東西比圖形化的東西更牛逼
具體而言就比如說:后臺技術比前端技術、客戶端(Android、IOS)更牛逼,多見于有Linux背景的人(沒錯,說的就是我=_=|||),
我也一度這樣認為,其實不然,這里和上一個誤區一起澄清一下:技術本身沒有高低優劣之分,但程式員對其有好惡之別,
另外要說明一下,不能說前端就簡單,后臺就更難,同樣反過來說也不對,我只能說這完全是不同層面的東西,不能量化的去比較,前后端都自有其難點以及G點,你不能說你能處理后端復雜的并發、同步、高可用,那么你就能輕松地完成美觀的網頁及特效、處理麻煩的瀏覽器兼容、極盡所能地降低頁面的加載速度,就好比同樣是一雙按在鍵盤上的手,那么鋼琴家演奏優美的樂曲和程式員開發高性能的軟體,哪個更困難?(比喻不一定貼切,但希望大家能明白這個意思)
誤區3:XXX是最美的語言/框架/平臺/……
多見于PHP程式員,哈哈,開個玩笑,這里不是在談論誰是最好的語言,而是告訴大學生朋友們不要迷信論斷,
我大一的時候去圖書館看書,看到有JavaWeb的書,前言寫的很清楚,痛陳了PHP和ASP.NET的缺點,闡述Java是多么優秀,OK,你可能也和我一樣,在入門的時候經歷過類似的事,我要告訴你的事,多翻幾本書,你會看到ASP.NET和PHP書籍的前言寫的同樣精彩,你絕不會在ASP.NET的書里看到夸耀Java的句子,不同的技術自有其優劣,千萬不要成為前言驅動的學習者,,
繼續八卦一下,雖然說不通技術自有其優劣,但是就目前國內形勢來看,學習Java絕對是不錯的投資,Java后臺幾乎占據了中國互聯網企業后臺的半壁江山,而.NET技術確實日薄西山,不過PHP現在依然有很頑強的生命力,
另外還有一些經典論斷:
LAMP架構只適合中小企業;
MySQL只能用于中小企業,大企業都用Oracle,等等,
這些論斷從技術角度出發,確實無可非議,但卻并不客觀,見過一些朋友,對MySQL充滿鄙夷,覺得MySQL很容易出現瓶頸之類的,其實我想說,阿里、騰訊都大量使用了MySQL,別問我為啥MySQL被這么大體量的公司采用(無外乎開源的好處和歷史原因啦),我覺得,只要技術夠屌,什么瓶頸都能克服,,
2.學習那點事
1關于逃課
相信每一個大學生都逃過課,我也不例外,而且很多,我在談逃課,其實也是從某個側面來談自學,之前有個網友和我咨詢如何面試,如何準備之類的,他已經大三了,學校的課程完成的不錯,但我感覺他還欠缺很多,要想找到好作業只靠老師教你那些東西是不夠的,跟著學校的進度走,其實只會讓你落后,我并非一味的鼓勵大學生逃課,我的觀點是要選擇性的逃課(如果是好課那么即使不開課也要去蹭課的),哪些課要逃呢?
1
無聊的課程,
比如思修、毛概、馬原統統要逃,別急著反駁我,就是逃課而已,不要形而上,我不是黨員,也沒有申請過,數學相關的課程,我只想說量力而行,數學確實對于程式員來說還算重要,但是不同崗位對數學的要求又不盡相同,你能應付就好好聽,不能應付就,,
2
與你的技術方向無關,
這個就要看你是不是計算機專業了,如果你是其他專業學生,但是對計算機感興趣,相信很多課都是可以逃的了,或者比如你的技術堆疊是建立在Linux基礎上的,但是學校有一門MFC編程的課,你有興趣又有時間可以聽聽,沒時間就逃,OK的,這個也是有個前提的,就是你能清楚的明白哪些課程是對你有幫助的,你說:“我學C++的,我把資料庫的課逃了”,=_=||別說你讀了我的文字,,
3
你已經掌握了的,
相信會自學的孩子,都有這種情況,那就是在學校開課前,你就自學過了某門課程,那么等到開課以后你就可以逃了,我就是這樣逃了Linux編程的課,當然你要清楚的了解自己到底掌握了多少,不要自己是一知半解,還自以為懂了,就不聽課了,其實要逃這種課,你也不需要懂得太多,你只需要保證你比老師講課的水平高就行了,我們有的老師,水平真心爛,不逃課對不起他,
但是很多學生總是走極端,說到自學就一點課都不上了,看不起學校的課程安排,自己在寢室學個把月就能輕輕松松地做出網站或者APP,但是我想告訴你,你能做到的,別人同樣能做到,有一句話說的很好:
你的工資不是和你的作業時間成正比,而是和你的不可替代性成正比,
你和培訓機構幾個月量產出來的程式員差別在哪?僅僅是你沒有給培訓機構交學費嗎?但你的技能和他們是差不多的啊,所以說學校教的基礎課是很重要的,最直接的好處就是筆試,筆試考的就是基礎,然后這對你長期的職業發展也是很有幫助的,你作業幾年之后(可能就是一兩年),發展肯定會遇到瓶頸,
2.2關于讀書
多讀書,讀好書
這是一句老掉牙的話了,但是事實就是如此,閱讀經典書籍,你的投資回報率其實遠高于閱讀低質量的書籍,那么什么是低質量的書籍呢?比如《21天精通XXX》之類的,但是不管讀什么書,都不能盲目跟風、囫圇吞棗,在網上,生活中經常看到各種索要書單的網友,借鑒別人的書單是可以得,但是直接照搬照抄則是不明智的,因為每個人已有的知識儲備是不一樣的,別人閱讀的書籍不一定適合你,所以閱讀合適的書籍也是一種重要的命題,
閱讀合適的書籍
那什么是不合適的書籍呢?我認為有如下幾類:
1.與自己的技術堆疊毫不相干的,
這相關與否是建立在你已經做了清晰的職業規劃的基礎上,并且通過搜集資訊能夠自己辨識哪些是和自己的技術堆疊相關的,哪些是不相關的,當然,我并不是鼓吹大家技能點越單一越好,技術人員當然需要不停擴充知識面,但是對于大學生而言,這要建立在你在主要的技術堆疊上的積累已經足夠多的時候(足以應付面試),不然東一榔頭,西一棒槌,最后只能樣樣稀松,
2.超出自己能力范圍的,
雖然我前面說要讀好書,要讀經典書籍,但是一定要量力而行,很多經典書籍的閱讀需要一定的基礎,如果你只看到了別人對這本書推崇備至就開始強行閱讀,最后通常也不多是走馬觀花,像讀小說一樣讀完了而已,最后什么都沒學到,還浪費了時間,老子說“企者不立,跨者不行”就是這么個道理,
3.知識點與自身已具備知識過度重合的,
面對一本經典書籍,可能你已經具備了那本書中所闡述的絕大部分知識,那么還有沒有必要讀呢?我的建議是:可以查漏補缺,但不要通讀,很多經典書籍,單拿出一本來說都是值得閱讀的,但是放到一起就不一定了,因為兩本書籍可能70%甚至80%的內容類似,這時你讀完一本,再通讀另一本就沒有必要了,比如我讀了《C++Primer》就沒再去讀《C++PrimerPlus》了,當然你可以閱讀不重合的部分,這需要你有較強的辨識能力,
《C++PrimerPlus》雖然從名字上看起來像是《C++Primer》的加強版,但其實并不是,它們是不同的作者,并且從風評來看《C++PrimerPlus》貌似比《C++Primer》還要基礎一些,,
善待圖書館
請大家一定一定要善待圖書館,說實話我大學幾年對我們學校并沒過多好感,但是唯一讓我不舍的就是圖書館,相比電子書,我更喜歡那種手指翻閱紙張時那種真實的觸感,大學臨近尾聲,這幾個月瘋狂的去圖書館借書讀書,上個月竟然發現圖書館新購入了好幾本好書,可惜的是我實在是沒時間讀了,哎,突然發現自己一直以來都是不太會讀書的人,從大一到大四都借過不少書,但真正能讀完的并沒有幾本,當然了,前面我也提到了,有些書是不適合通讀的,但仍舊有很多需要通讀的書籍被我丟棄,直到最近幾個月才認認真真地讀了基本完整的,
“書非借不能讀”
很樸素的一個真理,借的書因為是時間限制,所以會逼迫你閱讀,而如果是你自己買的書,你潛意識就會覺得“啥時候讀都一樣”,當然這是對自制力不強的同學們說的,
2.3打造自己的技術堆疊
技術堆疊,或者叫技術體系、知識體系,首技術堆疊起于編程語言卻又不止于編程語言,你可以多嘗試,然后找到自己喜愛的技術方向開發深挖,然而很多學生通常會在起步的時候就陷入迷茫,在網上看到過一個人,想學web開發,各種調研,然后向別人征求意見該學哪門語言比較好,哪個框架更有優勢,后面大概過了半年,他還在糾結該選哪一個,
我只想說:先跑起來,語言很重要但并沒有那么重要,無論語言還是框架這些都是工具,在這些工具的使用程序中提煉出的思想、方法、認知才是你的能力,有了能力,即使你換了語言,換了框架照樣能快速上手,我覺得大公司一般不會計較你對某一框架的API熟悉不熟悉,他更看重的是你對框架背后的設計哲學和原理是否了解,
技術堆疊就像一棵大樹,樹根可能是作業系統、網路、演算法、資料庫,再靠上一點是編程語言,接著樹干就是你的職業方向,可以是安卓、IOS、前端、后臺等等,別忘了還有樹枝和樹葉,技術沒有孤島,把自己封閉在閉塞的圈子內十分危險,你應該是具備了深度的同時再擁有廣度,請注意擁有深度是前提,
沒有什么東西絕對該學或者絕對不該學的,切忌盲從,照搬照抄別人的學習經歷,強迫自己看別人的書單,誰說你是后臺的就不能看前端的東西?在你后臺技術成熟之后是可以的,這樣也能加深你對整體架構的理解,
另外這些樹枝和樹葉上懸掛著的也可能NoSQL、Git或者Docker等,你不需要在每個方面都是專家,但你應該對新技術抱有好奇心,
2.4深度思考和提煉
不管是前端還是后臺,框架都是層出不窮的,每個都學,誰都會疲于學習,但實際上你并沒有必要這么做,對于一個框架,記憶它的API永遠是最低的技能,你要從中提煉出一些共性的知識點,比如后臺框架,你學了之后你要記住的應該是URL路由、模板、權限控制、MVC的設計等等,那么你換一個框架,即使有不同,你也能快速上手,思維上只是換一套API,接著補一下個別差異,新特征而以,對于編程語言的學習也是如此,
C++的STL里面有各種演算法,很多時候引數的引數都包含一個函式物件(實際為多載運算子()),這就是函式式編程啊,學了Java,你會感覺到很多時候其實也都是在進行函式式編程,并且比C++更甚,尤其是jQuery這個庫的用法,提煉出不同語言之中的相似處及不同點,不僅能幫助你學習新語言,并且能幫助你鞏固舊語言,加深你對舊語言的理解,
另外呢,計算機學科的很多課程其實并不是完全孤立的(雖然可能看起來如此),你比如說作業系統課,講鏈接和裝載,這肯定和C語言編譯的可執行檔案有莫大關聯啦,講記憶體管理,分段是啥?你不知道C語言里面資料段、代碼段、等等嗎?記憶體的分配策略和分配演算法,其實C語言里面malloc就在使用這些策略啊,大家一定要學會在不同課程之間建立聯系,這是一件很有趣事,
3.求職準備
3.1早做規劃
關于求職,一定要早做規劃,最起碼在大三開始就應該定下求職的規劃,舉個例子:
我意識到自己直接參加大四的秋招可能有很多不足,但是如果我找一個大三的暑期實習應該相對秋招要來的容易,并且實習留用的概率也比直接秋招通過的概率高,退一步講,即便我實習不能留用,我已經有了實習經歷,勇氣真的很重要,那么我再去參加其他公司的秋招勝算也會大很多,
自己的短板一定要早點發現,然后及時找到彌補方案,比如你專案經驗匱乏,那么你就應該在其他地方找到填補,例如:把基礎打牢(從上層應用到底層原理),深入了解資料結構和演算法,閱讀開源專案原始碼等等,
俗話說“知己知彼,百戰不殆”,你應該找個時間(不需要太早)去看一看你所關注的公司往年的筆試題以及面試題,網上有很多筆經面經可供參考,
其他的規劃還有很多,比如你大概什么時候開始就應該頻繁關注各大公司的招聘資訊,什么時候開始海投,如果你準備去外地面試,那么提前給自己準備好足夠的錢,不僅是車票,面試程序可能會持續幾天,需要住宿之類的,
3.2關于刷題
這是個見仁見智的問題,如果你基礎足夠好,那么大可以不要花太多時間在刷題上,但是我也建議你讀一讀《編程之美》、《劍指Offer》、《程式員面試寶典》、《程式員面試金典》之類的書來熟悉一下題型,
吐槽一下,我當時看的《程式員面試寶典》是第4版,不知道為啥出到第4版了,錯誤還很多,前半部分還好,值得一讀,后面就不敢恭維了,大家讀書一定要警惕,
如果你基礎不太好,那么刷題就尤為重要了,雖然有點取巧,但也不失為一個辦法,
這里提一下C++,即使你投的崗位不是C++(是Java或其他),那么筆試的時候遇到C++的概率也是很高的,這是因為考察C++更有區分度,更加便于篩選,所以希望大家盡量突擊一下C++,當然,不同公司的選拔風格不一樣,所以還是多參考一下他們往年的筆試題吧,(前端的話應該考不到C++,這點我不了解)
3.3鼓起勇氣
之前我們學校本科生進BAT的很少,可能要隔一年才有一個,但是其實并不是我們學校學生真的這么差,雖然我們學校不怎么樣,但不代表我們學生的素質就是如此,原因很簡單就是缺乏勇氣,我曾和一些學長學姐共事過一段時間,他們對于BAT以及其他的互聯網大廠,都是想都不敢想,我也曾經羞于說出自己的夢想“進入BAT”,
所有互聯網大廠都是不會來我們學校所在城市(南昌)招聘的,我們要想面試這些企業都要去省外城市(比如武漢),異地面試也是給很多人心中造成了無形的壓力,覺得跑這么遠,要是面試失敗咋辦,覺得不僅丟了錢還會丟面子,其實很幼稚,每個人都應該盡自己所能找到最好的作業,沒必要想這么多,你丟掉的錢,遲早會得到更豐厚的回報,你丟掉的面子,遲早也會獲得欣羨的目光,最差的情況你也能告訴自己“努力過了,爭取過了,失敗了也不后悔”,
想我當初可是在武漢面試蘑菇街一面就掛掉了,然后三天之后又收到了騰訊武漢面試的短信,你說我去不去?
“蘑菇街你都掛了,你還要面騰訊?”
我去,我一定要去,
還有一點就是不要害怕自己學校差(普通一本甚至二本),不要嫌棄自己學歷低(本科),首先研究生們在演算法崗方面確實你本科生有優勢,但是在開發崗上并沒什么差別,然后大公司招聘雖然喜歡招聘名校的畢業生,這只是因為僅僅通過半個小時或一個小時的面試,面試官真的很難了解到你的全貌,而如果你是名校的學生,那么無形之中就在證明自己的能力,首先你能考上這個學校就說明了你的學習能力,然后這個學校師資力量,辦學條件十分優厚,確實能助力學生的成長,如果你學校一般,那么面試官可能覺得你學習能力有欠缺,或者覺得這樣一個學校并沒有好的條件去培養你,
但是這絕對不是全部,你是普通學校的學生,并不代表你沒有足夠的學習能力,沒有掌握足夠的職業技能,你需要做的僅僅是努力向面試官展示出你的學習能力,你所掌握的技能就好了,我有一個老鄉,二本學校,但是去年收割了BAT的offer,其中霸面百度拿了specialoffer,他大學期間就做了很多事,做了很多專案,還開辦作業室等等,這些大學經歷以及專案經驗寫到簡歷上,和面試官一聊,那么面試官真的不會在乎你是什么學校什么學歷的(網易除外),
另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!
C語言C++編程學習交流圈子,QQ群【757874045點擊進入】微信公眾號:C語言編程學習基地
分享(原始碼、專案實戰視頻、專案筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
編程學習軟體
編程學習視頻

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/488.html
標籤:其他
