程式設計的精義
這是我閱讀《大道至簡》的第一篇讀書筆記,一想起要寫這篇讀書筆記,心中還不免有些小小的激動。在沒有看這本書之前,原以為這本書會講述一些如何程式設計的思想技巧或者方法之類的,但是看到這本書的目錄以後我就知道我錯了,特别是在看了第一篇文章“程式設計的精義”以後,這種思想上觸動更深了。隧懷着一種激動的心情與大家一起分享我的觸動。
《大道至簡》這本書其實還有一個副标題,叫做“軟體工程實踐者的思想”,從這個副标題中我們就可以看出這本書應該是要講述軟體工程實踐過程中的一些思想,而且是一位有着多年工作經驗、在軟體工程打拼幾十年的大牛來講述其真實的思想感受,這才是真正觸動我的原因,也是我可以耐心的讀下去的原因。
《大道至簡》的第一章第一篇叫做“程式設計的精義”,在這篇文章中用了一個曆史故事來講述程式設計的思想,讀完之後感覺非常有道理,是以和大家一起分享一下。我想,大家都讀過“愚公移山”的故事吧,我清楚的記得《愚公移山》在我們的高中國文課本上是一篇必備的文章,現在用這篇熟悉的文言文來解讀程式設計的本質與思想,感覺别有一番風味。
書中所講:
僅僅就程式設計式來說,實在是一件很簡單的事,甚至可以說是一件勞力活。兩千年前的寓言中,已經成就了一位工程名家:愚公。在這位名家的身上,濃縮了項目組織者、團隊經理、程式設計人員、技術分析師等衆多角色的優秀素質。他的出現,遠遠早于計算機發展的曆史,甚至早于一些西方國家的文明史。湯問篇中所述的愚公移山這一事件,我們看到了原始需求的産生: “ 懲山北之塞,出入之迂 ”。 我們也看到了項目溝通的基本方式: “ 聚室而謀曰 ”。 然後,我們看到愚公确定了一個項目的目标:“ 畢力平險,指通豫南,達于漢陰”。 并通過研讨,擇定了一個井然有序的、可以實作的技術方案:“ 扣石墾壤,箕畚運于渤海之尾” 。在這個項目中,動用了三名技術人員和一名工程管理人員:“ (愚公)率子孫荷擔者三夫” 。并獲得了一名力量較弱,但滿富工作激情的外協:“ 鄰人京城氏之孀妻,有遺男,始龀,跳往助之” 。基本上,這已經描述了“ 愚公移山” 整個工程的概況。接下來,我們應該注意到愚公作為程式設計人員的基本素質。在與“河曲智叟”的對答中,他叙述了整個工程的實作程式:“雖我之死,有子存焉” ,這裡描述了可能存在的分支結構,即“ IF” 條件判斷。“ 子又生孫, 孫又生子;......子子孫孫, 無窮匮也” ,這裡描述了完成這個工程所必須的循環結構。 作為優秀的程式分析師,愚公論述了這個循環的可行性:由于“ 山不加增” ,是以條件“ 山平” 必将成立(“ 何苦而不平” ),是以這不會是一個死循環。在愚公的論述中,我們看到了程式設計的根本:順序、分支和循環。龐大若“愚公移山”這樣的工程,都是可以通過這樣簡單的程式設計來實作的。這,就是程式設計的精義了。
以前從未想過文言文竟然可以和計算機有聯系,以這樣一個文言故事來解讀程式設計的精義不可不謂之精辟深邃(用當下比較時髦的一句話解釋就是“我也是醉了”)。真的很佩服作者這樣的穿透力,一片看似普通的文言文竟然可以把程式設計的思想總結出來,這其中不僅透露着古代人的智慧,更展現着現代人不一樣的思想與風貌。
這篇文章之是以能夠給我觸動,可能是從思想上給我了啟發,如果不讀這篇文章,即使現在我學着計算機,或者以後學習更多的知識都不會有這樣的感悟,因為我沒有從思想中去真正的解讀程式設計的本質與含義。其實,在大一一開始接觸程式設計時候,對于程式設計有着一種莫名的抵觸情緒,可能這種抵觸情緒也是因為我總是覺得自己是被調劑到這個專業的,是以,這個專業的東西我一定不會喜歡,但是迫于無奈、迫于考試,我隻好硬着頭皮去學。這種被迫的學習是煎熬的,是困難的,很多的知識在你沒學之前就已經被你下了一個“不好學”的定義,在學習的過程中也就沒任何興趣可言了。經過近三年的學習,雖然學到了一些很皮毛的知識,但是至少不會像以前那樣煎熬了,因為在學習中逐漸找到了這其中的樂趣所在,當編出一個程式或者弄懂一個經典的算法時,心中非常有成就感。另外,現在能夠踏實的學習,更重要的是自己學會了如何正确認識自己的心理狀态。過去的那種心理是不對的,而且是有害的,我們不可能保證我們所在的每一件事都是自己想做的,但是有時候迫于無奈而必須去做,那為何不嘗試着發現其中的樂趣和魅力呢,讓自己更開心的去做這件不得不做的事。
這篇文章對于我原有的思想有了進一步的推動,讀完這篇文章以後,突然覺得程式設計是一件非常有趣、非常生動活潑的事情。以前程式設計的時候考慮的都是實作具體的功能,沒有想過實作功能的代碼具有這樣的現實意義和現實故事。可能不論學習什麼東西都需要一種專業的思想,比如學習數學時,需要一種邏輯推理能力,學習文學時,則需要一種情感上的共鳴,當學會用一種思想去學某一樣東西時,高層次的學習便是将所有有關聯的東西都能整合在一起,就如這篇文章和程式設計相結合,看似沒有任何關系,其實他們反應了同樣的本質和道理。在以後的學習中,程式設計的技巧需要不斷積累,程式設計的思想需要我們自己不斷地去感悟。