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