請(qǐng)看如下考題:寫一函數(shù)交換a,b兩數(shù)。
我是討厭牛角尖和不實(shí)用的問題的。再簡單不過的題了,擔(dān)心這種題目有損公司形象。
但總有一部分人寫出:
Swap(int a,int b)
{
int temp =a;
a=b;
b=temp;
}
可以說,寫這種答案的人C語言基礎(chǔ)幾乎為0,大一上C語言的時(shí)候不知道干什么去了。而且?guī)缀鯊膩頉]有獨(dú)立寫過什么小型程序。對(duì)于這種人,你說實(shí)話告訴我,假如你是有錢的資本家,你敢招收這種人來幫你掙錢嗎?當(dāng)然首先是先要從大一的指針,參數(shù)傳遞進(jìn)行培訓(xùn)。重新進(jìn)行C語言入門訓(xùn)練,更不提什么C++/MFC了,我不相信這類人現(xiàn)在真的是精通ATL的。現(xiàn)在他們寫代碼的過程就是“不斷犯常識(shí)性的錯(cuò)誤”的過程。
請(qǐng)?jiān)倏慈缦驴碱}:請(qǐng)按商業(yè)化要求,寫一個(gè)程序,往c:\mydata.dat里寫入65536個(gè)字母’B’,特別強(qiáng)調(diào):請(qǐng)注意要考慮所有可能的情況,讓你的代碼在各種情況運(yùn)行正常。為了不讓面試者麻痹大意,特意加上了強(qiáng)調(diào)。但總有人寫出:
FILE *fp=fopen(“c:\\mydata.dat”,”w+b”);
fwrite…..
fclose(fp);
我問,你有沒有看到,”請(qǐng)按商業(yè)化要求,請(qǐng)注意要考慮所有可能的情況,讓你的代碼在各種情況運(yùn)行正!。 有沒有考慮到文件打開會(huì)失敗,寫文件空間不足,已經(jīng)有同名的只讀文件等意外。哪個(gè)軟件不賣錢,不商業(yè)化?進(jìn)入軟件公司,你的任何一行代碼都應(yīng)該“請(qǐng)按商業(yè)化要求”!
包含你寫的代碼的商品軟件會(huì)銷售到千家萬戶,各國各地的用戶,運(yùn)行在Intel P133,P2 300,P3 600 P4 1.5G的CPU, 1GB /10GB/20GB/40GB/150GB 的HD上, 16色256色16bit色 24bit色 Win9x Win2K winXP系統(tǒng),中文英文法文德日文的語言上,黑人 白人 紅人 黃人的屏幕前 你不考慮所有可能的情況,如何能讓人放心?
這類人也許能夠使用語言,函數(shù),寫一些代碼。但如果不經(jīng)過訓(xùn)練,缺乏思維的嚴(yán)密性,永遠(yuǎn)無法洞悉編寫商業(yè)軟件的實(shí)質(zhì)。與這種人合作的經(jīng)歷,就是一場惡夢(mèng)。他會(huì)讓全team的人焦頭爛額的找系統(tǒng)中某個(gè)bug.好多天后,“啊,原來是你小子的代碼處理不嚴(yán)密,沒有考慮nnnn的情況啊!
對(duì)于還有些某些自稱精通C++之人,只需要問“虛函數(shù)是什么?”很多人就會(huì)支支吾吾,答非所問,答一大堆無關(guān)的東西。請(qǐng)問,”虛函數(shù)是什么”都不知道,是否該算“對(duì)C++有大概了解”都談不上?
當(dāng)然,面試者中的確不乏優(yōu)秀之人。但是,對(duì)于不少面試者的技能,我禁不住要喊“太業(yè)余,太業(yè)余啦!”
我知道的,做一個(gè)程序員遠(yuǎn)不是想的那么容易。特別是在寫商業(yè)程序的時(shí)候,一個(gè)變量名有時(shí)都需要斟酢再三達(dá)到完美,注釋語言都需要推敲,如何讓其他人真能看懂。任何一個(gè)反常的小現(xiàn)象有時(shí)都需要仔細(xì)的去追查解決。界面的元素也需要嚴(yán)格的按《GUI規(guī)范》去制作,不允許有一個(gè)pixel的位置和大小的偏差,資源的標(biāo)點(diǎn)符號(hào)不對(duì),也需要認(rèn)真校對(duì)修改。以上的事情都不能敷衍了事。
這似乎正是我國大部分程序員所缺乏的。大家似乎都樂于把代碼應(yīng)付完了事。管你什么對(duì)象模型,注釋,類的屏蔽性之類的問題。理由是“反正我也是被剝削,做不了幾年!薄皩懽屑(xì)太累,基本能正常運(yùn)行就行”!皽惡现,資源錯(cuò)誤不影響使用,地方太多,改太麻煩”,“先寫好代碼,以后有空來補(bǔ)注釋”(以后任務(wù)一個(gè)接一個(gè),你能有空來補(bǔ)注釋嗎?)。
Stop!怕累,你就不應(yīng)該選擇這個(gè)職業(yè)!
程序員不是為懶漢和懦夫準(zhǔn)備的職業(yè)。
沒有完美主義態(tài)度,你就不要編程!
如果你是老板,你會(huì)不會(huì)讓這種拿著你的工資不認(rèn)真做事的人下崗?
這種工作態(tài)度有資格叫“被剝削”嗎?是在剝削老板,剝削勤奮的同事吧?
我認(rèn)為,認(rèn)真做好編程細(xì)節(jié)(詳細(xì)注釋,設(shè)計(jì)良好的對(duì)象模型,優(yōu)質(zhì)可讀的代碼,嚴(yán)謹(jǐn)認(rèn)真制作界面),也是對(duì)自身素質(zhì)的一種有益的訓(xùn)練。任何《編程大全》都沒有提到這一點(diǎn),但這確實(shí)是作為一個(gè)“程序員”的首要素質(zhì)!至于那些技術(shù),是可以學(xué)習(xí)和積累的,反倒不那么重要,F(xiàn)在“程序員”們津津樂道的是“如何用Splitter切分一個(gè)視圖”,或者“如何更換軟件的皮膚(當(dāng)然,是用網(wǎng)上那幾個(gè)老外的共享代碼)”。
也許,這也是我們民族現(xiàn)在與那些所謂優(yōu)秀民族的差異。比如,日本人的敬業(yè),日耳曼人的嚴(yán)謹(jǐn)。羨慕嗎?那為什么你不學(xué)著做?學(xué)人家的實(shí)質(zhì)而不是皮毛。
(申明:本人是最恨小鬼子的,但是人家的確很多時(shí)候比國人做得好,我指工作態(tài)度)
所以,現(xiàn)在以后當(dāng)你在被面試的時(shí)候,介紹自己 “我是一個(gè)程序員,精通xxx,xxx…..”的時(shí)候,請(qǐng)小聲問一下自己,你真的配叫做一個(gè)“程序員”嗎?