顯示具有 資訊工程 標籤的文章。 顯示所有文章
顯示具有 資訊工程 標籤的文章。 顯示所有文章

2008年12月20日 星期六

C++ 之父 Bjarne Stroustrup 談軟體教育

Bjarne Stroustrup 是當代軟體的大人物之一。
身為 C++ 程式語言設計人,他的成就已經影響了無數的軟體開發專案,
包括Google 搜尋引擎、到 iphone 手機。

Bjarne Stroustrup 在貝爾實驗室有 24 年的研究員經驗,2002 年
獲任德州 A&M 大學的資訊工程學系主任,這些經驗讓他對教育未來的軟
體開發員有深度的見解。

在訪談中 Bjarne 也坦誠表示教育界所面對的挑戰與問題,以及相關的
改進。談到的問題包括學生觀察能力不足以深入瞭解,學校教育要如何平
衡理論與現實之間的差距,他也指出業界最常抱怨的是資訊科系學生的能
力並不完全合格。

他也認為學生在學時將太多重心放在 Java 程式語言上。也許 Java 讓
開發員入門學習更為容易,但問題的癥結點是在寫程式的態度上,而非單
純歸咎到程式語言上。學界正在努力將程式語言課程設計得更完善,來讓
學習軟體開發更有實際用處。

就 Bjarne 所知從 Adobe, Apple, AT&T, IBM, Intel, Microsoft,
 到不知名的小公司,幾乎每一家大大小小的軟體公司,或是有使用到軟
體的公司都曾經跟他抱怨過缺乏好的軟體開發員。

可能 C++ 程式語言至今仍是許多公司採用的重要程式語言,許多業界公
司人員都會找 Bjarne 討教相關議題,主要的問題不外乎缺乏好的程式
框架 framework 、基礎架構配置 infrastructure、以及大型機構普
遍都缺乏對能夠駕馭複雜軟體系統的人才。

由於學校教導的重點在於電腦科學而非軟體開發,可能有學習多年程式經
驗的學生仍然會寫出充滿神奇數字( Magic number)的程式碼,造成日後
他人/自己閱讀困擾。原因不外乎程式設計被認為是低階的技術,或是認
為學生自己有能力學會。

有些研究生對於寫出來的程式碼,完全沒有考慮到日後擴充、維護。學生
的學習重點在於演算法、資料結構、計算機架構、程式語言、作業系統。

Robert Dewar 則是指出公司機構會發出這些抱怨,就是因為他們找到的
程式開發員無法在公司所要求的便宜價格、穩定性、時限內產出所需的程
式碼,因此制定出許多防呆防錯的限制。但也因為這些陳規陋習讓真正有
才能的高產出程式設計師無法盡情發揮,甚至會因此被同化而墮落下去。

Bjarne Stroustrup 在他的新書 Programming - Principles and
 Practice using C++(for educators)中指出,教導學生如何寫出一
個可供他人接手使用的軟體專案,其中包括錯誤處理、類別設計、檔案輸
出入、畫圖與圖型介面、標準函式庫的容器與演算法。其中也呈現了基本
的物件導向程式設計、泛型程式設計。

軟體開發教育的其中一個缺失是,現今有太多現成的工具、軟體可供使用
、修改,學生們缺乏獨立工作思考、並且要習慣不是為了考試成績而學
習(但出了社會還是要面對考績)、努力認真的精神、尋找所需資料的能力
、學習寫作與口頭表達思考的能力。專案導向的工作是最適當的訓練方式
,使用什麼程式語言倒是其次的問題,最好有點難度給與學生挑戰的機會
與成長空間。

給與學生重複訓練的機會相當重要,因為人總是健忘的,特別是結合學過
的演算法、資料結構、計算機架構的理論後,給與學生可以整合這些理論
與實際寫出專案程式的機會是相當重要的。這也是 Bjarne Stroustrup
 熱衷的教育方向之一,他認為資訊科學是相當完美的應用科學,不論偏
廢理論或實作都無法成功(這也是現今大家面對的問題)。

Bjarne Stroustup 認為身為一名資訊科學教授,不能只偏重在一種程
式語言上,本身也要熟悉多種程式語言。

除了資訊科學的工程面以外,最終的目標在能夠寫出有品質的程式專案後
,還要能追求軟體藝術層面的提升。但這仍需要有科學的計算模型來評估
工程面的實用性,以及藝術性。

軟體教育不只是熟練程式設計的技巧,需要放更多心力在數學、科學、工
程面上。訓練學生觀察出軟體專案之美的最佳方法,就是給學生們欣賞更
多趨近完美的軟體專案成果。最好是像藝術家、建築師的展覽般,舉辦學
生的成果發表會,讓學生們多觀摩何謂美的軟體專案,這是軟體美學教育
的最佳途徑。

軟體教育也是需要下苦功的,就像要成為一名稱職的水管工人、你不可能
一夜之間成為一名專業的軟體工程師,做你該做的系統分析、設計,實作
並驗證你的設計,反覆的練習直到這些動作成為你自己的一部份。

像 Java 這類滿載許多預製好的函式庫可供使用的程式語言,可以是很便
利的工具,但如果你只知道如何使用這些預設的函式庫並不能讓你學習、
成長。Bjarne 認為 C/C++ 的記憶體配置觀念仍然是相當重要的。

有人說軟體外包造成資訊科學學生遞減,但也許我們可以說是因為沒有足
夠多的好軟體設計師,導致這些工作外包到海外尋找更多的好工程師。

C++ 的問題之一是標準函式庫並不那麼好用,希望 C++0x 可以解決這個
問題。包括 vector 初始化 {} 與 for loop 的 auto range 語法,
都是要簡化軟體設計的工作。

Bjarne Stroustrup 認為軟體開發者的偉大之處,在於他的好奇心、
創新、韌性、邏輯推理、能夠溝通進行團隊合作。這應該可以適用在軟體
開發以外的領域,另外一項重要的特質是,不要忘了你的幽默感。

Bjarne Stroustrup 給所有軟體設計師的建言:
程式設計只是軟體開發的一部份,不管你的程式寫得多棒,前題都是必須
要正確運作、解決問題,並且能讓別人看得懂,請改善你的溝通技巧,學
習傾聽、問正確的問題、寫作簡明,表達清楚。正式的軟體開發工作是藉
由團隊合作完成,請改善你的社交技巧。埋首在成堆比薩跟可樂的頂尖聰
明技客已經無法靠單打獨鬥面對當代軟體開發。

認真完整的學完你的第一個程式設計語言,試著用這個程式語言解決困難
的問題,不要沉迷在奇淫技巧當中,專注在技術跟科學本質上。

學習第二個程式設計語言,最好是跟第一個程式語言具備不同執行範式
(Execution Paradigm)與不同轉譯機制(Translation Mechanism)
的程式語言(直譯器程式語言 interpreter, 編譯器程式語言 compiler)
,只會一種程式語言絕對不足以面對現今多樣化的問題。每個問題都有相
對最適合的程式語言。

不要只會程式設計。軟體是解決問題的工具。將你的軟體技能運用在各種
可能的領域:
中世紀歷史、汽車引擎設計、火箭科技、血壓分析、圖形影像處理、幾何
計算、生物學塑模等,任何你可能有興趣的領域。就我個人領域來看,這
些都是真實可應用的領域。

 當然最理想的是你已經有對某個領域抱有相當的興趣,請開始使用程式
與軟體解決你所遇到的問題吧!

相關文章:

程式設計的文藝復興

相關連結:

Bjarne Stroustrup on Educating Software Developers