|
卡爾維諾在哈佛大學(xué)的文學(xué)講座(即諾頓論壇,是為紀(jì)念美國(guó)著名學(xué)者諾頓開(kāi)設(shè)的,每年邀請(qǐng)世界文化名人作講座,艾略特、博爾赫斯也曾獲邀參加諾頓講座)被他的妻子編成了一本獨(dú)立的書(shū)《美國(guó)講稿》。這本書(shū)展現(xiàn)了卡爾維諾的文學(xué)精神,體現(xiàn)了他的文學(xué)態(tài)度和氣質(zhì)。不過(guò),我在閱讀該書(shū)時(shí),卻發(fā)現(xiàn)了一些與編程有關(guān)的內(nèi)容。
1、文學(xué)中的重構(gòu)
達(dá)芬奇在《大西洋草圖》中記述了他幻想中海怪的形象,進(jìn)行了前后三次重構(gòu)。最初的描述是:
啊,人們多次在波浪翻滾的廣闊海洋之中看到你,看到你那長(zhǎng)滿鬃毛的黑色背脊,你像一座大山,傲慢地徐徐前進(jìn)!
然后,他試圖使海怪的行動(dòng)生動(dòng)些,加了個(gè)動(dòng)詞“翻轉(zhuǎn)”:
啊,人們多次在波浪翻滾的廣闊海洋之中看到你,看到你在海水中傲慢地徐徐翻轉(zhuǎn)身軀,看見(jiàn)你那長(zhǎng)滿鬃毛的黑色背脊。你像一座大山屹立在海浪之上!
然而,他覺(jué)得“翻轉(zhuǎn)”這個(gè)詞削弱了他想留給人們的那種雄偉與莊嚴(yán)的印象,于是選擇了“分開(kāi)”這個(gè)動(dòng)詞,并改變了句子結(jié)構(gòu),使句子變得更緊湊,更有節(jié)奏。
啊,人們多次在波浪翻滾的廣闊海洋中看到你!你像一座山屹立在海浪之上。你傲慢地徐徐前進(jìn),用那長(zhǎng)滿鬃毛的黑色背脊把海水分成兩半!
在文學(xué)創(chuàng)作中,重構(gòu)其實(shí)會(huì)經(jīng)常發(fā)生,這源于作家對(duì)文學(xué)作品高質(zhì)量追求的精益求精,他們常常通過(guò)修改句式,修辭手法或改變?cè)~語(yǔ)來(lái)改善文字,使之體現(xiàn)恰如其分的美。編碼藝術(shù)同樣如此,即使是代碼的結(jié)構(gòu),以及變量、方法和類的命名,排版樣式,只要給予足夠的重視,錘煉這方面的技能,堅(jiān)持重構(gòu),就能改善編碼質(zhì)量。
2、封裝與接口
卡爾維諾在“精確”一章中引述了哲學(xué)家們對(duì)語(yǔ)言和外部世界關(guān)系的思考:
使用語(yǔ)言是對(duì)事物的不斷追求,不是漸漸接近事物的本質(zhì)而是接近事物那無(wú)休止的變化,接近事物那多種多樣的、無(wú)窮無(wú)盡的表面。正如霍夫曼·斯塔爾所說(shuō):“深層應(yīng)該掩蓋起來(lái)。掩蓋在哪里?掩蓋在表層下面。” 維特根斯坦走得更遠(yuǎn),他說(shuō):“凡被掩蓋的東西,我們都沒(méi)有興趣。”
在軟件開(kāi)發(fā)中,我們常常運(yùn)用封裝來(lái)隱藏內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)。它帶來(lái)的好處是使得調(diào)用變得簡(jiǎn)單,重用成為可能,很好地隔離了內(nèi)部實(shí)現(xiàn)的變化。當(dāng)然,文學(xué)更善于挖掘內(nèi)部的玄奧,卻常常使用抽象的語(yǔ)言描述出一種晦澀,試圖掩蓋這種玄奧,以此追求一種尋找“高山流水”知音般心靈激蕩的玄妙與浹肌淪髓。
文學(xué)也嘗試用變化去處理變化,這似乎矛盾,卻恰好是文學(xué)藝術(shù)讓人著迷的地方。軟件又何嘗不是如此。卡爾維諾看到了兩種變與不變的模式:
最近我偶然讀到生物形成過(guò)程的模式:“一邊是晶體(象征表面結(jié)構(gòu)穩(wěn)定而規(guī)則),一邊是火焰(雖然它的內(nèi)部在不停地激蕩,但外部形式不變)。”……火焰與晶體這兩種形象代表了生物學(xué)上的兩種選擇。
皮亞杰觀點(diǎn)的哲學(xué)蘊(yùn)含是“從噪音到有序”,即火焰;喬姆斯基觀點(diǎn)的哲學(xué)蘊(yùn)含是“自我編制系統(tǒng)”,即晶體。
這仿佛讓我洞悉了面向?qū)ο笤O(shè)計(jì)的玄機(jī)。火焰代表了接口,無(wú)論如何變化,其外部形式總是不變。接口的引入使得軟件設(shè)計(jì)可以從混沌(即皮亞杰所說(shuō)的“噪音”)走向有序。至于晶體,則是遵循了信息專家模式的對(duì)象,因?yàn)樗庋b了數(shù)據(jù)以及操作該數(shù)據(jù)的行為,使得它具有了自我判斷的意識(shí)。它的表面結(jié)構(gòu)仍然是穩(wěn)定的,卻有一套自我約束的規(guī)則。晶體看起來(lái)是寧?kù)o的,而火焰卻如此的靈活。融合晶體與火焰的系統(tǒng),是否代表了對(duì)變化的封裝,以及對(duì)不變概念的抽象呢?
3、糾纏的細(xì)節(jié)
薄伽丘在一篇故事中(《十日談》第六天第一個(gè)故事)談到講故事的藝術(shù),正好回顧了這種感覺(jué)。
“奧麗達(dá)太太,要是你不討厭的話,我想講一個(gè)世界上最大的故事給你聽(tīng),叫你聽(tīng)得津津有味,就像騎了一匹馬一樣,忘了路途的遙遠(yuǎn)。”
“啊,再好沒(méi)有了,先生,”那位太太說(shuō),“請(qǐng)你快給我講一個(gè)故事吧。”
于是紳士開(kāi)始講故事給她聽(tīng)。故事倒很精彩,可惜他講故事的本領(lǐng),只抵得上他使用他身邊那把佩劍的工夫,實(shí)在太不高明,時(shí)常把一句話顛來(lái)倒去的說(shuō)了又說(shuō),甚至說(shuō)上六七遍,過(guò)了一會(huì),忽然又倒過(guò)頭來(lái)說(shuō)道:“哎呀,我說(shuō)錯(cuò)啦!”對(duì)于故事中的人名地名常常糾纏不清,張冠李戴,弄得別人莫名奇妙。他那說(shuō)話的聲氣又跟故事里的人物、情景一點(diǎn)都配不上,真是聽(tīng)得奧麗達(dá)太太頭暈?zāi)垦#浜挂簧恚挥X(jué)得大禍臨頭,連命都快要保不住了。到最后,她忍無(wú)可忍,又看見(jiàn)那位紳士正愈說(shuō)愈糊涂,已經(jīng)迷了路,失了方向,只是在那兒團(tuán)團(tuán)打轉(zhuǎn),再也跑不出來(lái)了,就和悅地對(duì)他說(shuō):“先生,你那匹馬跑得太野,請(qǐng)你還是讓我下了馬吧。”
在軟件設(shè)計(jì)過(guò)程中,最要緊的是思路要清晰,既不能迷失在需求分析中,也不能迷失在復(fù)雜的實(shí)現(xiàn)細(xì)節(jié)中。最好能夠結(jié)合實(shí)際的場(chǎng)景,列出我們要達(dá)到的目標(biāo),需要完成的任務(wù),有序地進(jìn)行分析和設(shè)計(jì)。編寫(xiě)代碼時(shí),切忌功能之間互相糾纏,雖然體現(xiàn)了對(duì)象的協(xié)作,但由于職責(zé)分配混亂,使得對(duì)象之間的協(xié)作變得無(wú)規(guī)律可循,顛三倒四,最后讓人忍無(wú)可忍,也只能翻身下馬了。
it知識(shí)庫(kù):文學(xué)與編程,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。