編程是一門藝術嗎?

發表于:2007-04-28來源:作者:點擊數: 標簽:編程一門僅僅藝術使用
僅僅使用軟件的人們 通常意識不到編寫軟件有多么困難。噢,設計部分和最初 開發 部分都很有趣。最困難的部分是使其正確運行(且運行速度足夠快)。對于 程序員 而言,這就好比一餐開始時是美味的雙層牛奶巧克力咖啡干酪餅,而結束時卻是菠菜奶油沙司。 之所以
僅僅使用軟件的人們 通常意識不到編寫軟件有多么困難。噢,設計部分和最初開發部分都很有趣。最困難的部分是使其正確運行(且運行速度足夠快)。對于程序員而言,這就好比一餐開始時是美味的雙層牛奶巧克力咖啡干酪餅,而結束時卻是菠菜奶油沙司。

  之所以說編程仍是一門藝術而不是一門科學或工程學科,是因為我們還不能將其分解成多個組成步驟,而后機械地進行。一旦我們在此方面獲得成功,在某種程度上就會出現一種新的可能性:在編程時采用以人為本的設計語言 (PODL) 編寫程序,通過編程來證明程序的正確性以及分析和支持語義查詢。然而到那時,編程依然是一門藝術,也就是其中含有那么多傳統智慧。

  但是,如同許多傳統智慧一樣,此類比經不起進一步推敲。事實上,編制程序(我干這行已經有 20 多年了)根本一點都不像藝術 — 至少不像寫小說(我干這一行也已經有 20 多年了)那樣的藝術。讓我用兩個片段(一個程序片段和一個散文片段)來說明我的觀點吧。

  第一個片段是一個用于分析 Visual C++® 7.1 的詞法分析程序的一部分。該片段如下所示:

clearcase/" target="_blank" >cccccc>

if ( index >= TokenID::lastKeyword() ) {
    string token = tokenString( index );
    if (( isdigit( token[ 0 ] )) || ( token[0] == ‘-’ )) {
#ifdef TELL_ME
        display( "!! TokenSet::tokenIdentify: ",
                     "文字數字:", token );
#endif
        return TokenID::TK_Literal;
    }
}

  第二個片段是我在大約 27 年前所撰寫的一個故事的開頭,那時我居住在亞利桑那州的圖森市,從事散文教學和創作:

  We were her pride of 10, Miss Steward named us: the Prodigal, Phoenix,
Benjamin, and perspicacious, pacific Suzanne. Hush, child. Benjamin, be
still, Miss Steward commanded him gently. People are never just.

  兩個片段都經過了精心設計 — 也就是說,我預先花費了大量時間來設計整個工作的體系結構,而且這些片段反映了我所付出的設計努力。該程序有一個性能缺陷 — 我是按值而不是按指針在關聯的字符串表中檢索字符串條目的。如果將該代碼投入生產,則很明顯需要進行修訂。這與正確性無關,而只是與性能有關。對于較小的源代碼程序,速度上的差異不可測量,因此我選擇了更簡潔但更慢的對象語法,因為我不喜歡 C/C++ 的指針操作標志。

  盡管我的散文沒有吸引數百萬讀者,但那些確實閱讀散文的人都很欣賞其在嚴格的符號框架下編織情感的巧妙方法。那些不欣賞散文傳統的人認為它故弄玄虛,因為它毫無作用。藝術的目的是以特定的可塑性媒體(對于散文而言就是詞語)在公共事件中反映出個人感情以及個人私生活的真實性。當然,它不像程序那樣具有與生俱來的內在價值。

  我喜歡程序的設計過程,喜歡弄清楚程序的不同部分是如何相互作用的。我喜歡定義抽象或抽象族。我將其視為自己的人物塑造。并且,我喜歡編制接口,因為它們就是我的人物彼此之間所做的事情。這其實就是我編寫程序的方式。

  我不喜歡編寫表達式和語句。我希望我們能有一種符號式編程語言,這樣我就能夠更好地用其進行思考并將其記在我的腦海中了。坦白地講,我無法使算術表達式和括號嵌套保持清晰。盡管我能記住八個單獨的文本部分,對其進行對比和回顯,但我搞不清楚在我所設計的類及其接口之外的程序的意義。

  在 John Markoff 所著的 PC 行業大事記《What the Dormouse Said》(睡鼠述)中,他聲稱最初幻想家使人人都能夠支配計算機的目標已經實現。但是他錯了。該目標僅實現了一半。如果一個人本身不會編程,怎么能說該人已擁有了計算機的全部威力?我們還沒有實現他們的夢想,因為我們還未弄清楚如何將編程變成一門藝術,以使人人都能夠分享它。在我們實現此目標之前,編程仍舊既不屬于學科范疇,也不屬于藝術領域。目前,編程只不過是一種新式“煉金術”。沒有人能真正理解它,也沒有人能將規范變成真金。

  Stanley B. Lippman 從 1984 年開始在 Bell 實驗室與 C++ 的發明者 Bjarne Stroustrup 一起研制 C++。之后,Stan 在迪斯尼和夢工廠從事形象動畫方面的工作,并擔任了《Fantasia 2000》(幻想曲 2000)的軟件技術總監。此后他一直擔任 JPL 的名譽顧問,并在 Microsoft 的 Visual C++ 團隊中兼任設計師。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97