1. 程式人生 > >C++自學之路——從一個客服到伺服器後端

C++自學之路——從一個客服到伺服器後端

0,廢話一下        

    距離上次寫部落格到現在已經快兩年的時間了,寫上兩篇時,我還是做著前端的,現在已轉伺服器後端了。從畢業到現在3年多的時間了,一路自學走到現在,逛貼吧時,看到很多新手,感覺就像以前的自己,那麼的迷茫,無助,所以現在就想分享一下自己的自學之路。

1,自我介紹一下下

    我是11年上的大學,專B學校,外省可能不知道啥叫專B學校,在廣東,大學分成重本,本A,本B,專A,專B,就是最差的學校,相當於考不上,出高價讀的,大學專業是動漫專業,就是美工,和程式設計沒任何關係的一個專業,上大學就是天天玩,打DNF,打魔獸,偶爾學學PS,3DMAX,MAYA這些美工軟體,後來大二後半年,玩DNF強化送了凱麗很多錢,怪又打不過,玩過的人都知道凱麗有多麼的可恨,那時還去找過遮蔽凱麗的補丁,沒找著,後來就想著要是有外掛就好了,突然腦抽的就想外掛是怎麼做的呢,於是就開始了外掛之路,逛各種外掛論壇,還買過VIP教程,自己去學,學的時候才發現那些論壇全是封裝好的模組,自己去呼叫那些函式,遊戲一更新,那些模組就失效,完全就是騙錢。只怪自己太傻,這就被騙了錢,不過也就這樣接觸到了一門神奇的程式語言,易語言,於是自學程式設計之路就這樣開始了。


2,學程式設計前期所走的彎路

    逛了比較多的外掛論壇,都是用到易語言,於是學了一個星期左右易語言吧,想著這東西這麼多人用,能不能以後從事這個工作呢,就去了解一下,上招聘網站去看,發現壓根就沒人用,從百度知道貼吧這些地方瞭解到,程式設計都不用易語言的,而是java呀,c呀,這些很多很多種語言,後來想想就放棄易語言了,心想反正都能做外掛,為什麼不選擇一個可以找工作的語言呢,之後就跑學校圖書館去借書,當時手機還是諾基亞,不知道有電子書這東西,到圖書館啥也不懂的,找了很久沒看到java呀這些書,就隨便拿了一本flash as3的書,完全看不懂呀,後來找視訊看,學了一段時間感覺這語言在操作一些控制元件的,不對勁,後來才瞭解到這是做flash遊戲動畫用的,尷尬了,後來又去逛論壇,大家都推薦學java,可是圖書館又沒看到有這書,於是就去找視訊,下了很多視訊,對比了很多,後來看來看去,還是覺得傳智播客講的好,就學傳智的了,學了一個月吧,想著基礎也差不多了,搞搞外掛吧,就去找教程,後來發現java不能做外掛,不能做外掛,不能做外掛,

有人說不是不能,是很麻煩,於是又學錯一門語言,後來瞭解到外掛就是改電腦上實體地址的資料,然後涉及到定址,暫存器,然後又去學了彙編,把王爽的那本彙編看完了。然後又學了CE,OD這些除錯工具,雖然這些工具可以直接修改資料,但是和別人的不一樣,別人是一個程式,可以發給其他人用的,於是就開始學C語言,記得當初第一個問題是在C語言貼吧問的,就是變數我用的時候才宣告,一直報錯,實在搞不懂,就去提問了,後來才知道C語言變數必須宣告在最前面才能使用,這是我問的第一個問題也是最後一個問題。當時把C語言的一本入門書看到了第17章了,就快完了。當時我已經是大三實習了,實習是學校安排的,沒有底薪的,很坑,做排版,用PS修圖什麼的,就是一美工。就這樣大學過了。

3,開始C++

畢業之後,想著自己快學完了C語言了,能找工作了,那會剛出社會,很天真,想象得很美好。一邊繼續學C語言,一邊找工作,過了一個星期吧,一直找不到工作,家裡人又催,看我天天在家學,不找工作,就說我都不知道學些什麼,讀書時不認真,現在學有什麼用,整天遊手好閒的,不找工作,自己又不是這塊料,老老實實進廠找份工作做著就好了。當時聽到氣得我,不想說話了,迫於無奈,為了趕緊搬出去,就隨便在智聯上投簡歷,那會很天真,看到有一份工作寫著招應屆生,工作表現好可以內部轉崗,我就想著,我進去了是不是可以轉技術崗了。然後就投了,很快接到面試電話,就跑去面試了,到了之後要填表的,應聘什麼職位,當初很傻,就寫個應屆生,我自己也不知道幹嘛的,後來面試了才知道,這是做客服的。然後我還很天真的說,我是看到可以轉崗的,我以後想轉技術崗位做開發,那時那個主管也沒說什麼,說是可以轉崗的,但要看自己的能力,我很開心想著肯定沒問題,能轉的,於是接受了他開出的條件,三班倒,不包吃,2300工資。在廣州天河區,2300工資,租個房子600塊,現在想想真是太傻了。當時組長和我說叫我和公司那個誰誰誰 聊一下天,看看要什麼要求可以轉的,我還真相信了,去了解了下,那個是運維,為此我還特意去學了linux運維方向,每天下班就學,工作了段時間才瞭解到,內部轉崗根本不可能,一般轉的都是說客服轉運營的,像我這樣轉技術的,完全沒希望,後來辭職了,身上也基本上沒錢,學的運維也停了,又不敢回家,就跑同學那住了,那段時間就上網把這些運維呀,語言呀,系統呀,都幹什麼用的,瞭解了一遍,當初最喜歡的還是C語言,簡潔,程序式程式設計,想到什麼就寫什麼,後來發現找工作不好找呀,就鎖定java和C#和C++,java不能做遊戲和外掛,不考慮,C#別人說效能差,不能跨平臺,好,就決定C++了,於是開始找資料,去了C++貼吧,看別人看什麼書,大家都推薦那個C++ Primer Plus,我也去買了本盜版書,10多塊錢還是多少的,忘記了,看了很久,感覺這不是C語言的東西嗎?沒什麼區別呀。然後看到差不多的就沒看了,到後來才知道看錯書了,應該看C++ Primer的,之後就看視訊,同時下載了傳智C++第5期還是第4期的,忘記了,還有那個達內,兩個對比了一下,達內就是一個人在上面讀書,我不是打廣告,這兩個真的沒得比的,後來看傳智的,看完了C++部分時已經快15年了,由於身上沒錢,總不能一直在同學這住,我就開始去投簡歷找工作,發現根本沒人理的,看了很多招聘條件,只要是C++的都看了,跟著招聘條件上寫的,前前後後學過windows程式設計,direcx龍書,MFC深入淺出,VC++,windows網路程式設計,編譯原理,opengl圖形庫,還有很多亂七八糟的書,記不清了,但是我犯了一個大忌,也是很多新手會犯的,就是隻看不練,書基本上都看了,但寫的程式碼卻很少,反正走了很多彎路,投的簡歷沒人回過,後來實在是沒錢了,又去做客服了,這次比上次多了200塊工資,2500一個月,之後在公司辦了信用卡,工資有剩下點錢,又辭職了,斷斷續續加起來借了銀行一萬塊,繼續自學程式設計,繼續學傳智的視訊,後來瞭解到Qt,cocos2dx這些,然後又學了半年吧,一邊學,一邊做些小遊戲,坦克大戰呀,超級瑪麗呀,跟著視訊做。但都是隻做了一點點就沒做了,後來又是因為沒錢了,又去找工作了,這次有目標,專門找cocos2dx的,找了大概一個月吧,沒一個回覆的。打算又去做客服的了,突然間開啟智聯看到有一個面試邀請。我的天呀,終於有回覆了,現在回想起來,要是我當初沒去看智聯,我現在是不是就不在IT行業了,那個公司也沒打電話給我,就發了一個邀請。那時激動得我,整晚沒睡,通宵複習C++和cocos2dx的內容。

4,前端生涯

複習了一晚上的C和C++還有cocos2dx,一大早就坐車去面試,困得不行。到了公司,其實也不算公司吧,在住宅區,就是租了別人三層樓,一樓放雜物的,二樓辦公的,三樓老闆家自己住的,就是一個小團隊。沒筆試也沒問什麼技術問題,就瞭解了下以前的工作,然後看到我簡歷上寫著做過坦克小遊戲這些,就拿了個視訊給我看,問我會不會做,能不能做出來,視訊就是那種老虎機那種賭博遊戲,我自己也不確定能不能做,就回答說可以吧,於是就談工資想要多少呀。當初我只求找到工作,我就說工資沒要求,後來就給我2700工資,包吃包住,單休,雖然工資不高,但我真的很開心開心,終於付出的有回報了。2700的工資,我還欠著銀行的錢,每個月發的工資還完,有時還要繼續透支銀行的錢來生活,那會我的C++還很爛,我還搞不清楚別人寫程式碼為什麼要先寫個函式在那,為什麼要先定一個類,你怎麼知道這個函式是怎麼樣的,你怎麼知道執行順序是如何的。反正很爛,還會寫一大堆重複的程式碼。進入公司第一天,就是定那個遊戲框架,老闆看著我寫的,緊張死了,完全不會,不知道怎麼開始寫,後來老闆就和我說先定好函式名,再一個個函式實現。我完全不會。好怕被辭退。好緊張。後來利用午休的時間,我寫出了一大堆沒用的垃圾程式碼,老闆看到了把我罵了一頓,說我寫的是什麼東西,浪費這麼多時間寫出這樣的東西。後來就一直被罵,慢慢慢慢的把垃圾程式碼改正,寫得多了,慢慢的熟練了,以前學習中遇到很多的問題都解決了。可能之前都是隻看書,不怎麼敲程式碼的原因。所以說學程式設計一定要多敲。以前學的時候懶,就是隻看書不敲程式碼。後來工作段時間,基本上不會被老闆罵了,也發現老闆不怎麼懂C++的,而且公司就我一個是做遊戲的,其它人是做硬體的,嵌入開發之類的,公司之前有老專案是用HGE引擎開發的,一個C++的老古董了,沒人帶我,全是自己學,維護起了老專案,學了HGE引擎,之後工作需要又學了lua,socket,qt,mysql這些,由於公司沒美工,而我又是動漫專業的,所以有時我會兼職美工,還有做遊戲視訊我會pr這些視訊軟體,裝系統,改系統改登錄檔,什麼亂七八糟的都做。之後工資也從2700漲到3000,4000,5000,後來發現做前端很無聊,特別是調那些UI的位置,煩得要死。不想再做前端了,就開始學linux,apue  tcpip 瞭解多執行緒多程序,還去9秒社群下載別人的伺服器原始碼來看,後來公司又要做網站,也是我做的,學了html css js和php,搭建了一個網站出來,然後做了一個小型的伺服器,用於更新客戶端資源和指令碼, 由於一個人做伺服器網站客戶端忙不來,後來招了兩個新人進來接手C++,而我卻負責了網站,實在不想做,就辭職了,在這公司做了接近兩年,一分錢沒存到,終於把欠銀行的錢給還完了。

5,開始伺服器

辭職後知道自己伺服器沒經驗,又不想做前端,就繼續自學了段時間的伺服器開發,其實說是自學,還是一邊打遊戲一邊學的。後來沒錢了,就開始投簡歷找工作,發現有兩年的C++經驗,我完全不用投簡歷,很多人主動找上門來,有客戶端的,但我直接拒絕了,也有找伺服器的,我都接受了,前前後後面試了6份吧,伺服器的。第一份是一個300多人的遊戲公司,說實話,這是我第一次面試技術崗,去到公司,先是做了份筆試題,花了40分鐘,第一次做題,好多都答不出來,特別是遇到演算法題和資料結構,之前都是直接用標準庫的,沒想過自己實現,筆試做完了就面試,第一面應該是主程吧,就按筆試題上面的問,看我筆試答得很少,很多題空的,就問了一兩個筆試題上的,然後擴充套件問,瞭解了下我以前做的工作,就這樣一面過了,然後等了半個小時吧,二面開始,這個應該是技術總監吧,也是問筆試題,他給我提示,讓我回答我沒做的筆試題,我答的不對,他也不說,給我的感覺就是我答對了,繼續給我下套問下去,可想而知,結果就是回去等通知的。然後第二份面試,一個小公司,只有10個人不到的,我想著小公司應該要求比較低,可能會成功,結果去到,沒有筆試題,直接面試,一上來就問為什麼你要轉專業到程式設計,為什麼之前的專業不做,為什麼畢業後才想到轉行,一大堆無關的問題,後來就問cocos2dx引擎的東西,我的天,這前端的,我早就不想做了,也沒去研究了,我現在面試的是後端呀。然後這個問題就黃了,之後又問多程序和多執行緒的區別,堆疊呀,網路程式設計呀,問了很多很多,明顯比那個300多人的公司要求高多了,我都只是答的比較淺的,結果也是等通知的啦。第3家公司就氣死人了,那個公司自己要招什麼人都不知道的,由於是他打電話給我的,我也沒去問什麼,就去面試了,到了公司才發現,他不知道自己要招什麼人,拿了三份程式碼給我看,一個ios的,一個安卓的,一個c#的,前端的程式碼,問我能看懂嗎?會不會做,我說我面試後端的呀,做伺服器的呀,他還問我伺服器不就是這些程式嗎?我的天,然後我給他解釋了什麼叫客戶端什麼叫伺服器,它們之間是怎麼工作的,是用什麼語言寫的。浪費我時間。第4家公司就是一家500人左右的公司吧,筆試題10分,我看了一下我的評分是6分,一面應該是主程,問了一些遊戲設計的問題,瞭解了下我以前的工作,就過了,然後叫我等一下,說進行二面,等了10分鐘吧,他過來告訴我技術總監不在,約我下次二面,然後就沒然後了。之後有間公司筆試題做了45分鐘,結果面試一看我沒伺服器經驗,打發走了,太坑了,不搞清楚就約我過來。最後一份就是我現在做著的了,筆試+面試搞了兩個多小時,順利通過,成功進入伺服器開發。

6,總結一下

1,切記不要只看不練,我當初就是這樣,看懂和會寫完全是兩碼事

    2,不要東看西看,這學一點那學一點,重點把C++基礎打好,還有資料結構和演算法,我每次筆試都會遇到

          排序演算法,查詢演算法,還有就是用C或C++實現棧,連結串列這些基本的資料結構。還有就是指標,

         一般就是用C 實現字串操作的,基本上這些學好了,別人都願意帶你的,

         像我之前學一大堆亂七八糟的,什麼mfc,qt,圖形庫,面試的時候完全用不上,也不會加分。

    3,網路程式設計不要糾結學windows,還是linux,不知道別人會不會糾結,反正我初學的時候很糾結,我到底要   

         哪個系統的呢,後來自己學了才知道,兩個區別不大,就個別函式不一樣,推薦看unix網路程式設計

先這樣,後續看看有什麼補充的,語言組織能力不是很好,廢話比較多一點