算法(Robert Sedgewick)這本書非常適合非計(jì)算機(jī)專業(yè)的算法入門書籍。這本書一共900多頁赘阀,實(shí)際上涉及算法的內(nèi)容大約只占一半左右划乖,相比于算法圣經(jīng)《算法導(dǎo)論》來說割笙,這本書偏向于數(shù)據(jù)結(jié)構(gòu)和具體的代碼實(shí)踐友瘤。這樣的編排對(duì)于非計(jì)算機(jī)專業(yè)出身的人來說咐吼,可以說算得上是一本編程普及書。因?yàn)楸救嗽诒究齐A段基本上沒系統(tǒng)的學(xué)過計(jì)算機(jī)相關(guān)課程商佑,而且代碼量也可以說接近為零锯茄。這樣一本即講數(shù)據(jù)結(jié)構(gòu),同時(shí)在書籍網(wǎng)站上提供了所有源代碼茶没,非常適合零基礎(chǔ)自學(xué)的人肌幽。
前兩周主要學(xué)習(xí)了第一章的1.1~1.3節(jié)。內(nèi)容包括一些基本的JAVA語法抓半、數(shù)據(jù)抽象喂急、基本的數(shù)據(jù)類型以及實(shí)現(xiàn)程序的基本流程(抽象層次)。這兩周的學(xué)習(xí)過程非常的曲折笛求,一方面是急于想掌握這本書封皮上所說的50種常見的算法廊移,但卻被一開始這些繁瑣的編程細(xì)節(jié)影響了看書進(jìn)度,導(dǎo)致非常浮躁探入。另一方面是實(shí)際執(zhí)行書上代碼時(shí)碰到的一些問題狡孔,包括JVM還有MrJAVA IDE的使用非常的不適應(yīng),還好最后這兩個(gè)問題都解決了蜂嗽∶缦ィ可以談笑風(fēng)生了。
第一個(gè)問題在于植旧,沒有掌握基本編程思想辱揭。對(duì)于一個(gè)僅僅只聽過“算法”同時(shí)覺得算法很牛逼的新手來說,并不知道病附,真正的程序開發(fā)的抽象層次是什么和算法在程序開發(fā)當(dāng)中所處的位置问窃。換句話說,就是不懂算法是如何在程序中發(fā)揮作用的完沪。這本書的第一章域庇,一共240多頁的內(nèi)容。都是在給你介紹基本的編程思想丽焊,也就是所謂的抽象層次较剃。高級(jí)語言的成功之處,就是擁有遞進(jìn)的抽象機(jī)制技健,和對(duì)數(shù)據(jù)歸一化的能力写穴,使得程序的編寫難度大大降低和適用場(chǎng)合更廣泛。
這里摘錄書中的話來總結(jié)一下:1雌贱、明確API(Application Processing Interface)啊送。注:API不是具體的代碼偿短,就是起到解釋說明的作用。2馋没、根據(jù)特定的使用情況來編寫client code(這個(gè)不太好翻譯昔逗,大概意思就是說,你根據(jù)你API里面給定的那些函數(shù)和抽象數(shù)據(jù)篷朵,來實(shí)現(xiàn)功能勾怒,因?yàn)锳PI里面給的函數(shù)抽象層次比較高,用API中的函數(shù)寫程序)声旺。 3笔链、同樣是根據(jù)API里面給定的抽象數(shù)據(jù)類型,編寫具體的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)里面的抽象變量腮猖。4鉴扫、接著在寫算法來實(shí)現(xiàn)抽象函數(shù)的功能。5澈缺、分析算法的性能坪创。
從上面來看,算法再具體程序的實(shí)現(xiàn)中處在非常底層的位置姐赡,與基本的數(shù)據(jù)結(jié)構(gòu)一起形成最底層的程序設(shè)計(jì)莱预。還是這句老話,學(xué)算法不能忘記數(shù)據(jù)結(jié)構(gòu)雏吭,算法性能的分析與數(shù)據(jù)結(jié)構(gòu)有很大關(guān)系锁施。所以,一開始的學(xué)習(xí)是應(yīng)該放慢杖们,掌握最基本的東西,不應(yīng)該好高騖遠(yuǎn)肩狂。尤其書中涉及到很多代碼的具體實(shí)現(xiàn)摘完,其中用到JAVA這門語言的具體實(shí)現(xiàn)代碼。一旦牽扯到語言層面上傻谁,那要學(xué)習(xí)的容量也就上升了孝治。其中包含了很多JAVA這門語言的設(shè)計(jì)思想,在聯(lián)想到這學(xué)期老楊講的C++审磁,更能感悟到是編程語言造就了編程風(fēng)格谈飒。書中的編程風(fēng)格,作者也說了态蒂,是為了簡(jiǎn)潔杭措、優(yōu)雅和易讀性。從具體的代碼實(shí)現(xiàn)就能看出作者的用心钾恢。還有手素,JAVA的Generics鸳址、iterators和interface inheritance機(jī)制,都是為了編寫簡(jiǎn)潔的Client Code泉懦。有時(shí)間還是要好好學(xué)習(xí)一下JAVA的基本編程思想稿黍。跟C++一樣,設(shè)計(jì)思想都非常的具有藝術(shù)感崩哩。
第二個(gè)問題就是實(shí)際代碼在電腦上執(zhí)行的問題巡球,一開始我用書籍網(wǎng)站上給的Mr JAVA IDE編譯,一直沒辦法實(shí)現(xiàn)書中StdIn.lib庫里面的的輸入流邓嘹,想換個(gè)編譯器試試酣栈,安裝了個(gè)ECLIPSE IDE,軟件操作起來又比較麻煩吴超。因此我就在Commend line 里面手工敲代碼進(jìn)行編譯钉嘹,沒想到真是編譯器的問題,還是說課程網(wǎng)站上給的庫有問題鲸阻,Mr JAVA 無法識(shí)別"<"這個(gè)流文件輸入標(biāo)示符跋涣,最后逼得我就在JVM上裸跑了,感覺還不錯(cuò)鸟悴,有點(diǎn)Linux的感覺陈辱。還別說,輸出結(jié)果那一刻细诸,還是有點(diǎn)興奮的沛贪。做程序員真的是很容易分分鐘滿足啊。
總之震贵,開局雖然慢了點(diǎn)利赋,但是算是找到了學(xué)習(xí)方法。希望今后的學(xué)習(xí)進(jìn)度能快點(diǎn)猩系。畢竟900的書才看了150頁媚送,還沒做課后的習(xí)題。感覺有些數(shù)據(jù)結(jié)構(gòu)的問題還真的是蠻有意思的寇甸。希望以后的日子都過得充滿意義塘偎。