當(dāng)前位置:首頁 > 芯聞號(hào) > 充電吧
[導(dǎo)讀](下面這些文字不是我的原創(chuàng),是我偶爾在網(wǎng)上發(fā)現(xiàn)的,我真的很幸運(yùn)能看到這些,這篇文章也隨著下面的文字而結(jié)束,我真心的希望您能從這篇文章中得到啟發(fā),這篇文章歡迎大家隨意轉(zhuǎn)載,您可以不寫作者是誰,但是請(qǐng)您寫上vcroad.net原創(chuàng),謝謝您的支持)


    做為一名大四的學(xué)生,我面試過不少的單位,有成功的也有失敗的,但是對(duì)我來說所有的失敗在某種意義上都是一種成功,特別是我下面寫的這些,寫這篇文章的時(shí)候,我已經(jīng)簽了南京的一家軟件司,但是想起今年2月21日我面試蘇州臺(tái)灣的IT公司的經(jīng)歷聯(lián)想到我們現(xiàn)在學(xué)習(xí)編程的一些情況我真的深有感觸,這次面試使我深深的體會(huì)到了失敗但也收獲了很多。我要說的將分成三部分,1.是  我面試的具體經(jīng)過2.是由面試想到的3.現(xiàn)今我應(yīng)該做的。當(dāng)然這些話很大程度上是我個(gè)人的意見,不可能完全得到大家的贊同,所以  在某些觀點(diǎn)上如果哪位朋友覺得跟我的有很大出入,請(qǐng)不要介意, 也不要對(duì)我攻擊,就當(dāng)我沒有說過,歡迎和我聯(lián)系共同探討這些問題!我的EMAIL: wutao8@263.net-   

1.面試經(jīng)過 
大約在年前我接到了臺(tái)灣瑞晟(Realtek)蘇州公司的面試通知,通知我2月21日到蘇州工業(yè)園區(qū)面試,接到面試后的幾天我把一些專業(yè)  課溫習(xí)了一遍,特別是C++和數(shù)據(jù)結(jié)構(gòu),由于大學(xué)幾年里,我一直專研這些方面,加上通過了高級(jí)程序員的考試,對(duì)于一些常用的算法  我差不多也達(dá)到了爛熟于胸的地步,當(dāng)時(shí)的感覺是如果問了我這些方面的問題我應(yīng)該是沒有問題的! 

21日那天我被安排在4:30面試,由一位技術(shù)人員單獨(dú)給我面試,在問了一些簡單的問題之后他給我出了一道編程題目,題目是這樣的: 
(由于具體面試的題目比較煩瑣,我將其核心思想提取出來分解成了兩個(gè)獨(dú)立的簡單的問題,有可能問題分解的不當(dāng),請(qǐng)大家見諒,實(shí)際面試了一個(gè)的問題但比其復(fù)雜很多,而且涉及一些高等數(shù)學(xué)變換) 


1) 寫一個(gè)函數(shù)計(jì)算當(dāng)參數(shù)為n(n很大)時(shí)的值 1-2+3-4+5-6+7......+n 
哼,我的心里冷笑一聲!沒想到這么簡單,我有點(diǎn)緊張的心情頓時(shí)放松起來! 
于是很快我給出我的解法: 
long fn(long n) 

long temp=0; 
int i,flag=1; 
if(n<=0) 

printf("error: n must > 0); 
exit(1); 

for(i=1;i<=n;i++) 

temp=temp+flag*i; 
flag=(-1)*flag; 

return temp; 

搞定!當(dāng)我用期待的目光看著面試官的時(shí)候,他微笑著跟我說,執(zhí)行結(jié)果肯定是沒有問題!但當(dāng)n很大的時(shí)候我這個(gè)程序執(zhí)行效率很低,  在嵌入式系統(tǒng)的開發(fā)中,程序的運(yùn)行效率很重要,能讓CPU少執(zhí)行一條指令都是好的,他讓我看看這個(gè)程序還有什么可以修改的地方,  把程序優(yōu)化一下!聽了這些話,我的心情當(dāng)時(shí)變的有點(diǎn)沉重,沒想到他的要求很嚴(yán)格,之后我對(duì)程序進(jìn)行了嚴(yán)格的分析,給出了改進(jìn)了的方案! 
long fn(long n) 

long temp=0; 
int j=1,i=1,flag=1; 
if(n<=0) 

printf("error: n must > 0); 
exit(1); 

while(j<=n) 

temp=temp+i; 
i=-i; 
i>0?i++:i--; 
j++; 

return temp; 

雖然我不敢保證我這個(gè)算法是最優(yōu)的,但是比起上一個(gè)程序,我將所有涉及到乘法指令的語句改為執(zhí)行加法指令,既達(dá)到要題目的要求而且  運(yùn)算時(shí)間上縮短了很多!而代價(jià)僅僅是增加了一個(gè)整型變量!但是我現(xiàn)在的信心已經(jīng)受了一點(diǎn)打擊,我將信將疑的看者面試官,他還是微笑著  跟我說:“不錯(cuò),這個(gè)程序確實(shí)在效率上有的很大的提高!”我心里一陣暗喜!但他接著說這個(gè)程序仍然不能達(dá)到他的要求,要我給出更優(yōu)的  方案!天啊!還有優(yōu)化!我當(dāng)時(shí)真的有點(diǎn)崩潰了,想了一會(huì)后,我請(qǐng)求他給出他的方案!然后他很爽快的給出了他的程序! 
long fn(long n) 

if(n<=0) 

printf("error: n must > 0); 
exit(1); 

if(0==n%2) 
return (n/2)*(-1); 
else 
return (n/2)*(-1)+n; 


搞笑,當(dāng)時(shí)我目瞪口呆,沒想到他是這個(gè)意思,這么簡單的代碼我真的不會(huì)寫嗎,但是我為什么沒有往那方面上想呢!他說的沒有錯(cuò),在n很大很大的時(shí)候這三個(gè)程序運(yùn)行時(shí)間的差別簡直是天壤之別!當(dāng)我剛想開口說點(diǎn)什么的時(shí)候,他卻先開口了:“不要認(rèn)為CPU運(yùn)算速度快就把所有的問題都推給它去做,程序員應(yīng)該將代碼優(yōu)化再優(yōu)化,我們自己能做的決不要讓CPU做,因?yàn)镃PU是為用戶服務(wù)的,不是為我們 
程序員服務(wù)的!”多么精辟的語言,我已經(jīng)不想再說什么了!接著是第二個(gè)問題: 

2). 他要求我用一種技巧性的編程方法來用一個(gè)函數(shù)實(shí)現(xiàn)兩個(gè)函數(shù)的功能n為如:fn1(n)=n/2!+n/3!+n/4!+n/5!+n/6! 
fn2(n)=n/5!+n/6!+n/7!+n/8!+n/9! 現(xiàn)在用一個(gè)函數(shù)fn(int n,int flag)實(shí)現(xiàn),當(dāng)flag為0時(shí),實(shí)現(xiàn)fn1功能,如果flag為1時(shí)實(shí)現(xiàn)fn2功能!他的要求還是效率,效率,效率!說實(shí)在話,如果我心情好的話我應(yīng)該能給出一種比較好的算法,但我那時(shí)真的沒有什么心思 再想了,我在紙上胡亂畫了一些諸如6!=6*5!的公式后直截了當(dāng)?shù)母f要他給出他的答案!面試官也沒有說什么,給出了他的思路: 
定義一個(gè)二維數(shù)組 float t[2][5]存入{{2!,3!,4!,5!,6!},{5!,6!,7!,8!,9!}}然后給出一個(gè)循環(huán): 

for(i=0;i<6;i++) 

temp=temp+n/t[flag]; 


最后得到計(jì)算值!呵呵,典型的空間換時(shí)間的算法! 
這些總共花了50分鐘的時(shí)間,還有十分鐘我就跟他很隨意的聊聊天,聊了一些編程以及生活的問題,那時(shí)的我已經(jīng)很放松了,  因?yàn)槲抑肋@次面試結(jié)果只有一個(gè):失敗。5:30的時(shí)候面試官要我等通知,于是我離開了他們公司。這就是面試的整個(gè)經(jīng)過! 

2.由面試想到的 

真的是很失敗啊!我記得那天下好大的雨,氣溫也很低,我邊走邊想,從5:30一直走到7:30,全身都濕透了,又冷又餓,但是我只是一直走,腦子里面充滿了疑惑,我也想讓雨把自己淋醒!看到這里有些朋友可能覺得那些面試題目不算什么如果讓自己做的話肯定能全部答對(duì),我肯定相信你,因?yàn)槲覐奈磻岩蛇^中國程序員的能力,我認(rèn)為中國有世界上最好的程序員,我也從未認(rèn)為自己是高手,所以我做不出來不代表中國程序員比臺(tái)灣或者別的地方的程序員差,所以我就從我的角度,我的所見所想來談一些感想: 

不錯(cuò)全世界都有優(yōu)秀的程序員,中國也不例外,但是我疑惑的是:到底中國和臺(tái)灣或者國外的優(yōu)秀的程序員的比例到底是多少?臺(tái)灣我不知道,中國100個(gè)程序員里有幾個(gè)是優(yōu)秀的呢?我根本算不上,從上面的表現(xiàn)就足以說明一切了!是1個(gè)?5個(gè)?10個(gè)?50個(gè)?這個(gè)數(shù)字我不敢亂猜,恐遭網(wǎng)友一頓痛罵,那么我們國內(nèi)有多少人學(xué)習(xí)計(jì)算機(jī)呢?拿我們學(xué)校來說,計(jì)算機(jī)97級(jí)4個(gè)班,98級(jí)5個(gè)班,99級(jí)10個(gè)班,2000級(jí)17個(gè)班,人多了,老師怎么辦?我們學(xué)校的做法是讓研究生上課,然后呢?補(bǔ)考一抓一大把,大把大把的補(bǔ)考費(fèi)落入了學(xué)校的口袋,還說現(xiàn)在的學(xué)生素質(zhì)低!真是好笑,我都不知道學(xué)校這么做是為了什么,為國內(nèi)培養(yǎng)大量的程序員嗎?學(xué)生們能真正學(xué)到計(jì)算機(jī)知識(shí)嗎?好了,我敢講,在我們學(xué)校學(xué)習(xí)編程學(xué)生和優(yōu)秀程序員(注意我指的是優(yōu)秀,只會(huì)編幾個(gè)糟爛程序的人算不上)的比例應(yīng)該是100:0.1 
在這種比例下雖然我們中國學(xué)習(xí)編程的人鋪天蓋地,但是想想有多少個(gè)人能真正為中國軟件業(yè)發(fā)展作出貢獻(xiàn),有多少人能真正寫出優(yōu)秀的程序名揚(yáng)海外! 

我從學(xué)習(xí)編程以來,不管是自學(xué)還是老師指導(dǎo),從來都是解決問題就好,編出程序來就行,我的疑惑是:我們有真正的強(qiáng)調(diào)過程序的效率,程序的質(zhì)量嗎?我們有仔細(xì)分析過我們寫的東西,看看有沒有可以改進(jìn)的地方,看看有沒有簡單的方法來達(dá)到同樣的目的呢?我問心自問,我發(fā)現(xiàn),我從來沒有對(duì)我寫出來的程序進(jìn)行過優(yōu)化,最多就是進(jìn)行詳細(xì)的測(cè)試,然后Debug,但是這就足夠了嗎?這些天我偶爾發(fā)現(xiàn)我曾經(jīng)寫過的一個(gè)游戲,那是一年前我剛加入vcroad.net做為其中一員時(shí)候,感覺應(yīng)該拿點(diǎn)東西出來,然后花了一個(gè)星期的時(shí)間寫出來的!程序不算復(fù)雜,但是用到了不少數(shù)據(jù)結(jié)構(gòu)的東西,也用到了一些精彩的算法,加上windows的界面和游戲的可玩性,寫完后受到了不少好評(píng),我當(dāng)時(shí)真的很佩服自己!但是現(xiàn)在看呢:沒有一句注釋,好多丑陋的函數(shù)名比如:void chushihua(),好多沒有必要的變量,可以用簡單語句完成工作的我使用華麗的算法,大量使用全局變量.....,說不好聽的話,六百多行的程序除了能運(yùn)行之外就是一陀屎!如果一年前我能聽到一些反面意見的話,大概我能早一點(diǎn)覺悟,但是自從原代碼在網(wǎng)站發(fā)布以來聽到的都是贊美之詞,沒有一個(gè)人向我提出程序改進(jìn)的意見,這又說明了一個(gè)什么問題呢?很值得思考?。?nbsp;

還有一個(gè)疑惑是:我們說的和做的真的一樣嗎?我在學(xué)校的時(shí)候曾經(jīng)受學(xué)院指派承辦過一個(gè)計(jì)算機(jī)大賽,請(qǐng)了一個(gè)老師出決賽的題目,主要是一些算法題目,這個(gè)老師可能是我上大學(xué)以來唯一敬佩的老師了,從程序調(diào)試到打分,對(duì)于每個(gè)程序都仔細(xì)分析其時(shí)間效率和空間效率,然后綜合打分,四十個(gè)人的卷子,老師從下午三點(diǎn)一直調(diào)試到晚上十點(diǎn),在有些寫的精彩的語句后還加上批注。我真是高興很遇到這樣的老師并且和他做深入的交流,但在事后,卻發(fā)生了一件不愉快的事,在比賽中獲得第二名的學(xué)生找到我,說他程序全部調(diào)試成功應(yīng)該給他滿分,并且應(yīng)該得第一,我說不過他,最后調(diào)出了他的原程序和第一名的原程序?qū)Ρ龋诲e(cuò),兩個(gè)程序都運(yùn)行的很好,這時(shí),那個(gè)同學(xué)開口了:“我的程序?qū)懙氖趾喗菝髁耍瑑H僅數(shù)行就完成了題目要求,而他的卻寫了一大堆,為什么給他的分多過給我的分?!蔽耶?dāng)時(shí)很是氣憤,如果不是老師負(fù)責(zé)的話,那么現(xiàn)在第一名和第二名的位置真的要互調(diào)了,拜托,不是程序的行數(shù)越少程序的質(zhì)量就越高,我記得我跟他大談這方面的道理,最后說服他了!哈哈,但是我,只能說說而已,我不知道還有多少人一樣,說起來頭頭是道,但心里卻壓根就從未重視過它! 

3.我打算做的! 
其實(shí)那天我想到的遠(yuǎn)不止上面那么多,但是我不想再說了,因?yàn)槲也孪肟催@篇文章的網(wǎng)友大概都有一肚子的感想,一肚子的抱怨,借用這篇文章發(fā)泄可不是我想達(dá)到的目的,在上面我把自己罵的一文不值也不是妄自菲薄,但是在某些方面我真的做錯(cuò)了,或者說是偏離了正確方向,現(xiàn)在是矯正方向和重整旗鼓的時(shí)候了,就象我前面說過的,我相信中國有世界上最好的程序員,我也相信我的水平不會(huì)一直保持現(xiàn)狀,我現(xiàn)在就收拾起牢騷真正的實(shí)干起來! 
真的很巧,就寫到這里的時(shí)候我在網(wǎng)上偶爾發(fā)現(xiàn)了這篇手冊(cè),我不知道這預(yù)示著什么,但是我想如果我照下面這個(gè)基本原則一直踏實(shí)做下去,我一定會(huì)實(shí)現(xiàn)我的理想---一名優(yōu)秀的軟件設(shè)計(jì)師! 

(下面這些文字不是我的原創(chuàng),是我偶爾在網(wǎng)上發(fā)現(xiàn)的,我真的很幸運(yùn)能看到這些,這篇文章也隨著下面的文字而結(jié)束,我真心的希望您能從這篇文章中得到啟發(fā),這篇文章歡迎大家隨意轉(zhuǎn)載,您可以不寫作者是誰,但是請(qǐng)您寫上vcroad.net原創(chuàng),謝謝您的支持) 

作者:金蝶中間件公司CTO袁紅崗 

不知不覺做軟件已經(jīng)做了十年,有成功的喜悅,也有失敗的痛苦,但總不敢稱自己是高手,因?yàn)楹臀倚哪恐姓嬲母呤謧儽绕饋?,還差的太遠(yuǎn)。世界上并沒有成為高手的捷徑,但一些基本原則是可以遵循的。 

  1. 扎實(shí)的基礎(chǔ)。數(shù)據(jù)結(jié)構(gòu)、離散數(shù)學(xué)、編譯原理,這些是所有計(jì)算機(jī)科學(xué)的基礎(chǔ),如果不掌握他們,很難寫出高水平的程序。據(jù)我的觀察,學(xué)計(jì)算機(jī)專業(yè)的人比學(xué)其他專業(yè)的人更能寫出高質(zhì)量的軟件。程序人人都會(huì)寫,但當(dāng)你發(fā)現(xiàn)寫到一定程度很難再提高的時(shí)候,就應(yīng)該想想是不是要回過頭來學(xué)學(xué)這些最基本的理論。不要一開始就去學(xué)OOP,即使你再精通OOP,遇到一些基本算法的時(shí)候可能也會(huì)束手無策。 

  2. 豐富的想象力。不要拘泥于固定的思維方式,遇到問題的時(shí)候要多想幾種解決問題的方案,試試別人從沒想過的方法。豐富的想象力是建立在豐富的知識(shí)的基礎(chǔ)上,除計(jì)算機(jī)以外,多涉獵其他的學(xué)科,比如天文、物理、數(shù)學(xué)等等。另外,多看科幻電影也是一個(gè)很好的途徑。 

  3. 最簡單的是最好的。這也許是所有科學(xué)都遵循的一條準(zhǔn)則,如此復(fù)雜的質(zhì)能互換原理在愛因斯坦眼里不過是一個(gè)簡單得不能再簡單的公式:E=mc2。簡單的方法更容易被人理解,更容易實(shí)現(xiàn),也更容易維護(hù)。遇到問題時(shí)要優(yōu)先考慮最簡單的方案,只有簡單方案不能滿足要求時(shí)再考慮復(fù)雜的方案。 

  4. 不鉆牛角尖。當(dāng)你遇到障礙的時(shí)候,不妨?xí)簳r(shí)遠(yuǎn)離電腦,看看窗外的風(fēng)景,聽聽輕音樂,和朋友聊聊天。當(dāng)我遇到難題的時(shí)候會(huì)去玩游戲,而且是那種極暴力的打斗類游戲,當(dāng)負(fù)責(zé)游戲的那部分大腦細(xì)胞極度亢奮的時(shí)候,負(fù)責(zé)編程的那部分大腦細(xì)胞就得到了充分的休息。當(dāng)重新開始工作的時(shí)候,我會(huì)發(fā)現(xiàn)那些難題現(xiàn)在竟然可以迎刃而解。 

  5. 對(duì)答案的渴求。人類自然科學(xué)的發(fā)展史就是一個(gè)渴求得到答案的過程,即使只能知道答案的一小部分也值得我們?nèi)ジ冻?。只要你?jiān)定信念,一定要找到問題的答案,你才會(huì)付出精力去探索,即使最后沒有得到答案,在過程中你也會(huì)學(xué)到很多東西。 

  6. 多與別人交流。三人行必有我?guī)煟苍S在一次和別人不經(jīng)意的談話中,就可以迸出靈感的火花。多上上網(wǎng),看看別人對(duì)同一問題的看法,會(huì)給你很大的啟發(fā)。 

  7. 良好的編程風(fēng)格。注意養(yǎng)成良好的習(xí)慣,代碼的縮進(jìn)編排,變量的命名規(guī)則要始終保持一致。大家都知道如何排除代碼中錯(cuò)誤,卻往往忽視了對(duì)注釋的排錯(cuò)。注釋是程序的一個(gè)重要組成部分,它可以使你的代碼更容易理解,而如果代碼已經(jīng)清楚地表達(dá)了你的思想,就不必再加注釋了,如果注釋和代碼不一致,那就更加糟糕。 

  8. 韌性和毅力。這也許是"高手"和一般程序員最大的區(qū)別。A good programming is 99 weat and 1わffee。高手們并不是天才,他們是在無數(shù)個(gè)日日夜夜中磨練出來的。成功能給我們帶來無比的喜悅,但過程卻是無比的枯燥乏味。你不妨做個(gè)測(cè)試,找個(gè)10000以內(nèi)的素?cái)?shù)表,把它們?nèi)汲聛恚缓笤贆z查三遍,如果能夠不間斷地完成這一工作,你就可以滿足這一條。 
  
  這些是我這幾年程序員生涯的一點(diǎn)體會(huì),希望能夠給大家有所幫助。 

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉