注意:訪問本站需要Cookie和JavaScript支持!請設置您的瀏覽器! • 打開購物車 • 查看留言 • 付款方式 • 聯系我們 |
![]() |
首頁 | 電子入門 | 學單片機 | 免費資源 | 下載中心 | 商品列表 | 象棋在線 | 在線繪圖 | 加盟五一 | 加入收藏 | 設為首頁 |
選擇分類:當前分類——電腦編程 相關聯或者相類似的文章: 國產OS?中文CPU?(1213) JAVA教程 第一講 Java語言概述(2)(796) JAVA教程 第三講 Java語言中的面向對象特性(1)(785) vb的10個小技巧 (772) 學編程的人不能不看的好文章 (745) JAVASCRIPT簡介 (736) 絕對不知道你的瀏覽器還有這個功能!(722) JAVA對象入門第1章 對象入門(719) 給初學編程者的忠告 (702) JavaScript 對象與數組參考大全(650) JAVA教程 第三講 Java語言中的面向對象特性(2)(631) JAVA教程 第三講 Java語言中的面向對象特性(3)(587) VB開發Windows環境下的串行通信程序(560) SQL轉ACCESS解決自動編號問題(531) JAVA教程 Java語言基礎知識(452) JAVA教程 第二講 Java語言基礎知識(1)(364) DHTML參考手冊(一)(210) [精]5分鐘編寫一個ASP論壇(99) Cookies常用命令簡介(99) RegExp正則表達示用法(3) 首頁 前頁 后頁 尾頁 本站推薦: | 學編程的人不能不看的好文章 ViVi.人人.365Key. YouNote.niula.Blogchina.我摘.天極.和訊.POCO.狐摘.億友 做為一名大四的學生,我面試過不少的單位,有成功的也有失敗的,但是對我來說所有的失敗在某種意義上都是一種成功,特別是我下面寫的這些,寫這篇文章的時候,我已經簽了南京的一家軟件公司,但是想起今年2月21日我面試蘇州臺灣的IT公司的經歷聯想到我們現在學習編程的一些情況我真的深有感觸,這次面試使我深深的體會到了失敗但也收獲了很多。我要說的將分成三部分,1.是我面試的具體經過2.是由面試想到的3.現今我應該做的。當然這些話很大程度上是我個人的意見,不可能完全得到大家的贊同,所以在某些觀點上如果哪位朋友覺得跟我的有很大出入,請不要介意,也不要對我攻擊,就當我沒有說過,歡迎和我聯系共同探討這些問題!我的EMAIL:wutao8@263.net 1.面試經過 大約在年前我接到了臺灣瑞晟(Realtek)蘇州公司的面試通知,通知我2月21日到蘇州工業園區面試,接到面試后的幾天我把一些專業課溫習了一遍,特別是C++和數據結構,由于大學幾年里,我一直專研這些方面,加上通過了高級程序員的考試,對于一些常用的算法我差不多也達到了爛熟于胸的地步,當時的感覺是如果問了我這些方面的問題我應該是沒有問題的! 21日那天我被安排在4:30面試,由一位技術人員單獨給我面試,在問了一些簡單的問題之后他給我出了一道編程題目,題目是這樣的: (由于具體面試的題目比較煩瑣,我將其核心思想提取出來分解成了兩個獨立的簡單的問題,有可能問題分解的不當,請大家見諒,實際面試了一個的問題但比其復雜很多,而且涉及一些高等數學變換) 1) 寫一個函數計算當參數為n(n很大)時的值 1-2+3-4+5-6+7......+n 哼,我的心里冷笑一聲!沒想到這么簡單,我有點緊張的心情頓時放松起來! 于是很快我給出我的解法: 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; } 搞定!當我用期待的目光看著面試官的時候,他微笑著跟我說,執行結果肯定是沒有問題!但當n很大的時候我這個程序執行效率很低, 在嵌入式系統的開發中,程序的運行效率很重要,能讓CPU少執行一條指令都是好的,他讓我看看這個程序還有什么可以修改的地方,把程序優化一下!聽了這些話,我的心情當時變的有點沉重,沒想到他的要求很嚴格,之后我對程序進行了嚴格的分析,給出了改進了的方案! 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; } 雖然我不敢保證我這個算法是最優的,但是比起上一個程序,我將所有涉及到乘法指令的語句改為執行加法指令,既達到要題目的要求而且運算時間上縮短了很多!而代價僅僅是增加了一個整型變量!但是我現在的信心已經受了一點打擊,我將信將疑的看者面試官,他還是微笑著跟我說:“不錯,這個程序確實在效率上有的很大的提高!”我心里一陣暗喜!但他接著說這個程序仍然不能達到他的要求,要我給出更優的方案!天啊!還有優化!我當時真的有點崩潰了,想了一會后,我請求他給出他的方案!然后他很爽快的給出了他的程序! 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; } 搞笑,當時我目瞪口呆,沒想到他是這個意思,這么簡單的代碼我真的不會寫嗎,但是我為什么沒有往那方面上想呢!他說的沒有錯,在n很大很大的時候這三個程序運行時間的差別簡直是天壤之別!當我剛想開口說點什么的時候,他卻先開口了:“不要認為CPU運算速度快就把所有的問題都推給它去做,程序員應該將代碼優化再優化,我們自己能做的決不要讓CPU做,因為CPU是為用戶服務的,不是為我們程序員服務的!”多么精辟的語言,我已經不想再說什么了!接著是第二個問題: 2),他要求我用一種技巧性的編程方法來用一個函數實現兩個函數的功能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! 現在用一個函數fn(int n,int flag)實現,當flag為0時,實現fn1功能,如果flag為1時實現fn2功能! 他的要求還是效率,效率,效率!說實在話,如果我心情好的話我應該能給出一種比較好的算法,但我那時真的沒有什么心思再想了,我在紙上胡亂畫了一些諸如6!=6*5!的公式后直截了當的跟他說要他給出他的答案!面試官也沒有說什么,給出了他的思路: 定義一個二維數組 float t[2][5]存入[2!,3!,4!,5!,6!},{5!,6!,7!,8!,9!]然后給出一個循環: for(i=0;i<6;i++) { temp=temp+n/t[flag]; } 最后得到計算值!呵呵,典型的空間換時間的算法! 這些總共花了50分鐘的時間,還有十分鐘我就跟他很隨意的聊聊天,聊了一些編程以及生活的問題,那時的我已經很放松了,因為我知道這次面試結果只有一個:失敗。5:30的時候面試官要我等通知,于是我離開了他們公司。這就是面試的整個經過 2.由面試想到的 真的是很失敗啊!我記得那天下好大的雨,氣溫也很低,我邊走邊想,從5:30一直走到7:30,全身都濕透了,又冷又餓,但是我只是一直走,腦子里面充滿了疑惑,我也想讓雨把自己淋醒!看到這里有些朋友可能覺得那些面試題目不算什么如果讓自己做的話肯定能全部答對,我肯定相信你,因為我從未懷疑過中國程序員的能力,我認為中國有世界上最好的程序員,我也從未認為自己是高手,所以我做不出來不代表中國程序員比臺灣或者別的地方的程序員差,所以我就從我的角度,我的所見所想來談一些感想: 不錯全世界都有優秀的程序員,中國也不例外,但是我疑惑的是:到底中國和臺灣或者國外的優秀的程序員的比例到底是多少?臺灣我不知道,中國100個程序員里有幾個是優秀的呢?我根本算不上,從上面的表現就足以說明一切了!是1個?5個?10個?50個?這個數字我不敢亂猜,恐遭網友一頓痛罵,那么我們國內有多少人學習計算機呢?拿我們學校來說,計算機97級4個班,98級5個班,99級10個班,2000級17個班,人多了,老師怎么辦?我們學校的做法是讓研究生上課,然后呢?補考一抓一大把,大把大把的補考費落入了學校的口袋,還說現在的學生素質低!真是好笑,我都不知道學校這么做是為了什么,為國內培養大量的程序員嗎?學生們能真正學到計算機知識嗎?好了,我敢講,在我們學校學習編程學生和優秀程序員(注意我指的是優秀,只會編幾個糟爛程序的人算不上)的比例應該是100:0.1 。在這種比例下雖然我們中國學習編程的人鋪天蓋地,但是想想有多少個人能真正為中國軟件業發展作出貢獻,有多少人能真正寫出優秀的程序名揚海外! 我從學習編程以來,不管是自學還是老師指導,從來都是解決問題就好,編出程序來就行,我的疑惑是:我們有真正的強調過程序的效率,程序的質量嗎?我們有仔細分析過我們寫的東西,看看有沒有可以改進的地方,看看有沒有簡單的方法來達到同樣的目的呢?我問心自問,我發現,我從來沒有對我寫出來的程序進行過優化,最多就是進行詳細的測試,然后Debug,但是這就足夠了嗎?這些天我偶爾發現我曾經寫過的一個游戲,那是一年前我剛加入www.vcroad.net做為其中一員時候,感覺應該拿點東西出來,然后花了一個星期的時間寫出來的!程序不算復雜,但是用到了不少數據結構的東西,也用到了一些精彩的算法,加上windows的界面和游戲的可玩性,寫完后受到了不少好評,我當時真的很佩服自己!但是現在看呢:沒有一句注釋,好多丑陋的函數名比如:void chushihua(),好多沒有必要的變量,可以用簡單語句完成工作的我使用華麗的算法,大量使用全局變量.....,說不好聽的話,六百多行的程序除了能運行之外就是一陀屎!如果一年前我能聽到一些反面意見的話,大概我能早一點覺悟,但是自從原代碼在網站發布以來聽到的都是贊美之詞,沒有一個人向我提出程序改進的意見,這又說明了一個什么問題呢?很值得思考啊! 還有一個疑惑是:我們說的和做的真的一樣嗎?我在學校的時候曾經受學院指派承辦過一個計算機大賽,請了一個老師出決賽的題目,主要是一些算法題目,這個老師可能是我上大學以來唯一敬佩的老師了,從程序調試到打分,對于每個程序都仔細分析其時間效率和空間效率,然后綜合打分,四十個人的卷子,老師從下午三點一直調試到晚上十點,在有些寫的精彩的語句后還加上批注。我真是高興很遇到這樣的老師并且和他做深入的交流,但在事后,卻發生了一件不愉快的事,在比賽中獲得第二名的學生找到我,說他程序全部調試成功應該給他滿分,并且應該得第一,我說不過他,最后調出了他的原程序和第一名的原程序對比,不錯,兩個程序都運行的很好,這時,那個同學開口了:“我的程序寫的十分簡捷明了,僅僅數行就完成了題目要求,而他的卻寫了一大堆,為什么給他的分多過給我的分!蔽耶敃r很是氣憤,如果不是老師負責的話,那么現在第一名和第二名的位置真的要互調了,拜托,不是程序的行數越少程序的質量就越高,我記得我跟他大談這方面的道理,最后說服他了!哈哈,但是我,只能說說而已,我不知道還有多少人一樣,說起來頭頭是道,但心里卻壓根就從未重視過它 3.我打算做的! 其實那天我想到的遠不止上面那么多,但是我不想再說了,因為我猜想看這篇文章的網友大概都有一肚子的感想,一肚子的抱怨,借用這篇文章發泄可不是我想達到的目的,在上面我把自己罵的一文不值也不是妄自菲薄,但是在某些方面我真的做錯了,或者說是偏離了正確方向,現在是矯正方向和重整旗鼓的時候了,就象我前面說過的,我相信中國有世界上最好的程序員,我也相信我的水平不會一直保持現狀,我現在就收拾起牢騷真正的實干起來! 真的很巧,就寫到這里的時候我在網上偶爾發現了這篇手冊,我不知道這預示著什么,但是我想如果我照下面這個基本原則一直踏實做下去,我一定會實現我的理想---一名優秀的軟件設計師! (下面這些文字不是我的原創,是我偶爾在網上發現的,我真的很幸運能看到這些,這篇文章也隨著下面的文字而結束,我真心的希望您能從這篇文章中得到啟發,這篇文章歡迎大家隨意轉載,您可以不寫作者是誰,但是請您寫上www.vcroad.net原創,謝謝您的支持) 作者:金蝶中間件公司CTO袁紅崗 不知不覺做軟件已經做了十年,有成功的喜悅,也有失敗的痛苦,但總不敢稱自己是高手,因為和我心目中真正的高手們比起來,還差的太遠。世界上并沒有成為高手的捷徑,但一些基本原則是可以遵循的。 1. 扎實的基礎。數據結構、離散數學、編譯原理,這些是所有計算機科學的基礎,如果不掌握他們,很難寫出高水平的程序。據我的觀察,學計算機專業的人比學其他專業的人更能寫出高質量的軟件。程序人人都會寫,但當你發現寫到一定程度很難再提高的時候,就應該想想是不是要回過頭來學學這些最基本的理論。不要一開始就去學OOP,即使你再精通OOP,遇到一些基本算法的時候可能也會束手無策。 2. 豐富的想象力。不要拘泥于固定的思維方式,遇到問題的時候要多想幾種解決問題的方案,試試別人從沒想過的方法。豐富的想象力是建立在豐富的知識的基礎上,除計算機以外,多涉獵其他的學科,比如天文、物理、數學等等。另外,多看科幻電影也是一個很好的途徑。 3. 最簡單的是最好的。這也許是所有科學都遵循的一條準則,如此復雜的質能互換原理在愛因斯坦眼里不過是一個簡單得不能再簡單的公式:E=mc2。簡單的方法更容易被人理解,更容易實現,也更容易維護。遇到問題時要優先考慮最簡單的方案,只有簡單方案不能滿足要求時再考慮復雜的方案。 4. 不鉆牛角尖。當你遇到障礙的時候,不妨暫時遠離電腦,看看窗外的風景,聽聽輕音樂,和朋友聊聊天。當我遇到難題的時候會去玩游戲,而且是那種極暴力的打斗類游戲,當負責游戲的那部分大腦細胞極度亢奮的時候,負責編程的那部分大腦細胞就得到了充分的休息。當重新開始工作的時候,我會發現那些難題現在竟然可以迎刃而解。 5. 對答案的渴求。人類自然科學的發展史就是一個渴求得到答案的過程,即使只能知道答案的一小部分也值得我們去付出。只要你堅定信念,一定要找到問題的答案,你才會付出精力去探索,即使最后沒有得到答案,在過程中你也會學到很多東西。 6. 多與別人交流。三人行必有我師,也許在一次和別人不經意的談話中,就可以迸出靈感的火花。多上上網,看看別人對同一問題的看法,會給你很大的啟發。 7. 良好的編程風格。注意養成良好的習慣,代碼的縮進編排,變量的命名規則要始終保持一致。大家都知道如何排除代碼中錯誤,卻往往忽視了對注釋的排錯。注釋是程序的一個重要組成部分,它可以使你的代碼更容易理解,而如果代碼已經清楚地表達了你的思想,就不必再加注釋了,如果注釋和代碼不一致,那就更加糟糕。 8. 韌性和毅力。這也許是"高手"和一般程序員最大的區別。A good programming is 99 weat and 1?ffee。高手們并不是天才,他們是在無數個日日夜夜中磨練出來的。成功能給我們帶來無比的喜悅,但過程卻是無比的枯燥乏味。你不妨做個測試,找個10000以內的素數表,把它們全都抄下來,然后再檢查三遍,如果能夠不間斷地完成這一工作,你就可以滿足這一條 (出處: ![]() 1、 本站不保證以上觀點正確,就算是本站原創作品,本站也不保證內容正確。 2、如果您擁有本文版權,并且不想在本站轉載,請書面通知本站立即刪除并且向您公開道歉! |
本站協議。
版權信息。
關于我們。
本站地圖。
營業執照。
發票說明。
付款方式。
聯系方式
深圳市寶安區西鄉五壹電子商行——粵ICP備16073394號-1;地址:深圳西鄉河西四坊183號;郵編:518102 E-mail:51dz$163.com($改為@);Tel:(0755)27947428 工作時間:9:30-12:00和13:30-17:30和18:30-20:30,無人接聽時可以再打手機13537585389 |