IT學生解惑真經(轉)
非生而知之者,孰能無惑?惑而不從師,其為惑也,終不解矣。
--------韓愈《師說》
在校的IT學生有幾百萬
都在為如何如何學習才能找到工作、融入社會而迷惑
我們需要的不是靈丹妙藥
而是一本讓你少走幾年彎路的
IT學生解惑真經
肖舸 楊中科 左飛 著
這是一部寫給在校計算機專業學生的書
如果沒有看到這本書
你可能會茫然無措的度過學習階段
把這本書推薦給你的同學
你會得到更多朋友
序
中國IT領域的發展速度之快令世界矚目,但是中國的計算機教育卻沒有能夠跟上。因此,在各大高校擴招的同時,IT培訓機構同樣發展的很快。
然而,學習IT的學生卻仍然面臨著其他專業不一樣的困惑。因為IT技術發展很快,而課程體系並不能很快跟上,因此學生在學校並不瞭解企業需要什麼,自己需要學習什麼。
正是在這種情況下,CSDN作為最大的IT技術社群,我們看到了IT學生所面臨的困惑。於是專門推出了學生大本營(http://student.csdn.net),邀請了上百位在企業一線的技術高手和專家,IT培訓機構的精英老師加入進來,針對IT學生所面臨的通用問題進行解答。這些老師是站在過來人的角度,耐心的分析現在的市場、同學的心理,以及面臨的機會和挑戰,更重要的是,每位老師都給出了具體的建議。只要認真的讀取這些老師的回信和總結,你總能從中獲得自己想要的答案。
韓愈的《師說》中寫道:“非生而知之者,孰能無惑?惑而不從師,其為惑也,終不解矣。”有了這些困惑並不可怕,可怕的是不知道如何尋找答案和解決問題的方法。
現在,就開始在這些老師的文章中尋找答案吧。
CSDN創始人 蔣濤
IT學生解惑真經
目 錄
l 大學計算機課程學習路線................................................ 2
如果你是一個計算機相關專業大學低年級學生,那麼這篇文章就是為你寫的。我之前曾經發過一篇博文《大學計算機專業那些課》來談論大學中各門課程的意義和重要性。那是針對更寬泛的範圍來說的,這篇文章則更加精要和簡約。
l 考研還是不考?............................................................. 5
有很多同學發出過這樣的疑問“到底應不應該考研?”,很多同學都被這樣的問題困擾著。“考研”這個詞圍繞在我們每個人周圍,學校海報欄中最大的廣告一定是考研培訓班的,學校書店裡賣的最火的書一定是考研的輔導書;同學們之間經常聊的也是“你考不考研,想考哪兒的研?”,彷彿不想考研就是沒追求的表現。
l 做什麼樣的軟體才能賺錢?學什麼樣的知識才能賺錢?... 14
我到學生大本營半年,發現大家都沒有討論過。那就是,做什麼最賺錢?無可否認,軟體可以實現各方面應用,不過,就我的觀察,在現實生活中,有兩種軟體最賺錢,一種是資料庫,一種就是嵌入式底層的東東,嗯,隨著網際網路的發展,目前做網路程式也很賺錢。
l 程式設計師如何踏上社會..................................................... 22
目前在學生大本營裡,我也觀察到,很多二本,三本的同學,在心裡上有種自卑感,總覺得考分低了,出來就低人一頭。這點,我是萬萬不贊同的。人一生是很複雜的,和鄧大爺一樣,三起三落不到頭,關鍵是,你現在準備做什麼?你能堅持多久?
l 職業生涯第一步----選擇你的城市................................... 27
目前,感覺很多同學,在雙選會簽約,工作地點的選擇上,有一定的盲目性。很少有人能主動地去選擇合適自己的城市,因此,這裡提出一點討論。一家之言哈,歡迎拍磚。
l 關於女生的程式設計師之路................................................. 33
目前大學裡面有句話:“幹得好不如嫁得好!”,我想大家都聽說過。其實是人就有惰性,也有一些劣根性,都想找一些活少拿錢多的工作,舒舒服服地賺錢,這種思想,其實不管男人女人都有。我自己也有,呵呵。關鍵是,社會是公平的,一分貢獻,一分收穫,哪有那麼多不勞而獲的事情。
l 如何找需求練技術........................................................ 37
被很多同學問,怎麼才能知道用人單位的需求。這個給個建議哈:去CSDN或者其他什麼網站的專案外包欄目看看,裡面的需求,就是別人肯付錢的需求,自己試著實現一下,比較練技術。如果能賣出去,就表示技術練差不多了,可以憑這個專案經驗找工作了。個人感覺,這個專案經驗在找工作的時候,有時候比學歷證照管用。
l 修煉程式設計的內功........................................................... 39
什麼叫程式設計的內功?我的理解,就是對這個世界的抽象化理解能力以及描述能力。一個工作,能迅速從中提煉出下次可以重複的套路,並且能以一定的規則,就是計算機語言規範,描述出來,擁有這兩個能力,就能保證遇到任何問題,都有辦法寫出程式來。所以,大家學校中學了很多數學,語言,演算法,資料結構,甚至編譯原理,作業系統,其實這些統統是工具,不是寫程式的目的。
l 7000塊錢能買什麼?--答一位同學的培訓問題............... 45
大家不妨捫心自問一下,學培訓班,是為了找工作,還是為了跟風,還是為了學到真本事?自己有沒有決心,讓這7k物有所值?如果大家能像這樣有割肉的感覺去學習,把自己往死裡逼,這7k就花的值得,該學,如果沒有這個勁頭,學了和沒學一碼事,建議還是省省吧,替你爸爸媽媽省點錢。
l 構建自己的不可替代性................................................. 49
我問過很多年輕的朋友,他們在找工作的時候,最看重什麼?答案很多啦,公司要夠大,薪水要夠高,要有足夠的挑戰性,要有成就感。。。等等,當然,也有一臉茫然的,那是還沒有想好的。其實後來我考慮了一下,這個話題可以換個方式問,就是大家為什麼需要找工作?其實人生活在社會上,公司裡,最關注的,還是安全感。
l 簡述C和C++的學習歷程............................................. 53
總是被同學們問到,如何學習C和C++才不茫然,才不是亂學,想了一下,這裡給出一個總的回覆。一家之言,歡迎拍磚哈。
l IT業的職業細分........................................................... 58
在大本營看到很多同學討論以後的出路,感覺到大家對IT業職業的細分還不是很瞭解,這裡就我的經驗,給大家一點參考,希望能幫到大家。一家之言哈,歡迎拍磚和補充。我在IT業很多年,也仔細分析過IT業的職業構成,就我的瞭解,其實IT業也在細分,大致分為如下幾種……
l 選擇技術還是選擇銷售?.............................................. 63
我看了你的信,你說大學沒有學習好,虛度了光陰,現在培訓班,覺得自己缺乏鑽研(注意,不是專研)精神,不想做技術了,想做業務,我根據你的文字,理解這個業務就是銷售工作。但是又覺得自己這麼多年在技術上投入過多,捨不得。
l 這麼多技術我該怎麼學................................................. 67
什麼都想學。恨不得把所有的知識統統都塞到肚子裡去。看到什麼,想學什麼!這是幾乎所有在校大學生的通病。但是,這不是壞事,甚至可以說是好事。說明了你“求知慾”高!總比那些,生活沒有激情,整天知道泡妞、上網、打遊戲、混日子的強。
l 金融危機下的職業思考----答一位同學的問題.................. 70
在你的問題中,你有一個大前提,就是金融危機,導致就業機會偏少,我個人認為,其實沒有必要這麼悲觀的。你的問題讓我想起了十年前,98年到2000年的經歷,估計你那時候還沒有考慮到就業問題,不過當時我可是身歷其中,現在想想,其實當時有很多想法也不是很正確。
l 簡述如何書寫工程化的簡單程式碼.................................... 74
在罈子裡混了這麼久,看了很多同學的程式碼,感覺到大家的程式碼,學校裡面的書生氣有點重,對於細節考慮不夠,有時候,感覺和吃了顆蒼蠅一樣,確實很不舒服。這裡根據我個人的經驗,給大家簡述一下,工程化程式碼,以及簡單程式碼,不容易出錯的程式碼的一些基本寫法。
附:作者簡介&編者後記 81
左飛老師
如果你是一個計算機相關專業大學低年級學生,那麼這篇文章就是為你寫的。
我之前曾經發過一篇博文《大學計算機專業那些課》來談論大學中各門課程的意義和重要性。那是針對更寬泛的範圍來說的,這篇文章則更加精要和簡約。因為這裡研究的僅僅是核心計算機課程,更重要的是,這裡要說的是這些課程之間的關係,以及它到底講得是些什麼東西。我想這些課程最終是要組成一個體系的。
請注意我這裡所說的是通常情況下的核心課程,每個學校在課程設定是可能是存在差異的,但總體上框架應該是不變的。
最開始的第一門課應該是“C語言程式設計”,這基本上屬於你日後一切學習的開始,簡單說這門課程的主要目的和內容就是介紹一種計算機語言的語法內容,至於怎麼學好它,之前的文章都談過了,這裡就不羅嗦了。
之後的課程會分為三條線,第一條線的第一門課程是“資料結構與演算法”。這很簡單,一些有了語言基礎之後,為了更好的使用語言去解決問題,就必須學習結構知識和演算法。至於怎麼學好它,之前的文章也談過了——請注意,如何學都不是本文的重點。本文的重點在於告訴你你將來都會學些什麼以及該學些什麼。
“資料結構與演算法”的後續課程是什麼?答案應該是《編譯原理》。很奇怪吧?課程就是這樣設計的,其實這個路線也不是我發明的,國外大學的CS Course的體系也是這麼設計的。編譯原理說白了就是介紹編譯器如何工作的,是讓計算機理解計算機語言的一種方法和理論。這個工作過程之中蘊含了大量的演算法,而且是非常複雜的演算法,很多人甚至認為編譯原理是計算機專業本科階段最難的一門課程。主要就是因為這裡面的演算法太複雜,當然也會用到很多結構,樹可能是用得最多的。當然,這就是相當於是資料結構與演算法課程的一個後續性課程,類似一道附加題。最近聽一個學生說有些學校本科已經取消這門課了,我想應該是較少一部分學校的做法吧。不過,中國的學習並不太重視這門課倒是真的。一般課程設定就是一個學期左右的課時。但是一般的國外學校這門課都要學上1年,甚至兩年之久。這條線路到編譯這裡就應該是終點了。
下面我們來談談大學計算機課程學習的第二條路線。
在你具有了一定C語言基礎之後,除了前面講的第一條路線以外,你已經可以開始下面這條路線的學習了。
為了更好地探究計算機系統的研究機制,在學習了C語言之後,下面一門需要學習的課程是“組合語言和微機介面技術”,這門課程包含兩部分的內容,一部分就是組合語言,彙編是一種更底層的語言(相對於C而言),說白了它就是一種“用助記符描述的機器語言”。很多人剛學彙編的時候都覺得很複雜,因為它跟硬體緊密相關,就是那些個暫存器也夠初學者糊塗一陣子的。這門課程的另外一部分內容是微機介面技術,目前國內高校這部分內容都是基於80X86系列晶片的。已經可以看到這門課其實涉及到了很多硬體的知識,其實還不止,關於I/O控制,暫存器,中斷,這門課裡都有體現的。
接下來要學習的內容就是《計算機組成原理與體系結構》。其實我特別奇怪,我在寫學習路線1(也就是前一篇文章)的時候,有讀者認為在學習C語言之前,或者在學習其他專業課程之前,最先要學的就是這個東西。我不知道大家是不是覺得大學第一門專業課就是這個,我覺得這麼想的人是不且實際,信口開河的。這門課程還是比較深的一門課程,在彙編和介面之後安排這門課程是比較的。不過國外的一些先進的計算機教育體系確實也有在較開始的時候開設一門概論課來作為導引,有時候叫Computer System Introduction,有時候叫Computer Culture,其實內容差不多,但作為計算機專業課程的導引課程,這些課程的設定裡面已經設計到組原和OS的初步內容了。但這和Computer Structrue & Architecture還是有區別的。
接下來的一門課程是《計算機作業系統》,如果外行聽起來可能覺得這個課應該是學如何使用作業系統的吧,就像“WindowsXP 速成”?非也!這門課程是講OS是如何設計的,或者說是如何實現一個OS(當然做要比說起來難多了)。之所以這門課程被安排在組原之後,那是因為這反映了一種自底向上的學習路線。作業系統當然是在計算機系統之上來搭建的。向排程啊、虛擬記憶體啊這些問題都是由作業系統來控制的。我最近所寫的《程式碼揭祕》基本上是屬於這條路線上的內容的,不同的是我採用了一種更貼合讀者理解方式的描述,因為在講述這些原理之前,我都是採用C語言例項來作為引子的。有空也推薦大家看看,應該學校裡的圖書館是可以借到的。前一陣子一位四川大學的計算機青年教師給我寫信談起我這本書時,我才知道高校的圖書館裡原理已經可以借到了。以上就是大學計算機課程學習的第2條路線,下面我們來講最後一條路線。
最後一條路線屬於應用型的,也就是說當你學完了基本的原理之後,一方面為了日後更好的工作,另一方面如果從事研究工作也可擇其一而繼續深入探究,那麼最好總之要上升到一定應用層面的東西。
在你有了一定的C基礎之後,學校可能會開一些物件導向程式設計方面的課程,可能是C++或者Java,因為物件導向的語言在實際開發中正廣泛的被使用。無論是C++還是Java,跟C來說本質上都是語言,只不過他們多了一些OOP方面的特性。如何學好它們,我前面的文章中已經談過,這裡就不多言了。
接下來的一門課程應該是“資料庫系統”,這門課不是教你怎麼使用SQL SERVER或者DB2的,學校裡的課程遠沒這麼前沿。資料庫系統這門課依然偏重更多理論,儘管資料庫相比於組原和OS來說已經是上層建築了。這門課講的多是些資料庫系統設計方面的原則,例如如何解決關係問題或者SQL語言等等。
再之後可能會學的課程是“計算機網路”,這門課裡會更加系統的向你介紹網路方面的知識,TCP、UDP,HTTP這些名詞會粉末登場。注意這門課一般不是教授你如何佈網的,例如如何配置路由器這種東西一般是CCNA裡面的內容了。這門課裡講的更多的是上層原理與協議。
以上就是一般的大學計算機課程學習的幾條路線。他們彼此聯絡,共同作用。注意我這裡講的內容不是給你推薦學習方向,而是告訴你大學裡會學什麼,之間聯絡如何。從之前的文章評論裡不難看出,有的同學好像根本沒理解文章的意思,說自己好像更適合哪條路線的樣子,其實適不適合哪條線的問題根本不存在,這些東西你都得學,既然學就要學好。本身就是一個體系的,怎麼能做瞎子摸象的事情呢?現在CSDN學生大本營搞得不錯,資源很多,訪問量很大,但也能客觀的看出瀏覽的人真的是分好多等的,有的是謙遜而好學的,有的則是蜻蜓點水的過客。浮躁之氣甚囂塵上,胸中無物自然談吐輕浮,看什麼都不求甚解,淺嘗輒止,多少有些自以為是、妄自尊大了。這也是我在此開博四個月餘來的感受吧。希望大家都能保持一顆平常心,戒驕戒躁,平和的埋頭學習吧。
學生評論:
陳俊強(C/C++學生) :
感謝老師抽空寫出這3條線路,我是一名大二的學生,之前在大一的時候參加過思科的CCNA培訓,真的那個時候很開心,能自己把實驗做出來,但是事後深深的思考後,我究竟懂得了什麼呀?難道我只會操作嗎?我深入的問一下那為什麼這個實驗能實現呢?深入到原理性的東西就發現不懂了。跟現在大多數人一下,我也在學習J2EE,但是我已經能從更高的高度去看待這個J2EE體系了,我要求達到的目標是:不僅是懂得操作,而且要懂得原理性的東西。真的,我越來越發現大本營的優點了。
曹秋枝(C/C++學生) :
受教了,很明確的路線。大學裡確實是應基礎為重,為應用奠定雄厚的基礎
河北科技師範學院 劉勤(C/C++學生) :
期待!這個問題從我開始學程式設計起一直在想,我想很多初學者都很需要老師們這樣的指點的...
楊中科老師
有很多同學發出過這樣的疑問“到底應不應該考研?”,很多同學都被這樣的問題困擾著。我今天在這裡向同學們統一解答一下,因為內容比較多,我是一邊寫一邊發表,因此這篇文章會分幾期貼在學生大本營。
“考研”這個詞圍繞在我們每個人周圍,學校海報欄中最大的廣告一定是考研培訓班的,不僅很霸道的貼滿所有區域,而且“野火燒不盡,春風吹又生”;學校書店裡賣的最火的書一定是考研的輔導書;每到臨近考研,學校裡的自習室、圖書館一定被考研的同學長期“佔座”;同學們之間經常聊的也是“你考不考研,想考哪兒的研?”,彷彿不想考研就是沒追求的表現。
到考研報名的時候每個班都有相當一部分同學報了名,問到選擇考研的原因,回答一般都是:“大家都考研”、“上大學就是為了上研究生”、“工作不好找,只能讀研爭取好的發展”、“讀研能找到更好的工作”、“想讀研進一步深造,研究專業知識”、“我一直成績很好,不讀研可惜了”、“我父母讓我考研”。
首先我對一些同學的誤解進行一一破解。
誤解一、“大家都考研,我也考”
“從眾心理”是大部分人的心理特點,就像葛優在廣告裡說的那樣“哪兒人多我去哪兒,我就是相信群眾”。在大街上大家都愛往扎堆兒的地方走;在火車站裡哪怕不知道哪兒是進站口,只要跟著大流走,一般都不會走錯;組織班級活動的時候,也經常選擇其他班級去過的地方玩兒。因為“跟著大夥走,一定不會有錯”。在很多情況下“哪兒人多我去哪兒”是非常合理的一種“選擇”方式,因為根據概率來講,大部分人選擇的道路有非常大的概率是正確的道路。好像根據這種說法,“大家都考研,我也就考研”是非常合理的一種想法,可是實際並非如此,因為考研和上邊舉的這些例子有太多的不同。
首先,目的性不一樣。逛街的時候大部分人的目的就是“看熱鬧”,人越多的地方肯定越熱鬧;在火車站裡,幾乎所有人的目標都是“進站”,因此跟著大家走也肯定沒錯;班級活動,大家的目的都是“玩兒好”,其他班級都選擇的地方肯定都挺好玩。可是考研卻不一樣,考研的目的是什麼呢?有人說是“考研成功讀研”,注意“讀研”只是過程,而不是目的,因為你不可能一輩子“讀研”,因此“讀研”的目的才是“考研”的目的。很顯然,不同的同學考研的目的是不一樣的:有的同學是為了考更高的學位,增光耀祖、顯耀門庭;有的同學是為了讀研、讀博,繼續深入學習專業知識;有的同學是為了逃避就業壓力,拿更高的文憑,找更好的工作;有的同學是為了跨專業考研,去學自己感興趣的專業;有的同學是為了能從普通大學考入名校,圓自己的“名校夢”。看似大家的共同目標都是“考研”,但是其實每個人都有自己不同的目標,如果沒有自己明確的目標就加入考研大軍的話,無疑是成為了“群體性盲動”大軍中的一員。
其次,選擇錯誤路線後的後果是不一樣的。大街上有利用大家的從眾心理專門找托兒撐場面的,如果被托兒吸引到這裡,卻發現沒什麼意思的話,大不了再去其他的地方;火車站中偶爾也會有臨時性的排程,你隨大流到了目的地以後卻發現,其實那些人是出站,大不了再走回頭路重新找進站口;選其他班級都選擇活動線路的後才發現其他班的同學太低階趣味了,不符合你們的喜好,大不了這次玩兒的不開心,沒有太大的損失。但是考研就不一樣了,考研失敗了的話,就業的黃金時間已經過去了,再找合適的工作非常難;即使考研成功了,上研以後才發現研究生生活不像自己想像的那樣,各種原因導致研究生畢業以後發展還不如那些沒上研的同學。一旦考研這條路選擇錯了,你是沒法走回頭路的。
從眾最大的好處是不用擔責任,不用擔心選錯了道路造成的後果,因為“大不了大家一起死” 。“死亡率”只是一個統計學上的概念,對於我們每個個體來說,死亡率只有0%和100%,因此在決定從眾之前,需要掂量一下是否這件事情是否“值得”。
在決定是否考研的問題上,千萬不能有“大家都考,我也考”的想法,考研還是不考研,都請“給我一個理由先!”,找到了理由,再往下看。
誤解二、“上大學就是為了上研究生”
很多同學從上大一開始就定下了考研的目標,理由很簡單“上小學的目的是上初中,上初中的目的是上高中,上高中的目的是上大學,上了大學當然要讀研了”,“我一直成績很好,不讀研可惜了”,在這些同學心中,人的前進就是不停的考,有一個網路上流傳很廣的笑話就很能反映這個現象:“學士上面是碩士,碩士上面是博士,博士上面是博士後,那博士後上面呢? 如果你夠勇敢再讀2年是勇士,再讀5年是壯士,再讀7年是烈士,烈士以後呢? 教育部會推出聖鬥士,讀滿2年是青銅聖鬥士,5年是白銀聖鬥士,7年是黃金聖鬥士。畢業以後願意再讀上去的女孩子有機會考出--雅典娜”。
如鵬網的朱老師講過一個真實的故事,他認識的一個人,學習非常厲害,上大學、考碩士、考博士,都是一路順風,畢業後又考過了司法考試(難度非常高的考試),能考得試都讓他考過了,然後發現自己“沒得可考”了,失去了奮鬥的目標。最後只好進入法院工作,發現自己無法適應實際的工作,找不到以前那種考試時春風得意的感覺,每天都要處理很多自己不願意處理的事情,最後竟然精神分裂進入了精神病院。
上大學的目標不只有“考研”這一條所謂的“出路”。按照嚴格的區分,研究生是為有志於從事本專業深層次理論知識鑽研而設定的,其培養的目的是“研究員”甚至“科學家”。但是,由於大學擴招、國家產業結果不合理等原因造成大學生就業率和就業質量嚴重下降,而“研究生擴招”則可以暫時“飲鴆止渴”性質的提升所謂的“就業率”,同時,有些人出於不同的目的也想利用“研究生擴招”大撈一把,因此他們利用在社會上、媒體上的話語權,大肆鼓吹“本科畢業以後還是考研好”,這更是使得很多同學認為“上大學就是為了上研究生”。
同學們可能已經看到了我在上邊給“出路”兩個字加了雙引號,的確,考研不是本科生的“出路”,因為“考研、讀研”只是過程,不是出路,除非你想一輩子考呀考,以死前考上“雅典娜研究生學位”為目標,否則一切過程的真正的目標都是“工作、賺錢、娶媳婦、生孩子、養二老、買房、買車、買油、買面……買墳”,你所做的一些事情都應該圍繞這個最終目標而進行規劃。
不要把“考研”當成唯一的出路,考慮自己的情況,考慮“工作、賺錢”這一終極目標,做出自己的決定。
誤解三、“現在工作不好找,只能讀研爭取好的發展”
這是相當一部分同學決定考研的理由,因為聽說畢業工作不好找,害怕“畢業即失業”,因此把希望寄託於通過讀研進一步提升自己的實力;有的同學則是到了大四才發現自己沒有工作所需要的本領,害怕面對找工作,“考上研究生就能多爭取兩三年學習時間,上了研一定好好學”。
現在的工作真那麼不好找嗎?就業機會真的那麼少嗎?別的專業我不敢妄加評論,看這篇文章的同學大部分都是可能畢業以後要從事IT相關工作的,根據我工作這些年接觸的來看,很多IT企業有“人才荒”的現象,也就是很多職位長期缺人,招不到人。有同學聽到這裡疑惑了“怎麼可能缺人呢?每年畢業這麼多學生?”,有一句話很傷人、也很找罵,但是我又不得不說“企業不是招要飯的,不是隨便招一個阿貓阿狗湊數就行;企業要招的是能幫它賺錢的能人”。
難道是企業裡對學生們的要求太高了嗎?來聽聽企業招聘人員的評論吧:
“招聘啟事發出去了,郵箱很快就被簡歷撐爆了,但是大部分簡歷都是隻有個人資訊、專業課程設定、從小學到大學的考學履歷,最後跟著一封熱情洋溢、廢話連篇,卻空無一物的求職信,好像這幾千份簡歷都像是一個人的簡歷一樣,沒有絲毫自己的特色。真不知道除了他滿足我們在招聘啟事中說的‘2010屆應屆生’以外還有什麼其他條件滿足。”
“一個學生來應聘網路管理員,我問他一臺計算機連不上網了,有可能有哪些問題,你會怎麼進行故障排除。那個同學竟然支支吾吾半天,一句完整的話都沒說出來,哪怕說一句‘可能是網線斷了’都行呀!”
“一個學生來應聘軟體工程師,我問讓他寫一個列印菱形的控制檯程式,這是C語言教材上前幾頁的最簡單的程式,竟然愣了半天一行程式碼都寫不出來,問他當時C語言考試是怎麼過的,他回答的很乾脆‘就那麼過的’!”
其實企業裡對應屆生要求並不高。比如對於軟體開發職位的學生來說,企業裡的要求就是“有程式設計的感覺、動手能力強、好學”,不需要你懂這個工具、那個工具,不需要你會這個語言、那個語言,不需要你懂這個框架、那個框架,只要“有程式設計的感覺、動手能力強、好學”,那些工具、語言、框架公司只要培訓一下就可以掌握,“有程式設計的感覺、動手能力強、好學”也不是隻有聰明的學生才能具備的品質,只要智商正常,平時多動手、多寫程式,成為“有程式設計的感覺、動手能力強、好學”一點都不困難。可是實際情況是,縱觀一個有50個學生的班級,有10個人對學習完全不感興趣,有10個人對本專業完全不感興趣,有10個人迷迷糊糊,有10個人只會死讀書,還有5個人今天學兩頁C語言、明天學兩頁Java、後天學兩招黑客技術,真正能踏實下心來多動手、多寫程式的能有兩三個就相當不錯了。
有一個笑話大家都聽說過: 有兩個人在森林裡散步,忽然出現了一隻大老虎,一個人忙伏下身去繫鞋帶。
另一個人問:“你係什麼鞋帶啊?你難道還能跑得過老虎嗎?”
這個人說:“我那能跑得過老虎啊。不過我只要跑的過你就行了!”
在班級裡學習成績名列前三名是比較困難的事情,但是成為被企業相中的兩三個人卻是非常輕鬆的事情,因為大部分人不會“多動手、多寫程式”,而你只要“多動手、多寫程式”就足夠了。有同學會問“我們班的同學都看了這篇文章,那豈不是他們都和我一起努力競爭了,我又沒有優勢了?”,同學們太高看我了,我沒那麼大的能量,我不比遊戲更能吸引同學,很多你的同學根本不會看到我這篇文章,哪怕有人看到也只會隨便瞄一眼,而能認真看完這篇文章的則又少之又少,認真看完這篇文章並且相信我講的這些道理並且長期堅持照著做的能多一個我就很欣慰了。
因此那些害怕工作不好找而想考研逃避的同學大可不必擔心,只要你能比身邊的同學多努力一小點兒,就可以很輕鬆達到企業對應屆生的要求。及時那些大一、大二、大三都玩兒過來的同學也不必擔心,踏實下心來,用剩下的半年到一年的時間集中強化一下自己,想搞程式設計的吃準自己最熟悉的語言多練、多寫,想搞網路管理的同學報一個思科培訓班苦練實際的技能,想搞嵌入式開發的同學弄個開發板把常用的嵌入式功能實現……,相信半年之後達到企業的要求輕而易舉。
如果你只是怕工作不好找而考研的同學到這裡就不用往下看了,關了這個網頁抓緊“繫鞋帶”去吧。
誤解四“我父母讓我考研”
現在有一些大學生讓人感覺很可憐,從小就被家長安排著,早餐吃什麼、買什麼衣服、放學了去哪兒玩、週末做什麼、上哪所小學、上哪所中學、學文科還是學理科、報哪所大學、考哪個專業……一切一切都聽父母的。
在我們小時候,父母在我們心中就是超人,什麼都懂、什麼都能幹,可是你在茁壯成長,父母卻在慢慢老去,總有一天在知識、閱歷、判斷力上會不如你。父母永遠是愛孩子的,做的一切的決定的初衷也是會孩子好的,可是有時候他們的好心會辦成壞事的。
我認識的一個在讀碩士的朋友說,他父母在規劃他未來的時候,說他家裡幾代人沒出一個“有文化”的人,希望他好好努力,能考多高就考多高,“碩士上完了,考博士,博士考完人考博士後,無論你考多高我和你媽都全力供你上學,我們們要增光耀祖!”,可憐天下父母心呀,希望孩子成為地位高的人,這樣以後就可以說“我們家孩子是博士後!”,他們連“博士後其實是找不到工作的博士,不是比博士更高的學位”這樣的事情都不知道,他們的安排我們怎麼能聽呢?
父母給了我們生命,供養我們長大、上學,是永遠值得我們去尊重和孝敬的,但是他們的想法並不總是對的,如果不自己分辨只是一味聽他們的話,早晚有一點會被他們的好心害慘的。
有一個很老的紀錄片叫做《狐狸的故事》,它講述了一個自然界的生存法則:一窩小狐狸出生了,在老狐狸的呵護下成長,小狐狸漸漸長大了,外形已經顯得跟父母一樣高大。老狐狸一朝突然變臉,驅趕小狐狸出門。被趕出家門的小狐狸好生可憐傷悲,不願離開,一次次回家門口,但是老狐狸不僅不讓小狐狸進門,反而以“瘋狂地嘶咬”的方式,生把小狐狸攆走。從此,小狐狸一個個無依無靠,形單影隻,在飢惡、天敵和獵人的脅迫下到處流浪。經過重重考驗,小狐狸終於獲得了在惡劣的條件下頑強的生存的能力。狐狸尚且懂得這個道理,那我們人呢?
有的家長是懂得這個道理的,從很小就培養孩子獨立做事、獨立思考的能力,家長不對孩子輕易做干涉,最大程度的尊重他們自己的意願,這樣環境中成長的孩子往往能成為社會中的強者。但是不幸的是,大部分的家長是不懂得這個道理的,只要他們還能動,就盡他們的一絲力為孩子創造條件、選擇道路、掃清障礙,慢慢的培養了一批離了父母就無所適從、沒有任何生存能力的孩子。
如果你的父母還在盡力為你做著決定,那麼請你很尊敬的告訴你的父母:“爸!媽!謝謝你從小到大為我做的一切。現在我長大了,我要學著自己做決定了。我會向著進步的方向前進的,不要擔心我。是不是考研我會自己決定的,我會認真考慮你們給予我的建議的。我會找到自己的路,無論做什麼決定,我都會做一個好孩子。我要成長為一個有能耐的孩子,然後有能力孝順你們,贍養你們!”。
無論是在是否考研這件事情上,還是在以後的其他事情上,把父母的建議當成一個朋友、一個長者的參考,然後最終自己決定吧!
誤解五“很多工作都要求碩士學歷,找工作的時候滿地都是碩士”
很多同學聽說過類似的傳言:現在找工作的時候大部分公司都要求碩士以上學歷,哪怕只要求本科學歷的門前也會有好多碩士生來求職,我們“小本”在他們面前沒有任何的自信,不讀研怎麼行。
“大部分公司都要求碩士以上學歷”這是明顯帶著偏見得出來的結論,很多同學看到如鵬網的“就業資訊”貼出的招聘資訊以後就感嘆“怎麼這些公司都要求碩士學歷呀!”,但是其實理性的統計一下,要求碩士以上學歷的職位不足10%。經過分析可以很容易的發現,要求碩士以上學習的公司或者職位一般都有如下的特點:國字頭、中字頭的單位,比如中國移動、國家電網、中國工商銀行;國家機關、事業單位,比如省公安廳、紅十字會;高校、科研機構。由於眾所周知而在這裡又不方便說明(害怕被河蟹)的原因,國字頭、中字頭、國家機關、事業單位中人才的浪費現象非常嚴重,招博士生去看大門的事情都是屢見不鮮的,但是這是事實,他們招聘的時候就要儘可能招高學歷的人,這樣才能達到他們的某些目的;高校、科研機構由於特殊的原因,招聘的人員也必須是高學歷的。如果想去國字頭、中字頭、國家機關、事業單位、高校、科研機構任職的話,必須有高學歷,否則哪怕你能力再強也沒用,沒有那張文憑一切都是白搭。
其實還有另外一些職位也是經常標明“碩士學歷”的,那就是一些公司的“研究院”,比如微軟亞洲研究院、IBM研究院等,這些職位通常都是進行一些前沿領域理論、技術的研究,由於大部分本科生的知識深度沒有達到這些職位的要求,因此這些公司要求碩士博士學歷也是非常合理的,同時這些職位中也一般都是被一些名校的碩士、博士佔據著。但是凡事無絕對,比如微軟亞洲研究院也不乏優秀的本專科學歷的人員。
除了這一小部分要求碩士以上學歷的職位以外,大部分職位都是隻要求本科或者專科學歷的,道理很簡單,企業招聘員工的目的是讓員工去幫著企業賺錢,因此本科還是碩士對於企業來說並不是重要,哪怕公司所有人都是博士,只要沒賺到錢,公司照樣倒閉。公司招聘一部分高學歷人士的的初衷也是希望他們幹一些其他人“很可能”幹不了的事情,僅此而已。只要你有能力,能給企業帶來收入,人家才不管你什麼學歷呢。
“要求本科學歷的門前也會有好多碩士生來求職”,這是事實,也是很多同學在招聘會上底氣不足的原因。道理也很簡單,為了提升本科生所謂的“就業率”、緩解就業壓力,研究生一再擴招,這批研究生畢業以後早晚還是要流入就業市場,因此就與當時畢業的本科生產生的撞車。有同學會說了:“我一個本科生和一堆研究生掙一個職位我肯定被淘汰呀”,這個擔心完全沒有必要。理由如下:首先,企業招聘的時候都會控制不同學歷人員的比例的,比如招聘20%的碩士生,招聘70%的本科生,招聘10%的專科生,因此不同學歷人員並沒有直接的競爭,和你競爭的還是那些本科生;其次,現在很多碩士畢業生的質量也大大下降,我面試過很多碩士畢業的人,問他做過什麼專案,最後支支吾吾說出來的是做碩士論文的所謂專案,而且明顯是抄別人的,問他計算機的一些基礎知識,竟然連“佇列和堆疊的區別”這樣簡單的問題都回答不出來,問了問他對讀研的感受,他說“我和很多我同學感覺都一樣,後悔讀研了”,聽了這些你還害怕和這些碩士生們競爭嗎?
因此,如果你是想去國字頭、中字頭、國家機關、事業單位、高校、科研機構熬日子的話,還是去考一個高學歷吧,而且還要把其他的方面也補足一下;如果你是想去國際性大公司的研究院工作的話,也儘可能的去考高一點的學歷,並且不要光有學歷,在研究能力、動手能力方面更要努力,這些公司是靠一分錢一分錢的賺活命的,你沒有能力給他們帶來符合你職位的收入的話,即使你成為“黃金聖鬥士”他們也不會要你。
誤解六、“研究生就業的起點更高”
聽到有同學說“研究生就業的起點更高,畢業後就能進入高一個層次的崗位,不用從基層還是熬。”這肯定是同學們臆想出來的,或者說是聽那些去國字頭、中字頭、國家機關、事業單位等單位的人說出來的。對於大部分企業來說,其實不同學歷人員的起點並沒有實質的差別。如果非要說差別的話,也是有的,那就是“基本工資”,每個公司都有自己的薪資架構標準,比如新入職本科生的基本工資是3500、新入職雙學士的基本工資是3800、新入職碩士生的基本工資是4000,一般新入職本科生和新入職碩士生的基本工資起點的差超不過1000元。為什麼企業裡會給新入職碩士生的基本工資高一點呢?決定一個員工工資的唯一標準就是這個員工對公司的貢獻度,雖然新員工通過了公司的筆試、面試,但是企業仍然無法分辨出不同員工對公司的貢獻度,只有實際工作中真刀真槍的實幹才能分辨出來,但是在入職定基本工資的時候必須對不同的人進行分別待遇,既然碩士生有實際經驗、學過更深入的知識,那麼就有更大的概率進行更高的貢獻,因此給他們稍微多一點的基本工資也是合理的,但是一個員工的工資不是固定不變的,通常入職後根據貢獻不同都會給予調薪的,這時候學歷就靠邊站了,誰貢獻大誰就拿錢多。
有同學說“不對呀,聽師兄說,和他一起進公司的碩士生工資漲的比他快呀!”,大家忽略了一個事實,那就是“年齡差”、“加速度”!這位和碩士生比較的本科生師兄年齡估計也比碩士生小三歲吧?碩士學習了三年,知識、經驗都會肯定比和他一起入職的本科生更高一些。因此不要和與你一起入職的研究生比,和那些比你晚三年進入公司的研究生比。就像下面的這張圖一樣:
黑色的線是新入職研究生的能力變化曲線,那麼你究竟是深紅色的線還是藍色的線則取決於你自己的努力了。
三年的研究生學習和三年在企業中實際工作的經驗也是不對等的,在學校裡讀研要學公共課、準備論文、搞烏七八糟的事情,其對人工作能力的鍛鍊絕對和在企業中真刀真槍乾的鍛鍊強度不一樣。因此那些想利用研究生階段積累工作經驗的同學也要仔細考慮一下了,是去企業裡積累三年的工作經驗(賺錢)更重要還是去讀研積累三年(花錢)更重要,每個人的價值觀不一樣,請根據自己的情況判斷。
有一些同學認為的“畢業後就能進入高一個層次的崗位,不用從基層還是熬”也是錯誤的,任何腦子正常的企業都不可能會讓你一個剛畢業的學生當領導,因為人家根本不瞭解你,怎麼能讓你當領導?任何人剛進入公司都要從基層幹起,然後根據不同人的能力才得到一步步的提升。
說了上面幾個誤解,還有一些同學們的關於考研的想法也需要梳理一下。
想法一“想讀研進一步深造,研究專業知識”
這樣的同學是中國未來的希望,中國在基礎理論方面太差了,需要這樣有抱負的同學。但是有這樣想法的同學一定要做好心理準備。在國內的很多大學裡,研究生每天做的工作已經不是“做研究”了,而是在“亂七八糟”。如果你問問很多讀碩士的同學,他們評價導師好壞的標準就是“是不是有活兒幹”,好的導師可以攬到很多專案,然後分給研究生幹,這些研究生都管導師叫“老闆”;壞的導師則是什麼專案也沒有,學生研一去老老實實上一年課,和在本科的時候一樣,研二上半年稀裡糊塗的,有門路的自己出去找兼職,沒門路的則像本科一樣繼續在宿舍裡魔獸、睡覺、上網,研二下半年就開始準備論文開題,開始了東抄西抄的生活,然後很快研究生三年就過去了,進來時候是0,出去還是0,唯一的區別就是多了一張碩士學位證和老了三歲。
因此如果你的夢想是“進一步深造,研究專業知識”,那麼在選學校、選導師的時候一定要多注意,最好選在這個領域有名的學校和導師,如果有可能的話能去美國等已開發國家留學最好,因為在很多領域特別是計算機領域這些國家都是處在前沿,而且他們的科研氣氛也更濃一些。
想法二“想通過讀研實現轉專業、進名校的願望”
有的同學由於高考時的種種原因,在本科期間沒有讀自己滿意的專業、大學,想通過跨專業或者跨校考研來圓自己的夢。
我的習慣還是先潑冷水:企業裡是招聘人去幫它賺錢的,因此專業、學校都不是他們關注的物件,根據我工作這麼多年的經驗來看,企業裡同事之間根本不知道彼此的專業、學校、學歷是什麼,甚至連領導都不清楚。無論是你決定考研還是直接就業,那麼都應該把提升個人實力作為首先考慮的因素。
如果你還是決定跨專業、跨學校考研的話,需要做好心理準備,首先導師對於跨專業、跨學校考研的人通常是有歧視的,因為考研錄取的時候導師有很大的自主性,因此經常會出現有些同學考試成績非常高,但是最後仍然落選的情況;其次有的企業裡也對跨專業、跨學校的碩士畢業生有一定的歧視,很多企業招聘裡都註明“要求本科和碩士期間的專業基本一致,本科期間院校必須是211院校”等。雖然這些都是一些軟性的門檻,只要有能力,這些都不是問題,但是同學們仍然必須做好比別人努力更多、受更多打擊的心理準備。
想法三:“不想找工作,考一考看,萬一考上呢”
有一部分同學是懷著“撞大運”的想法考研的,他們的想法就是“萬一能考上呢?就省得找工作了”,這些同學通常都是用“我準備考研,不去找工作”為理由逃避就業,但是平時不看書,連考研的輔導資料都是從圖書館借的,看兩頁就扔到一邊兒去了。用腦子想想看,那些每天都沒白天沒黑夜備考的同學都不一定能考上,這樣的大運怎麼可能讓你撞上呢?
每年研究生考試的時候都有相當數量的考生根本沒去參加考試或者考了一兩門就再也沒去考,理由很簡單,他們根本沒任何準備,怎麼可能考上?
因此那些只是“撞大運”、“借考研逃避就業”的同學還是醒醒吧,面對現實,想一想下一步該怎麼辦才是實際的事情。
想法四:“考研很難,一個名額有好幾十個人報考”
很多同學描述一個研究生名額難考的證據就是“有100個人報那個導師,那個導師只招10個”,其實還是我在這個系列的文章一開始提到的那樣大部分報名的同學都不努力,一部分是撞大運去了,一部分是自我約束力不強沒有認真備考,真正用心準備的沒有幾個人。高考和研究生考試的最大區別就是所有的同班同學都是參加高考的,大家有統一的目標、統一的時間點、統一的學習計劃,而研究生考試則不一樣,不是所有的同學都考、時間進度靠自己安排,因此能從始至終堅持下來,學習方法得到的人沒有幾個,因此只要你能堅持下來,並且學習方法得當的話考試取得好成績並不是非常困難。
想法五:“從大一開始就準備考研”
有一部分同學是從大一就開始準備考研的,大一就開始做考研題、看考研書,這可能是從高中帶過來的學習習慣,這也是很多人管大一叫做“高四”的原因。其實也完全沒有這個必要。在決定考研之前,先把假定自己不考研,然後自己給自己考研的理由,如果決定了考研再想後面的事情。剛才我說了,考研並沒有想像中的那麼難,沒必要這麼過早準備。如果你們學校有保研的機會,並且保研的專業、導師也比較滿意的話,只要把高數、英語等考研公共課以及主幹專業課學好,然後在期末考試中儘可能的拿到好成績、拿獎學金就可以,這樣能爭取到保送名額的機會的話就輕鬆了,可以利用剩下的一年大四的時間繼續充實自己,即使沒有保研成功的話,因為之前高數、英語以及主幹專業課等考研課程學的都不錯,只要花上半年複習一下考研成功的機率也是非常高的。剩下的時間還是要用來多動手、多參與實踐,如果自己在大學前三年把動手能力鍛鍊的很好了,那麼如果考研成功,你在導師眼中也是紅人(考研成功並不是最終的成功,如果在研究生期間是失敗的人的話你最終仍然是失敗的),也就贏得更多的機會;如果考研失敗,憑著自己很強的動手能力和紮實的專業知識、基礎知識,找到一份好工作也並不是很困難的事情。
無論是否考研,大學前三年都應該是以學好專業知識,提高自己動手能力為主。
說了這麼多,很多同學看到我很多時候都是在說研究生的壞話,“是不是因為楊中科老師沒有讀研,而吃不到葡萄說葡萄酸呢?”。說實話研究生教育本不應該像我說的那樣不好,但是這是現實。任何事情都有兩面性,我相信質量過關的研究生學習的利還是大於弊的,只不過現在很多同學被矇蔽了眼睛,只看到它好的一面,而沒有看到他壞的一面,我在這裡把壞的一面講出來,同學們自己根據這些進行判斷自己是否應該考研。
也許你認為我的這篇長達九頁的“解惑”系列文章是我在學生大本營、如鵬網裡發表的最沒意思的文章,因為這篇文章根本沒有告訴你是否應該考研。考研與其他事情不一樣,如果你問我是不是應該喝農藥,我肯定告訴你不應該,因為誰喝農藥誰都會死;如果你問我你中了一百萬,是不是應該去兌獎,我肯定告訴你應該去,因為誰不去誰是傻子。但是考研則不一樣,考研對不同的人、不同的環境有不同的取捨,你只能根據自己的情況進行選擇。我不可能給你答案,因為每個人都不一樣,如果非要一個答案的話,我建議你拋硬幣,正面朝上就考研,背面就不考,這樣你就不用選擇了,可是你願意把自己的命運交給硬幣嗎?
我這裡列出了考研的好處與壞處,請根據自己的情況來決定。很多同學害怕做決定、害怕自己選擇道路,因為習慣了家長為你選擇道路,但是大家要知道做選擇的權利是一個人最應該珍惜的權利,別人可以給你講不同的路的差異,但是不同的人走一條路會有不同的結果,最後走路的是你,究竟走哪條路沒有人可以代替你,希望大家珍惜選擇的機會,選擇好自己的路,然後勇往直前的走下去,不要停止!
The End!
學生評論:
鄧可(C/C++學生) :
長者的智慧。大家都想做的好一點,但是很多人都像這位同學一樣 “為什麼我老是靜不下心來專心做一件事呢”? 問別人是沒用的,關鍵在自己。
華東交大 李鵬(C/C++學生) :
我現在大一,看了這篇文章真是受益匪淺。我明白看了一個道理:只要你有才,不怕找不到工作!
重慶大學 史蘇明(3G/移動開發學生) :
以前還比較懵懂,不知道到底是考研還是工作,看了之後目標基本明朗了。謝謝指導。
學什麼樣的知識才能賺錢?
肖舸老師
這是發在我的郵箱裡面的一封信,這裡做個統一回答。一家之言,歡迎拍磚哈。
(原信篇幅過長,請大家到原帖去看)
我的回答:
這位同學你好,從這封信看得出來你的心情還是很急迫的,你這種心情我完全能夠理解。我把問題分幾點說,儘量說細一點,希望能對你有所幫助。
首先,你說你是09年畢業的大學生,那麼算下來,你應該上班才幾個月而已,就這一點,你能在新的單位幾個月時間就把工作拿上手,首先恭喜你,這說明你是真的很有實力,當年我轉行遊戲程式設計,用了差不多兩年才真正想清楚程式設計的真意,我覺得你比我強。呵呵。
你說Java基本上都是做B/S資料庫,覺得沒有意思,其實這個我也很理解,不過,我覺得你可能不是很瞭解實際情況。這裡我需要給你講清楚,其實不僅僅是Java程式設計師,只要到企業中做應用開發,或多或少都和資料庫沾點邊。當年我用VC還寫報表系統呢,你能說這不是資料庫?
其實有個問題可能大家都沒有關注到,至少,我到學生大本營半年,發現大家都沒有討論過。那就是,做什麼最賺錢?無可否認,軟體可以實現各方面應用,不過,就我的觀察,在現實生活中,有兩種軟體最賺錢,一種是資料庫,一種就是嵌入式底層的東東,嗯,隨著網際網路的發展,目前做網路程式也很賺錢。
其實原因很簡單,就是因為軟體的盜版問題。我想看到我這篇文章的每個人,或多或少都用過盜版軟體,包括我自己,呵呵,我們們中國人窮啊,動輒幾百上千的軟體費用,我們們買不起的,所以電腦城的光碟市場才這麼火爆。
但是,這帶來了另外一個問題,就是當有一天,我們自己成為軟體開發者的時候,才發現,盜版導致我們自己的收入降低,無法維繫生活。這時候,恐怕再來大聲疾呼,杜絕盜版,已經晚了,你說是不?
其實我們可能對市場不敏感,反正每個月發薪水,收入基本上旱澇保收,但是公司的老總們對這個很敏感,軟體賣不出錢,公司就虧本,虧多了,就垮掉了,最終程式設計師還是沒有收入。
因此,公司裡面做軟體,一般都做上面的軟體,即資料庫應用,嵌入式應用,控制類應用,網路服務應用較多。因為這幾種應用,不容易被盜版,能賣到錢。通用性的應用,比如作業系統,比如很多工具軟體,比如PC遊戲,其實很難賣錢的。
資料庫應用,一般資料庫本身是使用成熟的商用系統,如MySQL,SQL Server,Oracle等,我們小公司拿來,再根據具體應用需求,做二次定製開發,這是一大類市場,其實這個市場的真正名字叫做“企業資料應用定製市場”。由於是定製的,自然沒有通用性,也就不會有盜版了。
控制類,嵌入式類,很多都和具體硬體裝置相關,換個硬體平臺就不通用了,大家知道,中國的東東,要防盜版,最好和硬體相關,只要繫結硬體,軟體一般不好到,以前出的防病毒卡,漢卡什麼的,其實利用的就是這個市場規律。
服務應用呢,就更好說了,由於主要程式邏輯都在伺服器端,基於B/S的模型,客戶端連個軟體都沒有,伺服器的管理自然比賣出去的軟體好管理,不容易盜版。因此,這類企業也活得長,比如各個網站,各種網遊什麼的。所以我一直覺得,以後雲端計算髮展起來後,很多軟體可能會把零售制改為租用制,比如photoshop,大家買套軟體幾千,但一般人就是處理一下自家照片,自然不划算,因此盜版很多,但以後假如軟體公司把它做成伺服器版,大家把照片上傳,處理,最後再存回來,這個過程每次租金1毛錢,每個人都花得起的話,我看以後就沒那麼多盜版了。另外,伺服器應用其實大多數也是資料庫應用。
所以,我首先要說,不管你是不是換工作,以後你恐怕會一直遇到資料庫類的應用,不管你喜歡不喜歡,但這是社會的現實,你必須承認。你說對吧?
在這個共識下,我們再來看,其實我們會發現,三大主流應用中,只有嵌入式不適合Java,其他的資料庫和伺服器應用,其實Java比C和C++方便得多,因此,我建議你就在Java這條路上走下去,不一定非要轉C和C++。本來你的強項就是Java,而且這也是主流的可以賣錢的市場,為啥不堅持呢?
從另外一個角度說,我也認為你應該堅持,你畢竟畢業不到半年,對社會,對公司,對本職工作其實瞭解並不深入,你認為Java就那麼幾個設計模式,沒有挑戰性,這個我能理解,但是,我覺得你說的不全面。起碼我做程式做了這麼多年,到底有多少種設計模式,我也說不清楚,我相信很多人都說不清楚。需要具體應用具體分析。
我不是Java程式設計師,不過我覺得,如果要做一個合格的程式設計師,首先不應該是程式設計的大師,而應該是理解客戶需求,並迅速拿出解決方案的專家,這個,不管用什麼語言,不管在哪裡工作,都是必須的,同時,這也需要很長時間的積累。
準確的講,我認為,一個人不在一門語言,一種業務領域努力3年、5年乃至10年,是很難成為專家的。因此,我建議你完全沒有必要這山望著那山高,輕易就決定跳槽,建議你就這個環境,先鍛鍊自己,我這裡放句話,你可以試著驗證一下,兩三年以後,你再看Java語言和資料庫開發,都還是會找到自己不會,值得學習和鑽研的東西的。因為最起碼,客戶的需求是千變萬化,永無止境的。
當然,話分兩說,如果你真的喜歡C,很想做嵌入式應用,就是不想做Java,那也無可厚非,因為畢竟每個人都有選擇的權利。
不過,我仍然不建議你辭職回家學習。我以前有句話,大學畢業,才是學習的開始,不過,這個大學畢業後的學習,和學校中的學習,有很大差別,突出的幾點:沒有老師,沒有教材,都是自己主動學,針對自己的需求來學習,學技巧多,學原理少,並且一般都是幹中學,而不是學完了再幹,我總結就是“用以致學”,而不是“學以致用”,這是我總結的學習經驗。
同時,畢業了,總不好意思再向家裡面父母要錢,總得自己賺錢養活自己。你說是吧?你說辭職半年,專心學習,那你沒有收入吃啥?還不是吃父母的?這樣不是很好。
C語言沒有那麼神聖的,也沒有太高的門檻的,不要想太複雜了。另外,指標,記憶體什麼的,學習C語言確實能接觸到,但是,我還是要說,C語言並不是因為有了指標和記憶體的直接訪問,才牛叉,C語言是因為大量的程式設計師用它解決了很多具體應用,才牛叉的。請你注意不要學偏了,不要為學指標而學指標。指標就是指標,僅僅是個訪問工具而已,不是用來顯得很酷的,需要了才用它。
Java語言用個陣列,其實也能模擬指標的大部分功能的。其實我作為C程式設計師,我們平時工作時對指標是很謹慎的,能不用都不用,儘量用引用來代替,為啥,因為危險,容易出錯。
資料結構,計算機組成原理,演算法語言,編譯原理,嗯,還有個圖論,這幾門應該算最經典的計算機理論了,但是,也沒那麼神祕的,書店裡面有,自己沒事買幾本回來看看就好了,生活是沒有考試的,不需要你必須考夠100分才能找到工作,瞭解,理解就好了,背書是背不出好程式設計師的。你說對吧?
其實這幾門,不用C和C++語言,用Java語言一樣可以學習的。嗯,編譯原理可能夠嗆,需要理解一點C。
另外,我再給你透露一點點,其實真正實際應用中,我們對於上述基礎知識用得很少,用得最多的,其實就是資料結構裡面的佇列了,其他,包括棧都很少用,C程式設計師也不是每天都從底層,從0做起的,還是有很多工具套用的。這和Java語言從框架開發是一個道理。
反而有一門課程建議你好好學,就是概率和統計學,這門知識是我現在應用最多的,很多時候,我們評估軟體系統效能,瓶頸優化,都是在用這個學問。程式設計師做久了,可能大多數時候都是和這個在打交道,建議買本好好看。
總結一下吧,建議你目前暫時不要辭職,既然選擇了Java和資料庫應用開發,選擇了B/S模型,你耐心做3年再看,也許3年後,你自己的想法就變了。
C可以學,你說的課程都可以學,不過,不要辭職專門學,先賺錢養活自己,再利用時間學習,你這麼大的決心,每天晚上就不要看電視了,那你每天晚上,19:00~24:00,至少有5個小時來學習,利用好了,我敢說比你在大學裡面效率高。
看書學習不是什麼神祕,神聖的事情的,也不需要什麼齋戒沐浴,念幾天經才能學習,我覺得就和我們吃飯喝水一樣,隨時都可以學的,找幾本書,就在床頭放著,每天晚上看看,幾個月也就看完了,又有多難嘛?
關鍵是,養成習慣。
你說對不?呵呵,先說到這裡,有問題再問哈。
最後補充一點,如果學習C,並且有一定基礎的話,等我書出來看看吧,裡面的跨平臺開發工程庫,可以幫助你迅速掌握嵌入式底層的一些技巧。不過,要有基礎哈,一點不會C看不明白的。
(該位同學繼續來信諮詢並表示了決心,原信過長,這裡不轉貼了,請大家到原帖來看吧)
我的回覆:
這位同學你好,我昨天其實已經說明了我的一個觀點,雖然我建議你繼續努力學習Java,不過,每個人都有選擇的自由,因此,如果你還是堅持要學習C的話,我也不反對。
你在兩封信裡面,都強調你原來是個差生,但最後半年知道發奮學習,最終過五關斬六將,成功拿到offer,超過了很多同學,也讓老師的眼鏡掉了一地,呵呵,我真心恭喜你,也很佩服你。
其實我以前有筆記說過,人要發奮,什麼時候都不晚,蘇東坡的爸爸是這樣,小時候我們學的《周處除三害》也是將這個道理的。你能把計算機裡面200G的遊戲和電影刪掉,換成學習資料,嗯,了不起,比我強。
不過,如果我們要討論C的學習路徑,恐怕要讓你失望了。因為C和Java語言並不一樣。並沒有前人規劃好的必然成功之路。
Java語言由於面向應用面相對狹窄,框架模板眾多,最重要的,其主要工作方向比較確定,就是做基於網路的跨平臺資料應用為主,因此,其發展方向很容易確定,學習路線也比較好規劃。
但C顯然不是這樣,C應用面太廣,可以說,彙編能做的事情,C就能做,甚至做得更好,也就是說,我們能想出來的計算機軟體應用,其實都可以由C來實現,僅僅是成本高低而已。
而不同的應用,除了計算機軟體程式設計知識之外,還需要很多應用相關的知識,這就造成了C程式設計師往往也需要成為自己應用方向上的半個專家,這就比較麻煩了,這麼多的應用方向,寫遊戲的知識儲備,和寫驅動顯然不一樣,與寫作業系統和編譯器的方向又顯然不一樣,因此,很難說一個C程式設計師需要掌握哪些知識,才夠用。
以我自己為例子,我做程式差不多快20年了,做C也超過15年,做過遊戲,工業控制,電子教育,網路傳輸等各種軟體,我總結自己的知識儲備,也僅僅覺得自己在資料傳輸方面有一點心得,並且對於C和C++語言怎麼實現0Bug程式設計,有點經驗而已,真不敢說自己什麼都會。
另外,C語言之所以難學,並不是說它自己多難,真正的問題在於,C語言偏底層,只要我們一做應用程式,或多或少都需要呼叫很多作業系統相關的api來完成工作,Windows下,如果我們不懂Win32API,則很難寫出合用的程式碼,C語言玩得再熟都不行,Linux下對於各種系統和應用級api,也需要不斷查詢man,否則根本寫不下去。所以,要想成為C程式設計師,至少要學習作業系統,通常,至少應該把Windows和Linux常見的api學一遍。MFC是Win32API的C++框架表示,最好也學一點。
其實這已經帶出另外一個話題,現代開發,C和C++一般不分,C++到了函式內部,其實是C,而C呢,有很多特性寫程式不夠方便,也需要使用很多C++的特性,如預設引數,如引用等等。所以,學習C,最好和C++套著學,都看看。呵呵,這已經是兩門語言了。
還有一個問題,不管是C還是C++,總是各個具體的作業系統上開發,Windows和Linux有差異性,很多庫函式,常量定義都不一樣,因此,C和C++一般說來,很難做到程式通用,需要使用大量的編譯巨集,這需要了解語言之外的東西,即編譯器的很多特性,不過,很可惜,關於編譯器特性,目前的資料很少,我很多都是摸索的。
另外,現代的作業系統,都是多工作業系統,多工開發是個難點,這個多工計算其實就是平行計算了,必須對程式,子程式,執行緒有很清楚的認識,對於時間片有清醒的認識,對於鎖的使用,鎖的作用域,去鎖優化要很熟悉。但是,也很可惜,目前市面上的書籍,講語言的就講語言,講作業系統的就講作業系統,對於這個多工開發這塊,同時需要結合語言和作業系統兩方面知識的,幾乎沒有,需要自己摸索。其實我寫《0 Bug ---- C/C++商用工程之道》,有很大一部分目的,就是希望填補這個空缺的。即從語言和作業系統中,抽象出來,站在更高的角度,從較為巨集觀的立場探討平行計算程式的開發之道。所以我說如果你要學C,等我書出來最好看看。
嗯,還有一個很重要的問題,C語言的基本庫相對薄弱,很多近年發展的高階語言,對於雜湊,List,佇列,棧,樹等常見資料結構都提供標準庫函式,或者庫模組來支援,但C一般是沒有的,偏偏實際應用開發還經常用到,得自己找開源,或者程式設計師自己寫,這也會耽誤程式設計師很大一部分精力。
這裡就出現了C語言一個不好不壞的特性,或者說既好也壞,C語言沒提供這些工具,程式設計師自己寫,很麻煩,但是,由於是自己寫的,自己掌握所有底層程式碼,因此,優化變得很容易,一個佇列,我隨手加個隊尾指標做加速因子,可以規避大量的遞迴操作,效率提升百倍甚至千倍以上,這在C裡面就是加幾行程式碼而已,但是對於Java等語言,由於底層庫是廠商提供,甚至根本就不是本語言開發的(很多高階語言底層庫其實是C和C++寫的),程式設計師一般沒有修改能力,有時候,遇到效能瓶頸,大家就只有幹看著,沒有任何辦法。因此,同樣的應用,C語言可能一臺伺服器就夠,但是Java語言呢,可能需要3~5臺,就是因為這些語言做的太完善,而太完善的東西,一般不好做優化,效能就不及經過專項優化的C程式碼。
就是因為這個原因,在很多嵌入式等小終端場合,由於CPU計算能力有限,需要使用C來做優化,而不能使用Java等高階指令碼語言,否則程式跑不過烏龜。
另外,現代的資料應用,出於優化起見,一般趨於功能細分的設計模型。比如一個資料庫應用,儲存模組專門負責高速出庫和入庫,中間甚至新增cache機制作專業的優化,而業務模組則強調設計一套嵌入式指令碼語言做二次開發,保持最大的業務開發靈活性。其實Java,PHP,很多都是這種模型,MySQL底層模組實現高速儲存,上層則使用apache和PHP、Java等語言,靈活二次開發具體應用。
但是,C由於一般都是編譯執行,不是解釋執行,一般很難做到這麼大的靈活度,不能使用者僅僅加個欄位,就跑過去把整個伺服器重新改寫編譯一遍,這樣維護成本太高了。因此,C程式設計師的解決方案,一般是自己實現底層的高速資料應用,再自己寫個指令碼語言的直譯器,提供給使用者做二次開發。
你發現什麼沒有,其實C程式設計師如果做企業資料應用,一般需要具有編譯原理的知識,我們一方面要實現使用者的業務,還需要寫一套Java這類指令碼語言給使用者做二次開發用,說白了,就是我們自己實現一套lamp體系,呵呵,這不是又費馬達又費電嘛,因此,我前文說,做資料庫應用,最好直接用Java,直接用C,成本太高,而且不容易滿足使用者需求。
說到這裡,你又發現什麼沒有?C語言之所以難學,並不是C本身難學,而是如果要成為一個C程式設計師達到實用級的地步,需要掌握很多方面的知識,這些知識,書上可能有,也可能沒有,沒有的,就要靠鑽研,靠實戰,靠自己去想通,因此,很難通過K書成為C程式高手的。建議你學習時,關注C這個特點。
不過好在你強調做遊戲和嵌入式兩種,這兩種呢,我可以根據經驗講一點:
如果從事遊戲的話,很多時候是和圖形打交道,目前的遊戲,趨向是大型化的視訊圖形遊戲(包括大型網路遊戲、電視遊戲機的遊戲)和小型化的終端遊戲(手機類、PDA遊戲),這兩種比較好賣,至於中型規模的PC遊戲,由於盜版太嚴重,已經很少人做了。僅僅是一些遊戲公司為了宣傳自己,會出一些經典的大作。
嗯,硬體廠商為了宣傳自己的新板卡,如新的圖形顯示卡,會拿出錢來,請遊戲公司做一些針對該型板卡特定優化過的遊戲,以刺激廣大使用者對硬體升級換代,這也是一條財路,很多遊戲,在面市之前,就已經從硬體廠商獲得了足夠的利潤,並不需要從零售市場獲取利潤。我們在電腦市場看到,幾乎每出現一款遊戲大作,就帶來一次顯示卡,甚至PC機硬體的升級換代熱潮,其實背後就是這個故事。
不過呢,遊戲引擎我還是建議你最好不要去做,因為做這個成本太高了,很少有公司去做,而這些公司,一般都是歐美公司,對人員要求很高,輕易不會招收亞洲國家的程式設計師,因此,學這個好比屠龍之技,看起來是很酷,但是實際上工作機會很少,甚至不比中彩票來得高。
另外,做遊戲引擎不好玩的,因為現在也都細分了,做引擎的公司一般自己不出遊戲,最多出點Demo,他們就是提供高效能引擎,而不是好玩的遊戲,而遊戲公司,則是購買引擎,然後開發具體的遊戲內容。比如Quake和虛幻的引擎,就很多家遊戲公司買去做自己的遊戲。其實很多遊戲引擎,目前也提供指令碼語言,即裡面用C實現了另外一套語言。
遊戲公司其實主要是美工建模,繪圖,企劃編故事情節,程式設計師反而很少,更多地是使用指令碼語言,在引擎基礎上做二次開發而已。因為遊戲公司就是做好玩的遊戲,至於具體用什麼技術,其實他並不是很關心。說不定,如果你哪天進個遊戲公司,會發現自己又見到Java語言這個熟人,呵呵,那個時侯會不會有欲哭無淚的感覺?
其實這也是社會分工的不同,好的引擎程式設計師,更多的是個數學家,強調邏輯思維,你讓他去寫個美少女夢工廠,如何抓住少女的心,還不如殺了他,呵呵。
而做嵌入式系統,其實也有訣竅。嵌入式系統,目前我們看到的手機應用僅僅是很小很小的一類,更多地,嵌入式系統是應用到工業控制領域,從大型機械裝置的控制,飛機、汽車輪船的控制系統,甚至到十字路口一個紅綠燈,裡面都是嵌入式系統。
目前有個現象,嵌入式好賺錢,很多學軟體的同學都想找嵌入式工作,但是,畢竟在這個領域裡面,給手機做遊戲的就那麼幾家公司,不可能吞下所有的人才,更多的是需要自動化控制人才,因此,這類軟體轉嵌入式的人,進去一般都有點縛手縛腳的感覺,總覺得知識上欠一點,又不好補。
其實,嵌入式應該是最簡單的,比如說驅動,就很多硬體廠商要人,而驅動其實就是做一套打口讀口的api,很簡單,最多做的時候注意點,別用太複雜的演算法,保證計算速度而已。
但是你注意到沒有,嵌入式其實主要是和硬體打交道,硬體知識必不可少,至少,計算機組成原理,數位電路,類比電路要很熟,最起碼,你要知道開關量和模擬量,要知道積體電路的選通訊號和真值表,對於地址表的編址要很敏感,對於常用的積體電路塊的特性,比如8235等,要比較瞭解。否則,是寫不好嵌入式程式的。
因此,我以前有筆記說,嵌入式開發,很多時候軟硬體不分,我見過的很多嵌入式工程師,其實也能自己畫一些簡單的電路板,至少,他在設計時,知道哪些功能硬體來做更合適,而不是一味的走軟體路子。
不過,嵌入式學習要錢,這是肯定的,最起碼,你自己手邊要有個基本的嵌入式平臺,不過好在這個並不貴,一個arm9的開發板,目前也就500多元,淘寶上就有賣的,買塊回來自己做練習,應該不難。
如果要我給你職業路線建議,我還真想建議你就走這條路子,原因很簡單,工作好找,進去之後的門檻並不高。你花點時間,自己鑽一下數位電路等前面說的幾本書,對於底層的彙編看看,主要看看arm的和51系列的就好了,也不用看太精,嵌入式程式大段大段的都還是C,僅僅部分埠動作,為了協調時序,採用用到彙編,而且,用得最多的還是NOP指令,就是強制CPU延時,這個很容易的。
最關鍵的是,嵌入式裝置在很多工業裝置製造公司都有用到,他們也需要大量的人才,並且,我們都知道,公司裡面,普遍學歷最高,年齡最低,門檻也最高的就是IT軟體企業,這些工礦製造企業反而門檻比較低,進去之後,老闆也比較看重人才,因為製造業的產品一般立竿見影,開發一套裝置半年就開賣,不像軟體,一般要開發到3.0版才有市場,呵呵,老闆看得到錢,自然也比較看重賺錢的人的。
雖然你是軟體人員,上述硬體知識沒有學過,不過就我學習的經驗,其實反而門檻還低,甚至比學個Java的框架來得還容易,建議你可以考慮從這條路上走。
嗯,先說到這裡吧。有問題繼續探討。
最後我還是要勸你一點,生活不是PK,生活也不是孤注一擲,沒必要什麼時候都把自己逼到絕境,想成功其實很容易,只要制定一個目標,一個計劃,然後按部就班走就好了,不需要找錐子扎自己屁股的,那是自殘,呵呵。
自然一點,看開一點,少給自己太大壓力,看書累了,看看電視也沒啥,出去走走也沒啥,沒事的時候,眼睛從計算機螢幕上轉一下,看看身邊有沒有合適的女孩,談談朋友也不錯,如果那個錯過了,才是一輩子的遺憾。
成功的道路,應該是很快樂的,如果都是眼淚和汗水,即使做到百萬富翁,又有什麼意思?
你說呢?
學生評論:
成功學院Gwolf-Team sky_water(Net愛好者):
很喜歡這句話:
C不是因為直接操作記憶體才牛才,是因為他解決了好多問題才牛叉
我想任何語言都是
猶如在戰場上能殺敵的兵才是好兵
廣東工業大學 cch(Java學生) :
受教了,“關鍵是,養成習慣”,能舉的我都舉起來贊成
孫建(C/C++學生) :
肖老師出品,一定要看,自己在也C/C++語言中迷茫,基礎已經看完,就是不知道後面怎麼走,這下,又知道應該做什麼了!瞭解WIN32API函式,呵呵,還有別的,
四川大學錦江學院 黃啟銀(Java學生) :
肖老師 我真的很感謝你 你讓我明白了我以前不知道學模電 到底以後能幹什麼呢 現在我應該好好學習模電了哦
合肥師範學院 董海(C/C++學生) 2009-10-19 17:50
每個字的讀 我對以後的方向一直很迷惑 看來我有方向了
湖南大學 馮本明(Java學生) 2009-10-23 21:56
旁邊的師兄還在說他們去面試公司10家只有一家找java程式設計師,看了你的講解後,我覺得還是要堅持自己的想法,無論什麼行業,做精了,都是專家,牛人。
福建工程學院軟體學院 四維(Java學生) 2009-11-05 11:02
一字一句的看完了,心情很不一樣!
相比之下我是剛踏入大學一年的學生,路還很長,卻沒有動力和毅力!
謝謝你的分享
江西財經 彭文忠(C/C++學生) 2009-11-21 17:17
第一:真很佩服這個學生,他的經歷讓我知道要好好珍惜大學這剩下的三年啊
大一我也混了一年,還好覺悟的還早現在還有信心學好;
第二:肖老師的回覆讓我學到了很多東西啊,讓我明白原來要學好C++就必須學
好那些我薄弱的課;同時也讓我更加清楚了C/C++是一門怎樣的語言,處於什麼
地位;謝謝肖老師
肖舸老師
這是發到郵箱裡面的一封信件,個人覺得比較有代表性,特地在此公開作答。還是那句話,一家之言哈,歡迎拍磚!
原文:
老師好!我是河南較好的一個二本大學學生,資訊與計算科學專業,開設的課程大多是數學和訊號,計算機的只學了C和C++,以後還有作業系統、資料結構和資料庫等課程,我們專業就業形勢不好,我不準備考研,想畢業後從事計算機方面的工作,例如做軟體程式設計,可是學校開的相關課程就我說的那幾個,所以我只能平時自學。我發現程式設計是個大學科,光語言就十來種,我在學C++可是人家說學C++得三五年才能學成,我現在都快大三了,畢業時C++水平肯定很菜,今天又XX培訓機構的老師聊天,他說現在企業用JAVA和.net的多,他們都不開設C/C++的課。我現在真的迷茫了,我是繼續學C++還是改學其它的呢?我只想畢業時能找個工作,以後去深圳慢慢發展。我該怎麼辦?請老師指點一下啊,不盛感激!
我的回答:
這個問題相對比較複雜,也很寬泛,很難簡單回答,我這裡,也僅僅就個人的一點認識,談談看法。
目前在學生大本營裡,我也觀察到,很多二本,三本的同學,在心裡上有種自卑感,總覺得考分低了,出來就低人一頭。這點,我是萬萬不贊同的。很多時候,我對小弟講,我相信你們的老師,師兄,師姐,前輩,都有講過:“大學畢業,僅僅是開始,不是結束。”
中國的社會,越來越商業化,其實商業化有一個好處,就是這個社會給每個人的機會,總的來說還是越來越公平。這個問題分怎麼看,名校畢業,高官子弟,億萬富豪的孩子,總會比我們站在更高的一個起跑線上,這是事實,但是,也僅僅是起跑線而已。在社會上,也有太多的故事,從一個窮家子弟,經過努力奮鬥,最後成功的事實,因此,首先我覺得大家不必氣餒,萬事有拼才會贏,只要敢拼敢做,沒什麼大不了的。
肖老師自己的學歷就不高的,經過這麼多年奮鬥,也取得了一點成績,這裡就不多說了,總之,請大家記住,這個世界,還是相對比較公平的,只要肯努力,就會有回報。反過來說,當我們認為社會不公的時候,不妨問問自己,自己盡到自己最大努力沒有?
第二個問題,關於學校裡面開設的課程,大家可能會覺得不夠時髦,不夠酷。淨是一些計算機組成原理,資料結構等老掉牙的課程,遠沒有什麼spring框架來得過癮。呵呵,不過根據我的經驗,工作幾年以後,大家可能會覺得,最值錢的,恰恰是這些最土氣的課程。用框架,永遠不算本事,也沒有什麼核心競爭力的,哪天框架死了,你就死了。會做框架,才叫本事,才叫公司裡面的骨幹人才,才可能成為架構師。而另一方面,框架也是人做的,大家以為,做框架需要哪些知識?是不是上述old的知識?
因此,我的建議,大家好好學好自己的課程,在這幾門課上,清華的老師,比起你們的老師,未必有優勢,因為這些知識太經典了,也沒有給老師什麼推陳出新的發揮餘地,學這幾門課,大家和清華的學子,是站在同一個起跑線上的。
第三個問題,學習C和C++的問題,大家不用想,我的經驗,別說這兩門相對複雜點的語言,就算是Java,PHP等語言,沒有指標的干擾,要想學精學透,沒有3到5年、5到10年的刻苦,也是不行的,大學畢業就想做大師,不太可能的。因此,建議大家不必妄自菲薄,你做不到,別人也做不到,大家還是一個起跑線,關鍵看,以後工作中,能不能紮下來潛心研究,仔細揣摩,不斷增長自己的經驗值。
第四個問題,關於培訓機構不培訓C和C++的問題,我也很好奇,好像是有這麼回事。我曾經研究了一下,認為原因是這樣的:
培訓機構也是商業公司,主要目的是賺錢。對他們來說,賺錢有兩個重點,第一是短平快,要短期出成果,讓學生和家長有看得見的進步,給客戶以信心,好讓客戶買單。第二則是成本夠低,在同樣營業收入的情況下,培訓時間越短,請的老師價格越低,老師的溝通成本越低,培訓機構的利潤越大,因為企業做生意,核心問題是利潤,即他真正賺到手的那部分錢。
這就很好理解了,無論從哪個方面理解,C和C++都不是最佳的選擇。大家可能沒有講課的經驗,但是我本人有一點。我講課時,發現最難和同學們溝通的細節就是指標,翻過來揉過去說,幾個小時下來,就是有人搞不懂指標,至於指向指標的指標,就更暈了。更不要說C中的函式指標,C++中的物件指標,泛型設計等複雜概念,反之,Java,.net都有比較成熟的應用程式框架,同學們可以快速搭建一些立竿見影的應用,因此,從短平快角度,從利潤最大化角度,C和C++都不是最好的教學語言。
如果我開培訓公司,我的目的是賺錢的話,我也不會教C和C++,太費神了。當然,有人說你貴買貴賣嗎,收費貴點,把成本補回來。那樣也不太現實,因為,太貴的費用,就沒有客戶了,大家試想一下,如果開個培訓C和C++的培訓班,保證出來會寫作業系統,收費20萬,大家學不學?我估計就算這個課程值這個價,恐怕也賣不出去。
所以,這位同學說的培訓機構的意見,我的建議是,聽聽就好了,不要太認真。
不過,這裡肖老師提示大家一點。任何東東,價格和價值是不等的,價值取決與這個東東本身值多少錢,價格則更多地取決與市場需求。大家可以想象一下,目前100個培訓班,90個都在教Java,這意味著什麼?是不是以後Java程式設計師暴多。暴多的結果是什麼?肯定是跌價啦,因此,我曾經推論,Java程式設計師以後的薪情堪憂。
反過來,C和C++,如果我們自己肯鑽研,鑽出成績來,前景還是很可觀的。我們要堅信,C和C++的市場需求還是有的,在遊戲業,在通訊業,在很多嵌入式場合,C和C++語言都有不可替代的作用,程式設計師少而市場大,大家知道意味著什麼嗎?薪水高是不?呵呵,這是肖老師自己YY,亂講的,大家可以自己想。
反過來說,C和C++的培訓班少,我們找不到,清華北大的同學出來,是不是也找不到?這是不是說,在C和C++這條路上,我們和他們又站在一個起跑線上了?呵呵,可能有人會說,那些名校畢業,不需要培訓班,當然。但是,名校畢業,我想也不會成為大師,他們工作一開始,還是得老老實實地學,大家說是不?
最後一個問題,去深圳發展。我的建議是不要去了,深圳目前已經比較成熟了,相對來說,機會比起剛剛改革開放時,已經少多了,我們貿然過去,期待有個好的工作,這是不瞭解導致的幻想。深圳工資高,相對物價也高,大家找工作,不要單純比較工資絕對值,好好比較一下兩地的房價,會發現,深圳的工作,價效比不高的。
深圳還好點,北京上海,就更過分,房價高不說,把個戶口看得跟什麼似的,外地人過去,很難在當地買房,落戶,紮下根來的,會有很多看不見的槓槓在阻礙你。我是這麼看的,打工者和城市是互動的,誠然,打工者需要城市提供的環境賺錢,而城市也需要打工者增加稅收和消費,進一步增加城市收入。一個城市把自己看的太高傲,不是好的合作伙伴,也不是適合長期呆的地方。我自己就是這麼看的,從成都出來,沒有選擇那些一線城市,選擇了西安,主要就是看城市的包容度,基本的物價指數。
嗯,還有個很具體的問題,就是找物件結婚。大家不要笑啊,人之常情,誰也不想一輩子當和尚。 據我所知,越是大城市,北京、上海,甚至成都、西安也有,很多女孩,很浮,看重表面的東東,看不起外地來打工的人。這也沒辦法,這個社會隨著商品化思維的加深,每個人都有一種交易心態,女孩希望嫁好一點,無可厚非。但是,由於她們這個心態,一般都看重一個男人有什麼,而不是很細心地觀察這個男人的潛力如何,因此,大家就算專業技術再有優勢,但只要手邊沒有現金,沒有房子,車子這些硬體,恐怕過去找媳婦,也很困難。大家剛畢業可能感覺不明顯,不過,我想過幾年,大家就有感覺了。
當然,有人說,我大學裡面有女朋友,或者說,我過去也找打工的。完全可以,不過,兩個人都是打工的,處於一個陌生的環境,奮鬥起來,可能會比較艱難一點。建議大家做好思想準備。
這個話可能某些同學不愛聽,不過我放在這裡,歡迎PK。
因此,我最後的建議:人一生是很複雜的,和鄧大爺一樣,三起三落不到頭,現在我們看到的,不一定就是一生中最重要的。仔細去看一些最古老的道理,有時候反而更有用。
關鍵是,這輩子給自己一個目標,定一個計劃,只要能堅持走,最後一般都能成功。這個計劃,可能很小,比如我一定要成為C和C++的高手,也可能很大,我要成為某方面的專家,我要成為北京人,上海人,甚至我要出國等等,都可以。
關鍵是,你現在準備做什麼?你能堅持多久?
學生評論:
徐浩然(C/C++老師) 2009-06-30 12:39
同意肖老師的說法。尤其是關於女生找男生的那一段。以及,很感謝肖老師關於深圳工作的那一段,十分感謝,如醍醐灌頂。
唐俊鑫(C/C++學生) 2009-06-30 14:38
非常感謝老師的回答,沒想到老師會花時間講這麼多,真的很感動!也明白了一些,路很長,我會一步步地走下去.
王剛(資料庫學生) 2009-06-30 22:25
肖老師就是我的精神鴉片,一抗不住了就上來打點,如果多打幾針能象老羅那樣堅持半年以上就好了,現在又揀起C語言大全(第四版)開始看了。
廣東工業大學 曾章華(學生) 2009-07-01 01:35
這個計劃,可能很小,比如我一定要成為C和c++的高手,也可能很大,我要成為某方面的專家,我要成為北京人,上海人,甚至我要出國等等,都可以。
關鍵是,你現在準備做什麼?你能堅持多久
說的太好了
鄭州輕工業學院 王紹峰(C/C++學生) 2009-07-01 14:05
謝謝老師!
肖老師在指導學生這方面的造詣比我們導員都厲害。我感覺現在還是打好基礎,至於像架構之類的有精力的可以去搞。
雲翔(C/C++愛好者) 2009-07-07 08:17
一直以來潛水,一直以來都在靜靜地向大家學習,今天又看到肖老師的經典之談,不得不冒出個頭來,這篇文章,從學習到規劃、到個人發展、未來選擇都做了非常現實的深刻的闡述,讓人受益匪淺,對我這樣畢業混了幾年的人來說,很有感觸,我想這篇文章對於剛踏出校門的人來說,應該是非常有幫助的,肖老師、真牛!!!
職業生涯第一步---選擇你的城市
肖舸老師
這也是早就想探討的一個話題了。目前,感覺很多同學,在雙選會簽約,工作地點的選擇上,有一定的盲目性。很少有人能主動地去選擇合適自己的城市,因此,這裡提出一點討論。一家之言哈,歡迎拍磚。
我本人其實就是盲目選擇的代表,呵呵。
十幾年前,我第一次從國營單位辭職出來,當時就沒有什麼主動選擇的意識,直覺上,就跑到成都了,原因很簡單,因為算家鄉吧。在成都辛辛苦苦十幾年,才發現選錯了,成都雖然好,但是不適合我啊。呵呵,搞得三十幾歲又跑出來重新選擇,其中的故事很多,不提也罷。
在我第二次選擇的時候,我想了很多,也很慎重,因為我發現,每一個城市都有它的文化,選擇一個城市,就是選擇一種生活方式,選擇一種生活態度,往寬裡說,甚至就是選擇了一種人生。
為什麼這麼說呢?我覺得首先我們講講什麼是文化。我以前做過一點企業管理,對於文化這個詞學了一點點,我的理解,文化就是一群人在一起生活和做事,慢慢的,這群人總結出一些做人和做事的原則,即什麼叫做好,什麼叫做壞,怎麼做才叫做正確。一個企業,一個部門,一個系,一個班級,都有其文化,一個城市,當然也有它自己的文化。
一個人,生活在一個城市中,或多或少,都會受到這個文化的影響,你每天上班下班,接觸到的每一個人,你的老闆,你的同事,你的朋友,你的夫人(或者老公),這些人構成了你的生活圈,你每天的言談舉止,其實都在和這些人互動,而這些人與你溝通過程中,體現出來的價值觀,對人物、事物正確與否的判斷標準,雖然沒有明確的文字說明,但日久天長,慢慢地你能感覺到,並且受到影響,這就是文化的威力。
中國有句古話,叫做“入鄉要隨俗”,其實就是講的這個道理,即一個人到了一個地方,要尊重當地的文化,不能拿著自己的原則去硬碰,否則一般都死得很難看。
因此,我想和大家說的第一個話題,選擇你的城市,首先就是選擇你以後生活的文化氛圍,一個適於你生存的原則環境。
為什麼要選擇呢?原因很簡單,不是每個人都能適應每個文化氛圍。
我們每個人,在這個世界上成長了十幾年,幾十年,都有自己的經歷和閱歷,這點每個人都不同。在接觸這些不同的人和事的過程中,我們會逐漸培養自己的判斷力,這就是自己的生存原則。
原則是一個很厲害的東東,這是每個人判斷事務的基本準則,因此,每個人都不太願意輕易改變自己的原則。更何況,很多原則是自己經歷過深痛教訓才得來的,當然很固執。我們常說的“江山易改,本性難移”,其實就是這個道理。
因此,如果我們大學畢業,選擇工作的時候,不加思考,貿然選擇,則很可能選擇到一個自己不喜歡的城市,一個和自己的原則很衝突的氛圍,這給以後的人生道路造成很大的阻礙和痛苦,就不划算了。
這裡我們還需要溝通一個細節,文化和原則,是無所謂對錯的,我這裡雖然說,一個人的原則和一個地區的文化,可能會相沖突,其實不是說哪個好,哪個壞,都對,都有道理,僅僅是雙方不合拍而已。
比如我曾經仔細比較過西安和成都的文化,我發現一個很有意思的現象。西安街頭的小吃,很多,很雜,什麼地方的小吃都有,有些,我很喜歡吃,有些,我覺得很難吃,但是,這些小吃過的都很好。成都街頭的小吃,也很多,很雜,但是,不管什麼地方的小吃,我都喜歡吃,原因很簡單,都很符合我四川人的口味。
我仔細想了一下,這大概就是文化的差異了。西安畢竟是六朝古都,從漢唐盛世以來,一直是經濟文化中心,長期的多元文化的結合,使她有了無與倫比的包容性,在西安看來,一個人,只要能保持他的原汁原味,不必討好所有人,西安就能包容他,給他一塊生存空間。成都呢,也包容,只要這個人改的和四川人一樣,成都就包容他。肯德基發辣椒包,就是在成都興起的,不然成都人不吃啊,呵呵。
這是我個人的一點觀察和理解,可能不一定準確,四川的父老鄉親,不要K我哈。不過,我本人確實就是因為這個原因,最終離開成都的。
因為我也有我的一些原則,不願意妥協,比如說,我相信親情,我相信這個世界上,將心換心是存在的,比如說,我相信這個世界上,只要一個人付出了努力,就一定有回報。再比如說,我相信這個世界上,好人會有好報。但既然成都無法包容,我就換個城市來發展。
因此,我給同學們的第一個建議,謹慎地選擇適合你的城市文化,每個公司,都有其背後的城市文化,你的同事,都是在這個城市的文化薰陶下成長和生活,選擇適合你的文化,比什麼都重要。雙選會上,不要急於簽約,先回來上上網,看看書,找同學打聽一下,查詢一些你心中中意的公司,它所在的城市,文化背景如何。
還可以細心關注一下你的同學,一個大學,哪個地方的人都有,你問問自己,自己平時和哪個地方的同學處的來,這些都是重要資訊。可以幫助你判斷的。當然,如果實在不好判斷,有個簡單的辦法,就選擇你熟悉的城市,比如你的家鄉,或者你大學所在的城市,或者你長期生活過的城市,等等。
說完了文化問題,我覺得還有必要討論一下飲食問題。大家不要笑啊。民以食為天嘛。
很多人不是很看重這個,我原來也以為自己不看重,不過,這次出來,還是被上了一課。所謂天下廚房,味在四川,不管怎麼說成都,都無可否認,成都的小吃,成都的風味,確實很好吃。以前有個說法,“川人不出川”,我估計,這個主要原因就是,到了其他地方吃不慣。
西安雖然很好,但是這個飲食我一直是沒有抱太大期望值的,過來很長一段時間,我每天吃飯基本上和完成任務差不多,just so so。到現在,我每隔一段時間,都要去吃吃川菜,吃吃火鍋什麼的,不然嘴巴里面沒有味道。
呵呵,我是如此,大家想必也是如此吧,大學生活的食堂,我想確實不會很好,不過,以後大家的生活道路還長著呢,如果貿然選擇一個口味不符合自己的城市,也會很痛苦。怎麼痛苦呢?每天只痛苦三次就夠了。
想想看,一個喜歡吃麵食的同學,跑到南方城市,天天對著白米飯,會昏過去的。我一個朋友跟我說,吃米飯,每天下午3點肯定餓,吃不飽。我呢,和他相反,中飯只要吃饅頭,不管三個,四個,下午4點,肯定餓,真要昏死過去了。不過這還好,還有個傢伙好死不死,從四川跑到上海,還娶了個崇明島的姑娘,每天早上一大碗白米飯,直接拌糖吃,他說他想自殺。呵呵。不過這麼多年,貌似他沒有自殺,倒是他夫人,火氣見長,估計是吃辣椒吃的。
因此,我第二個建議,當同學們決定去一個城市的某一家公司工作時,先看看自己吃得了不?如果吃上面出了問題,很多時候,呆不住的。
有人可能說,我自己做著吃,可以。不過,巧婦難為無米之炊,我到西安來,一直買不到泡菜鹽,泡不出泡菜來。那天參加個什麼展銷會,一個四川企業過來賣泡菜。不許笑,我那個口水,嘩嘩滴。。。。
以前看過《讀者》的一片文章,《胃知鄉愁》,一個人,年輕時能吃苦,年紀大了,很多時候,你的胃會提醒你,常回家看看。。。
說完吃,我們再說說住。這可是熱門話題。中國人賺了錢,買房子是一定的,所謂“安居才能樂業”。大家看見沒,目前房地產市場不管是火熱還是蕭條,總之是新聞熱點啦,近期世道不好,房產銷售不景氣,為了吸引眼球,連房子本身都開始做“俯臥撐”了。呵呵。
前面說了很多話,其實歸根到底一句話,是“我選城市”,但是,大家別忘了,做生意嘛,是相互的,光我選不夠,還得“城市選我”,你說是不?
城市怎麼選我呢,很簡單,就是物價指數,憑我的本事,能不能賺到在這個城市生活的基本生活費。而所有的物價指數中,我理解最重要的,就是房價。
我當初選擇西安,就是這麼計算的。我隱隱約約聽到一個美國的演算法,即一個家庭的收入,不吃不喝100個月的月收入,應該能買套房子,否則就是物價太貴。100個月差不多10年,這樣的話,一般選擇20年貸款,這個家庭月收入差不多一半來還貸,能勉強應付下來。
我是這麼理解的,這主要參考一個城市的平均工資水平和房價。平均工資水平很好查,各地社保局都有資料公佈,可能跟大家目前的月薪期待值差的有點遠,但那畢竟是國家承認的基本工資水平,是平均值,還是有一定代表性的。比如成都和西安,公佈的都是一千多。
我們這麼計算,夫妻是兩個人,這個平均工資應該Double,算2k多,再加上雜七雜八一些工資外收入,基本上算3~4k,應該問題不大,事實上,我聽到的西安普通公務員的收入,差不多就是2k~2.5k一個月。這算是一個比較標準的數字。當然,還有大量的工人,收入不到這個數字。
ok,我們折中一下,按照一對夫妻月收入3k計算,那麼,100個月的工資,30w,按照平均一個家庭購買80~100平米的房子,算90好了,我們計算一下理論上的房價,30w/90=3333元/平米。再加上國家的稅收,大修基金,裝修費用(低檔裝修吧),差不多摺合下來,4000元/平米,這是入住價格。
這樣,我計算出了一個城市,根據工資收入算出的理論合理房價,那這就好辦了,把當地房價和理論房價比較一下,一下就能看出這個城市的物價指數怎麼樣。這個我就不細算了,因為各個城市不一樣,大家可以自己算。這裡提示一點,成都的房價,高層公寓,一般在8k左右,西安的一般在5k左右。
從另外一個方面,我發現,上述計算也能判斷一個公司開出來的薪水是否合理。我們知道,上面是100個月,和90平米的關係,我們模糊一點,大概算都是100,那麼,基本可以討論,家庭的月收入,應該和當地的房價基本持平,即,一個家庭每個月的工資收入,應該能買1平米房子。
因此,比如當地房價是10k,這在北京上海等一線城市,貌似很常見哦。
那麼,我們至少應該能每個月賺到5k,否則,根本活不下來,也別想買房子,娶媳婦生娃。這還是男女雙方收入對等的情況,中國的現狀,女方高薪的,畢竟少見,因此,男方一般應該負擔至少三分之二的工資收入,因此,男方應該月收入在7k~7.5k左右,女方在2k~3k左右。
不過,別忘了,這是要拿回來的錢,我們的錢,很多時候,要扣稅,扣社保等,要拿回10k的錢,稅前收入至少應該是12k左右。男方8k,女方4k,這是基本引數。
ok,大家知道怎麼計算生活成本了吧?
說完吃住,當然還要說行啦。
別激動,很多時候,上下班是個大問題,一個城市,擴大了,很多時候生活就慢慢變得不方便。像北京、上海,上下班花超過2小時是經常事,在沒有可能買得起車子的情況下,公交上下班的困境,是很多年輕人的噩夢。這意味著,每天早上6:00就要起床,晚上20:00以後才能到家,一天有4小時在路上。
有幾個解決方案:
1、買公司附近的房子,不過這一般不現實,我們IT業,一般都在高新區,房價都很貴,這多出來的成本,買輛車都夠了,還有,我們的壽命一般都比公司長,換了公司,總不能換房子吧,投資回報率不高的,風險也很大,不是個好主意。
2、買車子,這確實能解決問題,不過,由此每個月多帶出來1k左右的開銷,上面計算的數字還記得不?12k月收入,需要漲到13.5k才夠用,這還沒有算買車的錢,僅僅是使用費用。
3、到公司附近租房子住,週末回家,這也很多,但這畢竟不是好的生活方式。
4、等所在城市地鐵網建成,在很多一級城市,地鐵不錯,不過,也不一定順路,還有很多二線城市,地鐵在建,暫時還幫不上忙。
5、等公司的班車,這要大公司才行,不是每個公司都有條件的。
呵呵,想來想去,還真沒什麼好主意,只有走一步看一步啦。
呵呵,囉嗦了這麼多,就是希望就我本人的經驗,給大家一點參考,希望能幫大家開啟一點思路,切實幫助大家解決一點以後的困難。
其實選城市,我個人的理解,也難也不難,如果都照上面說的,事事計算完,就很難。不過,也有很多簡便的辦法,先簽一家,過去做幾年,看看,合適就留下,不合適,再換,也是一種辦法,畢竟,很多東東是感覺,用理性分析不清楚的。
關鍵是:你想過什麼樣的生活?
學生評論:
河南成功學院Gwolf團隊 魏天陽(PHP學生) :
選擇城市也就意味著選擇近幾年的生活方式,的確是一個重要的問題,謝謝肖老師。這也是一個很迷茫的事情呀!
西北大學 任豔(C/C++學生) :
肖老師的話我深有體會,我覺得吧,人選了個什麼職業,也就決定了你選擇了個什麼生活方式,以前吧,我自己感觸沒這麼深,現在讀到研究生階段了,再跟以前那些非計算機專業的人討論問題,總是覺得思維方式格格不入,而且也有點志不同道不合的感覺,呵呵,看來以後選什麼都是要慎重的,畢竟這將影響到你的生活質量。
回覆 黃海峰(網路管理愛好者) :
環境太重要了。在廣州讀的書,回家鄉中山這個小地方去打工,當初猜中山競爭不大,會舒服點,後來才慢慢發覺很不適應,我習慣了高速的節奏,中山卻有點慵懶,給我很慢的感覺,我覺得在虛耗人生。說中山競爭不大,其實也假,這裡招開發啊網路啊等工程人的職位比起廣州深圳少非常多,有時候找到了一份工作就算你已經覺得不會太喜歡還是要撐著做,不然吃不了飯,然後工作過程中再時常關注招聘廣告。另外高樓不多感覺不到城市氣息,覺得自己很原始,我是很願意跟著感覺走的人,譬如我以前在廣州讀書那會喜歡擠在地鐵裡想事情看世態人情,一個人流連在川流不息的熱鬧夜市,全世界都很忙,沒人有時間發現我,我感覺自己走在明處卻能藏著許多私事,感覺很自在。小城市慢,沒什麼可資娛樂的消遣,人也傳統一點,並且目光也短淺一點,勾心鬥角的事情會多些,大城市人人都忙,不太會計較小事情,要麼乾脆不理你,要麼大吵一場,大家都忙,不會浪費時間經營關係製造事端玩城府。大家說大城市人情淡薄,但我也可說那才是君子之交。
回覆 邱滄淮(C/C++學生) :
每一個城市都有它的文化,選擇一個城市,就是選擇一種生活方式,選擇一種生活態度,往寬裡說,甚至就是選擇了一種人生。
聽了肖老師的話更理性的看待了將來的去留,留住男人的胃就是留住男人的心,留在一座城市,吃也是重要,我南方沿海人,吃不慣辣椒饅頭面食,離不開海鮮,呵呵;生活成本,房價胡亂長,什麼時候是個頭啊,入不敷出啊,有壓力就有動力,這個壓力,有點大。其實我們這裡也挺好的,就是對TW問題城市一直沒得發展,現在情況好了經濟飛躍,年青人就是想到處闖闖...囉嗦半天了,還是學生,我的路還長,我還有努力的機會!
肖舸老師
這是發到郵箱裡面的一封信,感覺近期討論女性程式設計師居多,有一定代表性,這裡嘗試作答。一家之言哈,歡迎拍磚。
原文如下:
肖老師:
您好!
我是在大本營上認識的您,首先感謝您在大本營中給予我的幫助和指導,我真的從中獲得不少收穫。
說實話,我之所以加入大本營是因為在大學中課程學習的需要,但是隨著學習的深入,我對程式設計產生了很濃厚的興趣,但是關於女生從事程式設計師之類的工作,我有很多疑惑。
首先程式設計師是份耗腦力和體力的工作,熬夜加班出差都是常事,不管有多大的興趣,身為女性的體質能否勝任其中種種艱辛?
其次,有多少公司願意招收女程式設計師?性別歧視仍然存在是不可否認的事實,要獲得肯定,女性勢必要付出更多。更何況是剛畢業的女大學生?
我很迷茫。是不是應該在程式設計這條路上繼續走下去?關於大本營中的各個課堂,什麼JAVA,PHP,NET,嵌入式,等等。我都沒有接觸過,我只是個程式設計初學者,只是學習了資料結構和C++,考試和實驗成績也不錯,很多人說我有這方面的天賦。而且我自己也很有興趣,希望能繼續走下去。但是接下去該怎麼走,完全沒有頭緒。
其實現在所有煩惱都是來自於就業和未來的生活,我希望能從事我喜歡並且適合我們女孩子的工作。男孩子喜歡了就會不顧一切,但是女孩子難免有很多顧慮。希望老師能給我建議,或者能指點我方向。能讓我從迷茫中走出來。。。。
期盼您在百忙之中能給我回信,謝謝!
您的學生
===========================
我的回答:
這位同學你好,呵呵,首先宣告,肖老師是男生,從來沒有站在女生的角度思考過問題,因此只能就自己的角度來探討一下問題,說得不準,勿怪。
嗯,說個現象吧,我在成都呆了12年,確實沒怎麼看到女性程式設計師,有幾個,生了娃以後,都回家帶孩子去了,不過我到西安來以後,嚇了一跳,程式設計師中男女比例接近1:1,呵呵,確實給我上了一課。
所以,就我的經驗值,我發現你說的其實不準確,起碼中國北方城市,女性就業率還是比較高的,至於是不是程式設計師職業,並不重要,也有很多女性做的,你大可不必擔心這個問題。
當然,女性有女性的弱點,生理上的我們們就不說了,其實對於辦公室工作來說呢,問題不大,關鍵是結婚生孩子,根據勞動法,女性一般是4~6個月的產假,這在很多小公司來說,一個人接近半年不上班,還拿薪水,確實有點難以接受,因此,在招聘時,不知不覺就對女性有點回避傾向,就造成了女性求職困難的現狀。
但是呢,我覺得這是短期現象,為什麼呢?一個公司,如果要做大做強,做正規,必須正視這些勞動法規定給員工的基本福利,如果老闆刻意迴避這些話題,應該說,這家公司也確實做不大。至少,我到現在沒有看到哪家超過1000人的大中型企業,裡面一個女人都沒有的。你說是吧?
所以,這個問題,歸根到底,我的理解,還是市場經濟的初級階段問題,即中國的企業剛剛出現,還在進步,目前實力還弱,無力承擔太多的社會責任,無法承受女性結婚、生子的一系列額外成本增加,因此導致女性就業渠道偏弱。
就我的經驗而言,目前國有大型企業、歐美外資企業,嗯,臺資和港資等企業也是,對勞動法遵守比較好,反而是中國的民營企業,遵守得不好,讓買個社保都磨磨唧唧的,更不要說女性的產假等問題了。因此,如果求職時主要針對上述企業來說,應該問題也不是很大。嗯,國內華為、中興等大型企業,對女性歧視也很小,可以考慮。
但是,要注意,這裡面也有個門檻問題,國有大型企業,其實福利是比較好的,但是,工資待遇偏低,尤其是進去主要靠關係,很少有憑藉真本事能進去的,這個難度很大。其他三資企業,人家是典型的資本主義社會原則,看人部分男女,都是成本,每個人必須創造出效益來,因此,首先必須要真本事才進得去,其次,進去後,人家用人也比較狠,我們常說“女生當男生用,男生當畜生用”就是這個道理,如果進這類企業,要做好被扒層皮的思想準備。
第二個提法,我覺得目前女性就業困難,關鍵還在女性自己。
目前大學裡面有句話:“幹得好不如嫁得好!”,我想大家都聽說過。其實是人就有惰性,也有一些劣根性,都想找一些活少拿錢多的工作,舒舒服服地賺錢,這種思想,其實不管男人女人都有。我自己也有,呵呵。
關鍵是,社會是公平的,一分貢獻,一分收穫,哪有那麼多不勞而獲的事情。但現在的女生,我覺得普遍有點問題,都想走捷徑,都想一次革命成功,目前大學校園中,傍大款的不少,很多女生一門心思嫁個好老公,認為這輩子就有靠了,不需要奮鬥了。
因此,在求職市場上,很多女生不是找不到工作,是根本沒有一心一意地去找,因為對女生而言,通常都有第二選擇,可以靠家裡,靠男朋友,等等。這種求職態度上的不堅決,其實無形中,已經給自己關閉了很多企業的大門。有個現象,同等條件的兩名女生都面試,一名猶猶豫豫的,一名態度極其堅決,一定要拿到這份工作,通常都是後者獲勝,因為企業認為這個人既然這麼需要這份工作,那不管能力怎麼樣,進來後起碼會拼命做事。
那我們再來比較男生和女生,就可以看出顯著差異了,其實男生有時候也想靠,但是沒得靠啊,反而,還有個女生在靠自己,自己還要撐起一片家庭,那麼,你說男生求職拼命不?
但我還是得說,前面女生的這種思維是嚴重錯誤的,夫妻也是經濟共同體,雙方需要共同完成家庭建設,這樣的家庭才穩定。一個女性,如果覺得職場艱難,就打退堂鼓,那,不管是不是程式設計師,其實我覺得她什麼職位都找不到的。
這樣還有潛在的惡果,現在有很多閃婚族,出了校門就結婚,我認為和女性的這種依賴思想有一定關係,但這樣的婚姻,是不是穩定呢?
其實我不講,大家都應該清楚,女性憑藉個人的外貌實現魅力,男人更多的是憑個人的內涵和事業的成就實現魅力,這就決定了,一個女人,魅力最大的時候,是18~28這個年齡段,而男人恰好相反,一個男人最有魅力的時候,是35~45歲這個年齡段。這中間有落差。
一個女性,如果堅持以漂亮為本錢,早早地就嫁人,在家裡相夫教子,那麼,在她30多歲,年華老去的時候,情況就比較危險了。首先,男方逐漸進入事業巔峰,很多更為年輕漂亮的女性,會青睞這種男人,男人面臨的誘惑在加大,其次,這個家庭,十幾年其實都是男方一點點賺出來的,女方是享受者,不是建設者,在這個家庭裡面漸漸就沒有發言權,經濟基礎決定上層建築,不要說對方愛你就會一輩子聽你話,很多事會變的。
如果此時女性再不注意,試圖通過控制經濟等手段壓制男人不會變心,或者採用跟蹤,哭鬧等極端方法,往往適得其反,最終導致男人離他而去。一旦出現這個問題,女性的問題就比較危險了,十幾年沒有上過班,自己的專業能力,恐怕僅僅剩下一張文憑了,知識都還給老師了,那她在社會上可以說沒有任何競爭力可言。那麼,她以後靠什麼生存?
所以我這裡提醒一句,現代女性,最好有一份自己的事業,不要輕易依賴別人,記住,今天你有優勢,別人會愛你,但是明天當你優勢喪失,而男方優勢突顯的時候,很多時候,家庭並不是很穩固的。最好的方法,有份自己的工作,有份自己賺的薪水,可能不多,但是家庭建設有你一份,男方如果動不動就動歪心思,就是他無理取鬧,打官司他都打不贏的。這也是保護自己必要的方法。
當然,也不要走另外一個極端,動不動就以女強人自居,你的事業是第一位的,男人天天在家裡要給你掃地做飯端洗腳水,這也不好,中國社會,畢竟幾千年,有個文化風俗在裡面,女性再賺錢能力上,總的來說還是不如男方的,以後家裡的頂樑柱還是男方,那麼平時在家裡,讓著男方一點,家務活多做一點,讓男方回到家,有個休息的感覺,能放鬆能感到溫馨,這樣的話,這個男人就是你的,打都打不走。呵呵。
總結一下,女性的工作問題其實比男性複雜,中國的男性,一般都是一門心思顧事業,把事業做到最好,而中國的女性,永遠需要在事業和家庭之間求得平衡,既不能沒有自己的事業,也不能放棄家庭,這很難的,不過,慢慢鍛鍊,總會找到辦法。我的經驗,能把握好這個平衡的女性,一般這輩子都比較幸福。
所以,針對你的問題,我覺得要辯證地看,既要看到,找份工作對你很重要,也要看到,作為以後家庭中,主要負責家庭事務的成員,你的工作不要一味追求高薪高職位,要尋求一個合適的職位,能滿足長期工作不失業,但也不能太苦太累,搞得家庭無法維繫。這才是比較周全的解決之道。
現在我們回過頭來看看程式設計師,其實程式設計師這份工作,我覺得女性可以做的,程式設計師有很多加班的,但是這往往是工作剛開始,沒有太多經驗的情況,待工作一定年限,掌握了一定經驗,加班會越來越少,其實大多數程式設計師工作崗位,是不出差的,基本上是朝九晚五制,做久了,收入也不低,可以滿足一個女性對事業和家庭的平衡。因此,我建議你大大方方就做程式設計師,找不到,努力找咯。
嗯,再多說一點,就我個人的經驗,程式設計師的加班,往往都是由於bug導致的,大多數時候,公司在安排專案開發時間時,時間還是給得比較夠的,至少是評估過的,但是,往往是後期出現了很難跟蹤,很難解決的bug,導致專案進度大大滯後,時間突然變得很緊,於是出現大量的加班,有經驗的朋友可以想想,自己以前的加班是不是這樣。
其實這個問題和男女無關,實實在在是每個程式設計師的問題,我本人以前也深受其害。後來我痛定思痛,準備徹底解決這個問題,於是我用了大約8年的時間,研究了一種方法,叫做《C/C++無錯化程式設計方法》,出來後,我的bug果然少了很多,幾乎達到0 bug的地步,自然而然,我加班也變得很少了。
這種方法我在我的新書《0 Bug ---- C/C++商用工程之道》裡面,已經share出來,供大家參考,如果你以後希望過的輕鬆一點,能更好地在事業與家庭之間求得平衡,少加班,多陪家人的話,建議書出來你看看。呵呵,也算我做個小廣告。這種方法雖然是C和C++的,但裡面的原則都是跨平臺跨語言的,因此,其他語言的朋友,建議也看一看。會有幫助的。
學生評論:
金濤(軟體測試愛好者) :
不光是在談學習了,更是在談人生,和未來了。男同胞也受用了。
陝西理工學院 郝爭濤(C/C++學生) :
肖老師說的挺現實的,技術高了,加班自然就少了,重要的是關鍵技術。
上海大學 吳昊飛(遊戲開發學生) :
肖老師的這篇文章讓我瞭解到程式設計師加班的真實情況了,以前曾經有個IBM的程式測試員來我們學校免費上了幾堂程式測試的課程,他有說過一句話,大致意思是程式設計師很難不加班,後來我又在一家軟體外包公司短期實習了一個多月,好像是專案快到交付日期了吧,反正那裡研發部的程式設計師幾乎天天加班,結果給我的印象就是:程式設計師=加班
而且自從那次我媽就覺得程式設計師這工作太累(那時候實習的地方離家比較遠,路程有兩個鐘頭,實習生不用加班,也要早上七點出門,晚上八點到家吃晚飯,然後洗洗直接睡覺了),現在大四開始找工作,我媽就一天到晚跟我說最好不要找程式設計師的工作,說得我都快有點動搖了……
應該把我媽拖過來讓她看看這篇文
肖舸老師
被很多同學問,怎麼才能知道用人單位的需求。
這個給個建議哈:去CSDN或者其他什麼網站的專案外包欄目看看,裡面的需求,就是別人肯付錢的需求,自己試著實現一下,比較練技術。如果能賣出去,就表示技術練差不多了,可以憑這個專案經驗找工作了。個人感覺,這個專案經驗在找工作的時候,有時候比學歷證照管用。
嗯,這裡面有幾點請注意:
1、不要做外掛!不要做木馬!不要去破解!這短期內能幫你賺錢,但長期看,相當於自己封殺自己這輩子到達程式設計巔峰的機會。靠偷東西,是沒有辦法受人尊重的。就算以後賺很多錢,腦門上還是寫了個“賊”字。
2、不要去評價對方要求合理不合理,他肯花錢,就是客戶,客戶永遠是正確的。
3、不要去嫌錢少,你覺得你已經很努力了,用了很多技巧,用了很多技術,但是,你乾的活,對客戶產生的價值,就只有那麼點。
4、有些太大的需求別怕,比如20000做個帶VoIP的IM軟體之類的,那明顯不是給你的,是某些人,希望做套IM系統,但又捨不得花錢,希望用這點錢,誘惑某個正在做這個IM軟體公司的員工,把公司的原始碼偷出來賣給他的,這是一種誘惑,算是引人犯罪,別理他,堂堂正正地做人,比什麼都強。
5、別怕別人的回覆,很多人回覆,說是什麼什麼的成熟團隊,其實可能就做過一兩個專案而已,你找幾個朋友也可以,嘗試給客戶發發電子郵件,低調一點,慢慢談,剛開始甚至免費做,就期待對方給你一個機會。只要做過,你已經賺到專案經驗了,已經獲得很多了。
6、不要想著一個人做事,有人看見一條自己合適做的,激動萬分,生怕別人知道了,恨不得這條訊息馬上下線,免得有競爭對手,其實,有競爭才有進步,找幾個同學,一起做,你會發現,你的同學比你聰明的。學著欣賞他們,以後你就是專案經理。
7、不要氣餒,千辛萬苦做出來,對方客戶一句話,不要,很正常,市場競爭就是這樣,千萬別跳樓,自己再來就是了。大不了重新來過,怕個P啊!
8、用心做事,既然做了,目的就是賣錢,不是過家家,不是開玩笑,用盡全部心思,讓客戶買單,不管最後結果如何,只要你做了,就問心無愧,而且,你會發現這個過程給你帶來的,比你賣的錢要多得多!
9、最後一條,如果你賺到錢了,有低年級的小弟,請教你如何賺錢,把我這篇文章推薦給他,這不是培養競爭對手,是把軟體外包這塊市場越做越大,錢是賺不完的。幫別人就是幫自己,以後你做專案經理,如果你手底下的技術骨幹是你這麼培養起來的,你說輕鬆不?
學生評論:
河南成功學院Gwolf團隊 趙鵬(C/C++愛好者):
比我的驅動學習還是任務學習更加深刻,更加考慮周全。再提煉就可以把一種學習方法抽象成一種方法學了。呵呵~~期待您的下一篇……
在肖老師的指點下,這裡我針對我們學生,提出幾點小的建議:
1.找需求
不要找大的,就找小的,比如做一個程式自動開啟器,一個課程表,一個遊戲計時器,一個部落格計數器都可以。
關鍵點在於:能夠通過自己的眼睛來發現需求,然後抽象成一個軟體或者一段程式
2.團隊學習
團隊學習不是你讓別人來,別人就來了。一般也不是約來的,我更看中的是你也強了,然後帶動一部分強了,那麼團隊就有了。一開始就想要個團隊,我覺得是會失望的,因為很簡單,人家為什麼要和你一起呢?
關鍵點:盡力用實力營造羊群效應,被動地帶動一部分來做,而不是主動!
3.錢的問題
一般情況下,學生的作品是不能產生商業價值的(僅僅是一般),所以,目光要遠點。能賣錢的,一般就是網站之類的,管理系統什麼的。這些東西可以在學習體驗軟體工程的時候來實踐,但不是說別的專案就不能實踐軟體工程,只是如此實踐,成本較低!大學時代,多去探求真理,知識根本原理。比如web開發的資料處理模型,資料庫的基本模型等等,那麼以後的價值增長是不可估量的
關鍵點:做事情要學會計算成本,尤其學習,因為時間成本是沒辦法回收的!大學時代不為錢,就為明天的增值,就為今天的成本而學習!
以上純屬個人意見,僅供參考!
肖舸老師
這也是一直想寫的一個話題。近期,在罈子裡也回覆了一些帖子,感覺同學們在這方面認識也有一些偏差。乾脆就寫一篇吧。這裡是兩篇同學們的帖子,大家可以參考一下。
老師,給有點迷茫的學生一些指導吧,謝謝謝謝謝……傑傑 2009-06-02 04:12 http://student.csdn.net/space.php?uid=46110&do=thread&id=1840
也來出道題郭曉 2009-06-03 23:26 http://student.csdn.net/space.php?uid=54179&do=thread&id=1921
(特別註明啊,在郭曉同學的題目中,肖老師被狠狠地鄙視了,呵呵。)
還是那句話,一家之言哈,歡迎拍磚。
很多年以前,我還是一個學建築的學生,但是很喜歡學計算機。不過呢,由於專業限制,我沒有計算機用的。學校只開了一個學期的Fortran語言,上機時間只有可憐的5節課,那會把我憋壞了,呵呵。
大家不要笑啊,90年那會,生活不富裕,PC機還是一個很貴的東東,一般家庭都還停留在18吋電視機的時代,大學生又是最窮的,物質條件更為匱乏,我當時有個小收錄機,京華牌的,呵呵,在同學中已經很牛叉了。因此,像現在的同學們,一考上大學,MP3、MP4、膝上型電腦家裡給配齊的,在當時是根本不可能想象的事情。我作為過來人,還是要說大家一句,大家真是生在好時代了,很幸福的。
不過呢,我很喜歡程式設計,就養成一個習慣,想象程式設計,找一個題目,自己在腦子裡把程式構思出來,寫在紙上,然後自己模擬電腦的run,把程式過一遍,看能不能執行正確。這個習慣現在都還有。呵呵,我老是勸大家寫簡單的程式,其實和這個習慣有很大關係,因為我比較笨,稍微複雜的程式,腦子就想不過來了,就暈了。
也正因為有了這個經歷,我就開始思考一個問題,程式設計究竟是什麼?呵呵,當時我在學校,也是小有名氣,大家都知道有這麼個程式瘋子,沒事喜歡發呆,喜歡想程式。在一次舞會上(別激動,我也是過來人,也會跳舞的,雖然很難看哈,呵呵),一個計算機專業的師姐就考我,問我程式設計是什麼?
我當時想了一下,很鄭重地回答她,我的理解,程式設計就是拆解任務,把一個任務,拆解成很細很細的步驟,一步步教計算機去做。計算機很笨的,舉個例子,我們說早上起來去上課,是個人都知道做什麼,但是它不知道,因此,我們要告訴它:
起床--穿衣--拿飯盒--去食堂--買早飯--吃飯--洗飯盒--回宿舍--放飯盒--拿書--出門--如果人都走完,要記得鎖門--去教室--推門--找到自己的座位--走過去--坐下來--等待上課--上課。
說到這裡,我突然自己有點明悟了,程式設計,就是把複雜的問題簡單化,簡化到每個動作都是1+1=2那麼簡單,然後計算機照做就好了。這就是我理解程式設計的真諦。我師姐聽到了,也若有所悟,這個話題就沒有再說了。
我們來分析一下計算機的特點,準確的講,目前我們這個社會的計算技術,還很原始,說它是計算機,正確,它確實只能計算,說它是電腦,太抬舉它了,它不可能有思考能力。
在馮諾依曼體系架構中,計算裝置就是具有一定計算能力,有能力和外界做出IO互動,並且能高速重複動作的這麼一種裝置,這可能和大家在教科書裡面學到的不太一樣啊,不過,我是這麼理解的。
因此,我從一開始,就沒有把計算機作為一個夥伴,一個可以幫助我出主意,或者代替我思考的夥伴,僅僅是看做一種工具,這種工具有什麼用呢?我認為它最重要的,有兩個作用:
1、無限可重複性,一個動作序列,一旦編訂程式,計算機就可以無數次重複這個序列,不會感到累。這特別適合於那些乏味的,不斷重複的勞動,比如,我們一個學校每天要敲鐘,打上課鈴,如果讓人來做,這個人會很乏味,做久了,就可能出錯,但是讓計算機來做,它可沒有什麼思想,不會覺得累,而且做的很好。計算機特別適合做重複性工作。
2、服務品質的穩定性。計算機適合做重複工作,還有個有點,就是每次執行結果都是一樣的。這體現了工業化時代最重要的一個思想:量產思維,大家可以看到,現在的社會,不可重複的藝術固然很好,但公眾需要的是量產的產品,因為質量穩定,產量穩定,能滿足大眾需求。勞斯萊斯雖然很美,但絕大多數人在開大眾、豐田等低端車。就是這個道理。還是打鈴那個例子,如果是人,可能會生病,可能會請假,或者乾脆搞忘了,但計算機不會,只要有電在正確工作,打鈴就不會出錯。
這樣,我就慢慢理解到了,計算機其實就是能以恆定品質不斷重複輸出服務的機器而已。
ok了,這我們是不是可以理解到,計算機程式設計,其實首先是人的工作,當我們遇到一個服務需求,我們人來做一次,嗯,獲得一個比較滿意的結果,然後我們覺得這個動作可以重複,下次遇到類似的問題,照做就好了。於是,我們就安排計算機來做這件事了。是不是這樣?
這是不是說明,程式,其實是在講一件事應該怎麼做,這個做的過程,以及這個過程的含義,其實是人定義出來的,然後通過程式設計,教給計算機來做而已。
我以前經常有種感覺,計算機程式設計,是兩層意思,一層,是程式本身的含義,就是怎麼做事,另一層,是隱含在程式下面的邏輯含義,就是做事的意義,程式只是字面上的意思,而邏輯,是程式段落組合起來,共同表述的一層意思。現在想想,其實就是這個道理。
嗯,既然我們知道,程式設計,就是把做一件事情的步驟,分拆開來,教計算機去做,但,分拆到什麼粒度呢?這個很重要。如果分拆的粒度太細,白白浪費程式設計師的時間和精力,這些都是成本。而分拆得太粗,計算機還是弄不明白,做事不對,就是bug了。
這說明,程式設計有個很重要的概念,就是粒度,也就是我們對問題描述的精細程度。
最開始的計算機是最笨的,學過計算機組成原理的同學大概知道,只要有個累加器,其實已經可以算一臺計算機了,只會做加法計算。因為從數學上,我們可以知道,任何計算,最終都可以演化成加法計算,事實上,現在的CPU,在最底層核心的部分,也還是這個加法邏輯。
這樣做當然沒什麼不好,不過,有個小小的問題,就是粒度太細了。如果每件事情,都要程式設計師去拆解成很細的加法計算,這個工作就幾乎不是人乾的事情了。難道就無解了嗎?
呵呵,前面我們說過,計算機的特點是什麼?無限重複,大家就發現,一個事情,比如7*24,這是乘法計算,但是,我們最終要拆解為加法計算去實現,但是,不是說我們每次都要這麼拆解,乘法計算也是一個工作,有規律的,因此,當我們拆解一次之後,我們當然可以把這次拆解過程本身,編訂為程式,下次遇到類似問題,讓計算機把這個程式再跑一遍就ok了。呵呵,大家以為Intel的CPU裡面的乘法計算指令是怎麼實現的?大家又以為AMD的CPU內部的微程式碼體系是怎麼實現的?
就是這麼一個思維,解決了所有的問題,遇到需求,首先拆分,然後不斷檢索我們以前是不是以前拆分過了,遇到能套用的程式段落,就直接用,不用每次都拆分那麼細,減少工作量,當然,遇到新問題,還是需要自己拆解的,不過,拆解後,最好把拆解本身,也寫成程式,下次重用。
大家玩各種語言,一般都提供基本庫,這個基本庫,其實就是前人已經拆解過的結果,軟體公司覺得有代表性,可以滿足大多數應用場合,就編訂到基本庫裡面,以後程式設計師直接用,不用自己重複了,大家說是不是這樣?
現在,大家知道怎麼看待C的stdio.h,stdlib.h這些基本庫了吧?C++的iostream是什麼含義,知道了不?MFC知道了不?Java的執行時庫是什麼意思,也知道了吧?
不過呢,這個世界的需求總是很多的,並且,計算機的能力也是不斷在進步,以前不適合計算機做的事情,現在也慢慢變得適合了。因此,大家總能遇到一些新問題,需要自己重新拆解,基本庫中沒有提供,這就是程式設計師這個職業存在的真實含義。幫助使用者不斷拆解新需求,解決新問題。當然,庫本身也在進步,不斷把已經被證明拆解成功的問題,修補到庫中,避免以後的程式設計師做重複工作。就這麼簡單。
呵呵,囉嗦了這麼多,可能很多同學看的一頭霧水,肖舸老師你到底想說啥?
我想說的,其實很簡單,程式設計序,就是拆解問題,但講究個拆解的技巧和方法,以前人做過的,別做,儘量用,沒有的,做過一次,儘量保留下來,供下次使用,就這麼簡單。
那,這和本文的題目“修煉程式設計的內功”有啥關係呢?
當然有關係了,什麼叫程式設計的內功?我的理解,就是對這個世界的抽象化理解能力以及描述能力。一個工作,能迅速從中提煉出下次可以重複的套路,並且能以一定的規則,就是計算機語言規範,描述出來,擁有這兩個能力,就能保證遇到任何問題,都有辦法寫出程式來。
所以,大家學校中學了很多數學,語言,演算法,資料結構,甚至編譯原理,作業系統,其實這些統統是工具,不是寫程式的目的。
寫程式,就是遇到需求,能迅速抽象,理解其共性,並能以清晰的語言描述出來。上述學科,不是幫助提升你的抽象能力,就是幫助提升你的描述能力,大家看是不是這個道理?
所以,我在帶徒弟的時候,有時候喜歡說一句話,其實作為程式設計師,學習一點語文有好處,因為最能培養描述能力的,其實還是語文。英語不算啊,英語雖然也是一門語言,但中國的教育,一般是能看懂,很少從一個英文文學家的角度培養學生用英文的描述能力。只有我們的語文課,這不但是教語言,而且通過無數次造句和作文,在教大家描述問題的組織能力,這個能力在寫程式的時候,很有用。
這個時候,話題就出來了。中國的語文,先是甲骨文,然後古文,然後白話文,大家發現沒有,總體是越來越簡單,這是發展的趨勢。為什麼呢?因為大家覺得,語文就是讓人懂的,太深奧的東東,不太適合普及,就沒有生命力,反而越簡單的東東,普及越快。
因此,請大家注意,寫程式時拆解,是把問題簡單化,不是說把一個問題描述得晦澀難懂,才叫本事。真正的程式高手,都是簡化問題的大師。
當然,從這個話題,我們是不是可以得出一個結論,其實寫程式的方法本身,程式設計的內功本身,其實是沒有什麼語言特性的,C、C++、Java、PHP、Python。。。是不是都用的同一種方法在做事情?
因此,我這裡提出,修煉程式設計的內功,是學習抽象能力和描述能力,與語言無關,換而言之,從任何一門語言入門,都可以修煉到內功的極致,關鍵看你用不用心。
因此,學習期間,我的建議,不要好高騖遠,不要去評價語言的好壞,平臺的好壞,沒有多大意義的,你並不能確定這輩子最終能在哪個平臺下用哪種語言開發。撿著手邊有的書,老師教的課程,埋進去學紮實,出來後,換語言比吃盤菜也難不倒哪去,呵呵。這算是正式回答傑傑同學的問題。
再說一下郭曉同學的問題。他列了一個很偏的題目,就是有兩個變數a和b,不用if、?:、switch或其他判斷語句,找出兩個數中比較大的那個。
這個問題,我不認為是個好問題,因此提出異議。主要的原因就是基於上述的討論,我認為評價一個程式設計師好壞的標準,應該是考察其簡化描述問題的能力,而不是把問題複雜化的本事。
這在學院派裡面很多,這裡大家可不要生氣啊,我知道大家現在基本上都是大學學計算機專業的,算是學院派,但肖老師我的實戰出來的,看法很多都和大家不一樣。
學校裡面,老師的任務是把儘可能多的東東教給大家,因為他不知道以後你做什麼工作,哪些知識沒用,因此,學校老師會盡量培養大家描述複雜問題的能力,這就造成了,學校裡面的考試,是儘量把問題複雜化,多考察大家幾個專案。學校裡面的風氣,也認為能解決複雜問題算高手,甚至問題本身不復雜,大家把它造複雜,來考核自己的能力。
但實際工作中不是這樣的,實際工作中,大家最看重的是能用最簡單的辦法解決問題的能力,因為這樣成本最低,無形中,大家賺錢最多。所以,對問題的抽象拆解和清晰描述非常看重。
很多同學剛剛上班,會很不適應,其實就是這個思路的轉換。學院裡,以複雜為美,而商業公司中,以簡單為美。這應該是一個很大的思想轉變,甚至是世界觀的改變,很難的。一般轉的比較快的同學,在公司裡面進步就比較快,但我也見過工作幾十年了,還是沒有轉過來的程式設計師,一般在公司裡面活的就比較累一點。
建議大家好好思考一下我今天的提法,看問題抓本質,只要能及時理解商業公司的開發思路,理解簡單這個要素,我不敢說大家一定能找到工作,但只要找到了,在公司裡面,基本都能快速融入公司。
呵呵,先說到這裡,好累。大家有問題,歡迎探討啊。
學生評論:
江西師大 朱斌(Java學生) :
很喜歡老師講話風格!!!一口氣讀完了,一開始看這麼長文章,是想複製下來以後看的……
講的非常在理。。我也曾經試圖將電腦想的非常簡單。可實際寫程式的時候就是沒法將其看的簡單。不知道問題在哪
鄭州大學 胡章思(Net學生) :
讀了你這篇文章我感觸頗深,因為我一直以來也是這麼認為的,我感覺程式設計就像造出來一臺又一臺可以聽從你工作的機器,而這些機器連到一塊執行就能產生你所需要的東西。
所以程式設計師最重要的是程式設計的思想,而不是什麼語言,架構,那些東西用到的時候去學習一下就行了,但是如果沒有程式設計的思想,所有的東西都是空談。
其實對於企業的面試,我以為他們出這種題目本意就是刷人,找出思維比較靈活,反應比較快的人,這種人比較適合研究產品,而不一定適合開發產品。
個人的一點見解,呵呵!
北京建築工程學院 陳麗君(C/C++學生) :
說的很有道理哦,很適用於實際工作中,給我們這些還在學校的學生一些啟示!從您這篇文章中,提煉出以下五點,我認為概括得比較精闢的地方:
1、計算機其實就是能以恆定品質不斷重複輸出服務的機器而已;
2、程式設計的內功,就是對這個世界的抽象化理解能力以及描述能力;
3、程式設計序,就是拆解問題,但講究個拆解的技巧和方法,以前人做過的,別做,儘量用,沒有的,做過一次,儘量保留下來,供下次使用;
4、寫程式,就是遇到需求,能迅速抽象,理解其共性,並能以清晰的語言描述出來;
5、寫程式時拆解,是把問題簡單化,不是說把一個問題描述得晦澀難懂。
感謝您分享您對程式設計的理解!
河南理工大學 韓記偉(C/C++學生) :
這幾天,學習一直處於低谷狀態,直到看到這篇文章,才茫然清醒了許多。也頓時找到了以前那種自信和興趣。說的太貼近實際了。
程式設計是有它的趣味之所在的,到一定的時候,真的是會順水順舟,水到渠成。
一直一來尋找的程式設計之精髓:程式融於生活,程式設計提煉人生。
1:我們不要急躁,修煉內功。
2:程式設計趣味生活中無處不在,程式設計能帶領我們觸控到社會的各個角落,躋身程式設計不枉人生
3:玩轉程式設計後,讓人生變的輕鬆愉快
7000塊錢能買什麼?----答一位同學的培訓問題
肖舸老師
昨天接到一個同學的網上提問,由於這位同學沒有實名,因此,這裡沒有辦法確定哪位同學了。
他的問題很簡單:
目前馬上暑假了,他有兩個機會學習深造:
1、某個很不錯的培訓班,7000塊錢學半年,Java語言的入門和深入,每天晚上上課。
2、他老師安排他和研究生同學一起研究嵌入式課題。不要錢。
乍一看,這個問題好像問一個人吃紅燒肉還是吃大便一樣,不用想都能選,但是我在回答這個問題的時候,突然打了個突,發現很難回答。
第一個選擇,培訓班都是上手比較快,老師一般都是實戰出來的,有自己的套路,按照套路來學習,一般說來都很快。另外,老師一般都已經把書讀通了,很容易能幫助同學們快速建立統攬全域性的概念,能跳出書本看知識,因此,獲得的整體印象很好。只有一個問題,要花錢。
第二個選擇,其實看似不收錢,但是就我的經驗,發現這類跟著高手一起參與專案,學習效果一般都不好。這個我也有過經驗。其實這和學習無關啦,主要是人的問題,高手畢竟不是老師,沒有一定的教學大綱,往往是做到哪,用到哪,很少能系統的講解知識,並且,這還和你本人是不是善於分析問題,提問能力高低有關,也和高手的脾氣和態度有關。遇到脾氣不好的,甚至你問了,都不一定回答你。大家可以想想,有沒有小弟弟,小妹妹,問你一個初一的數學題,當時你是否很耐心,很仔細地給他講解透徹了?
這個不是說高手不是人,大家都是年輕人,一個年輕人,學會東東很容易,但是,能耐心地把東東講出來,不容易,同時,對對方提出的弱智問題,不發火,不急躁,任何時候,都有耐心回答,確實太難了。想想看,如果半夜兩點一個菜鳥給大家打電話,問一個奇弱智無比的問題,比如為什麼從Windows介面刪除一個快捷方式,軟體還在?大家會不會發火?
因此,我的第一個建議,任何工作,要有一個職業化的態度,找專業的人士幫助,學習也一樣,不能流於形式,要學習,就要在師生雙方建立某種契約關係,以一定的職業要求,來約束雙方,一個認真教,一個認真學,自然能在短期內取得效果。
上述第二種方式,不是不可以,如果你能和這批高手一起呆10年,其實還是能學不少東西的。肖老師以前就有一個高手,帶了我差不多10年,那個人軟硬體都很牛,我學的是他的軟體部分,呵呵,硬體沒錢買,就沒學。效果很好,不過呢,10年哦,如果當時等著吃飯,我早就餓死了。
因此,短平快的學習,最好找學習班,前提是學習班口碑很好,真的能學到東西。
我給那位同學出了個主意,就是那個培訓班有沒有試聽課程,如果有,去聽聽,做好筆記,and把筆記發點到CSDN學生大本營來,請這邊的Java高手老師點評一下,看水平如何,再決定是否買單,大家覺得這樣好不好?
不過,轉念一想,我又有點不想讓他學了,原因很簡單,錢錢太多啦!7k哦。。。
我不知道這位同學家境如何,大學生,總不太可能自己賺錢,因此都是花家裡面父母的錢。大家可能感覺不深,不過呢,這裡說說肖老師自己的故事。
我在2000年的時候,參加培訓班學習MCSE,那可是花的自己的血汗錢,也是7k多,真的很肉疼。記得我把所有的培訓費用交完,手邊只有1800多塊錢,然後那個死沒良心的老師,居然跟我說,考試費250一門,一共6門。
當我用顫抖的手,再數出去1500元大鈔,大家體會到什麼感覺沒?我這個月的生活費,只剩下300啦。當時我就跟自己說,我絕對不能補考,因為我已經沒有錢補考了,必須6門一次過。
and開始瘋狂K書,課堂上,基本上都是我問,老師回答,我一般都要求老師圍著我轉,不管了,我花了那麼多錢,不學就虧了。6周時間,全部K完,一次過,當時感覺人都瘋了,每天腦子裡都是題。當然,MCSE這會不值錢了,不過,那會,還是覺得自己學到真東西了,我現在做伺服器叢集,很多理念都是學習微軟的Domain概念。
ok了,說到這裡,我的意思很簡單,如果大家能像這樣有割肉的感覺去學習,把自己往死裡逼,這7k就花的值得,該學,如果沒有這個勁頭,學了和沒學一碼事,建議還是省省吧,替你爸爸媽媽省點錢。
不過很遺憾,當時我看到我那個培訓班,很多川大的學生,他們沒有通過考試,像有個小女生,人很新潮,玩的手機也很高檔,不過呢,做實驗我看她一直抄著手,讓她男朋友做,她看,要知道,這類培訓專案,試驗是重要的一環,這麼看能學到什麼,最後當然掛掉啦。我當初光是Windows NT 4.0 Server,都裝了7xx遍。
大家不妨捫心自問一下,學培訓班,是為了找工作,還是為了跟風,還是為了學到真本事?自己有沒有決心,讓這7k物有所值?
我這裡給大家算個帳啊:
一對小城市的中年夫妻,一般說來,只要不是貪官或者暴發戶,基本上靠工資吃飯呢,平均月薪大約4k~5k左右。兩人帶個娃,一般要花掉2.5k左右。剩下的1.5k能存下來。
如果這個娃在上大學,則很可能超支,大家目前自己每個月每年花多少錢,有算過沒有?我見過很多中年夫妻,在娃上大學期間,基本上每個月都持平,甚至要透支,都需要動用老本。
就算按照正常年份,這對中年夫妻,每個月存1.5k,基本上要5個月才能存夠7k,嗯,不止,你們上培訓班,有沒有交通費?有沒有夜宵費?和同學要不要聚聚?這也是消費,7k的培訓班,半年,上下來,花的錢差不多10k了。
也就是說,這對中年夫妻,要存差不多7個月的錢,才夠你上次培訓班的。這中間他們不能生病,不能買衣服,不能出去旅遊,不能吃什麼好吃的,只能按照平時的水平小心翼翼地生活。and,這7k到了我們手裡,再轉交到培訓班手中,1秒鐘都不要。平時大家happy,應該也不會考慮到後面的父母在怎麼生活。
我不是說,培訓班不可以上,但是,考慮到7k這個費用,我覺得有點過了。
按照這位同學的描述,這個班半年時間,每天3小時左右,收費7k,我算了一下,平均每小時收費38.9元。按照工資折算,每月22天,每天8小時,這個班在一個學生身上收取的月薪是6844。這工資不低了,很多一對一的家教,收不了這麼高。
不過大家別忘了,培訓班不是一個學生的,我們簡單按照這個班收了20個學生來計算,則這個培訓班每個月收取的薪水是136888.9元。
接近14萬一個月,怎麼都算是暴利了。當然,培訓班的老師可以振振有詞地說,知識是無價的。但這個培訓班教授的是Java,我學C和C++的,不好評價Java的知識是不是值這麼多錢,不過,我覺得,如果自己有恆心和毅力,自己買點書來K,未必需要花這麼大的代價吧?
我給那位同學打個比方,你自己賣點Java的書籍,自己這個暑假不回家,跑學校圖書館K書,兩個月,如果有人給你7k,你幹不幹?相當於別人花錢請你讀書,看兩個月書,賺7k。
ok啦,節約的成本都是利潤,你自己K倆月書,不教這7k,是不是就賺到了?就算Java很難學,我不信K倆月書,啥都學不會。我學C語言嘛,當初也只用了十天而已嘛。
因此,我最後給這位同學的建議是這樣的:
1、想學習,選準自己的方向,比如Java。
2、買點入門的書,查字典也需要,不要多了,1~2本就夠
3、網上有很多解密的教程,不管是PPT、PDF還是錄影,下一個,下的時候,先不忙去挑選哪個好,隨便一個,只要別人做出來,就有真東西,大家別不信,很多人,挑課程能挑一個月。
4、捏著鼻子把這些東東一股腦看完,我的習慣是邊看邊寫筆記,眼過千遍,不如手過一遍。看書也喜歡抄書,一般一本書抄一遍,怎麼都會了。
5、每章的習題都做,就是給自己下任務,一定做完,做不完不睡覺。
6、這麼堅持兩個月,我不太相信效果不如培訓班,最慘了,這不還有學生大本營嘛,有問題你問嘛。
大家覺得我這個建議如何?
學生評論:
朱志(Java學生):
英雄所見略同啊
賠本的買賣我們不幹
幹了一個買賣就得想法回本兒AND賺回來
我學四年就得花8萬、、也就買個本科證,想想就心疼,所以得使勁兒學
重慶郵電大學 單文彬(嵌入式學生) :
說得很對,有時我也是這樣想的,不過很少有那個毅力,平時要上課,還得要準備考試,用在這上面的精力也少了,有時我真懷疑中國的大學教育真的存在問題。老是在注重基礎,可是去找工作,人家看的卻是你有多少實際經驗。想去學一些實用點的技術,又怕掛科,到頭來學位證都得成問題。到頭來是想學的沒學好,不想學的也沒學好。
合肥工業大學 張慧君(C/C++學生) :
現在學校教的東西都只是個基礎,一些專案中遇到很多問題,都是要自學的!贊肖老師的狠勁兒!現在我看到我暑假要做什麼了~多謝老師教導!
肖舸老師
這是最近的一些思考,由感而發,希望能給大家一點參考。
一家之言哈,歡迎拍磚!
我問過很多年輕的朋友,他們在找工作的時候,最看重什麼?
答案很多啦,公司要夠大,薪水要夠高,要有足夠的挑戰性,要有成就感。。。等等,當然,也有一臉茫然的,那是還沒有想好的。
其實後來我考慮了一下,這個話題可以換個方式問,就是大家為什麼需要找工作?
這個答案就少一些了,賺錢吃飯,養家餬口,為了實現人生價值,等等。
那如果我們再換個方式問呢?
你覺得在一個員工公司裡面工作,最重要的是什麼?
這個答案更少,升職、加薪。當然,偶爾有個別希望成為老闆女婿的不算啊,呵呵。
不過,這些是不是最重要的呢?
我們換個思路,逆向思維一下,通常,一個人最看重的,不是自己能得到什麼,而是自己最怕什麼。大家想想是不是這樣?
從原始社會,甚至再往前,當我們祖先還是猿人的時候,最敏感的是對危險的感應。這個習慣到現在,經過了這麼多代,都還有,不信,在你床頭掛上一幅畫,上面什麼都不畫,就畫一對大眼睛看著你,看你還能睡著覺不?在很多人的場合,只要有人在凝視你,再多的人,再亂的場合,你都能察覺到,是不是這樣?
別說眼睛了,現代人雖然早已脫離原始社會,對於橫向並排在一起的兩個圈,都很敏感,覺得不舒服,因為這讓人聯想到眼睛。為什麼這個讓人敏感,不舒服呢?因為在原始社會,如果有一雙眼睛盯著你,通常就意味著你被某個猛獸盯上了,隨之意味著可能會死,這種眼睛帶來危險,進一步帶來死亡的感覺,一直傳到我們現在。
上述分析麻煩大家別拍啊,我也是看一些心理學書學到的,呵呵。這裡借用一下,想給大家說明一個話題,其實人生活在社會上,公司裡,最關注的,還是安全感。
很難想象,一個人在公司裡面,隨時會被炒掉,或者公司隨時可能分分鐘關門,這個人還能靜下心來做事。
於是大家就開始研究,如何讓我們職業人士,能感到安全一些。
如果學過一點經營管理,都能理解一個概念,就是“核心競爭力”,一個產品,一個公司,一個人,能存活在這個世界上,其實都有他的“核心競爭力”。不過,這個“核心競爭力”究竟是什麼呢?根據我的經驗,一般說來,這個“核心競爭力”還有個名字,叫做“不可替代性”。
目前房價很高,但是大家可以看到開發商還是有恃無恐,隨時準備漲價,大家說了,如果太高,大多數人買不起,那房子賣給誰,開發商哪敢這麼狂?價格太高,也沒什麼炒作空間,那些想買房子升值的炒房客,也不會買,為啥房子還不降價呢?
就我的分析,房價之所以這麼堅挺不降,或者說,房屋這個市場之所以還存在,就是因為購買者中有一部分是“剛性需求”,就是一些人,確實沒有房子住,要結婚,要生娃,要有個家,沒有辦法,哪怕房價太貴,那怕再不合適,哪怕當房奴,也一定要買。就是因為有這些“剛性需求”存在,所以房價即使會跌,也不回跌得太離譜。
大家注意到沒有,其實這個所謂的“剛性需求”,就是房屋這個產品本身的核心競爭力,不可替代性,至少在我們的社會,沒有產品可以替代房子對一個家庭的支撐作用,所以它永遠有市場。
這就可以給大家講清楚了,所謂的不可替代性,就是消費者,顧客,除了找你買,找不到別的替代品,或者替代品無法滿足消費者所有的需求,無法完全替代,比如美國有人住在房車裡面,不買房子,但畢竟是少數,大多數人還是覺得住在房子裡面舒服。
這個“不可替代性”是個很厲害的東東,顧客就算再不滿,也得認賬,跑一圈,也得回來買單。
OK啦,這裡我們可以說出一個人在公司裡面,如何解決最重要的安全感問題,其實就是構建自己的“不可替代性”,或者說“核心競爭力”。當我們在公司業務的某個方面,具有絕對的話語權,佔據重要地位,比如,某個核心產品,是你挑大樑完成的,並一直堅持維護的,這就是一種“不可替代性”,公司不是找不到高手來替換你,而是任何替換你的舉動,都會導致更大的成本開支,那麼,你就是安全的。
當然,做到這一步,也就不僅僅是安全了,升職加薪也不遠了。
因此,我們今天第一個話題,就是建議大家到了公司裡面,先勤奮一點,踏踏實實做幾個產品,做幾個專案,做出自己的成績,讓自己在老闆心目中,成為不可替代的人,那大家以後就會輕鬆多了。
這個過程其實不會很長啦,多則5年,少則3年,只要大家珍惜時間不荒廢,努力度過這段職場入門期,一般都能在後期取得不錯的成績。
不過,說完這點,還沒有完,因為還有個不好的訊息告訴大家。
我學過一點管理,在企業管理中,有個很重要的原則,就是絕對不允許任何人,任何事,具有“不可替代性”。因為這對公司太危險了。
試想,一個幾百人的公司,拳頭產品可能就那麼幾個,其核心技術也就可能掌握在那幾個、十幾個人手中,如果這批人跑到競爭對手那邊,公司馬上就可能倒閉,甚至就是簡單離職,幹別的去,公司都需要付出高昂的成本來彌補這個漏洞。
因此,我們要知道,老闆其實是一種非常矛盾的動物,他一方面希望大家努力做出貢獻,最好一個人把所有的事情做完,成本低啊,但另一方面,他又隨時防著大家,怕大家掌握的公司的核心機密,跑了,他就死了。
這就造成了一種很奇怪的博弈現象,員工不努力,分分鐘被殺掉,員工太努力,老闆也提防著他,結果,員工感到這一點,一種不受信任的感覺油然而生,最終員工反而更容易離職。
很多基層崗位,直接面對的是部門主管,還不是老闆,但這種情況也有,部門主管也防著員工啊,萬一哪個傢伙太厲害,把自己頂了咋辦?但手下都是一群P都打不出來的綿羊,他也不行,他這個部門別想出成績,年終各個部門評比,他也懸。
大家看到這裡,可能就更加混亂了,肖老師你想說啥?這麼亂?
呵呵,我想和大家說,這些,都是正常現象,大家要正確對待。上面說的老闆、主管、員工,誰都沒有錯,而上述的矛盾本身,也都沒有錯。都是合理的存在。
那我們怎麼辦呢?我這裡給大家幾點建議:
1、任何時候,努力學習和做事,都是對的,大家到了公司,先努力做事,爭取早日成為技術骨幹,擁有自己的核心競爭力。這是保證自己安全的關鍵,也是以後升職加薪的關鍵。
2、上述問題,在我們還沒有取得任何成績的時候,其實是沒有意義的,大家無需理會,先做出成績來。要讓老闆提防你,首先你也得有讓他提防的東西啊,你說是不?
3、做出事情來,可能會升職加薪,可能也不會,不排除受到打壓的可能性,建議大家遇到了,平常心對待,先看看呆的下去不?呆不下去,換個公司也無所謂,這時候,你前期的努力就體現出來了,一個做過事的人,和一個沒有做事的人,面試時5分鐘就能看出差距,面試官都是人精,你放心,你的水平他看得到的。
4、如果事情不好也不壞,老闆既沒有炒我,也不給我升職加薪,那就繼續,也許我們的努力還不夠,還不足以讓老闆重視,加油。當然,還有個重要的問題,你對這家公司需要的技術,業務是不是已經學完了?沒有就堅持做事,學習,什麼都學會,什麼都能做,老闆還看不到,叫做他瞎了眼,那個時侯再閃人,效果會更好。
5、當然,自古知兵非好戰,我們也不是為了跳槽而跳槽,在公司一天,就認真做事,平時的態度也要端正一點,多說點公司的好話,覺得不對的地方,私下,記住是私下,給老闆發封電子郵件,語氣平和點,站在公司的立場上,幫老闆改善公司的狀況,老闆會感激你的,這一來讓老闆認識到你的重要性,二來給老闆吃顆定心丸,表示你還是支援公司的,老闆會報答你,用升職加薪來報答你的。
6、不管公司同不同意,努力構建自己的不可替代性還是沒錯的,畢竟我們的壽命比很多公司都長,公司和老闆不可能養我們一輩子,有了本事,到哪都能吃飯。因此,先做好自己。
7、當然,既有了不可替代性,又不讓老闆擔心的員工,同時還不斷幫老闆提升工作的人,就要換個名字了,這種人一般叫做公司的“核心骨幹”,或者乾脆叫老闆的“心腹”,如果你是老闆,你會怎麼對待這種員工?
其實,上面說了這麼多,歸根到底還是一句話,做好自己,做好每件事,我們在公司裡面,不管是開發程式的研發人員,還是門廳的小MM,都是在做同一個東西,叫做“做事”。如果一個公司裡面,每個人都能做好自己的事,同時幫助別人做好他們的事,這個公司又怎麼會垮?老闆又怎麼會提防員工?
在公司裡面希望有個好的發展,不讓老闆提放你,最簡單的辦法,就是做好自己事情,認同公司的企業文化,沒有對公司的敵視心理,能自我調節各種工作壓力。
呵呵,以上是個人的一點經驗之談,大家參考一下。
學生評論:
洛陽理工學院 王富濤(C/C++學生) :
我拍。。我拍。。。拍桌子。。講的太好啦。。呵呵。感覺老師您太可愛了。。
湖南文理學院 張清山(Net學生) :
感覺有物件導向的影子,既要“封裝”好自己,又要給別人提供很好了解自己的“介面”。當別的事物對自己產生了依賴,也就體現了自己的價值!肖老師,理解的對不?
文達資訊科技職業學院 賀強志(Java學生) :
每個人都有階段性目標(當然也各所不同啦),就像老師說的那樣——要多思考。富有激情的做每件事,別讓自己覺得很輕鬆。目標完成一個,在挑戰下一個。你能說自己沒有或一直沒有核心競爭力嘛!~
期待(C/C++學生) 2009-08-04 23:44
受教育了!
肖老師研究方向果然廣泛:技術、管理、心理學、房地產。。。,僅單就這片文章,更可窺見在文學上的造詣!
HOHO,佩服!
簡述C和C++的學習歷程
肖舸老師
總是被同學們問到,如何學習C和C++才不茫然,才不是亂學,想了一下,這裡給出一個總的回覆。
一家之言,歡迎拍磚哈。
1、可以考慮先學習C。
大多數時候,我們學習語言的目的,不是為了成為一個語言專家,而是希望成為一個解決問題的專家。做一個有用的程式設計師,做一個賺錢的程式設計師。我們的價值,將體現在客戶價值上,而不是語言寫得好不好看。
C++是C的一個物件導向的解釋,C++為C擴充了大規模工程應用,複雜的系統結構的組織和掌控方法,但是,我認為,C++骨子裡還是C的。
畢竟,解決具體問題,每個函式內部,都是用C的方式寫程式,還是程式導向的。
因此,想要學習好C++,我的建議,先學習C,先學解決問題的能力,再討論解決大問題的能力。就是先學習怎麼走路,再學習怎麼跑步。
2、學習C的過程中,一定要理解結構化程式設計思維。
為什麼呢,我前面有文章說過,軟體語言的發展過程,就是一個資料私有化的過程,大型工程應用,強調高內聚,低耦合,模組化設計,保持程式碼最大的靈活性和安全性。
這是現代工程化開發的核心和靈魂。
因此,利用C這門語言入門,藉此理解結構化開發思維,可以說是個很方便的路子。因為C的函式,本來就是為重用做準備的。同時,全域性變數和cpp內部私有變數的差別,其使用原則,這些都能學到很多結構化開發思維。
3、開始學習C++
C++不難學的,很多人覺得C++難學,其實是因為它在C之外,又提供了很多的概念,尤其是物件,很難以理解。
不過我經過這麼多年,把這個問題反而看淡了,我認為物件導向相對程式導向,僅僅是結構化程式設計的一個具體體現,是編譯器提供手段,強迫程式設計師必須遵循資料私有化的一個例項,C++和C的關係,最核心的莫過於此。
現在我們回到C再看看,如果我們把一個全域性變數,寫到一個cpp裡面,並且在對應的h檔案中不宣告,它是不是就只有這個模組可以使用?它是不是就是私有變數,以這個理解,類能明白了嗎?
4、學習C++的深入技巧
C++在類的基礎上,經過這麼多年的發展,其實提供了很多深入的概念,看起來很複雜,其實我看也很簡單。比如模板,我的理解就是“類的類”,大家說是不是?
既然模板理解了,STL,ATL這些,靜態模板庫,動態模板庫,還難理解嗎?就是一大堆類的類,可以藉此實現很多應用中需要的類,不需要程式設計師再自己寫而已。
ok,STL都理解了,泛型開發還難嗎?所謂泛型開發,其實就是我做一個模板,來定義一套演算法規則,但是呢,我希望這個演算法規則,能進一步抽象,對核心資料型別不要限死,我把各種資料套進去,都可以用,這樣,僅演算法這部分,我不需要重寫了。你想想是不是這個道理?
學到這裡,C++和C,其實已經差不多了。再學語言,就是求全責備,過於鑽牛角尖了。
5、學習應用開發
前面說了,學習語言,目的不是讓別人認為自己是專家,是為了寫程式賺錢。因此,語言學完,要學習應用開發。
什麼叫應用開發呢,我會一門語言,但是,客戶不懂,客戶說的很直接,在Windows下給我寫個程式,我要什麼什麼功能。為啥Windows呢?因為我習慣。
OK,很多時候,應用開發要尊重客戶習慣,一般說來,語言這個東東,還是要結合具體平臺的開發,才能開發出有意義的應用程式賣錢。那麼,一般說來,客戶端是Windows系統,伺服器是Linux,這些都是行業習慣,嵌入式不好說,各種平臺都有,Palm,S60,Linux,WinCE,等等。要根據自己的目標客戶來定。
當我們選定目標平臺後,有一個問題,選什麼語言,很多時候,學生和商用程式設計師差別就在這裡,學生一般沒得選,自己會啥就用啥唄,企業裡的程式設計師不會,要先評估需求,看哪個語言更合適,不會的語言,要去學。
ok,假定我們選了C和C++,那麼,我們需要選擇開發平臺,Windows下不用說了,VC,這是最好用的,Linux下呢,gcc,其他的也差不多。
假如我們開發VC,並且使用C++,這個時候,才需要考慮學習MFC了,因為這是微軟的標準類庫,至少Windows平臺下,它最權威,你看見沒有,我們從學習開始,走了多少步,才走到MFC?是不是MFC不是學習C++上來就必須學的?
6、學習MFC
學習MFC,很多人一上來就開始看其體系架構,看得一頭霧水,那個模組關係依賴圖,我到現在都看不懂。
呵呵,其實不是啦,和學語言一樣,我們學MFC的目的,也不是希望成為MFC的專家,而是要利用MFC開發Windows應用程式,為我們賺錢。看見沒?MFC是手段,不是目的,目的是開發Windows程式。
其實Windows下,有一套很標準的C介面,叫Win32API,這個才是Windows的標準程式設計核心,因此,學習MFC,真實的目的是理解Windows程式開發,建議可以先學習Win32API,看來我們又回到C了哈,呵呵。剛開始學C有用吧?
7、Win32API
其實Win32APi不難學的,因為雖然它很大,有很多介面,但不是必須的,我們真正做個簡單的Windows應用,其實用不到這麼多的。做個簡單的Dialog,然後實現個功能,你遇到的介面函式,其實絕大多數,就是以後常用的了。把常用的記熟練,就ok了。
關鍵是,這個時候要通過WinMain方式,去理解Windows的事件機制,這是核心,其實說起來簡單得要死。就是以前你的程式,由於沒有系統支撐,很多事必須自己做,比如檢查滑鼠和鍵盤輸入,你需要寫個死迴圈,自己不斷去看,而Windows說,這些事你不要做了,我來做比你好。你沒事就玩去吧,我把和你相關的訊息放到一個佇列裡,就是你的事件佇列,你自己沒事去找找看,有沒有新訊息來,有就做事,沒事就玩好了。很簡單是不?
當然,Windows是多工作業系統,有時候,我們的邏輯需要併發一些功能,比如說,我在等滑鼠鍵盤訊息的時候,需要再看看印表機準備好了沒有,這裡就需要理解平行計算了,這和語言無關,和作業系統無關,這是另外一個話題,這裡不多說了,你可以自己找找執行緒開發的相關資料看。
看見沒,為了學習好Windows程式設計,其實我們不僅僅需要學習語言,還要學習作業系統,平行計算原理,記憶體原理,可能有時候還需要學習網路通訊,等很多知識,所以說,單憑學習語言,是成不了商用程式設計師的,一個合格的程式設計師,需要理解的東西,太多了,要廣為學習。
當我們把Win32API,以及基本的視窗化程式設計理解了,就可以回到MFC繼續學習了。是不是有點遞迴返回的意思?呵呵。
8、回到MFC
原來學MFC很難的,因為其封裝了太多細節,很難理解透徹。不過還好,我們有侯老師的深入淺出MFC,去找本來看看,如何從Win32API的純C程式設計,改變為MFC的C++方式,看這個最快,基本上前6章看完,已經會了,這裡我就不多說了。
9、COM
COM、COM、COM,我最頭疼的COM,呵呵。
COM就是一種遠端過程呼叫,即你請求的程式碼是在另外一個程式中執行的,通過某種通訊協議來回傳遞引數和結果。僅此而已。DCOM進了一步,服務者可以在另外一臺計算機上。在公司開發中,大家可能各做一塊,如果要合作,Windows下建議多使用COM。(我個人喜歡socket通訊哈)
簡單說,COM提供了一種機制,可以跨程式通訊,甚至跨機器通訊。不過,為了傳遞各種型別的引數,COM可謂是無所不用其極,它發明了智慧指標,可以指向任何型別的資料,同時,為了實現智慧指標,它使用了大量的C++泛型設計,看見沒,C++的基本功就起作用了,還用到了ATL。
學習COM,要注意一個介面的概念。由於開發者是不同的人,呼叫程式和服務程式,可能不是同一種語言,OK,不能簡單提供一個C或C++的.h檔案來解答介面,因此,COM提供了標準介面,使用者在程式內部,以查詢方式獲得可用介面,進而以介面ID呼叫。很累人的。
學會了COM,就可以多理解一點ActiveX了,那麼再學習一點dll(動態連結庫)的知識,我們就已經可以寫OCX控制元件了。一般說來,OCX控制元件是個很好的設計,哪都能用,一個軟體的模組,最理想是開發成這個樣子,比exe靈活。
10、沒了。
按少林派說法,學了上述這些,其實已經算打過18銅人陣了,已經可以下山助明主,掃奸佞,扭轉乾坤,解萬民於倒懸了。
不過,關鍵是你通過上面的過程,是不是已經學會了學習的方法,再遇到新的東東,是不是已經不難學了?這大概就是武學中的悟性了,有了這個根基,以後只要慢慢修煉,估計20年後,可與天下英雄一較短長了。
呵呵,你說是不是?
呼呼,好累。
學生評論:
董志勇(Net老師) :
總結很好,現在太多學校、同學以上來就搞物件導向,Windows節目開發。或者JAVA裡面就搞JSP。往往除了問題的時候都不知道怎麼解決,往往要花很多時間來補最基礎的東西。
程式導向都不懂,搞什麼物件導向呢!
武漢交通職業學院 胡軍(C/C++學生) :
謝謝老師,受益了!哈哈,我是學VC的,去年暑假開始學的,然後自己在寢室折騰了一個月。因為當時聽說有VC,也有VC++,我想,學VC的話,那就不用學C++了吧?(我太懶,就想學個C),結果頭弄暈了,又跑去蹲圖書館,總算把C++學的差不多了(像老師您說的一樣,學了C,C++確實很好學)。現在在做MFC,也有模有樣的。哈哈。
迷茫(C/C++學生) :
謝謝肖老師 這段時間一直在考慮怎麼學C 要學到什麼程度 很多人說C是做底層開發的建議深學軟體開發還是重點學C++ 看來C還是不能囫圇吞棗的學 再次感謝
海南大學 張繼興(C/C++學生):
看了不少文章,我想這篇文章應該是很適合我了.
學了c,c++,又瞭解一點mfc.不知道下一步怎麼走.
肖老師的這篇文章正好給了我方向
謝謝~~~
湖北大學 馬剛(C/C++學生) :
今年剛畢業,在做C方面的開發,記得開始學習C的時候覺得C只能做些簡單的工作,不知道在哪兒聽說的用C語言開發的程式超過5W行就會出現很多問題,後來學了C++,java覺得類的作用很強大,呵呵,今天看了肖老師的文章收穫挺大,其實很多東西不用類照樣可以做好,只是自己要做的工作就多了。
IT業的職業細分
肖舸老師
在大本營看到很多同學討論以後的出路,感覺到大家對IT業職業的細分還不是很瞭解,這裡就我的經驗,給大家一點參考,希望能幫到大家。
一家之言哈,歡迎拍磚和補充。
我在IT業很多年,也仔細分析過IT業的職業構成,就我的瞭解,其實IT業也在細分,大致分為如下幾種:
1、研發,包括軟體研發和硬體研發,就好比我們這個論壇大多數朋友,在一個公司裡面完成專案開發,或者定製產品,一般說來,軟體研發基本上就算產品的設計者和製造者,硬體研發,只能算設計者。因為後面還有生產環節。
通常研發崗位,包括RD,QA,以及配置管理員,架構師,小組長,專案經理,研發助理等,就是研究部分所有的職位。部門經理一般我沒有計算在內,感覺部門經理管人,應該算管理崗位。不過有些小公司,部門經理和專案經理,甚至架構師,都不分,因此需要具體情況具體分析。
其中RD,就是我們說得最多的設計人員了,這個大本營的同學,以後估計大多數都從這裡起步,當然,做QA測試的也不少。
RD這個詞有講究,就是設計和實施,是兩個意思,設計,是決定一個東西怎麼做,實施是把它做出來,我們剛開始,可能都是先做實施,慢慢走到設計,模組設計,系統設計等等,如果做得好,以後慢慢專門做設計,就是架構師了。
軟體人員一般RD不分,設計者通常就是實施者,因為基本上程式敲完,產品也就出來了。硬體人員則不同,一般就是設計者,以及第一輪白盒測試的QA,自己測,當產品測試穩定,定型,就可以交給中試部進行產品測試,最終上線貼片生產。
QA這裡面一般細分為軟體測試和產品中試,像華為、邁普這類大中型企業,以生產硬體產品為主的公司,都有自己的中試部,中試部簡單說,就是專門測試硬體的,比如各種靜電測試,溫度測試,跌落、震動測試等,為產品最終上線做準備。我想,大多數同學可能對軟體測試熟悉,對產品中試可能不太熟悉,不過差不多就這麼多東西。
軟體研發通常還有個角色很重要,就是配置管理員,一般小公司沒有這個角色,由負責的測試人員兼任,大公司會專門設定這個角色,並且這個角色還有商業祕密保全的功能。
我們軟體人員開發的產品,在自己的機器上,一般叫測試版,只有提交到CVS或SVN等版本管理系統,才叫產品,測試部不是從我們手裡拿軟體去測,而是由配置管理員在中心伺服器上,將軟體產品從原始碼編譯成可執行檔案,生成安裝程式包,然後發給測試部,測試部測試完畢,返回測試報告,公司領導簽字後,以後軟體產品的發貨,就是配置管理員負責發貨。
大家明白了吧,這裡面很嚴格的,在大公司,軟體一旦投測,如果RD發現有個小bug,小公司可能打個招呼就改了,專案控制流程上看不出來,但在大公司,必須發文,說明上一版本作廢,然後重新發測試申請,重新提交程式碼走流程,專案流程上就記錄,廢版一次,以後就是扣工資的依據。因此,大公司的程式設計師一般比較嚴謹,發版測試很謹慎,就是怕出現這類bug,這樣的缺點是對市場的反應不夠靈敏,可能客戶提交一個bug,RD改只要幾分鐘,但是流程要走一兩天,但是好處是產品質量有保證,每個人的工作結果都記錄在案。便於管理。且程式外洩幾乎不可能。
我以前有篇文章說,國外很多程式設計師,可能在一個公司工作一輩子,都沒有見過自己服務的計算機,就是這樣的,RD都在終端工作,自己本地測試好了,提交到中心伺服器,由配置管理員負責最後的編譯和提交。
2、市場,這大約是最多的,往低裡說,電腦城的談單員,就是市場,往高裡說,華為、Cisco的地區總裁,其實也是市場角色。市場根據個人經驗,又分為Sales和Marketing,前者是簡單的客戶成交服務者,即客戶準備購買,完成買賣手續,協助送貨什麼的,Dell那邊的電話銷售小姐,大約就是這個角色,由於Dell是定製,因此她們還需要下訂單。後者就是屬於較高層級的銷售人員了,可以引導市場,引導客戶,促成交易。
一般說來,市場其實也是個技術活,很少有朋友是天才,上來就可以做到Marketing的,都是從Sales先入手,慢慢練,這個過程,可能比一個程式設計師走到架構師還難,很多銷售人員,做一輩子,都做不到Marketing的,不信,去商場看看售貨員,公交車的售票員,都是Sales。
這裡說說廣告,廣告我的理解,就是Marketing的一個分支,吸引眼球,吸引客戶,促成交易。
我們經常說,每個行業都有英雄,其實市場中,Marketing就是英雄,一般說來,走到這一步,就可以站在這個行業的巔峰,出去講課,拿最高的佣金,享受獵頭挖角的快感等等。不過,很難的,有句話請大家注意,“這個世界上,99%的銷售人員,都不知道自己在幹什麼,說的就是這個問題”,那1%才是Marketing。
通常情況下,開發人員瞧不起市場人員,總覺得對方是耍嘴皮子的,但市場人員同樣也瞧不起開發人員,總覺得這幫書呆子不創造價值。呵呵,大家別生氣,大多數公司,把研發單位,看做最大的成本單位,只花錢,不創造價值的,雖然我們設計了產品,但公司的財務上,這部分是沒有價值的,產品價值是在銷售出去以後才體現出來,因此,財務上看,研發部門總是赤字一片。
其實,真正厲害的市場人員,我們研發人員還是要尊重的,要知道,一個研發人員要成名成家,其實很容易,隨便什麼東西,攻克一個難點,出幾篇論文,出一個產品,這個研發人員就可以在公司裡面牛起來了,一個研究院,至少20%~30%都是這種牛人。但是,市場要能做到Marketing,前面說過,1%,可能都不到,你說這幫人算不算精英?
3、技術,終於說到技術了,這是最奇怪的一個職業,本來沒它的,但就是出現了這個職業。其實技術在國外,應該叫做Service,即技術支援。
技術,往低裡說,電腦城的拼機器的,也是技術人員,通常由談單員兼任,談單員通常由大學生勤工儉學兼任,呵呵,一起練了。再往上,客戶那邊送貨,把包裝拆開,技術,聯網,技術,除錯網路,技術,再大了,這裡說句話,希望大家不要見怪,網路管理員,其實也是技術。
以前有段時間,MCSE很流行,我也去考了一個的,但是,後來發現,研發單位招人,根本不看這個,因為這個學習的是如何操作機器,而研發是設計機器以及操作模式,讓別人操作。CCIE也是啊,因此,當時很多說法其實是有點誤導,說學了這些證照可以不上大學,成都還出現過一個娃娃,高三畢業考過了MCSE,就不上大學了的事情,現在不這麼說了,因為畢竟上大學才是王道。光靠這個證照,是吃不了一輩子飯的。
在華為,邁普,技術是一個專門的職業,負責給客戶送貨,因為他們出路由器,安裝配置有一大堆事情,電信局又是大牛,人家才不會去管這個事呢,廠家來人解決。順便說一句,電信局守機房的,也是技術。
原來沒這個職業,就要研發人員兼任,因為這畢竟是個技術活,不過,久了研發人員不幹了,天天出差,還做什麼研發,老闆也不幹了,因為研發人員工資高,在大家看來,連連線,配置幾個IP地址,這不復雜,如果用研發人員幹,成本太高了。
喏,就這樣,一個獨有的職業,技術,在IT企業被定義出來,這部分主要找一些較為低端的人才,二本啦,三本啦,自考啦,總之,我看見很多年輕的朋友,希望進入IT業,沒有本錢,不會做老闆,也進不去一些大型公司的門,一般選擇,就是在電腦城做技術起步。
現在很多系統整合公司,他們定義的專案經理,和研發單位的專案經理不太一樣,其實也是技術,這類公司一般都是經銷商,不是製造商,自己沒有產品,靠代理別人的產品再銷售來獲取利潤,一般說來,渠道這個詞,就是指這類公司。這些公司的技術人員,主要工作就是看,我代理了哪些產品,哪些產品利潤高,我怎麼給客戶報方案,把利潤高的產品設計進去,等等。
這裡面其實也有設計工作,但是,顯而易見,這部分設計工作和前面的研發架構師的設計,是兩個層面。
當然,這裡有兩個特例,一個是目前很多中小型,做網路應用的架構師,他們也有這個設計部分,這些企業一般都是專案制,沒有自己的產品,每一單都要定製開發,這類和前面的系統整合設計有一定類似,因為很多專案包括了裝置採購什麼的。
另外一個特例就是系統整合設計,通常就是Marketing的活,因為自從IBM提出賣服務的概念以後,給客戶交鑰匙工程成為主流,大家都說自己是解決方案提供商,因此,Marketing通常就是採集需求,利用本公司產品或者代理的產品,組成解決方案,一體化提供給客戶。
因此,從職業發展途徑,技術一般說來,也可以走到Marketing。通常Marketing有兩個產生渠道,Servicer技術,或Sales銷售。
當然,這裡也看出技術這個職業的短板,因為Marketing畢竟是銷售為主,因此,銷售能力佔主導,技術人員由於長期和機器打交道,因此,恐怕也是機器臉居多,賣東西能力很差,因此,技術能轉成Marketing的,更少。
當然,也有技術人員轉回來做研發的,不過,也很少,起碼我沒有看到什麼成功的案例。
4、管理,這裡就簡單說啦,一般說來,管理本身是抽象的,並不是IT業的管理,一定只能從IT業產生,或者一定只能管IT業,IBM的總裁郭士納,就不是IT業出生,管理的英雄們,例子就太多了,他們有個統一的稱呼,職業經理人。
前面說的幾種,總的來說,都可以最終成長為管理,不過,管理也是最難的,一來人是最複雜的,不像機器那麼好打交道,二來,管理要看運氣,單純說水平不行,得老闆看得上才行,你說是吧?
因此,研發,銷售,技術,要想成為管理,這個成功率,一般不高於1%的,不信,數數你們公司管理人員和普通員工的比例,或者,學校裡面老師和學生的比例,雖然這不準,但基本能說明一點問題。
由於我們這個大本營不是管理論壇,管理就不多說了。
5、生產,這個崗位其實各公司都有,不過大多數老闆不承認,員工也不願意承認,呵呵。
大型公司,如華為、邁普,Intel等,以生產硬體產品為主的,基本上都有生產部,記住啊,這個生產部很重要,生產,倉儲,物流,基本都在這一塊。
千萬別小看生產,目前生產線上的工人,由於要開貼片機什麼的,基本上都要大專學歷,還要培訓的,我不想明確建議,不過,有些目前找工作特別困難的同學,不妨考慮一下這類大型企業的生產崗位。
大型製造業,如美的,海爾等,他們很多管理層都是生產線上下來的,生產線上也不都是工人崗位,很多生產工藝師,工裝設計師什麼的,都需要設計這門工作,如果一個學歷較高的人進入這個部門,只要自己肯努力,其實也很容易出頭,畢竟周圍的競爭對手太低了,呵呵,比起研究院來說,要容易得多。
6、其他,這就太多了,老闆就屬於其他了,呵呵,創業也屬於其他,由於這部分不帶普遍性,就不多說了。各級行政人員,如財務,祕書,都算其他吧。
上面是我的一點總結,大家可以參考一下,到招聘會時,也可以按照這個分類問問面試官,你們這個職務,是研發職務還是生產職務,呵呵,可能某些小公司的面試官會被你問住。
學生評論:
杭州電子科技大學 鄧曉華(C/C++學生):
哇,這是我想看到的,老師辛苦了!
對天IT職業的分類,聽老師這麼一說,有了一個初步的瞭解了。但是我現在還有個問題得麻煩老師:對於經常談的計算機專業學生的發展方向,我一直不是很清楚,比如大家說網路方向,還有什麼往底層發展,做嵌入式開發等等。對於這些我一直很糊塗,所以想請問老師:計算機專業學生的發展方向一般分幾類?又該如何選擇發展方向?
說來慚愧,這些問題,原本應該是我通過網路查詢等方式就可以解決,可是我嘗試過,發現現在依然糊塗。也許和我換學校有些關係,我是07年上大學,前兩年是在一個學校讀電腦科學與技術專業。今年通過考試,考上一個稍好點的學校,不過現在專業換成軟體工程,我對校方的培養計劃也不是很清楚。
雖然慚愧,可是依然希望老師能於百忙之中抽出一點點時間,能夠說一些相關的,相信這些對其他同學也很有用,學生在此先謝謝拉!
邱滄淮(C/C++學生):
謝謝,解惑了~1本以下的當自強!我連3本也算不上,不過我不灰心,努力提高自己,有一天我也會向他們看齊的。收藏了!
上海外國語大學 張吉(PHP學生) :
感覺自己不適合研發,本想離開自己喜歡的IT業,但看了樓主的文章,發現出路還是很多的,比如技術和銷售~
肖舸老師
這是一位同學給我的留言,諮詢方向選擇的問題,最近被同學們問這類問題很多,感覺有些代表性,因此這裡統一作答。
一家之言哈,歡迎拍磚。
原文在這裡
========================================
肖舸老師你好:
看了您對那麼多人的評論之後,覺的您的建議很中肯,所以想向您請教。
我去年大學畢業(專業是通訊工程), 覺得自己虛度了光陰,而且自己性格有點內向,覺得該從事技術,所以我毅然放棄了應屆畢業生的優勢,找了家培訓機構去學習java和.net開發。經過一年的學習,發現自己對技術不是特別感興趣,沒有專研精神,覺得自己應該很難在技術上達到一個很高的高度。因此,我想從事與業務相關的工作,但是又覺得自己學了那麼久技術,放棄又太可惜了。而且,我還不知道自己在銷售這方面能不能做好。這讓自己更加迷茫了!我該如何在兩者中取得一個平衡,又該怎樣選擇工作?我已輸在了起點,不想在終點時還是落後別人一大截。未來我想好好規劃,好好度過,不管是為了自己,為了父母,還是社會。我可以忍受平窮,但是不能容忍自己平庸。
前方的路到底該怎麼走?自己花費了那麼多時間與金錢是否值得?未來自己能否達到自己想象的高度?我完全迷失了。在有幾個月我就要培訓完了,將要再次找工作,再次面臨抉擇。所以我懇切的想知道老師的建議,非常感謝。
向所有CSDN老師致敬
我的回答
========================================
這位同學你好:
從來信中,感覺問題比較多,我試著講一點,你儘量參考吧。
我先講個故事吧,是古代的一個墓誌銘:
吾表兄。
年四十餘,始從文。
三年不中。
遂習武。
校場發一矢,中鼓吏。
逐之出。
改學醫。
自撰一良方,服之,卒。
好笑不?這個人可以說是一類人的代表,就是做事情缺乏恆心和毅力,我們說做事情靠天分,但是,我個人的理解,恆心和毅力也是必要的,我還記得小時候學習的一篇課文,講一個小貓去釣魚,結果它一會兒捉蜻蜓,一會兒捉蝴蝶,總是釣不到魚。不知道你看過這篇課文沒有?
我看了你的信,你說大學沒有學習好,虛度了光陰,現在培訓班,覺得自己缺乏鑽研(注意,不是專研)精神,不想做技術了,想做業務,我根據你的文字,理解這個業務就是銷售工作。但是又覺得自己這麼多年在技術上投入過多,捨不得。
這裡我說幾點:
1、不管選擇技術和銷售,其實都是可以的,這個世界有很多行業,每個行業都有自己的英雄人物,你選擇任何一行都有道理,我支援你選擇的態度。
2、不管是技術還是銷售,其實都需要鑽研精神的,技術上,可能針對一個問題,鑽半天,銷售上,針對一個客戶,也需要不斷鑽研,去仔細研究客戶這個人,他喜歡什麼,不喜歡什麼,然後投其所好,但是,提醒你,銷售上,不會針對每個客戶都有一本教科書,因此,鑽研起來更加看天分,很多時候,你怎麼了解一個客戶的喜好,都是一個大難題。
3、感覺你想轉行的目的不明確,有畏難情緒,好像主要是因為技術太難,就不想學,想轉行,我認為這不好。任何一個行業都有風光的一面,也有艱辛的一面,你因為害怕技術艱辛,就跑去轉行,那你想想,哪天感到銷售艱辛,又轉行,是不是就變成上面的“我表兄”了?那一輩子是不是就事事無成?你想過這種生活嗎?
4、但另外一方面,你覺得自己技術投入很多,選擇的時候捨不得,我也不贊同,男人大丈夫,死就死了,怕個P啊,選擇講究的是決斷,一旦選定,“雖千萬人吾往矣”,做事情不要瞻前顧後,患得患失。
5、永遠不要因為怕什麼而改變自己的生活,你選擇職業,就是選擇一種生活方式,但是,如果你是因為“怕”技術上很苦,那麼,很不幸,我得告訴你,你到銷售上會更“苦”。銷售是一門很辛苦的行業,我做過一點點,這麼說吧,以常規的學生思維,恐怕很難堅持下來。
曾經有個小姑娘,問我怎麼才能找到工作,我想了一下,說你把門關上,她就關了,然後我給她一面鏡子,讓她對著鏡子把一段話念7遍:“我就是一個要飯的,我今天必須把飯要到,不然我明天就會餓死!”,她當時臉漲得通紅,不過還是堅持念下來了,一週後,她找到了工作。這個故事你能體會到什麼嗎?找工作就是銷售,銷售的是自己,你可以先試試,如果你找工作很容易,證明你有銷售天賦,可以考慮從事銷售行業。
6、任何一個行業,都需要恆心和毅力,技術如此,銷售尤其如此。日本有個銷售大師,叫原一平,是推銷保險的,他跟蹤一個客戶,跟蹤了十五年,你猜怎麼著?那個客戶死了。
如果你是他,會不會就此放棄?客戶都死了,十五年心血白花了,是不是很傷心?
他不是,他還是堅持去,然後那個死者的兒子說,你不用說了,我跟你買,然後跟他簽了一份鉅額的保單,他賺了很多錢。
這個時候你看見這個人,會不會覺得他很成功?但是,你看見了他十五年的艱辛嗎?
好,現在問題出來了,如果你轉行銷售,你可不可以跟蹤一個客戶達到十五年?
7、任何一個行業都有其風光的一面,也有其悲哀的一面,技術,就要忍受無窮無盡的寂寞,別人玩的時候,你不能玩,別人happy的時候,你得去看書,這是職業特點,IT業更新換代太快,不努力學習,很快就被淘汰。
我三十歲過生日的時候,和朋友喝酒,別人問我有何感想?我想了一下,說了一句很狂的話:“二十歲到三十歲這十年,勤奮這兩個字,我背得起!”,大家都不說話。因為後面有句話我雖然沒說出來,他們都知道,我十年沒有看過電視。因此,如果你能堅持十年不看電視,每天晚上看書的話,我想,你的技術一定會很厲害的。
做銷售呢,也差不多,天天晚上陪客戶,看似很風光,但是,你要注意,這是陪別人,不是你的生活。
我也見過另外一個銷售高手,有天晚上飯館出來,跑到我那裡哭,(先說明,那會他年收入十幾萬),可他說這真他娘不是人過的日子,然後就吐,吐到最後,吐出血來了,我也嚇到了,打120把他送到醫院,一檢查,胰腺炎,再晚送過去半小時,人就沒了,這是醫生告訴我的。
這就是銷售,不是說銷售一定是喝酒吃飯,但是,中國的市場,是關係營銷,必要的勾兌,是少不了的。
上面兩種生活,你願意選擇哪種?
其實仔細想想,你會發現,人生無坦途,很多東東,不是想象中那麼美好,但是,也不一定,只要你找準一條路,堅持做下去,做到這個行業最好,你看到的,就全部是這個行業最光輝的一面。
但在這之前,你必須先忍耐,積累。根據大多數人的感覺,除了投胎投準一點,其他時候,人生一般沒有捷徑。
你說呢?
學生評論:
ZheJiangUniversity 曉磊(Java愛好者) :
我覺得肖老師的話很中肯,都是肺腑之言,,用心良苦,說實話現在哪個行業想混好都難,我們往往只看到少數人成功的一面,卻沒看見他們背後的付出,也沒看見更多的失敗者,我們需要的是一種專注的精神,平和的心態,不要浮燥的心。
昆明理工大學 李俊(C/C++學生) :
被肖老師的那句“二十歲到三十歲這十年,勤奮這兩個字,我背得起!”感動了,的確很多時候是我們自己的毅力不夠,堅持一個自己的方向就好!大家都加油!
河南成功學院Gwolf團隊 趙鵬(C/C++愛好者) :
“選你所愛,愛你所選!”
我們大學創辦人題詞,我銘記於心……
今日,又在肖前輩這裡遇到相同話題。是呀,人的選擇有很多,也因為選擇太多,才更容易放棄。我也好幾年沒看過電視了,好幾年沒有玩網遊了。一個帳號玩了兩年還沒過25級……
路漫漫,其修遠矣……
每隔幾日,便來讀讀前輩文章。字裡行間就兩字:樸實!
相比之下,晚生深感慚愧……
年輕人容易浮躁,但年輕不能成為浮躁的理由。
tongshou(C/C++愛好者) :
"...我十年沒有看過電視.."
肖老師,您真是個超人!這都能做到,還有什麼做不到的!
您的這篇文章寫得很棒,相信會讓不少人、尤其年輕人從中受益!
山東科技大學 李宗鵬(Net學生) :
感覺老師這句話太精闢了:人生無坦途,很多東東,不是想象中那麼美好,但是,也不一定,只要你找準一條路,堅持做下去,做到這個行業最好,你看到的,就全部是這個行業最光輝的一面。
楊中科老師
一、這多東西啥時候能學完?
現在IT新技術日新月異。就常用程式語言而言,有c/c++、彙編、java,c#、Python等;作業系統平臺有unix/linux,windows系列;開發工具有VC、VisualStudio2008、Eclipse、NetBeans等;每個大平臺下,還有很多的的方向:如網路、資料庫、指令碼、HTML、動態網站、遊戲開發等;有人還在學Dreamweaver做網頁、Flash做動畫、Photoshop做美工、3DMax做三維動畫…………是的,我們什麼都想學。恨不得把所有的知識統統都塞到肚子裡去。看到什麼,想學什麼!
今天看這VC的書,明天又看Java,後天又看C#,東搞西搞!看到別人做網頁。自己興趣了來了。好,學html語言,我也做網頁,聽說做網頁要會“網頁三劍客”,所以又想學Dreamweaver、Flash。後來開始知道有JSP、PHP、ASP.NET做動態網站這玩意兒。也想去學,學學學……
這是幾乎所有在校大學生的通病。但是,這不是壞事,甚至可以說是好事。說明了你“求知慾”高!總比那些,生活沒有激情,整天知道泡妞、上網、打遊戲、混日子的強。
但是如果你今天想學這個,明天又想學那個。這樣你就能永遠徘徊在技術的門外。很多人都有過或者正在經歷這樣的苦悶日子:總覺得有“太多東西”要學了,然而人的精力是有限的,總有永遠學不完的感覺,所以心理特別急,整天惶惶不可終日,不知道先要學哪個,一會兒拿起這本書,一會拿起那本書,折騰了幾個月,突然發現自己什麼都沒有學到……
每一個大方向如果沒有上幾年的學習,很難能學習出什麼來。但程式設計的最根本的東西是相同的。所以我們學習要抓根本。俗話說:通一理,融百里。
學程式設計就像習武一樣,如果內功學的好,其他功夫就很容易上手。君不見《倚天屠龍記》中的張無忌練了“九陽神功”8年,練“乾坤大挪移”只需12個時辰嗎?
習武之人,誰不想在“江湖”上揚名立萬,誰不想成為萬人敬仰的大俠?大俠之所以能成為“大俠”,當然有他們的看家本領。狄雲的“神照神功”,金世遺的正邪融合的“喬北冥內功心法”,張無忌的“九陽神功”,段譽的“六脈神劍”,令狐沖的“獨孤九劍”,哇,太多了...
古人歷經千辛萬苦才能找到這些“武功祕籍”。我們現在這些後輩,比起古人來說:簡直太幸運了。去書店,各種各樣的心功心法,劍法,拳法,應有盡有,看得你眼花繚亂...
你選什麼呢?今天練“六脈神劍”幾式,明天去學“降龍十八掌”幾招,後天又去練“發暗器”,這樣何時才有個盡頭呢?你說,你什麼武功都會,但是“形似而神不似”,不得要領,不夠火候。一上擂臺,就被別人一掌打趴了。試問哪個軟體公司敢要一個號稱任何程式語言都會,而是每種語言只能寫出個“hello world!”的程式設計師,你不被人家掃地出門才怪。
二、學**還是學**更有前途?
看了上面的話,有的同學已經開始煩了,“知道了知道了,不止一個像你這樣的所謂的‘老前輩’跟我說過‘學什麼都一樣,思想才是最重要’的大道理,可是你們站著說話不嫌腰疼呀,現實是有很多技術需要學,比如做Web開發就有JSP、PHP、ASP.NET等好多方向,我總得選一個吧!到底學哪個有前途呢?我必須要選擇一個有前途的,選錯了就麻煩了。”
其實像“學**還是學**更有前途”的話沒意義,因為“選擇JSP還是選擇PHP”的前途的差別不像“選擇英語還是選擇日語”的前途差別那樣大,不存在“選錯方向”的問題,因為都是相通的,你也不能保證你畢業以後搞的就是你學的那個方向,更不能保證你靠你學的這點東西就能吃一輩子。比如我上大學的時候一直在鑽研是Delphi語言,可是畢業校園招聘的時候我照樣在Java職位的考試取得了第一名,而且工作以後經過簡單的學習就掌握了Java語言,並且後來還寫了三本關於Java語言的書;再如我畢業後兩年多的時間一直在用Java開發,後來公司要做一套基於.NET的產品,我只用了一個禮拜熟悉了.NET體系以及C#的語法,然後就開始進行開發。
不過就像上邊說的“做Web開發就有JSP、PHP、ASP.NET等好多方向,我總得選一個吧!”這個問題是非常實際的,因為只有先學一個才能深入這個方向,把這個方向學通了才能想以後“一通百通”。因此我的建議就是學校教過什麼語言,你就繼續深入學習這麼語言,而不要去問“這麼語言有沒有前途”這樣的傻問題。儘量不要去學一門所謂“有前途”的新語言,因為你去學一門新語言就要把很多精力耗費在語言、語法本身,而耽誤了程式設計的實戰,而以一個已經學過的語言來學習的話,起碼語法本身不用再去學、開發工具本身不用再去熟悉,只要研究怎麼使用這門語言開發有用的程式就ok了。比如大部分同學都學過C語言(有的學校直接開了C++的課,但是C++的程式導向程式設計部分還是C語言),所以我們們就開了《C語言也能幹大事》的課程,讓同學們把精力放到學以致用上,而不是學“有前途”的新語言上,這也是這個思想的一個體現。
舉幾個例子。我們們如鵬網的《計算機專業職業發展測評系統》是我用PHP開發的,但是在這之前我從來沒寫過PHP程式,但是我以前寫過JSP、ASP的程式,因為寫網站程式的原理都是相通的,只是語法不同而已,因此我只用了幾個小時的時間熟悉了開發PHP用的工具並且快速瀏覽了一下PHP的語法,然後用半天時間就開發出了這個測評系統。想像一下一個整天在今天學JSP,明天學ASP,後天學PHP,大後天仰天長嘆“到底學哪個有前途”的人能用半天時間學會一門新語言嗎?
我大學時有一個同學,他看我當時Delphi學的比較好,寫了很多程式,他就說他也想學軟體開發,讓我教他Delphi,可是我們專業前一個學期已經開了PowerBuilder的課,因此當時我就建議他還是繼續深入學習PowerBuilder,用PowerBuilder寫又實用價值的東西,而不是像上課那樣寫HelloWorld的程式。當時Delphi還是如日中天的流行的程式語言,而PowerBuilder則市場佔有率比較小,他就說不想繼續學PowerBuilder,因為PowerBuilder沒前途,我就給他講了“一通百通,從自己最熟悉的入手”這個道理,然後他就踏實的深入研究PowerBuilder起來,到了畢業的時候他已經能用PowerBuilder寫非常複雜的程式而且還學習了用PowerBuilder寫Web程式。畢業後沒多久就應公司的要求用Delphi寫程式,他只用了不到一週的時間學習了Delphi,然後就寫出了一個符合公司要求的系統,當時他就給我打電話向我報喜。前一陣子我聽說他已經開始指導一些新員工用Java開發一箇中型規模的企業級系統了。可以說他的成功就得益於“一通百通,從自己最熟悉的入手”這個原則。
總結一下,不要管“哪門語言好就業、有前途”,因為那些“好就業、有前途”都是紙老虎。儘量不要學新語言,從自己最熟悉的語言入手,深入研究,出山後你就是被用人單位爭搶的紅人。
三、企業裡都需要什麼方面的才能?
這個要視用人單位的要求而定了。你現在還沒有畢業,也不知道未來要面對什麼樣的崗位。因此建議大家在上學期間不要偏科,所以的課程都要好好學,學好專業課,培養自己的“內功心法”,然後進入一個大公司,那麼大公司自然會為你安排一個人才培養計劃,在工作的環境中學習就更有目的性。
山西大學 張瑞(C/C++學生) :
真心的感謝這裡的每一位老師,在這裡可以學到貼近職場和應用的許多知識,這些都是在象牙塔裡學不到的。不過我們也應該珍惜在校園的這些自由的日子,可以有充裕的時間學習基礎理論知識,沒有那麼大的經濟和心理壓力。
認真的做好自己每個階段該做的事情,戒驕戒躁,踏踏實實的一步一步往前走。我覺得這就是很多過來人都在告訴我們的道理。
四川大學 李川(Net學生) :
...狂頂。。。
老師說得太好了。。。
我身邊就有不少像老師說的那樣的同學。弄得我也心裡有點小慌。還好我定力好。堅持C#不動搖。現在更是堅定了我學習C#的決心。
一定要推薦同學們都看看這個文章。
太謝謝老師了。
HOHO~~~
吉首大學 鄧嘉(C/C++學生) :
謝謝了,這個問題在我心中好久了。
我本來的想法是:先花一些時間,瞭解幾門語言,然後在其中找到自己打算深入的一門。再一門通,百門通。
現在看來,還是老老實實地看我地C吧~~~~!
大連海事大學 文星(Java學生) :
說出了大學生的通病,我大四了深有體會,希望看到這篇文章的同學們,能專一了哈哈
北京理工大學 蘇建學(Java學生) :
很有感觸,因為我自己就是那種什麼都想學,但是什麼都深入不了的那種人。我曾經看過C++、Java、C#的書,裡面的基本語法感覺只要半天就能熟悉了,但是要想深入學習感覺就找不到方向了。所以到現在為止也沒能學好任何一門語言,看來我真的該靜下心來好好研究一門語言了!
金融危機下的職業思考----答一位同學的問題
肖舸老師
進入大本營以來,發現部分同學的思路有些片面,思考問題有些絕對化,帶有一些普遍性。這裡藉著一位同學的提問,談一點我的看法,希望能幫助大家理清思路,看清未來。
還是那句話哈,一家之言,歡迎拍磚。
這位同學的問題如下:
肖老師,您好!很敬佩您懂得這麼多的知識,掌握這麼多的技術。我是一個即將上大二的網路工程的男生,現在有一個和我的努力方向有管的問題,使我感到迷茫:我是努力考研還是按自己的想法來做?具體的如下:由於金融危機,大學畢業生就業不景氣(我上的是個獨立學院),所以我父親讓我考研以便將來可以有一份穩定的工作(我父親就職於聯通公司),當然我也樂意在考研上下一番功夫,但是分歧在於我還想在大學期間多學些東西,比如:CCNA,建站技術,Linux網路。但我父親反對,說是我應該專心考研,其他的都可以不要。可是,得尊重客觀事實啊,努力了,不一定100%就能上研啊!學點東西不至於沒考上,反而落得一場空。當然,父親也是為我好。您認為我的計劃合適嗎?或者說我的職業規劃對嗎?補充一下,我對計算機室很有興趣的!從98年就開始接觸了,這個專業也是我自己選的。希望得到您的幫助!
我的回答如下:
首先,感謝這位同學的表揚,說實話愧不敢當,我並不是你想象中那麼博學,僅僅是日常工作和生活中,多看一點書,多想一點問題,能對某些問題提出一點自己的看法而已,你要願意,也能做到的。這不算什麼。
在你的問題中,你有一個大前提,就是金融危機,導致就業機會偏少,我個人認為,其實沒有必要這麼悲觀的。你的問題讓我想起了十年前,98年到2000年的經歷,估計你那時候還沒有考慮到就業問題,不過當時我可是身歷其中,現在想想,其實當時有很多想法也不是很正確。
當時,情況應該比現在還難過,98年開始的金融大風暴,把整個東南亞的經濟打得一塌糊塗,泰國、新加坡等幾個國家都差點破產。工商業更是一片哀鴻遍野。當時IT業還勉強可以,因為新興的網路科技,從Yahoo開始帶動的網路公司熱潮,畢竟還算一片利好的訊息,但隨之而來的2000年,網路泡沫破滅,IT業也受到了沉重的打擊。
當時記得上網,天天看的都是網路公司被收購,倒閉的新聞,最後都習慣了。你可以想象,我作為一個IT業的軟體工程師,心情可想而知,當時我也有點迷失自我,跳了幾家工作,都感覺不盡人意。人有時候都有點棲棲遑遑了。
不過,過了十年,現在回顧過去,其實也就那麼回事,經濟好,生活會好點,但也沒有好到隨心揮霍的地步,經濟差,不管怎麼說,人吃飯還是吃得起的,可能頓頓下館子不夠了,不過在家做做吃,也不會餓死,僅此而已。
經過這一輪陣仗,我感覺我們這一批程式設計師心理素質都還可以了,其實金融危機也沒有那麼可怕,還有,其實不止我們,大家當時都不喜歡金融危機,因此,你看看各國政府都在想辦法救市,這個不用你我這些老百姓操心,其實國家和富人們更怕金融危機,他們損失更大,因此,不會沒人管的。
從你的資訊,你現在才大二,到大四畢業,還有兩年,我想,這一輪金融危機,兩年後,怎麼都該有個結果了,不會一直持續下去,因此,你以金融危機作為以後找工作困難的理由,我其實是不同意的。
人的一生是很長的,你以後至少還有接近40年的職業生涯,這次金融危機,可能僅僅是你這一生遇到的第一次而已,以後還多,不能因為可能發生金融危機,就悲觀,就說人生沒有希望,我覺得,只要自己本事在身,金融危機下,還是有老闆會需要人才的,找工作,不會很難,甚至,真正有本事的人,由於大量的公司,都生意不好,養不起閒人,會強制進行優勝劣汰,無形中,可能工作機會更多也是有可能的。
事實上,我從去年到今年觀察了一下,我們國內除了專門做外銷的一些製造業,航運業,在金融危機中受到很大沖擊外,其實中國國內本身,並沒有受到多大損害,反而國家還拿出4萬億拉動內需,開始家電下鄉補貼工程,其實要是明眼人,都能看出目前國內的經濟態勢,其實比國外好。
還有一個,這和中國人習慣有關,美國人,很多歐洲的人,他們的習慣和我們不一樣,他們主要是借貸消費,其實這次金融危機就是他們貸轉貸造成的次貸危機,由於大多數美國人沒有很高的儲蓄,反而分期付款欠下很多債務,一旦有金融危機,他們收入一旦斷絕,會立即破產,被銀行強行收回大多數分期付款購買的財產,如房子,車子等,對他們個人經濟造成了巨大的損害。
而中國人,至少我們上一輩人,大多有儲蓄的優良傳統,家家戶戶其實都有儲蓄,換而言之,中國家庭的享受程度可能不如美國家庭,但是中國家庭的經濟健康程度遠高於美國家庭,目前中國家庭最大的負債問題,可能就是房貸了,除此之外,一般的家庭沒什麼負債的,因此,很難像美國人那樣家庭破產,最多過點苦日子而已。
我說這麼多,就是想告訴你,金融危機沒有你想象那麼可怕的,生活品質可能有下滑,但是,不會餓死的。過幾年,經濟好點了,再享受就是了。
那麼,我們回過頭來看看你的問題,其實你的問題和金融危機沒有多大關係,是一個簡單的職業道路選擇的問題,考研還是畢業就做工作。
這個我的理解,見仁見智,都可以,考研,前期投入大點,後期回報高點,但時間長,畢業找工作,前期投入少,後期呢,本科畢竟沒有研究生髮展潛力大,不過,可以快速掙錢。
而且這兩個不矛盾,考了研,畢業也得找工作,研究生找工作比本科生有優勢,但也不是絕對的,研究生不好好學,找不到工作的也有,收入不如本科生的也很多。
本科生呢,不好好學,也找不到工作,好好學的,找起來也不是那麼困難,畢竟,這個社會提供給本科生的工作機會,從數量上說,遠遠超過研究生,而且,工作幾年,還可以考研進修,也不是不可以,我很多朋友都是工作2~3年以後上的研究生,這些人,普遍學習的效果好於大學直接上研,因為他們有一定工作經驗,有了一定的思考了。
我覺得,你家裡要是經濟還可以,不急著要你出來賺錢養家,你可以考慮先讀研,如果經濟不太好,就直接找工作算了,先養活自己吧。
另外,什麼事情都別絕對,準備考研了,但遇到好的工作機會,也要把握,一個本科生進到華為或者IBM、微軟等大公司,可能收入比其他公司的研究生還高,不準備考研呢,實在找不到工作,回來考研,作為第二選擇也不壞。別太執著了,隨時注意調整自己的思路更重要。
不過你的話題有個東東我不太同意,你的話:“但是分歧在於我還想在大學期間多學些東西,比如:CCNA,建站技術,Linux網路。但我父親反對,說是我應該專心考研,其他的都可以不要。”我覺得這是你們父子倆沒有溝通好,其實這些技術的學習與考研不矛盾,甚至像Linux網路,本身就可以作為研究生的研究方向,還是那句話,做事不要絕對化,萬事都是相通的,你完全可以在準備考研的時候,學習這些技術,也許,這些技術的熟練還成為導師選擇你的一個亮點呢。
但關鍵是,不管是考研,還是找工作,你現在要把學習弄好,不管學什麼,鑽研一點,學出本事來,本事不夠,找工作找不到,考研也成問題,如果考上研究生,不好好學,出來也可能找不到工作。
所以,今天我回你這篇帖子,想和你說,你的問題,金融危機,考研,找工作,學習方向,其實都不重要,最重要的是,不要把這些作為自己躲避學習的藉口,專心好好學習,做學生,就做一個專業的學生,本職工作做好,那樣,你可能兩年後,選擇權會大得多,而不是像今天在這裡患得患失。
你說呢?
學生評論:
重慶郵電大學移通學院 小溧(網路管理學生)
謝謝肖老師的指點,我知道了眼前的才是最重要的,考研和學習技術,嗯,或者可以用鄧小平的話來講叫做:兩手都要抓,兩手都要硬。
黃海峰(網路管理愛好者) :
非常有道理。。。當初沒有大學老師教我這些處世道理,所以都是自己胡亂摸索,但這也是一種人生磨練。。。我想那位同學只是比較緊張自己的前途而已,像我一樣做一天和尚撞一天鐘的人上學時就沒有如此壓力,找不到工作時我也是努力自學偶爾看電影調劑,找到工作了就從工作中學習做人做事。我總是想,我一直有努力學習,如果始終找不到工作,餓死也不會只我一個,在關於就業問題的方面我很樂天,但是講到感情問題就慘情了,內向型it人對自己相貌事業皆無甚自信,不敢主動結交漂亮女生,害怕被恥笑,不願結交恐龍型的,害怕消化不來,沒有剛剛好的,因為it人環境嚴重侷限,可供選擇的女孩極其稀罕,人的健康是多方面的,情感方面一直很缺失,身邊常常光顧按摩院的同事大有人在,這樣的生活貌似也很不健康,肖老師能否在這方面點撥一下像我一樣很困惑的it人?謝謝。
肖舸老師
在罈子裡混了這麼久,看了很多同學的程式碼,感覺到大家的程式碼,學校裡面的書生氣有點重,對於細節考慮不夠,有時候,感覺和吃了顆蒼蠅一樣,確實很不舒服。
這裡根據我個人的經驗,給大家簡述一下,工程化程式碼,以及簡單程式碼,不容易出錯的程式碼的一些基本寫法。
1、工程化程式碼,首先考慮是團伙作案,獨行大盜的時代已經過去了,呵呵,因此,特別強調“人”能看懂,很多教科書上給出的示例,一切以計算機能正確run為準則,寫出的程式碼只有計算機能看,作者本人再看都要想半天,這不是好程式碼。
工程專案團隊,很多時候都是大家合作開發,你的程式碼,可能使用者不是你,下一個維護者也不一定是你,與人方便,與己方便,當有一天你對著一堆看不懂程式碼大罵的時候,想想,從我做起,給別人點方便。
2、簡簡單單寫程式,不是說惜墨如金,多敲一個字元都嫌累。
在Unix時代,沒有顯示器,都是電傳打字機,編輯器也是行編輯器,因此,每多敲一行字,都是錢,再加上那會記憶體小,編譯器能用的空間有限,因此,Unix的老程式設計師,對於變數名,函式名,標籤,珍惜得很,很少用2字元以上的,這是歷史因素,人家窮,小家子氣。
不過,現在大家用的都是以G為單位的記憶體,液晶顯示器,IDE又那麼強悍,拜託,起名字給長點,有點表意性好不好,別一段程式寫下來,滿篇都是“你猜”兩個字,看程式的人要瘋。
3、註釋,很多教科書,一說程式設計規範性,就是註釋,好像這是程式易讀的唯一方法,大學裡面的老師,沒見識過大型工程開發,沒一次幹過幾十萬,上百萬行程式碼,這麼說也是可以理解的。
不過,工程程式設計師,專案壓力一般都很重,在開發時,所有的注意力都在如何實現需求上,很少有人能有閒心,有耐心,精雕細琢自己的程式碼,甚至,很多程式碼,都是交工前最後一刻寫出來的,因此,要求詳細註釋,在工程開發中,實際上沒有可操作性。
起碼我自己都做不到,這就是為什麼我特別強調命名錶意,程式寫短點。即使程式設計師沒有註釋,看字面意思,也能大致理解。這麼說吧,看別人的工程程式碼,沒有註釋,是正常,有註釋,是福氣。
嗯,有時候是黴氣,很多程式設計師,開發時寫註釋,後期出現bug,開始瘋狂Debug的時候,那會哪有時間改註釋哦,能把程式改對,都是燒高香了,最後,很可能註釋和程式碼是反的,順著註釋看,順理成章就掉坑裡去了。
還是那句話,別期待註釋,別全信註釋,注意自己的程式,自身的表意性,至於你自己寫不寫註釋,如果在我的團隊裡面,.h檔案裡面的公有函式和方法,一定寫全,每個入口引數的含義,返回碼的含義,越多越好,別人正確呼叫你的程式,bug就不會找你麻煩,這是為了你自己。至於其他方面,愛寫不寫,我不管。
4、再說簡單,簡簡單單寫程式,可不是說你惜墨如金,是說讓讀的人,感到簡單,腦子裡不轉彎。這很好理解,我們做出一個產品,好不好,使用者說了算,你的軟體產品可能有特定的使用者,但你的程式碼本身,也是產品,你的團隊夥伴就是你的使用者,大家可能聽說過換位思考,我們寫程式的時候,除了想象客戶會不會罵娘,還有沒有想想,以後讀我們程式碼的人會不會罵娘?
團隊中有規範,按照規範來,不要討論合理不合理,先照做,大家養成閱讀習慣,看程式碼就不難。
寫程式碼,不要耍酷,年輕人,或多或少都有點愛表現自己的慾望,人之常情,可以理解,不過要控制。哪些為了一個演算法的優化,絞盡腦汁,最後把三個變數節約成一個變數,把四重迴圈節約成一重,看似水平高了,可是,演算法複雜度高了,看的人就暈了。
不想捱罵的話,老老實實的寫吧。函式內部的變數,只要不是動態申請的,一般都建立在浮動棧上,隨著函式的退出,就會自動拆除回收,給下一個函式使用。物件內部也差不多。所以,不妨多用幾個變數,老老實實地寫,不玩什麼花樣,看得人看得輕鬆,其實自己腦子也清晰,不容易出錯。
武俠小說中,說越是大宗師,越不喜歡用奇門兵器,一路簡簡單單的太祖長拳,破盡少林寺七十二絕藝,這說明什麼?把事情弄複雜,弄玄妙,不算本事的,能用最簡單的招式,化解最複雜的問題,內力夠了,自然可以。修煉內功,就是減少對招式的依賴,簡單,直接,直奔要害。以最小的成本,獲得最大的收益,大家說,是不是?
5、規矩,很多人,一說工程化開發,就認為程式設計規範很重要。於是開始找大公司的開發規範,於是,網上的華為軟體開發規範,傳來傳去,大家奉為聖旨。誰要敢說半個不字,管殺不管埋。
規矩是人定的,每個人群,每個開發團隊,都有自己的開發方向,常用工具,所以,程式設計規範其實是很小範圍的東東,都是針對目前專案最有效的,很難想象,一個做.net的開發團隊,拿著華為用gcc做VxWorks工程的程式設計規範,能做好事情。
什麼規矩是最好的?我的理解,最合用的就是最好的。系統設計完成,開發之前,專案團隊在一起開個短會,討論一下規範,把大的幾條定出來,之後就隨著專案的進行,不斷補充罷了。很多時候,專案經理也要尊重程式設計師的習慣,一個程式設計師用VC的IDE習慣,總不能為了寫gcc,強迫大家都用vi吧。這裡面有個個性化的規矩問題。
大家別不習慣,出去之後,走上社會,大家會發現,很多東東都是靈活的,不是一成不變的,很多人就在哭,這個世界太黑暗了。其實是自己不能靈活變通。專案組,有牛人,大家一般會跟著牛人走,他的惡習都可以變成團隊規矩,這也合理,沒有牛人,大家一盤散沙,就在介面處統一,裡面程式亂點沒啥,也可以,方法太多了,只要能出活,出來的程式碼,大家基本能看懂,其實就ok了。
像那種,還沒做事,先說一大堆規矩,程式設計師學習規矩和習慣養成都要半天,這些,最後都是專案成本。江山易改,本性難移,做專案管理,何苦來和每個人作對,尊重一下大家的習慣,直接把習慣做成規矩,不是更好?
6、輪子,筆者生活中,遇到很多了,罈子裡面喜歡拍磚的人,也不少,開口就說,這個世界需要依賴工具,自己造輪子的人是笨蛋。
這個話確實見仁見智。很難說對不對,不過,筆者建議,初學者還是少用別人的輪子。
大家畢業,走上工作崗位,還有幾十年呢。誰都不知道這輩子是不是一定在某個平臺,或者某種語言,某種框架下寫程式碼。
一旦年輕時,習慣了享受某種框架的便利性,就很難深入思考了。那隨著年紀增大,走向架構師崗位的時候,由於很多底層的特性思考不夠,會後繼乏力。我們說,出來混,總是要還的,現在享受了,但是,這輩子的債,總得換,到三四十歲再來重新學習研究,會很難的。
很多人大言不慚,一說就是框架,以框架搭建工程固然很快,但是,想想看,做框架的人,和用框架的人,哪個水平高?哪個收入高?其實很多時候,企業的架構師,就是針對專案或產品,為專案團隊制定本企業合用的框架的。
學著自己寫佇列,學著自己寫堆疊,再代入到實際工程中測試,做一些量身定做的優化,你的水平會迅速提升的。
學生評論:
西安工程大學 袁小龍(資料庫學生) :
老師的話總是能給人啟迪。我就嚮往著teamwork的生活,希望老師還能繼續發帖,讓我們這些學生提前感受,學習到社會的知識~~謝啦!
河南成功學院Gwolf團隊 趙鵬(C/C++愛好者) :
呵呵,喜歡讀,因為簡單,明瞭。不為別的,喜歡這種風格。
內容來自真實的一線,說服力強!
黃海峰(網路管理愛好者) :
我才畢業沒多久,發覺很是理想主義,很想當“獨行大盜”的心態,有時甚至感覺單位的前輩寫程式碼過於迂腐,但是遇到問題找他們時,他們又總是能很快把我指通,我暈。經驗呀。
(按姓名拼音字母排序)
肖舸,CSDN學生大本營名師。MCSE,商用程式設計師,現任普羅通訊(西安)有限公司研發主任。擁有多年的軟體研發和研發管理經驗。精通C/C++,TCP/IP,擅長分散式資料庫、伺服器叢集以及平行計算領域的研發。曾擔任西南交大客座講師,講授《C/C++語言無錯化程式設計》課程。曾在多家企業擔任專案經理,負責過的專案有《http tunnel防火牆隧道穿越系統》、《freepp V1.5 伺服器叢集》、《電子白板子系統》、《水泥生產窯紅外線監控系統》、遊戲《隋唐演義》、《營區網路化視訊監控》、《區域網IM即文件共享平臺》、《核爆測試頻譜分析系統》、《多媒體網路教室》等。
肖舸老師主頁:http://student.csdn.net/?39028
肖舸老師讀者討論組:http://student.csdn.net/space.php?do=room&ac=detail&roomid=27
“我心目中的商用化開發和工程化開發”徵文大賽:http://student.csdn.net/space.php?do=event&id=10
楊中科,CSDN學生大本營名師。畢業於山東大學物流工程專業,如鵬網(www.rupeng.com)創始人,CowNew開源團隊發起人,專注於企業級系統開發、編譯技術以及IDE開發,撰寫了《J2EE開發全程實錄》、《自己動手寫開發工具》、《程式設計師的SQL金典》等技術圖書,已錄製IT視訊課程《C語言也能幹大事》等。曾任職於金蝶軟體,目前任職於北京贊同科技發展有限公司,從事銀行基礎技術平臺的開發。
楊中科老師主頁:http://student.csdn.net/?52781
左飛,CSDN學生大本營名師。行動通訊工程師、技術作家,現就職於中國行動通訊集團。對於物件導向技術和程式設計有深入的理解,尤其在C/C++程式設計方面擁有豐富的開發經驗,研究計算機資料結構和演算法問題是他的興趣。此外,他的研究興趣還包括影象處理和影象加密等。已正式出版的代表作包括《Visual C++ 數字影象處理開發入門與程式設計實踐》、《C++ 資料結構原理與經典問題求解》、《把脈VC++》、《程式碼揭祕——從C/C++的角度探祕計算機系統》等。其文風嚴謹認真,但力求通俗簡潔,他堅信“每多一條公式或者專業術語就會把一個讀者擋在門外”,因此作品多具有圖文並茂、例項豐富的特點。
左飛老師主頁:http://student.csdn.net/?113322
編者後記:
我們精挑細選了老師的經典回答,相信已經回答了你心中的很多問題。
當然,可能你還有很多具體的問題沒有得到解答。這也沒有關係,因為只要你立刻加入CSDN學生大本營(http://student.csdn.net),你隨時可以向這些老師拜師,這些老師也隨時等候你的問題,分享自己的經驗。而且,每天都有老師繼續解答更多同學的疑惑,帶領大家學習IT知識。
而且,更為重要的是,還有十幾萬名和你一樣的學習計算機,愛好程式設計的學生,大家可以一起交流、討論、成長。只要你願意,它都將成為你自己的一個學習成長社群。
相關文章
- Windows 98 答疑解惑(轉)Windows
- C++初學解惑(4)——建構函式(上) (轉)C++函式
- 面試真經面試
- Oracle RAC之名詞解惑~~(轉)Oracle
- 推薦總理式專案管理真經(轉)專案管理
- 推薦給CIO的專案管理真經(轉)專案管理
- Flutter學習篇(四)—— 尺寸解惑Flutter
- USB開發速成-我最真實的經驗!(轉)
- 網路傳真機用哪個好?E企云為您解惑
- Flutter 佈局真經Flutter
- 真實記錄我的學習linux的經驗Linux
- [轉載]TCP keepalive的詳解(解惑)TCP
- VC++初學者常見問題解惑 (轉)C++
- C++入門解惑(1)——淺析cout (轉)C++
- C++入門解惑(2)——初探指標(上) (轉)C++指標
- C++入門解惑(3)——初探指標(下) (轉)C++指標
- 真·生產力「GitHub 熱點速覽」Github
- CCNA初學者學習經驗!(轉)
- IT大咖總結的面試真經面試
- 我的真實面試經歷薦面試
- TOEIC真題學習
- 一個計算機專業學生幾年的程式設計經驗彙總(轉)(一)計算機程式設計
- 九陰真經新手必看1-30級入門攻略 九陰真經新手攻略
- 從學生到程式設計師(二) (轉)程式設計師
- 機器學習的7個真實世界生產案例機器學習
- Windows最經典應用大變臉:學生爽翻!Windows
- JavaScript學習筆記之constructor,prototype,__proto__解惑JavaScript筆記Struct
- 我的一點學習經驗 (轉)
- Java 解惑(Java Puzzler)Java
- 【函式】translate解惑函式
- SQL Server Collation解惑SQLServer
- PHP程式碼優化24條真經PHP優化
- 從學生到程式設計師(三) 關於學習 (轉)程式設計師
- 驅除煩惱 Windows作業系統查疑解惑(轉)Windows作業系統
- 卷積神經網路學習筆記——Siamese networks(孿生神經網路)卷積神經網路筆記
- 用人工神經網路控制真實大腦,MIT的科學家做到了神經網路MIT
- 學會用經驗計劃專案(轉)
- 轉載:一個清華學生留學香港後對人生的思考