一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

【過程化設(shè)計方法】如何學(xué)習(xí)程序設(shè)計

 隱者無憂 2007-08-02
有許多網(wǎng)友都曾迷惑地問我:“怎么樣才能學(xué)好程序設(shè)計?”,這不是一兩句話能說清楚的,于是我就寫了這篇文章,給廣大愛好者一個能解惑的方法,無論你是什么樣的“鳥”相信都能在這篇文章里找到你想要的

什么是程序設(shè)計

   
話就從一個著名的公式說起:程序設(shè)計=數(shù)據(jù)結(jié)構(gòu)+算法                         
每當(dāng)我寫下這個公式的時候,心中總有一種新的感悟,可是就這個程序界盡人皆知的公式卻難倒了一大批想和Bill·Gates一爭高下的朋友,下面我為大家解剖這個公式:                 
“程序設(shè)計”說白了就是大家所謂編程,先不管這個詞中有什么深刻的內(nèi)涵,先看看等式右面的這兩個名詞。
按照官方的定義:數(shù)據(jù)結(jié)構(gòu)即非數(shù)值計算的程序設(shè)計問題中的計算機(jī)的操作對象以及它們之間的關(guān)系和操作;算法是對特定問題求解步驟的一種描述,是對指令的有序序列。官方的解釋就是經(jīng)典,可是我們看了卻更糊涂了。別急,聽我給大家解釋。
程序設(shè)計就像蓋房子,數(shù)據(jù)結(jié)構(gòu)就像磚、瓦,而算法就是設(shè)計圖紙。你若想蓋房子首先必須有原料(數(shù)據(jù)結(jié)構(gòu)),但是這些原料不能自動地蓋起了你想要的房子;你 必須按照設(shè)計圖紙(算法)上的說明一磚一瓦地去砌。這樣你才能擁有你想要的房子。程序設(shè)計也一樣,你使用的編譯工具(如Jave /C/Basic/Pascal等)中有各種功能語句或基本結(jié)構(gòu)(如Read/Write/Real/Boolean等),它們不會自動排列成你要的程序 代碼。你得按照程序規(guī)定的功能去編寫,而程序的功能是實現(xiàn)就是算法的具體體現(xiàn)。所以通俗地說:你必須按照特定的規(guī)則,把特定的功能語句和基本結(jié)構(gòu)按照特定 的順序排列起來,形成一個有特定功能的程序,這就是:程序設(shè)計=數(shù)據(jù)結(jié)構(gòu)+算法。 數(shù)據(jù)結(jié)構(gòu)是程序設(shè)計這座大廈的基礎(chǔ),沒有基礎(chǔ),無論設(shè)計有多么高明,這座大廈不可能建造起來的。算法則是程序設(shè)計的思想,它的靈魂!沒有靈魂的程序不能叫 程序,只是一堆雜亂無章的符號而已。在程序設(shè)計中,數(shù)據(jù)結(jié)構(gòu)就像物質(zhì),算法就是意識。這就像哲學(xué)上說的:意識是依賴與物質(zhì)而存在的,物質(zhì)是由于意識而發(fā) 展。雙方是相互依存、缺一不可的!
數(shù)據(jù)結(jié)構(gòu)內(nèi)容不多僅僅有幾個系統(tǒng)自帶的基本結(jié)構(gòu)(像順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、函數(shù)過程)數(shù)據(jù)類型(整型、實型、布爾、字符等)和用戶定義的高級點的 數(shù)據(jù)結(jié)構(gòu)(數(shù)組、集合、文件、指針(隊列、棧、樹、圖等)······)就這么多??墒撬惴▍s不同了,它是多中多樣的!它可以讓你讓數(shù)據(jù)以你想要的方式排 列(當(dāng)然要符合語法和功能要求^_^)。再打個比方,數(shù)據(jù)結(jié)構(gòu)是人體的各種組織、器官,算法則是人的思想。你可以用你的思想去支配你身體的各個可以運動的 器官隨意運動。如果,你想去取一個蘋果,你可以走過去,也可以跑過去,只要你想,你甚至可以爬過去。但是無論如何,你你的器官還你的器官(沒有變),目的 還是同一個目的(取蘋果),而方式卻是隨心所欲!這就是算法的靈活性,不固定性。因此可以這樣說:數(shù)據(jù)結(jié)構(gòu)是死的,而算法是活的!現(xiàn)在明白許多了吧?。牵? ON

怎樣學(xué)習(xí)程序設(shè)計


上面說了許多數(shù)據(jù)結(jié)構(gòu)的在程序設(shè)計中重要性,所以努力學(xué)習(xí)好數(shù)據(jù)結(jié)構(gòu)是 學(xué)好程序設(shè)計的第一步,也是關(guān)鍵的一步。你初學(xué)起來一定會覺得難,枯燥(其實我當(dāng)時也是這么想的 ^_^),什么標(biāo)準(zhǔn)文件、標(biāo)準(zhǔn)類型、標(biāo)準(zhǔn)函數(shù)、標(biāo)準(zhǔn)過程 搞的你煩不勝煩。于是,就有許多初學(xué)者就厭倦了,停滯不前了,退縮了。你若是想編好程序的話就想:難道就這么一點點小困難就難倒我了嗎?我還要挑戰(zhàn) Bill·Gates呢?我一定能行,相信自己,一定會闖過這一關(guān)的!這樣以來,你就具備了程序員最基本的素質(zhì)——毅力。這一點是程序員必備的,否則在后 面開發(fā)程序的漫長時間里,你會熬不住的。而且只有這樣你才能靜下心來學(xué)習(xí)。這一端時間沒有什么捷徑,只有多看書、多練習(xí),把所有結(jié)構(gòu)和類型的用法都找掌握 牢固。不懂就要問,可以去 [URL="http://community.csdn.net/expert/forum.asp"][UCSDN技術(shù)社區(qū) [/U][/URL]。最好呢,有一位老師指引,這樣比自己在這條路是摸黑前進(jìn)強多了,而且往往還事半功倍。切記!只要跨出了第一步,以后就容易多了,萬 事開頭難嘛!一定要堅持,當(dāng)你過了這一端時間以后,你就發(fā)現(xiàn)程序設(shè)計根本沒有你想象的那樣難。當(dāng)你把所有的東東都學(xué)會時,程序設(shè)計的大門已經(jīng)向你敞開了一 扇,而另一扇就是······ 
算法,這個是程序設(shè)計的重點,也是難點。許多菜鳥和老鳥的區(qū)別主要在對算法掌握的熟練程度上面。有許多朋友曾這樣問我:“我數(shù)據(jù)結(jié)構(gòu)上面的都學(xué)會了,也知 道該怎么樣用,可是我為什么還是在編程時,不知道該怎樣用呢?其實,這就是缺少算法思想的一個具體表現(xiàn)。并不是學(xué)好了數(shù)據(jù)結(jié)構(gòu)就會編程了。算法是靈活多變 的,它不像數(shù)據(jù)結(jié)構(gòu)那樣有固定的形式。算法是不固定性就決定了它的特點,你不可能把所有的算法都學(xué)會,因為它是無窮盡的。但是你要是能把自己學(xué)的有限的算 法融會貫通了,那你就了不起了。就好象你只學(xué)會了1、2、3這三個數(shù),但是你可以組成12、23、32、123······。所以算法這條路既長有短,既 難又易?!?br> 學(xué)習(xí)好算法的方法不少,在此詳細(xì)的給大家舉幾個例子?!?br> 首先,你要養(yǎng)成一個良好的程序設(shè)計風(fēng)格和習(xí)慣。這也分許多種。其中最重要的是養(yǎng)成自上向下逐步求精的程序設(shè)計思想和方法。怎樣才是自上向下逐步求精的程序設(shè)計呢。舉個例子。有這樣一個問題:已知三角形的兩邊及夾角,求第三邊及面積。
現(xiàn)在,當(dāng)你看到這個問題是,你不要立即下手去編寫,而是要思考一下怎樣才能求解(算法),然后把她寫下來以免忘記。于是就寫了:
一級算法:
1 輸入兩邊的長度a、b以及夾角A                        
2 計算第三邊c和面積s                             
3 輸出c以及s                            
當(dāng)你寫完之后,你若覺得第2步不太清晰,還不能寫出代碼,那就繼續(xù)求精?!      ?
二級求精:
2-1、將α的角度轉(zhuǎn)換為弧度;
2-2、c=sqrt(a*a+b*b-2*a*b*cos(α));
2-3、s=1/2*(a*b*sin(α))
哈哈,這樣問題不就得到解決了嗎?接著就可以輕松的編代碼了。再仔細(xì)看看上面的步驟:先寫出一級算法,如果覺得由此還是得不到源代碼,或者是其中有一步還 有很多步驟要寫,那么就繼續(xù)求精,直到你認(rèn)為可以很清晰的寫出代碼為止。但是求精可以因人而異,像上面的題目,若是一個編過很多程序的大蝦來說,可能不用 什么求精,代碼就可以直接寫出來了;但要是一個菜鳥(像我一樣)就可能要寫到二級求精。
這樣說來,你可能認(rèn)為這個求精是不是太慢,抑或根本就是在浪費時間。我大聲告訴你:根本不是!這可是眾多的編程先驅(qū)、編程達(dá)人們推薦的基本方法。你知道編 程中,主要時間用在了哪里嗎?不是編寫代碼,而是用在了求解算法和調(diào)試程序上了!而算法的求精就是縮短這些時間的最好的方法。它可以使你不用再很費力的苦 思冥想到底該怎樣構(gòu)造算法,使這個過程更條理、更簡明;它也很可能使你不用再為了一個小小BUG而調(diào)試半天,因為,它給出的算法已經(jīng)趨于完美。其實,列一 個小提綱(算法)就可以解決很多的問題,生活中不也是如此嗎?!所以,第一,求精算法這個最重要的習(xí)慣一定要養(yǎng)成哦!
還有一個好的習(xí)慣就是要做到:程序源代碼的清晰度與可讀性一定要高。
這是為什么呢?在源代碼中,每行代碼前面的空格的有無與多少并不影響程序的運行,但是它影響人的閱讀。你想,當(dāng)你看到一片代碼,格式雜亂無章,沒有什么主 次內(nèi)外一定會頭痛不已,絕對是看了第一遍就不想再看第二遍了。而且當(dāng)你調(diào)試這樣的代碼時,也會被一個小錯誤弄的找不到北了。如果格式很清晰的話,這樣的代 碼就非常易讀,結(jié)構(gòu)很清晰,begin..end都看的清清楚楚。我想這樣的代碼閱讀和調(diào)試起來一定很順手的。
還有就是在有些重要的代碼塊后加入注釋,也可以提高程序的可讀性。不說別人,就說我就深有體會:以前代碼不加注釋,當(dāng)時對其結(jié)構(gòu)很清楚,可是過了幾個星期 之后,再看代碼簡直就像看另外一個人寫的一樣,要費不少工夫才能弄懂,代碼越多越如此。自己還很難理解自己的代碼,更不用說別人了。因此費點力氣加上注釋 還是值得的。
還有的人喜歡用 goto語句跳來跳去,雖然增加了編寫代碼的靈活性,可是卻嚴(yán)重破壞了程序的結(jié)構(gòu)化,容易造成程序運行和大腦思維的邏輯混亂,很可能導(dǎo)致一些很不容易發(fā)現(xiàn) 的錯誤。而且所有的goto都可以用其他的語句來代替。所以在這里建議大家少用goto。能不用就不用。以上是說了要提高代碼的清晰度與可讀性。
上面用了不少字來介紹程序設(shè)計中良好習(xí)慣的作用與好處,這算是程序設(shè)計的一個基礎(chǔ),希望對大家能有所幫助
。下面介紹其他促進(jìn)編程水平的方法。
其次,就是多加練習(xí)和多多與別人交流心得,研究和欣賞別人優(yōu)秀的程序代碼(上面說的清晰度與可讀性的重要的一點就在這里體現(xiàn)了)。無論干任何事情,只有經(jīng) 常練習(xí)才能熟練的掌握與應(yīng)用。它不僅能幫你提高對算法的認(rèn)知程度,還可以使你更好的理解數(shù)據(jù)結(jié)構(gòu);而交流心得與欣賞別人的代碼則是要你學(xué)習(xí)別人優(yōu)秀的獨特 的見解與邏輯思維,許多‘老鳥’就是在研究優(yōu)秀代碼中慢慢成長起來的。但研究和欣賞并不是意味著讓你‘全盤西化’;它是說既不要拘泥于自己一成不變的思考 方式,也不要成為別人思想奔馳的高速路,而是讓你取長補短,取其精華,去其糟粕,這才是我要說的。另外,在編譯一個程序時,要多想幾種不同的算法,反復(fù)比 較,看看究竟哪個更適合這個程序。這樣,不僅有助于提高你程序的運行效率,更重要的是有助于提高你對算法的認(rèn)識和思維的廣度。
看完上面這么多,你會發(fā)現(xiàn)程序設(shè)計的這半扇門似乎并不是想象的那么容易打開;但是如果你能耐住寂寞與枯燥的考驗,按部就班、循序漸進(jìn)的練習(xí),思考,不知不覺中你的水平已經(jīng)提高了很多。
除了上面說的求精算法和數(shù)據(jù)結(jié)構(gòu)外,數(shù)學(xué)方法和邏輯思想對你的程序設(shè)計也會有一定的影響(這也屬于算法)先說數(shù)學(xué)方法,它是指導(dǎo)你學(xué)習(xí)的一個重要的助手。 比如你要實現(xiàn)一個看似很復(fù)雜的函數(shù),而且你編寫了一大堆代碼,什么結(jié)構(gòu)和類型都用上了,可是還是實現(xiàn)不了。這時候先別著急,也許在你做這個函數(shù)前就要靜下 心來,仔細(xì)思考,看看有什么數(shù)學(xué)上學(xué)習(xí)的特別公式能夠?qū)崿F(xiàn)這個問題嗎?如果你真的靈感大發(fā),把它挖了出來,恭喜你?。ù饘α耍。┪蚁脒@個時候你一定會高興 的手舞足蹈,這種感受,我想大家在做數(shù)學(xué)題OR其他難題時一定深有體會。
這樣說太空洞,不如舉個例子:將8個‘車’放在8X8的國際象棋棋盤上,如果它們兩兩均不能互吃,那么稱8個‘車’處于安全狀態(tài)。問總共有多少種不同安全 狀態(tài)?對于這樣的題一般的解法是用‘回溯法’,即先有順序的固定一個棋子,然后將剩下的逐行試探,如果可以則擺放下一個,要是不行就把該棋子換一個位置, 直到所有的方法都用(遍歷)一遍。這樣看來這個方法真的很麻煩,不因需要編寫大量代碼,而且還要用到‘遞歸’(編程的一個重要的算法)。使程序的效率大大 降低。但是我們可以想想有沒有更好的數(shù)學(xué)方法??隙ㄓ校∧憧丛诘谝恍兄?,棋子可以在8個空格內(nèi)隨意擺放而不會受到攻擊;而第二行,棋子則只有在7個空格內(nèi) 再挑選一個了;第三行就只有6個……依次類推第8行就只剩下一個空格了。所以這個方法一共有8X7X6X5X4X3X2X1即8!種解法,這不就是數(shù)學(xué)中 的排列與組合的問題嗎?若不進(jìn)一步思考,盲目地逐個枚舉方案,其笨拙是可想而知的了。所以在設(shè)計算法時,一定要仔細(xì)思考有沒有更好的數(shù)學(xué)公式或思想與之相 關(guān)聯(lián),這樣往往會收到意想不到的好效果。
說完數(shù)學(xué),再說哲學(xué)。
其實,哲學(xué)是所有學(xué)科是總和。她當(dāng)然也包括程序設(shè)計這門新興的學(xué)科了。(不要以為它們之間沒有關(guān)系哦?。?br> 我這里說的是哲學(xué)的一小部分,那就是邏輯學(xué)。一個人若沒有嚴(yán)格的邏輯思維,他/她的程序一定有不少蟲子(bug)。然而對于這些蟲子,他/她可能不知道; 也很有可能知道了,但是就不知道哪里出錯了。這就是因為他/她沒有把問題出現(xiàn)的情況(包括出錯的情況)考慮全面而造成的。雖然理論上所有的程序都有一定的 漏洞(尤其是代碼越多的程序越是如此),但是我們可以盡我們的全力把問題考慮全面,使錯誤發(fā)生的幾率降低到最小,以確保程序的穩(wěn)定性。咱們來看一個很有趣 的反面例子:偶在很久以前編過一個小程序(老師布置的作業(yè)),其功能是輸入你的生日,然后再輸入某天的日期,最后計算出你到這一天一共活了多少天。我很快 就完成了,用數(shù)據(jù)測試幾次還不錯,于是讓老師來檢查我的作業(yè)。他讓我輸入,我于是就輸入了1989 1 28,然后回車,再輸入1999 1 28,我太激動了把1999輸入成了1899,而且我竟然沒有發(fā)覺。于是偶自信的敲了回車。結(jié)果出來了,當(dāng)時大家都笑翻了,此后,我有一段時間再也不敢讓 老師“欣賞”我作的題目…… 以上就是偶因為邏輯不嚴(yán)密造成的笑話,大家可不要學(xué)我??!所以說,提高邏輯思維能力也是提高編程效率的很有效的方法。
世界上所有的學(xué)科都有聯(lián)系。當(dāng)數(shù)學(xué)與邏輯學(xué)擦出‘愛情’的火花時,程序設(shè)計就有了雛形。其實還有其他的學(xué)科也會影響程序設(shè)計,比如英語,地球人都知道,現(xiàn) 在絕大多數(shù)程序源代碼是用英文編寫的,而且很多開發(fā)工具、編譯工具還有一些用來參考的小程序幾乎都是英文界面。學(xué)好英語對代碼的分析、對數(shù)據(jù)結(jié)構(gòu)的了解以 及對開發(fā)程序或軟件的效率都有幫助。因此在學(xué)習(xí)程序設(shè)計這門課程時,可不要丟了其他?。?br> 以上羅嗦了不少,無非就是向大家解釋沃斯教授的那個公式??床欢膊灰o,有的名詞在以后的學(xué)習(xí)中慢慢就明白了。你看,玩游戲要有裝備,我們搞程序設(shè)計當(dāng)然也要有了:
硬件部分:
1、一臺電腦。586以上就可以,不用太高,除非你設(shè)計大型軟件,我想像我們這樣的初學(xué)者用這樣的電腦已經(jīng)足夠了,也就是說,你要你有電腦就能編程。當(dāng)然,機(jī)子配置越高越好了。(必備)
2、一本入門的好書。這本書不要求有內(nèi)容多么高深,技術(shù)多么先進(jìn),書本有多么厚。只要它能帶你入門,而且給你一個良好的編寫習(xí)慣和正確的指導(dǎo)方向,就已經(jīng)足夠了?。ū貍洌?br> 3、一到N本提高的書,你在看這些書之前應(yīng)該能夠自己流暢地編寫入門書上的作業(yè)了,這些書應(yīng)該是一些經(jīng)典的作品,一般來說國外的寫的比較好一些(我可不是 重洋媚外啊),他們的書寫的比較詳細(xì),講解也比較透徹。你要是不在乎國內(nèi)的書教材味比較濃,而且錢不是很多,你也可以買哦。無論所有的書一定要選那些評價 很高的,畢竟群眾的眼睛還是雪亮的嘛!(必備)
4、一位好老師,其實老師和書本的作用是一樣的,只是老師比書本的互動性更強,可以更好地回答你的問題并指導(dǎo)你走向正確的道路。所以有個好老師是能很快提 高你的水平的,當(dāng)然該老師也要和我上面說的第二點一樣,要有良好的編寫習(xí)慣和正確的指導(dǎo)方向哦!千萬別找那些‘毀人不倦 ’的人哦.^o^(推薦)
軟件部分:
1、一個趁手的編譯器,要編好程序,順手的工具是必不可少的。要是一開始你想要簡單易用的工具,建議使用VB、TC(Turbo C)、TP(Turbo Pascal)等等。你若是喜歡功能強大的IDE(]Integrated Development Environment]集成開發(fā)環(huán)境)那么就推薦使用VB.NET、BCB(Borland C++ Builder)、Borland Delphi、Eclipse(Java)…… (必備)
2、一個良好的心態(tài)。學(xué)習(xí)編程心態(tài)要放低,雖然你可能夢想要打倒微軟帝國,可是你不要以為自己真的就有實力把Bill PK掉,一定要從最簡單的開始做起,不要眼高手低,荒于練習(xí)。否則你可能給他打工他都不要哦?。ū貍洌?br> 3、一顆堅定的信念。搞程序設(shè)計有時是很累人的(要不然大家都成軟件工程師了,BILL的飯碗不就砸了),在某一個關(guān)鍵點是你要付出超乎想象的汗水和不計 其數(shù)的腦細(xì)胞。這就叫“衣帶漸寬終不悔,為伊消的人憔悴!”要保持一種吃苦耐勞的打不垮精神,革命才能成功??!同志們。(必備)

其實總而言之呢,無論是新手還是大蝦,要的就是勤學(xué)苦練,只有這樣,你才能走上通向程序設(shè)計金殿的成功之路。
到了這里你會發(fā)現(xiàn),這就是程序設(shè)計,就這么簡單、有趣,而有充滿的艱辛與苦澀。設(shè)計一個艱難的程序,就像母親分娩一樣,一定會有巨大的痛楚。但當(dāng)你為你早 已調(diào)試了N^N次的代碼加上最后一筆時,一個嶄新的生命就誕生了!Eureka!它帶著羞澀而好奇的神態(tài)向這個世界發(fā)出第一句“Hello, World!”的問候時。你那種感覺就像是上帝面對自己親手造出來的生命,你以往所有的不快都會煙消云散。你會發(fā)現(xiàn)程序設(shè)計,這項偉大的工程,教予你的不 僅僅是一種技術(shù),更是對生命的熱愛,對人生的執(zhí)著,對完美夢想的追求!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美日韩中黄片免费看| 日韩欧美第一页在线观看| 亚洲熟妇熟女久久精品| 中文字幕一区久久综合| 精品久久少妇激情视频| 91欧美日韩一区人妻少妇| 国产日韩精品激情在线观看| 熟妇久久人妻中文字幕| 欧美日韩精品视频在线| 老司机精品在线你懂的| 日本免费一区二区三女| 精品推荐久久久国产av| 成人精品一区二区三区在线| 99久久精品国产日本| 国产一级特黄在线观看| 欧美激情中文字幕综合八区| 欧美中文字幕日韩精品| 亚洲天堂久久精品成人| 久久国内午夜福利直播| 九九热九九热九九热九九热| 午夜福利直播在线视频| 国产精品久久精品毛片| 粉嫩国产一区二区三区在线| 欧美国产在线观看精品| 国产一区欧美一区二区| 久久天堂夜夜一本婷婷| 色婷婷成人精品综合一区| 日本道播放一区二区三区| 老鸭窝精彩从这里蔓延| 国产精品推荐在线一区| 久久经典一区二区三区| 国产日韩精品欧美综合区| 欧美亚洲另类久久久精品| 91人妻人人揉人人澡人| 久久精品一区二区少妇| 欧美日韩亚洲巨色人妻| 国产成人精品国产亚洲欧洲| 深夜视频在线观看免费你懂| 中文字幕亚洲精品人妻| 亚洲av首页免费在线观看 | 日韩精品福利在线观看|