計算機科學與技術專業的學生要怎樣做才能避免成為 一個低級的碼農?
知乎上計算機的似乎很多,大神也有不少,作為一個計算機科學與技術專業的學生,真心的請教一下要怎樣做,要學什麼,要怎樣做,才能避免那種月工資兩三千的碼農甚至碼奴的生活呢。 之前也有過類似的提問,但是本人看了一下那個問題下的答案,調侃者居多,希望大神們能夠給小弟指一條不是那麼荒唐的道路。。。
不怕各位笑話,我大學畢業做程序員,第一個月工資是 600 RMB。
其中拿出一部分買了輛自行車,剩下的交給媽媽保管,自行車騎了兩個多月就丟了。
算來到現在已經做了18年程序員了,下午還剛解決一個iOS上內存泄漏問題,順便優化了點性能。
我應該不能算低級碼農了,說說我是怎麼過來的。
你得熱愛寫程序。我本來的專業是化學,無機化學方向的,但是我大學的時候就愛寫程序,喜愛程度僅次於玩遊戲,泡在大學的機房裡,除了玩遊戲外所有時間都用來寫代碼了。
沒有真心的喜愛有時候遇到困難是堅持不下去的,我那時當然買不起電腦,大學導師給我了台PC可以隨便用,那台機器在他的一個實驗室里,而那個實驗室暖氣壞了,我在冬天穿著棉大衣每天在裡面呆幾個小時,北方的冬天在沒有暖氣的房間,你想像下。物質條件的困難是一種,還有一種技術上的困難,讀不懂的代碼文檔,調不通的程序,莫名其妙的bug,搞了很久毫無進展的技術難題,都需要一種動力讓自己堅持下去。
你得懂得抓住機會去表現自己。機會不會砸到你頭上,要自己抓。我剛工作的公司,有個數據分析程序,要運行5-6個小時才出結果,所以他們都是下班前開始運行,等第二天早上看結果。我就不信這個程序需要運行那麼久,於是下班後自己分析代碼,重寫了排序和查找部分演算法,用空間換時間,並不是很難的東西,只是以前沒人去做。那個程序被我優化到只需要運行15分鐘,此後他們就可以當天看結果了。老闆覺得我不錯,工資漲到了900 RMB。
你得懂得環境的重要性。我在天津呆了一年多,就覺得軟體產業的氛圍太差了,在報紙雜誌上讀到各種中關村的傳奇,很嚮往,於是下決心去北京。好的環境給人提供了更多學習和發展的機會,最重要的是讓你能認識很多優秀的人,能從他們身上學習,能被他們激勵。我到北京就有了和雷軍共事的機會,金山當時很小,可以近距離觀察行業里最精英的人是怎麼樣的。和跑得快的人一起跑也能跑得更快。
你得能持續學習。總有人覺得學什麼技術很重要,大量的討論都是說學哪個語言好,哪個平台好。其實學習的能力本身最重要,能隨需應變,工作中需要什麼就能快速學會,並且學精學透,而不是滿足膚淺的了解。
你得有個好身體。這點我做得很不好,從小就體育極差,1000米跑從來不及格,一直到40歲都沒怎麼鍛煉,可能是運氣好,也可能是沒有煙酒嗜好,身體沒出什麼大問題,但是小毛病還是有的,頸椎腰椎手腕都不是很舒服,牙齒也不太樂觀。我有個習慣,每年生日的那個月都要做一項重要改變,那麼40歲這次就留給健身吧。去了兩個月健身房,感覺身體清爽多了。著名計算機科學家Dijkstra說過:
計算機科學並不只是關於計算機,就像天文學並不只是關於望遠鏡一樣。
Computer science is no more about computers than astronomy is about telescopes.
深以為然,計算機編程 就像 天文學家之於望遠鏡、生物學家之於實驗台、畫家之於畫筆、作家之於鋼筆那樣,是一種工具或技能,能夠嫻熟地使用工具固然很重要,而關鍵在於如何利用它來創造出別人(或很少人)做不到的事情,也就是創新的能力。不想淪為碼農,解決之道就是學會用編程來解決別人解決不了的問題。
我粗鄙的感受是,在產業鏈中,一個人的價值體現在他可被替代的成本,替代成本越高說明價值越大。把你學校的課程對應的國外名牌大學的課程教材找出來一本本啃下來,畢業後月工資估計不會低於2w。
程序員只是一個職業,做好這份職業與做好其他的職業無異,多思考,多動手;至於要成為偉大的程序員,或者說偉大的人,那麼在大學裡除了職業知識的積累,還要注意自我的反思,成長;
---------------
上面就是幾句有用又沒用的話,那麼我來具體介紹一個對你來說應該可執行的方法;
工具:github ; 方法:模仿
在講方法之前請先思考一個問題:如果你和Google/Facebook優秀的工程師一起工作,你覺得你願意去學習么?你的技術能提高么?
好的,這以前的確是一件幾乎不可能的事情,但有了github它就趨向可能了;
首先選擇一個你感興趣的方向;然後按照語言或方法在github上找到你覺得已經到達Google/Facebook這種級別的工程師關注;
我估計你如果看他們的項目會很困難,那沒關係,在關注他們的人中找,你總會找到類似你這樣,比你強但差距沒那麼大的人,依次類推直到找到符合你現在階段實力去模仿的人;(具體的方法不要問我,你自己去思考,這是你踏出成為優秀程序員的第一步;至少你要學會怎麼用github,最好通過此來學好git)
單單在github上模仿他們的代碼可能還不行,如果遇到你不知道的代碼,那麼直接貼到google來搜索吧,另外還可以搜索他們的個人網站或推薦的東西。(這裡的問題包括如何翻牆和英語環境;對於英語可能會有誤區,你這裡不是要學會英語,而是學會怎麼用google,邊搜邊查,不用刻意記憶,久而久之會習慣的;不要覺得等到學好英語再用google,如果你覺得受不了,那你放棄吧,你不適合成為優秀的程序員,;翻牆同上,自己查)
一邊模仿一邊積累知識點,如果有可能可以改進自己再做,甚至可以再你模仿的項目中對你覺得自己能寫的更好的地方提交代碼;
總結:好處
- 技術上的成長,沒有疑問;
- 你畢業的時候,即使沒有做過什麼大的項目,但如果你github上足夠精彩,完全可以成為資本;
- 最最重要的,大學的幾年你已經養成優秀程序員的基本工作習慣和思考方式;
ps:本人就是通過這種方式從幾乎跨專業(本來經管類),經過6個月工作學習,現在能到完全負責項目的前端並參與項目後端工作的程度;所以作為計算機專業的你,應該能達到更高吧;
永遠做到獨立的思考。
所有別人的建議,與前輩所謂的經驗對你來說都有參考價值,即使是錯誤的,你也得到了一份名為失敗的經驗;同時,在你不給出你自身的情況時,所有的參考又必然不完全適合你。
你要知道別人初中高中有編程特長生,人家高中就鑽研pascal,c++,不談精通,熟練使用自然不在話下。你可能是上了大學才知道CS要學什麼,花了一年入門c或java還是一知半解,而別人此時已經搞定了linux,web前後端,馳騁http.etc
起點不一樣,學習過程也要不一樣。
我大一時,有個牛逼的學長推薦我自學要用google,拋棄lowbe的百度吧。我信了啊,並且我打賭知乎所有人都認為,google完爆百度。可你要知道,當一個大一的連牆都不會翻,甚至404還不知道是什麼的時候,你該選擇百度,直到有一天,你發現百度一個知識點,所有答案,博客都是一個回答,並且滿足不了你的時候,你會自己發現google的好處。我覺得這個過程很重要。
點題:如何避免成為碼農。所以你知道我想說什麼了嗎?做java的常被批為碼農吧?那些理解透徹j2ee,jvm,andriod這麼多java的方向,你還以碼農稱呼他們嗎?基本沒有一個大學是手把手教你這麼多具體東西的,全是自學。我們常常嘲笑的是那些培訓機構工廠式生產出來的程序員,因為他們比我之前說的那種人少了一個東西,叫做自我思考的能力。(我只是說我映像中得一些培訓機構,沒必要和我較真,或者我想說的是那些在大學不好好學習,想通過培訓機構速成的人)
倖存者偏差知道嗎?別人的經驗永遠是別人的經驗,別人的成功只屬於他個人,一味遵循別人的步伐,很難實現自我。
要學的很多啊,具體的知識我沒說,怎麼學我也沒說,我只想告訴你時刻不要忘記自己獨立的思考。不是大牛但自認為不是純碼農的路過。首先要捨得拼。捨得的概念是無論學新東西還是研究老東西都得堅持下去,無論你是靠它糊口還是興趣驅動都需要這樣的努力動力。
其次,儘管現在對編程的運作模式越來越工匠化,編程成了大量模塊抓抓挪挪拿來改改就能拼揍出成果的活兒,但是不要真把自己當小工。創造性可能是區分你所謂低級和高級的一個重要標準。畢竟現成的模塊誰都可以用誰都會用,但自己有設計適合環境使用的工具的能力才是真正不可取代的。
多請教大牛,少請教「大牛」
作為計算機科學與技術專業畢業了好幾年的人,我想我還是有資格回答這個問題的。
題主的主要問題是:「要怎樣做,要學什麼,要怎樣做,才能避免那種月工資兩三千的碼農甚至碼奴的生活呢」
首先我想說的是,題主要搞清楚計算機科學與技術專業的存在意義。
這裡既不是軟體學院,也不是應用數學系,本系主要研究的是計算機硬體、計算機軟體、計算機網路、資料庫、計算機操作系統、嵌入式和單片機、人工智慧等等。。。,可以說這是一門博大精深的學科,從理論上講可以與量子物理扯上關係,從實踐上講可以只是編寫代碼。所以本科四年的學習想要學透這門學科不太現實,只能從大致上了解到此學科體系的脈絡,再從中選擇你感興趣的學科方向。
然後我想談談題主的目的:避免月工資兩三千的碼農。
題主首先應該明白,工資並不能完全代表人的價值,一個留在大學裡當講師的學生也可能只有三千多,一個在小私企里打工的程序員也只有三千多,他們工資相仿,但是我覺得大家都認為講師更有前途吧。所以我理解題主的意思應該是:怎樣做,學什麼,才有前景?
題主要想明白成為怎麼樣的人,具體來說就是今後在學術界混,還是在公司混,當然你還可以選擇政府事業單位公務員。這三種選擇實際上都有計算機科學與技術專業的人群。
一、政府事業單位
1、每年各省都有事業單位的公開招聘,招輔助性質的計算機相關專業的人員,主要管理單位的計算機系統,這種活有編製,輕鬆,工資也不多,但是穩定,也能在很好的單位。
2、每年的公務員考試,可以去看看計算機相關的職位,工信部的相關職位較多,可以關注一下。
以上都最好有碩士學歷,這樣才有較好的崗位。
如果你的目標是上述兩點,那麼首先,你要在本科四年好好學習,研究生讀一個好點的學校。同時研究生階段就好好看看公務員考試和心儀的事業單位考試要求,按照相關要求的考試書籍來訓練,最後參加考試,進入體制內,擺脫兩三千碼農的命運。
二、選擇做研究工作
如果你有志於計算機的深入研究,那麼可以選擇這條路,肯定擺脫兩三千碼農的命運。你要做的事情如下:
1、本科四年好好學習,保送本校研究生,或者考上較好學校的研究生,或者考G考托上美國研究生。
2、對於導師要好好選擇,在可選範圍內選擇自己喜歡的研究方向上最好的導師。
3、研究生階段重點看研究方向的論文,多發重要期刊的論文。
4、畢業時要求留校當輔導員,或者謀一個講師的職位。這些事需要你提前準備,在學校期間和導師關係搞好,如果導師沒什麼能力,要在院長面前表現好,讓院長知道你,要多建立關係。這條路需要論文升級,高校教師的崗位分為13個等級。教授崗位分一至七級。其中正教授崗位包括一至四級,副教授崗位包括五至七級;中級崗位分3個等級,即八至十級;初級崗位分為3個等級,即十一至十三級。
5、除了留在學校,也可以去研究所工作,中科院計算所和中科院軟體所,都是需要計算機研究生的。計算所難一些,軟體所簡單一些(其實軟體所和一般公司還真沒兩樣,除了項目是國家的、軍隊的)。這條路是需要評職稱的,也要求論文才能升級,也許要求專利,貢獻等等。研究員職稱系列包括實習研究員(初級),助理研究員(中級),副研究員(副高),研究員(正高)。
三、選擇參加工作
基本上薪酬+福利+工作強度進行考慮。選擇互聯網公司BAT,薪酬高,壓力較大。選擇銀行,大型國企,也是不錯的。
平時也要不斷的充實自己,熟悉公司業務,自己自覺學習一切覺得有用的計算機知識。
厲害的畢業就上萬 不厲害的 2 3k也不可恥吧。
畢竟人人都不是天才 有些事情還是需要 笨笨的人來干。
可以不成為世界第一,但別看輕自己啊。
碼奴是什麼鬼?
需要不斷的積累與磨練,也就是說需要時間。只有真的懂編程,懂軟體了,你才能算是一個合格的軟體工程師。低級碼農其實是不存在的。因為人總是會學習,會進步的,不過這需要時間去積累。十年前,我剛工作的那會,連hashtable與hashmap的區別都不知道。
學生時代是應該夯實基礎還是應該多實際應用確實是個難題:
我選擇的路線是夯實基礎。
所以國內外的書籍課程啃啃啃!!!
學校沒有的課去上公開課。
大連交大不行的課去大連理工要課表,還能不讓你進去??
畢業半年系統分析師證書手中握。工作隨便找的感覺。
編碼速度和效率可能相對一般,不過相對bug數很少,也很少被peer review出問題。
很多時候都感覺大學的時候衝擊ACM就好了,基礎知識不太值錢。不過實際工作了感覺基礎相當相當重要。java的基礎換到c#上,jvm的基礎理論換到CLR上其實也就不長時間。
和姐夫的思路一樣,怒啃教材。怒學基礎。怒考證書。眼界自然提高。年紀越輕越要積累基礎技術
年紀越大越要精通行業業務
年紀輕靠精通技術吃高薪飯
年紀大精通業務能夠提供一整套行業解決方案(比如高薪方向的互聯網、遊戲、金融選一)
碼農與大神也許只是一步之遙!
屈指數算,我從大二開始接觸編程,到現在已經第五個年頭。這五年里摸爬滾打,繞了不少彎路。計算機世界似乎是一個無邊的宇宙,這五年道阻且長,我試圖探尋編程世界的邊界。經歷了五年代碼的洗禮,我似乎依稀能看見編程世界的輪廓。下面是我這五年的感悟,反雞湯文,膽小者慎入。
習得一項本領總會經歷三個階段:入門、緩步提升、超越。
第一階段:入門。所謂萬事開頭難,任何一項本領在入門時總要花費一翻精力,編程也是如此。每個程序員都由C語言開啟編程世界的大門。C中的指針、內存管理讓剛接觸編程的我們暈頭轉向。但如果弄清楚了這些基本概念,也許在黑白界面中完成我們人生第一個學生成績管理系統並非難事。入門階段也許會伴隨著艱難困苦與不知方向,但只要堅定信念,反覆咀嚼基礎知識,入門並非難事。
第二階段:緩慢提升當我們熟悉了一門語言、了解了一些計算機基礎知識、並成功實現了一個看似簡陋但充滿成就感的軟體,接下來我們將會進入一段漫長無際的緩慢提升階段。這個階段我們開始涉足一些項目,用先前積累的基礎知識可以合作完成一個項目,這個過程也會伴隨各種考驗,但實現每個功能後的成就感會使我們信心百倍。然而,受到成就感驅使,我們在這個過程中往往會一味地追求成就感而疏忽探尋問題的本質,成就感會取代我們對技術本身的思考。遇到問題時我們更擅於使用拿來主義,在網上一通搜索,忽然發現某個論壇中的某中方法可行,便轉而繼續下一個問題。若你也有這樣的體會,恭喜你正式成為碼農。
成為碼農也許是每個程序員必經的階段。成為碼農並不可怕,可怕的是你是否意識到自己正處於碼農的階段。在這一階段也許已經積累了一些項目經驗,對編程語言也有所了解。也許你已經在中等規模的公司獲得一份薪資不錯的工作,並且憑目前的經驗足以混口不錯的飯吃,但若想進入頂級互聯網公司仍有較大的差距。也許你會發現,當遇到問題時你能通過搜索引擎快速地找到解決方案,但仔細想來你具備的是信息搜索能力,並非高超的編程水平。國內的程序員論壇潛伏著太多這樣的拿來主義者。他們只希望獲得解決當前問題方法,並不會究其問題的本質。你若體會到這一點,並意識到拿來主義巨大的危害,那你即將踏入第三階段;你若安於現狀、不作改變,那終將成為碼農無法自拔。
正如道教的思想:一生二,二生三,三生萬物。萬事萬物雖形態各異,但究其本源都是「一」。編程也是如此,計算機技術發展至今新技術層出不窮,每隔17秒就會有一種新的框架誕生。很多人苦於編程技術發展太快,學習更不上新技術的迭代。但大家不曾發現,當今計算機技術的發展都是表層技術的發展,計算機根基數十年未變。HTTP協議、TCP協議、UDP協議、面向對象編程思想……再往底層,如今的所有計算機仍然基於這個1903年出生的猶太人馮諾伊曼提出的計算機架構。若要成為高手,必須要看透事物的本質,若要成為計算機大神,必須要學透計算機基礎學科。那些框架都是浮雲,隨著新技術的出現必將成為過眼雲煙,而真正經得起時間洗禮的是那些幾十年未變的計算機基礎。當了解了這一點,你就會忽然明白,為什麼大學計算機專業要學四年基礎知識?為什麼BAT招聘都會考大量變態的基礎知識?那些在高校制定教學計算的老教授們、那些BAT的大神們早就參透了這一點。高手總是以不變應萬變。
所以勵志成為大神的你,不要再抱怨學校的課程多麼地沒用,不要再抱怨校招的筆試題多麼地變態,從現在起重視基礎、惡補基礎吧。
最後分享給大家編程過程中的一些乾貨。
學習編程是一場馬拉松,你永遠別想一口吃成一個胖子。快餐式的IT培訓機構最多把你培養成碼農,若要更上一層樓一定要多多思考、拒絕拿來主義。
在參與項目過程中都會受到deadline的壓力,也許你沒有太多的時間探究每個問題的根源。我建議大家養成記錄的習慣,把開發過程中遇到的每個問題都記錄下來,在周末或項目空窗期把問題探究清楚。
你要知道,任何問題都有原因,不要把重啟一下電腦就解決的問題歸咎於你所使用的框架的bug,即便真的是框架的bug,那你也需要看源碼找到bug的根源。
保持一顆探尋問題本源的心,編程世界在你面前終將一絲不掛。
只要你真的會某個技術。
給你錢的人不管你大學掛多少科或者是拿了多少獎學金,只要你能做東西,就能拿錢。
大學學到什麼程度叫能做東西,那你可以自己試試寫點玩具,剛畢業的時候你帶著你的作品去面試,是不可能只拿兩三千的。(千萬別拿個helloworld去面試._(:3」∠)_)
國內部分學校的教材感覺就是針對考試的,有能力去找國外對應的教材看,理解更容易。大學時間很多,要珍惜..(不過似乎懂之前總是要先浪費一下)
每一個大牛,都是付出巨多時間才成為大牛的。
國外名牌大學教材是次要,事實上「名牌」大學很多,計算機教材就那麼幾本。很多學校的教材都直接amazon 上買。但講起來的講義就很見功力了(基本上是把教材反過來講)。很多大學的教學視頻都內部上網,課程討論都在網上實現(piazza)。instructor 是隨問隨答,凌晨還在。課程主要考察project 。一節課很多大作業。這點值得還在關注語法細節和考試提綱的國內課堂學習。
有專門交作業和跑測試的網站:
Piazza:
計算機紙上談兵要不得。否則看公開課畢業的人不是早年薪百萬了=
嘗試把一切需要重複的工作自動化,模塊化,標準化。
樓主能問出這樣的問題,十足說明了樓主沒出過校門,缺乏職業性的一面。
樓上有個人回答的特別對,一看就是職業化特別好的工程師。github和模仿的那段說法。
我的觀點基本和他一樣,github,模仿,不過要補充幾點,
1、google ,不要baidu
2、養成寫博客的習慣
3、養成看英文博客,技術文檔,官網的習慣(這點尤其重要)
4、養成把心沉下來的習慣
為什麼知乎上這麼多求指路的問題……
這個每個人都不一樣,沒有什麼特別統一的方法論。真心的。這東西本來就沒個準兒,但中國人就特別喜歡問這類問題……我就權且操起「大神」的口吻訓話兩句好了……
首先調整好自己的心態,別看不起月工資兩三千的程序員。一切偉大的事情都往往有一個卑微的開始。做事情的時候把心思專註在事情本身上,別總擔心著前途和得失,多想想自己手頭的事情怎麼才能做得最好,才容易進步。
其次堅持多學東西,學了之後要動腦子想為什麼。要經常和書本辯論,經常和自己辯論。計算機是個很年輕的行當,很多流行的說法都缺乏時間考驗,未必有道理。有獨立思考能力和批判思維對提高進步速度、少走彎路很重要。
如果有比較正規的教育當然能有幫助,但國內的教育嘛……
所以基本還靠自己多練多寫。
哦,對,看書還是主要看外國人寫的吧。不是黑中國人,只是外國人寫的經常好懂一點。國內技術人員大部分不太注意組織文章,可能是受的文科訓練太少了。
送你一個說起來很簡單但練起來不太好練的招數:遇到不清楚的技術問題的時候別著急翻文檔或者上網搜或者問別人,而是自己去查源碼看它具體怎麼實現的(當然,是在源碼可查的情況下)。堅持逼自己這麼做,積累出來的調試能力和對代碼的見識和理解,可以甩開大部分程序員幾條街。
最後,若有一天牛逼了,注意別太得意總想炫技裝逼惹人討厭,忍著點自己的吹牛慾望。千里馬常有伯樂不常有。你身上最值錢的不是你掌握的技術,而是你對技術以及技術人員的眼光。代碼工程說到底往往是人的工程,不要因為情商不夠自掘墳墓。
新年快樂,恭喜發財哈。
--
啃書,呵呵……每天堅持跑一萬米還能減肥呢。學什麼做什麼都不重要,碼畜只是你步入社會活動中的一個切入點,關鍵是要學會自立自強,對自己對別人負責。
至於什麼是低級什麼是高級,那是你站在別人的角度,用別人的眼光觀察世界。那麼在我看來,你的疑問是對未來的不確定,你的問題不過是對未來的假設
對於目標是一個模糊的預期,尚不能確定的未來,然後再在假設的基礎上談避免,把假設實物化,這種行為,我稱之為焦慮
兄弟,我也是計科出身,我勸你大學多逃逃課,多玩玩dota,或者多談談戀愛,努力放鬆心態,要不然你工作後可能不會玩的那麼瘋狂,而且工作後妹子的數量和質量~~
也許你會覺得我是個逗比,我的回答很荒唐。不過我倒是覺得荒唐的人是你,你的未來在你的手中,你選擇看什麼書,做什麼工作,拿多少錢工資,那是你的事情,為此操心的應該是你,而我只負責逗你玩
程序員工作與做事一樣,一分耕耘一份收穫!同樣的問題或事情,你比別人多思考一些,多付出一些,你就離成功越近一些!思考問題多了,慢慢理解常見或熱門的思想,轉為自己的方式。一切軟體或互聯網的思維就為自己指明了方向!
作為行業初入者,建議是頭一兩年一定沉下心鑽進去,不要畢業拿了工資就開始享受生活,等你能夠獨立思考和學習的時候,結合自己的興趣,就方向明了了!待遇自然而然就上去了。
另外說一個題外話,沒事多關注下其它行業,程序本事只是一個載體,當它跟某些行業的實際業務或應用結合時,才能產生價值!
推薦閱讀:
※想要完全掌握金融工程需要哪些學科的哪些教材?
※是不是機器學習的框架都偏向 Python ?如果是,為什麼?
※有沒有一段代碼,讓你覺得人類的智慧也可以璀璨無比?
※深度學習方面的學術交流平台?