1968 ACM Turing Lecture One Man's View of Computer Science R. W. HAMMING Bell Telephone Laboratories, Inc., Murray Hill, New Jersey

ABSTRACT. A number of observations and comments are directed toward suggesting that more than the usual engineering flavor be given to computer science. The engineering aspect is important because most present difficulties in this field do not involve the theoretical question of whether certain things can be done, but rather the practical question of how can they be accomplished well and simply.

The teaching of computer science could be made more effective by various alterations, for example, the inclusion of a laboratory course in programming, the requirement for a strong minor in something other than mathematics, and more practical coding and less abstract theory, as well as more seriousness and less game playing.

KEY WORDS AND PHRASES: computer science, computer engineering, practical programming, mathematical game-playing, computer technician, computer professional, true-to-life programming, computer science curriculum, software, basic research, undirected research, programmers' ethical standards, programmers' social responsibility

CR CATEGORIES: 1.3, 1.5

序論與致謝

讓我先說幾句個人的話。當一個人被告知當選本年度的 ACM 圖靈獎演講者時,他首先會感到驚訝——特別是非學術界人士對 ACM 獎項感到驚訝。過一會兒,驚訝會被愉悅感取代。再後來,會產生一種「為什麼是我?」的感覺。在電腦領域已經完成和正在完成的這麼多工作之中,為什麼偏偏挑中我以及我的工作?我想,這總得每年發生在某個人身上,而這次,我是那個幸運兒。無論如何,請允許我感謝你們授予我的這份榮譽,以及藉此對我在其工作的 Bell Telephone Laboratories, Inc. 表示感謝,它使我能夠完成如此多的工作。

選擇演講主題的緣由

我的圖靈獎演講主題,「一個人對電腦科學的觀點」,之所以被選中,是因為「電腦科學是什麼?」這個問題在這個領域的人們之間不斷爭論。此外,正如優秀的 Curriculum 68 報告在其引言中所述:「委員會堅信,關於電腦科學教育的過程與目標的持續對話,在未來幾年將至關重要。」最後,認為圖靈(圖靈獎即以他命名)僅對圖靈機感興趣是錯誤的;事實上,他對這個領域的許多方面都有貢獻,並且可能對這個主題會非常感興趣,儘管可能不對我所說的內容感興趣。

電腦科學的定義

「電腦科學是什麼?」這個問題實際上以許多不同的形式出現,其中包括:電腦科學現在是什麼?它可以發展成什麼?它應該發展成什麼?它將發展成什麼?

對於這些問題,沒有一個可以給出精確的答案。很多年前,一位著名的數學家寫了一本名為《數學是什麼》的書,他在書中從未試圖定義數學,而是簡單地寫了數學。雖然你偶爾會發現數學的某些方面被相當清晰地定義,但唯一普遍接受的數學定義是「數學是數學家所做的事情」,而這後面緊接著是「數學家是做數學的人」。關於定義數學的真實情況,在許多其他領域也同樣存在:通常對領域沒有清晰、明確的定義。

面對這個困難,許多人,包括我自己,有時覺得我們應該忽略討論,繼續做我們正在做的事情。但是正如 George Forsythe 在最近一篇文章中出色地指出,在 Washington, D. C. 的人認為電腦科學是什麼確實很重要。據他所說,他們傾向於認為它是應用數學的一部分,因此在經費撥款方面會向數學家尋求建議。在其他地方也沒有太大不同;無論在工業界還是大學,你仍然經常可以看到電腦首次起步時的痕跡,無論是在電機工程、物理、數學,甚至是商科。顯然,人們對一個學科的看法會顯著影響其後續發展。因此,雖然我們不能期望明確解決這個問題,但我們需要經常檢視和表達我們對這個學科是什麼以及應該成為什麼的觀點。

專業化與廣泛訓練

在許多方面,對我來說,就電腦科學中某個小的技術點發表演講會更令人滿意——這肯定會更容易。但這正是我希望強調的事情之一——陷入領域細節的危險,尤其是在即將到來的日子裡,那時期刊上每個月將會出現大量的論文。我們必須高度重視該領域的廣泛訓練——儘管為了寫論文、發表大量論文等,越來越有必要進行高度專業化。我們需要為我們的學生準備好迎接 2000 年,那時他們中的許多人將處於事業的巔峰。在我看來,在電腦科學中比在許多其他領域更能體現「專業化導致瑣碎化」。

我相信你們都聽說過,我們的科學知識大約每 16 到 17 年翻一番。我強烈懷疑這個速度在電腦科學中現在要高得多;過去 15 年肯定更高。在我們所有的教育中,我們必須考慮到這種知識的增長,並認識到我們面臨著非常真實的知識總量。在許多方面,認為學者知曉其領域至少 90% 相關知識的經典觀念正在消亡。越來越狹窄的專業化並不是解決辦法,因為部分困難在於領域之間相互關係的快速增長。我私下認為,我們需要相對更多地強調品質而非數量,而且經過仔細、批判、深思熟慮的綜述文章往往比新的、非必要的材料在推動該領域發展方面更為重要。

科學與工程:一個區分

我們生活在一個灰色的世界中,但為了爭論,甚至為了思考,通常有必要二分法,說「黑」或「白」。當然,這樣做我們會扭曲事實,但似乎沒有其他簡單的方式來進行。因此,我相信你們會從這個角度看待我的許多細微區分——從某種意義上說,我自己也不完全相信它們,但似乎沒有其他簡單的方式來討論這個問題。

例如,讓我任意區分科學與工程,說科學關注什麼是可能,而工程關注從許多可能的方法中選擇一個能滿足許多通常表述不清的經濟和實際目標的方法。我們稱這個領域為「電腦科學」,但我認為如果它不那麼容易被誤解的話,更準確的稱謂會是「電腦工程」。我們所做的大部分工作並不是它是否可以完成的問題,而是找到一個實用方法的問題。通常不是能否存在一個監視系統、演算法、排程器或編譯器的問題,而是找到一個實用可行的系統,並以合理的投入時間和精力完成的問題。雖然我不會將名稱從「電腦科學」改為「電腦工程」,但我希望看到我們所教授的內容中,具有比我通常在課程大綱中發現的更多實用的工程味道。

實用性對資金的重要性

要求我們強調實用性還有第二個原因。據我所見,在未來相當長的時間裡,電腦科學系將需要大量的資金。而社會通常(儘管不總是)更願意在能看到實際回報時提供資金,而不是投資於他們認為不切實際的活動、有趣的遊戲等。如果我們要獲得我認為我們將需要的巨額資金,那麼我們最好為我們的領域增添實用性。正如你們中的許多人清楚地知道,我們在許多領域已經獲得了不好的名聲。當然也有例外,但你們都知道我們迄今在軟體方面滿足需求的情況有多差。

機器作為基礎

電腦科學的核心是技術設備,即計算機。沒有機器,我們所做的一切幾乎都會變成空談,與中世紀臭名昭著的經院哲學家幾乎沒有區別。ACM 的創始人清楚地認識到我們所做或將要做的大部分工作都基於這種技術設備,他們特意在名稱中包含了「machinery」(機器)這個詞。有些人希望去掉這個詞,從某種意義上象徵性地讓這個領域擺脫現實,但這些努力迄今都失敗了。我不後悔最初的選擇。我仍然認為,認識到電腦,即資訊處理機器,是我們領域的基礎至關重要。

培養實用性與聲譽

我們如何培養我所要求的這種實用性,以及在社會需要時提供所需成果的聲譽呢?也許最重要的是我們進行工作和教學的方式,儘管我們所做的研究也將非常重要。我們需要避免純粹數學家經常參與的吹噓無用性和玩遊戲。無論純粹數學家聲稱今天完全無用的東西明天會變得有用是否正確(在目前的情況下,我對此非常懷疑),這對於籌集我們所需的大量資金來支持這個領域持續增長來說, simply 是糟糕的宣傳。我們需要避免讓電腦科學看起來像純粹數學:我們的主要接受標準應該是現實世界的經驗,而不是美學。

課程建議:實驗室工作

如果由我來建立一個電腦科學課程,我會比 Curriculum 68 更強調實驗室工作,特別是我會要求每個電腦科學主修生,無論是本科生還是研究生,都要上一門實驗室課程,在其中設計、建構、除錯並文件化一個相當規模的程式,也許是一個模擬器或針對特定機器的簡化編譯器。成果將根據程式設計風格、實際效率、無錯誤性以及文件進行評判。如果其中任何一項太差,我將不允許該學生通過。在評判他們的作業時,我們需要清楚區分表面上的聰明和真正的理解。過去,聰明是必不可少的;現在,它已經不足夠了。

課程建議:數學與電腦科學以外的輔修

我還會要求在電腦科學和數學以外的其他領域有一個強力的輔修。如果沒有使用電腦獲取有用成果的實際經驗,電腦科學主修生很可能知道關於這個神奇工具的一切,但不知道如何使用它。這樣的人僅僅是一個技師,擅長操作工具,但對於何時以及如何將其用於基本目的卻沒有什麼概念。我相信我們應該避免製造更多的白痴學者——我們現在已經有足夠多的「電腦迷」來撐很長時間了。我們需要的是專業人士!

Curriculum 68 通過說「這可以通過暑期工作、合作學習專案、在電腦中心兼職、特別專案課程或其他適當的方式來安排」認識到這種「貼近現實」程式設計的需求。我建議的適當方式是在你的控制下設立一門嚴格的實驗室課程,並且委員會的上述建議很少會有效或令人滿意。

課程中的數學

規劃電腦科學課程中最令人頭疼的問題可能是確定應要求主修該領域的人員修讀哪些數學課程。我們中的許多人帶著深厚的數學背景來到電腦領域,傾向於自動地認為每個人都應該被要求學習很多數學。教師往往過於頻繁地試圖讓學生變成自己的複製品。但很容易觀察到,過去許多備受推崇的軟體人才對大多數形式數學一無所知,儘管他們中的許多人似乎對數學有一種天賦(就像數學實際的那樣,而不是通常被教導的那樣)。

過去,我曾認為要求電腦科學具有深厚的數學內容會排除該領域中許多最優秀的人才。然而,隨著排程和電腦資源分配的重要性日益增加,我不得不重新考慮我的看法。雖然有一些證據表明其中一部分將被納入硬體,但我很難相信在相當長一段時間內(至少五年)軟體中不會存在大量的資源排程和分配。如果這將成為模式,那麼我們需要考慮在這一領域進行培訓。如果我們不提供這樣的培訓,那麼電腦科學主修生將會發現自己只是一個按照他人指示操作工具的技師。此外,過去被認為很棒的那種程式設計,常常依賴於聰明和技巧,很少或沒有形式數學。這個階段似乎正在過去,我不得不相信,未來,如果我們的畢業生要做重要的工作,良好的數學背景將是必需的。

歷史顯示,相對少的人在三十歲以後還能學到很多新東西,更不用說晚年了;所以如果數學在未來將扮演重要角色,我們需要在學生還在學校時就給予他們數學訓練。當然,我們可以暫時迴避這個問題,設立兩個平行的道路,一個有數學,一個沒有數學,並警告說沒有數學的道路在進一步的大學訓練方面會走進死胡同(前提是我們相信數學對電腦科學的高級訓練至關重要)。

特定數學主題的必要性

一旦我們承認需要大量數學,我們就面臨更困難的任務,即具體說明哪些課程。儘管數值分析師聲稱其領域具有根本重要性,但令人驚訝的是,許多電腦科學活動相對很少用到它。但我相信我們可以為要求每個電腦科學主修生至少修讀該領域一門課程進行辯護。我們的困難也許在於,現有的形式數學課程安排並不適合我們目前看到的需求。我們似乎需要一些抽象代數;一些排隊論;大量統計學,包括實驗設計;適量的概率論,也許還有一些馬爾可夫鏈的元素;資訊論和編碼理論的部分內容;以及關於頻寬和信號速率的一些內容,一些圖論等,但我們也知道這個領域變化迅速,明天我們可能需要複變函數、拓撲學和其他主題。

正如我所說,數學課程的規劃可能是課程中最令人頭疼的部分。經過對這個問題的深思熟慮,我目前的感覺是,如果我們的畢業生要做重要的貢獻,而不是被降級為按照他人指示操作工具的技師,那麼給他們太多數學比給太少數學要好。我非常清楚這會排除許多過去做出貢獻的人,我對我的結論並不滿意,但事實就是如此。未來,在電腦科學領域取得成功很可能需要掌握數學。

應用領域(商業與 COBOL)

對於電腦科學課程的抱怨之一是,它們似乎幾乎完全忽略了商業應用和 COBOL。我認為,應該決定是否在電腦科學系教授某個應用領域或像 COBOL 這樣的語言的,不是這些應用領域的重要性,也不是這種語言的使用廣泛程度;我認為這取決於商業管理系是否能比我們做得更好,以及商業應用領域特有的內容是否對電腦科學的其他方面至關重要。而且我對商業應用領域的看法,我相信也適用於大多數其他可以在其他系所教授的應用領域。我堅信,憑藉我們有限的資源,以及在未來很長一段時間內將擁有的資源,我們不應該試圖在電腦科學系教授電腦的應用;相反,這些應用應該在它們的自然環境中由相應的系所教授。

類比計算

類比計算在電腦科學課程中的作用問題,與應用於特定領域的問題不完全相同,因為它確實沒有其他地方可去。毫無疑問,類比計算在經濟上很重要,並將在一段時間內繼續如此。但也毫無疑問,即使包含混合計算機,這個領域目前也沒有像數位計算那樣的智力活力。此外,良好的類比計算的精髓在於理解設備的物理限制以及特殊的定標藝術,特別是在時間變量方面,這與電腦科學的其他部分截然不同。因此,它傾向於被忽略而不是被拒絕;它要麼不被教授,要麼是一門選修課,這可能是目前我們所能期待的最好的情況,因為興趣的中心是通用數位計算機。

「玩遊戲」的聲譽

目前,許多電腦科學課程都帶有「玩遊戲」的色彩。我經常從那些想招聘優秀軟體人才的朋友那裡聽到,他們發現電腦科學專家是他們不想要的人。他們的經驗是,我們課程的畢業生似乎主要對玩遊戲、製作那些實際上不起作用的華麗程式、編寫技巧性程式等感興趣,並且無法約束自己的努力,以便他們說要做的事情能按時並以實用形式完成。如果我僅僅從一個自詡是強硬工程師的朋友那裡聽到這個抱怨,我也會不理會;不幸的是,我從一些有能力、聰明、理解力強的人那裡聽到了。正如我之前所說,由於我們如此需要資金支持我們目前和未來設施的擴張,我們最好考慮如何在未來幾年避免對我們的畢業生產生這樣的評價。我們要繼續製造在許多地方不受歡迎的產品嗎?還是我們要培養負責任、有效率、滿足我們社會真正需求的人?我希望後者會越來越多地成為現實;這就是我強調電腦科學實用性的原因。

責任(應用數學與純數學的對比)

我們培養出來的電腦科學家之所以對「聰明的」程式設計比對成果更感興趣,原因之一是我們的許多課程是由具有純粹數學家本能的人教授的。讓我再做一個任意的區分,這只是部分真實的。純粹數學家從給定的問題,或者他從給定問題中創造出來的一些變體開始,並產出他說是答案的東西。在應用數學中,有兩個關鍵步驟是必須添加的:(1) 檢驗數學模型與實際情況的相關性,以及 (2) 數學模型的結果與原始情況的相關性,或者如果你願意,就是對結果的解釋。這就是「尖銳的差異」所在:應用數學家必須願意拿一部分自己的聲譽來擔保「如果你這樣做,你將會非常接近地觀察到這樣的結果,因此你有理由按照指示繼續進行並投入資金或精力來完成這項工作」,而純粹數學家通常會聳聳肩說:「那不是我的責任。」必須有人對朝一個方向或另一個方向前進的決定負責,在我看來,平均而言,承擔這份責任的人將獲得社會分配的更多讚譽。因此,在我們對電腦科學的教學中,我們需要強調對整個問題承擔責任,而不僅僅是那些聰明的數學部分。這也是我強調各學科工程方面並盡量減少純粹數學方面的原因。

困難當然是,我們電腦科學的許多教師是純粹數學家,而且純粹數學比應用工作容易教授得多。很少有教師能按照我所要求的方式進行教學。這意味著我們必須盡力而為,但我們應該清楚我們想要採取的方向,並且我們希望盡可能賦予這個領域實用性、責任感和工程氣質,而不是僅僅追求結果的存在。

超越瑣碎細節的成長

不幸的是,在電腦科學的早期階段,處理大量瑣碎細節的能力對於成功至關重要。但如果要成長為能處理電腦科學更大方面的人,那麼他必須擁有並發展一些在早期階段不被使用或鍛鍊的其他才能。因此,我們的許多畢業生從未邁出這第二步。這種情況很像數學:早期需要掌握算術和代數形式符號操作的瑣碎知識,但在高等數學中,成功需要一種截然不同的才能。

正如我所說,許多在瑣碎細節佔主導地位的領域做出貢獻的電腦科學家並沒有發展出更大的才能,而且他們仍然在教學並傳播他們那種注重細節的風格。電腦科學的高級層面需要的不是在數學中如此普遍的「非黑即白」心態,而是工程中特有的判斷力和平衡相互衝突目標的能力。

軟體:「臨時應變」的藝術

到目前為止,我還沒有談到軟體領域,或者像我的一個朋友曾經說過的,「臨時應變的藝術」。對軟體這種「臨時應變」的描述是如此真實,以至於討論在軟體課程中應該教什麼會令人尷尬。我們所做的很多工作都是以臨時應變的方式完成的,而且我們承受著盡快完成任務的巨大壓力,以至於我們幾乎沒有什麼東西能經得起科學家或工程師持懷疑態度的檢驗,他們會問:「軟體有什麼實質內容?」這個領域中難以掌握的想法是如此之少!有多少僅僅是瑣碎細節的堆砌而沒有任何仔細的分析!當一個 50,000 個單詞的編譯器後來被改寫成只有大約 5000 個單詞時,早期的編譯器必然離合理還有多遠!

將機器用於自身工作

我不再是軟體專家,所以我很難對軟體領域應該做什麼提出嚴肅的建議,但我感覺我們太常滿足於如此低的品質水平,以至於在這個過程中對自己造成了傷害。我們似乎無法利用我們都相信是一個非常強大的工具來處理和轉換資訊的機器,來完成我們自己在這個領域的任務。我們為他人編寫編譯器、組合器、監視器等,但是當我審視典型的軟體人員所做的工作時,我常常驚訝於他在自己的工作中很少使用機器。我與軟體人員進行過一些小成功的爭論,足以讓我相信我的堅持是正確的,即我們應該學會利用機器來完成我們幾乎所有階段的工作。很少有軟體人員甚至嘗試在自己的工作中使用機器。有數十種情況下,一點點機器計算就能極大地幫助程式設計師。我記得一個非常簡單的例子,一個非專業人士有一個非常長的 FORTRAN 程式來自外部,他想將其轉換到我們的本地使用,所以他寫了一個簡單的 FORTRAN 程式來定位所有的輸入輸出語句和所有函式庫引用。根據我的經驗,大多數程式設計師會親自掃描程式的冗長清單來找到它們,並且由於人類的常犯錯誤,第一次會漏掉幾個。我相信我們需要說服電腦專家,機器是他最強大的工具,他應該學會盡可能多地使用它,而不是像我在全國各地看到的那樣,親自掃描符號的冗長清單。如果我所報告的屬實,那麼我們過去在這一方面是失敗的。當然,一些最優秀的人確實像我推薦的那樣使用電腦;我的觀察是,一般的程式設計師並非如此。

教導程式設計風格

為了諷刺我們目前教授程式設計的方法,我們給初學者一本語法和一本字典,並告訴他們他們現在是偉大的作家了。我們很少,甚至從不,給予他們任何嚴肅的風格訓練。事實上,我多年來一直在等待《程式設計風格手冊》和/或《優秀程式設計選集》的出現,但至今仍未找到。就像寫作一樣,程式設計是一門困難而複雜的藝術。在寫作和程式設計中,簡潔都是可取的,但在兩者中你都可能過於簡潔。當你考慮我們如何教授好的寫作——學生在英語訓練期間所做的練習、作文和演講,並由老師評分——這似乎我們在教授程式設計風格方面非常疏忽。不幸的是,很少有程式設計師承認我稱之為「風格」的東西存在,並且願意表述他們的感受並給出具體例子。結果,很少有程式設計師寫出流暢的詩歌;大多數人寫的是結巴的散文。

我懷疑程式設計風格是否與任何特定的機器或語言密切相關,就像用一種自然語言寫作的好風格與用另一種語言寫作的好風格沒有顯著差異一樣。當然,一種語言中有特定的習語和細節,有利於一種表達想法的方式而不是另一種,但我所熟悉的西方歐洲語言中,好的寫作的本質似乎超越了這些差異。而且我懷疑目前可用的大多數通用數位計算機也大同小異。

軟體的理論需求

由於我說我們需要更多的工程氣質,而不是科學氣質,很容易被誤解,所以也許我應該指出,我是帶著純粹數學博士學位進入電腦科學領域的。當我要求軟體訓練具有更多的實用、工程氣質時,我也大聲疾呼我們對我們正在做的事情了解太少,並且我們迫切需要發展相關的理論。

事實上,我對電腦領域的主要抱怨之一是,牛頓可以說「如果我看得比別人遠一些,那是因為我站在巨人的肩膀上」,而我卻不得不說「今天我們互相踩在腳下」。也許我們在整個電腦科學領域面臨的中心問題是,我們如何能夠達到在他人工作的基礎上進行建構,而不是以微不足道的方式重複完成大量相同類型的工作。科學應該是累積性的,而不是幾乎無休止地複製相同類型的東西。

無方向性研究與基礎研究

這把我引向另一個區別,即無方向性研究與基礎研究之間的區別。每個人都喜歡做無方向性研究,並且大多數人喜歡相信無方向性研究就是基礎研究。我選擇將基礎研究定義為未來許多人將在其基礎上開展工作的研究。畢竟,除了工作被後來的許多工作所基於之外,我們對基礎研究還能有什麼合理的意義呢?我相信經驗表明,相對較少的工作會成為基礎性的,但人們通常可以對結果給出相當準確的概率。在檢視基礎研究的性質問題時,我得出的結論是,決定一項工作是否有很大機會成為基礎性的,與其說是提出的問題,不如說是解決問題的方式。

數值分析與課程的臃腫

數值分析是我們課程中唯一一個被認為具有一定內容的老牌部分。然而,人們常常認為許多教科書是為數學家編寫的,並且過於注重數學而非實際計算,這種說法有其公正性。原因當然是,該領域的許多人是轉行或不如說是半轉行的數學家,他們的潛意識中仍然存有數學的標準。我相信你們中的許多人對我沿這些線索提出的反對意見都很熟悉,我在此無需重複。

一些人向我指出,我也觀察到,建議的電腦科學課程中的許多課程都有「注水」。它們似乎常常涵蓋每一個細節,而不是只關注主要思想。我們不需要教導尋找函數實數根的每一種方法:我們需要教導幾種典型的方法,這些方法既有效又能說明數值分析的基本概念。我剛剛對數值分析所說的,對軟體課程來說更是如此。在我(以及其他一些人)看來,我們所知的軟體中沒有足夠多的基本思想來證明為這個主題投入大量時間是合理的。我們應該將我們教授的內容限定於在思想和技術上重要的內容——應該避免冗長地處理大量的瑣碎細節。

倫理

現在讓我談談倫理這個微妙的問題。已經有人多次觀察到,與受過訓練的會計人員相比,會計安裝中程式設計師的道德行為有許多不足之處。我們似乎沒有教導關於人員和公司私人資料的資訊的「神聖性」。我對電腦專家的有限觀察是,他們對這些事情只有最輕微的考慮。例如,大多數程式設計師認為,他們在更換雇主時有權帶走他們想要的任何程式。我們應該看看並學習會計課程(以及其他地方)如何將倫理標準納入其中,因為他們培養的產品比我們培養的更具倫理意識。我們在公開場合談論大型人員資料庫的危險性,但我們卻沒有在我們自己的電腦科學專業學生的思想灌輸層面盡到我們的責任。

專業標準

關於這些方面,讓我簡要評論一下專業標準的問題。我們最近發布了一項標準,在我看來這是個好標準,但我再次認為我有理由問,這是如何融入我們學生的訓練中的,他們是如何學習如何以那種方式行事的。當然,每天早上向班級宣讀標準是不夠的;道德和專業行為無法通過這種方式有效地教授。有大量證據表明,其他專業確實能夠向他們的學生傳達專業標準,雖然並非每個成員都能完全遵循,但這些標準肯定比我們目前為學生提供的要好得多。再次強調,我們需要研究他們是如何進行這種訓練的,並努力將他們的方法運用到我們的需求中。

社會責任

最後,讓我簡要提及這個經常討論的話題——社會責任。我們在會議上有關於這個主題的會議,我們在大廳裡、喝咖啡和啤酒時討論它,但我再次問:「這是如何融入我們的訓練計畫的?」事實上,我們沒有精確的規則可以遵循,這並不足以構成省略這個重要問題的全部訓練的理由。

倫理、標準與責任的教導方式

我相信這三個主題——倫理、專業行為和社會責任——必須融入電腦科學課程中。就個人而言,我不認為設置一門關於這些主題的獨立課程會有效。根據我對教授這類事情的有限理解,最好通過榜樣、通過教授的行為來教授。它們是在不經意的時刻,通過教授表達言辭和處理事情的方式來教授的。因此,首先必須讓教授意識到,他教學角色的重要部分是傳達這些微妙、難以捉摸的事情,他不能說「這不關我的事」。這些事情必須不斷地,時時刻刻地,由每個人教授,否則它們將完全不被教授。如果這些事情沒有以某種方式傳授給我們大多數學生,那麼這個領域將會理所當然地維持其目前的聲譽(如果你問其他系的同事他們的坦誠意見,你可能會感到驚訝)。

結論

最後,讓我回到對電腦科學領域一個合理的視角。這個領域非常新,它不得不持續奔跑才能跟上,而且我們早就知道將來必須做的一些事情,幾乎沒有時間去做。但至少在大學裡,我們終於站穩了腳跟:我們已經建立了獨立的系所,擁有合理的課程、師資和設備。我們現在有了良好的開端,是時候深化、加強和改進我們的領域了,這樣我們才能為我們教授的內容、我們如何教授以及我們培養的學生感到自豪。我們不是在培養技師、白痴學者和電腦迷;我們知道,在這個現代、複雜的世界裡,我們必須培養能在我們不斷變化的社會中扮演重要角色的負責任的人,否則我們就必須承認我們在作為這個令人興奮、重要領域——電腦科學——的教師和領導者方面失職了。