怎樣才能更好的學習C和C_第1頁
怎樣才能更好的學習C和C_第2頁
怎樣才能更好的學習C和C_第3頁
怎樣才能更好的學習C和C_第4頁
怎樣才能更好的學習C和C_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

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

2、EMAIL:1面試經(jīng)過大約在年前我接到了臺灣瑞晟(Realtek)蘇州公司的面試通知,通知我2月21日到蘇州工業(yè)園區(qū)面試,接到面試后的幾天我把一些專業(yè)課溫習了一遍,特別是C+和數(shù)據(jù)結(jié)構(gòu),由于大學幾年里,我一直專研這些方面,加上通過了高級程序員的考試,對于一些常用的算法我差不多也達到了爛熟于胸的地步,當時的感覺是如果問了我這些方面的問題我應(yīng)該是沒有問題的21日那天我被安排在 4:30面試,由一位技術(shù)人員單獨給我面試,在問了一些簡單的問題 之后他給我出了一道編程題目,題目是這樣的:(由于具體面試的題目比較煩瑣,我將其核心思想提取出來分解成了兩個獨立的簡單的問題,有可能問題分解的不當,請大家見諒,實

3、際面試了一個的問題但比其復(fù)雜很多,而且涉及一些高等數(shù)學變換)1)寫一個函數(shù)計算當參數(shù)為n(n很大)時的值1-2+3-4+5-6+7+n哼,我的心里冷笑一聲!沒想到這么簡單,我有點緊張的心情頓時放松起來!于是很快我給出我的解法:long fn(l ong n)long temp=0;int i,flag=1;if(n <=0)prin tf("error: n must > 0);exit(1);for(i=1;i<=n ;i+)temp=temp+flag*i;flag=(-1)*flag;return temp;搞定!當我用期待的目光看著面試官的時候,他微笑著跟我

4、說,執(zhí)行結(jié)果肯定是沒有問題但當n很大的時候我這個程序執(zhí)行效率很低,在嵌入式系統(tǒng)的開發(fā)中,程序的運行效率很重要,能讓CPU少執(zhí)行一條指令都是好的,他讓我看看這個程序還有什么可以修改的地方,把程序優(yōu)化一下!聽了這些話,我的心情當時變的有點沉重,沒想到他的要求很嚴格,之后我對程序 進行了嚴格的分析,給出了改進了的方案!long fn(l ong n)long temp=0;int j=1,i=1,flag=1;if(n <=0)prin tf("error: n must > 0);exit(1);while(j<=n)temp=temp+i;i=-i;i>O?i+

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

6、 tf("error: n must > 0);exit(1);if(0=n%2)return (n/2)*(_1);elsereturn (n/2)*(-1)+n;搞笑,當時我目瞪口呆,沒想到他是這個意思,這么簡單的代碼我真的不會寫嗎,但是我為什么沒有往那方面上想呢!他說的沒有錯,在n很大很大的時候這三個程序運行時間的差別簡 直是天壤之別!當我剛想開口說點什么的時候,他卻先開口了 :"不要認為CPU運算速度快就把所有的問題都推給它去做,程序員應(yīng)該將代碼優(yōu)化再優(yōu)化,我們自己能做的決不要讓CPU做,因為CPU是為用戶服務(wù)的,不是為我們程序員服務(wù)的!"多么精辟的

7、語言,我已經(jīng)不想再說什么 了!接著是第二個問題:2),他要求我用一種技巧性的編程方法來用一個函數(shù)實現(xiàn)兩個函數(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)在用一個函數(shù)fn(int n,int flag)實現(xiàn),當flag為0時,實現(xiàn)fn1功能,如果flag為1時實現(xiàn) fn2功能!他的要求還是效率,效率,效率!說實在話,如果我心情好的話我應(yīng)該能給出一種比較好的 算法,但我那時真的沒有什么心思再想了,我在紙上胡亂畫了一些諸如6!=6*5!的公式后直截了當?shù)母f要他給出他的答案!面試官也沒有說什么,給出

8、了他的思路:定義一個二維數(shù)組float t25存入,3!,4!,5!,6!,5!,6!,7!,8!,9!然后給出一個循環(huán):for(i=0;i<6;i+)temp=temp+n/tflag;最后得到計算值!呵呵,典型的空間換時間的算法!這些總共花了 50分鐘的時間,還有十分鐘我就跟他很隨意的聊聊天,聊了一些編程以及 生活的問題,那時的我已經(jīng)很放松了 ,因為我知道這次面試結(jié)果只有一個:失敗。5:30的時候面 試官要我等通知,于是我離開了他們公司。這就是面試的整個經(jīng)過2由面試想到的真的是很失敗啊!我記得那天下好大的雨,氣溫也很低,我邊走邊想,從5:30 一直走到7:30, 全身都濕透了,又冷又

9、餓,但是我只是一直走,腦子里面充滿了疑惑,我也想讓雨把自己淋醒!看 到這里有些朋友可能覺得那些面試題目不算什么如果讓自己做的話肯定能全部答對,我肯定相信你,因為我從未懷疑過中國程序員的能力,我認為中國有世界上最好的程序員,我也從未認為自己是高手,所以我做不出來不代表中國程序員比臺灣或者別的地方的程序員差,所以我就從我的角度,我的所見所想來談一些感想不錯全世界都有優(yōu)秀的程序員,中國也不例外,但是我疑惑的是:到底中國和臺灣或者國外的優(yōu)秀的程序員的比例到底是多少?臺灣我不知道,中國100個程序員里有幾個是優(yōu)秀的呢?我根本算不上,從上面的表現(xiàn)就足以說明一切了!是1個? 5個? 10個? 50個?這個數(shù)

10、字我不敢亂猜,恐遭網(wǎng)友一頓痛罵,那么我們國內(nèi)有多少人學習計算機呢?拿我們學校來說,計算機97級4個班,98級5個班,99級10個班,2000級17個班,人多了,老師怎么辦?我們學校 的做法是讓研究生上課,然后呢?補考一抓一大把,大把大把的補考費落入了學校的口袋,還說現(xiàn)在的學生素質(zhì)低!真是好笑,我都不知道學校這么做是為了什么,為國內(nèi)培養(yǎng)大量的程序員嗎?學生們能真正學到計算機知識嗎?好了,我敢講,在我們學校學習編程學生和優(yōu)秀程序員(注意我指的是優(yōu)秀,只會編幾個糟爛程序的人算不上)的比例應(yīng)該是100:0.1。在這種比例下雖然我們中國學習編程的人鋪天蓋地,但是想想有多少個人能真正為中國軟件業(yè)發(fā)展作出貢

11、獻,有多少人能真正寫出優(yōu)秀的程序名揚海外!我從學習編程以來,不管是自學還是老師指導(dǎo),從來都是解決問題就好,編出程序來就行, 我的疑惑是:我們有真正的強調(diào)過程序的效率,程序的質(zhì)量嗎?我們有仔細分析過我們寫的東 西,看看有沒有可以改進的地方,看看有沒有簡單的方法來達到同樣的目的呢?我問心自問,我發(fā)現(xiàn),我從來沒有對我寫出來的程序進行過優(yōu)化,最多就是進行詳細的測試,然后Debug,但是這就足夠了嗎?這些天我偶爾發(fā)現(xiàn)我曾經(jīng)寫過的一個游戲,那是一年前我剛加入,感覺應(yīng)該拿點東西出來,然后花了一個星期的時間寫出來的!程序不算復(fù)雜,但是用到了不少數(shù)據(jù)結(jié)構(gòu)的東西,也用到了一些精彩的算法,加上windows的界面和

12、游戲的可玩性,寫完后受到了不少 好評,我當時真的很佩服自己!但是現(xiàn)在看呢:沒有一句注釋,好多丑陋的函數(shù)名比如:voidchushihua(),好多沒有必要的變量,可以用簡單語句完成工作的我使用華麗的算法,大量使用全局變量,說不好聽的話,六百多行的程序除了能運行之外就是一陀屎!如果一年前我能聽到一些反面意見的話,大概我能早一點覺悟,但是自從原代碼在網(wǎng)站發(fā)布以來聽到的都是贊美之 詞,沒有一個人向我提出程序改進的意見,這又說明了一個什么問題呢?很值得思考??!還有一個疑惑是:我們說的和做的真的一樣嗎?我在學校的時候曾經(jīng)受學院指派承辦過 一個計算機大賽,請了一個老師出決賽的題目,主要是一些算法題目,這個

13、老師可能是我上大學以來唯一敬佩的老師了 ,從程序調(diào)試到打分,對于每個程序都仔細分析其時間效率和空間效 率,然后綜合打分,四十個人的卷子,老師從下午三點一直調(diào)試到晚上十點,在有些寫的精彩的語句后還加上批注。我真是高興很遇到這樣的老師并且和他做深入的交流,但在事后,卻發(fā)生了一件不愉快的事,在比賽中獲得第二名的學生找到我,說他程序全部調(diào)試成功應(yīng)該給他滿分 并且應(yīng)該得第一,我說不過他,最后調(diào)出了他的原程序和第一名的原程序?qū)Ρ?,不錯,兩個程序都運行的很好,這時,那個同學開口了 :"我的程序?qū)懙氖趾喗菝髁?,僅僅數(shù)行就完成了題目要 求,而他的卻寫了一大堆,為什么給他的分多過給我的分。 &quo

14、t;我當時很是氣憤,如果不是老師負 責的話,那么現(xiàn)在第一名和第二名的位置真的要互調(diào)了,拜托,不是程序的行數(shù)越少程序的質(zhì)量就越高,我記得我跟他大談這方面的道理,最后說服他了 !哈哈,但是我,只能說說而已,我不知道還有多少人一樣,說起來頭頭是道,但心里卻壓根就從未重視過它3我打算做的!其實那天我想到的遠不止上面那么多,但是我不想再說了 ,因為我猜想看這篇文章的網(wǎng)友大概都有一肚子的感想,一肚子的抱怨,借用這篇文章發(fā)泄可不是我想達到的目的,在上面我把自己罵的一文不值也不是妄自菲薄,但是在某些方面我真的做錯了,或者說是偏離了正確方向,現(xiàn)在是矯正方向和重整旗鼓的時候了,就象我前面說過的,我相信中國有世界上

15、最好的程序員,我也相信我的水平不會一直保持現(xiàn)狀,我現(xiàn)在就收拾起牢騷真正的實干起來!真的很巧,就寫到這里的時候我在網(wǎng)上偶爾發(fā)現(xiàn)了這篇手冊,我不知道這預(yù)示著什么,但是我想如果我照下面這個基本原則一直踏實做下去,我一定會實現(xiàn)我的理想-一名優(yōu)秀的軟件設(shè)計師?。ㄏ旅孢@些文字不是我的原創(chuàng),是我偶爾在網(wǎng)上發(fā)現(xiàn)的,我真的很幸運能看到這些,這篇文 章也隨著下面的文字而結(jié)束,我真心的希望您能從這篇文章中得到啟發(fā),這篇文章歡迎大家隨意轉(zhuǎn)載,您可以不寫作者是誰,但是請您寫上,謝謝您的支持)作者:金蝶中間件公司 CTO袁紅崗不知不覺做軟件已經(jīng)做了十年 ,有成功的喜悅,也有失敗的痛苦,但總不敢稱自己是高手, 因為和我心目

16、中真正的高手們比起來,還差的太遠。世界上并沒有成為高手的捷徑 ,但一些基 本原則是可以遵循的。1. 扎實的基礎(chǔ)。數(shù)據(jù)結(jié)構(gòu)、離散數(shù)學、編譯原理,這些是所有計算機科學的基礎(chǔ),如果不掌握他們,很難寫出高水平的程序。據(jù)我的觀察,學計算機專業(yè)的人比學其他專業(yè)的人更能寫出高質(zhì)量的軟件。程序人人都會寫,但當你發(fā)現(xiàn)寫到一定程度很難再提高的時候 ,就應(yīng)該想想 是不是要回過頭來學學這些最基本的理論。不要一開始就去學OOP,即使你再精通OOP遇到一些基本算法的時候可能也會束手無策。2. 豐富的想象力。不要拘泥于固定的思維方式,遇到問題的時候要多想幾種解決問題的方案,試試別人從沒想過的方法。豐富的想象力是建立在豐富的

17、知識的基礎(chǔ)上,除計算機以外,多涉獵其他的學科,比如天文、物理、數(shù)學等等。另外,多看科幻電影也是一個很好的途徑。3. 最簡單的是最好的。這也許是所有科學都遵循的一條準則,如此復(fù)雜的質(zhì)能互換原理在愛因斯坦眼里不過是一個簡單得不能再簡單的公式:E=mc2。簡單的方法更容易被人理解,更容易實現(xiàn),也更容易維護。遇到問題時要優(yōu)先考慮最簡單的方案,只有簡單方案不能滿足要求時再考慮復(fù)雜的方案。4. 不鉆牛角尖。當你遇到障礙的時候,不妨暫時遠離電腦,看看窗外的風景,聽聽輕音樂,和朋友聊聊天。當我遇到難題的時候會去玩游戲,而且是那種極暴力的打斗類游戲,當負責游戲的那部分大腦細胞極度亢奮的時候,負責編程的那部分大腦細胞就得到了充分的休息。當重新開始工作的時候,我會發(fā)現(xiàn)那些難題現(xiàn)在竟然可以迎刃而解。5. 對答案的渴求。人類自然科學的發(fā)展史就是一個渴求得到答案的過程,即使只能知道答案的一小部分也值得我們?nèi)ジ冻?。只要你堅定信念,一定要找到問題的答案,你才會付出精力去探索,即使最后沒有得到答案,在過程中你也會學到很多東西。6. 多與別人交流。三人行必有我?guī)?,也許在一次和別人不經(jīng)意的談話中,就可以迸出靈感 的火花。多上上網(wǎng),看看別人對同一問題的看法,會給你很大的啟發(fā)。7. 良好的編程風格。注意養(yǎng)成良好的習慣,代碼的縮進編排,變量的命名規(guī)則要始終保持一致。大家都知道如何

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論