發表文章

目前顯示的是有「軟工教育」標籤的文章

再漫談『課程改進』

     去年TCSE2011 Panel discussion之後,我在2011/07/13po了一`篇叫『課程改進』短文,文中主要討論,教學生是先教程式設計或模式觀念,該文引起一些討論,2011/12/05我又發表一篇:『CRC cards - 非正規物件導向發展技術 』(該文因無人點閱故暫還原為草稿) ,我因此想到「冷飯熱炒」po這篇短文就教對該類議題的有心人士。      事實上,討論程式與模式孰先孰後不會有結論,也不應有結論,因何者為先何者為後,甚至兩者平行教學,端視教師的觀念與想法,不過我認為,這個議題可能影響往後的軟體工程與物件軟體工程的教學以及學生學習的深度與速度,我教過幾年的物件軟工課程,發現有些學生對於模式的概念相當薄弱,因此要了解諸如UML的功能與運用時有些困難,甚至於利用UML來發展軟體也有些「障礙」,因此我才想到何不早先讓學員了解模式與程式之間的關聯!      不過,如果你/妳不反對教授大一或大二的程式設計時,可同時授予學生物件導向的觀念;CRC cards可能是教導學生盡早具備物件導向觀念,簡單但有效的利器,事實上,Kent Beck與Ward Cunningham介紹CRC cards時的原意就是要教導程式員認知物件導向的觀念,只不過後來卻「脫離」教室而成為快速而且有效的物件先期設計方法,而成為非正規物件導向軟體發展技術(參照2011/12/05CRC crads一文)。      這篇短文只是用來補充前置『課程改進』一文,總希望學生能夠盡速進入物件導向的領域,因為物件導向軟體發展方法可能是目前de factor軟體發展法,如果老師們能夠加以指正這種論述,本人表示樂觀與感謝。 「註」CRC cards是簡潔(compact),低技術(low-tech),便宜,容易學習的工具,而且不一定要使用電腦,甚至可做為正規方法如UP等的輸入,這一點再另文討論。

TCSE 2011 Panel discussion

前言 今年在輔大舉行的TCSE Panel discussion,三位與談者與眾多與會者對『軟體核心能力』這個議題,在一個小時的時間內做了許多探討。以下的抄本,由輔仁大學范姜永益教授轉錄自當天的錄音,特此致謝;抄本業經與談人修訂、補充。建議讀者參考當天的  投影片  一起閱讀,更歡迎大家在『輕鬆談軟工』一起加入討論。附帶說明,此抄本已略去錄音效果不佳的部份,敬請包涵。 Transcript begins 北科大 鄭教授開場 軟體領域最近的熱度,大家都知道。最近參加的一個會議裡,電腦公會的代表提到,幾家ICT大廠有數千個android 軟體開發的職缺;同一個會議中亦談到雲端軟體開發,在座好幾個大廠每家亦以數以百計的數量開出軟體開發人員的需求。各位,如果您或是您的學生會寫Android的程式 我想出路應該是沒有什麼問題。但是,身為教育界的一分子,我們要回頭問問我們自己:剛自學校畢業的軟體工程師寫的軟體到底如何?我們學生要具備怎麼樣的核心能力才能做出好的軟體? 針對這個議題,軟工學會理事長李允中教授特別為今天的panel discussion訂了一個討論題目:『軟體核心能力』(software core competences)。針對這個議題,六月份時李教授在中央大學召開一個會議。李教授提出的核心能力分為基礎與進階:基礎的部份包含了基礎技術能力與團隊合作,像是如何描述一個問題、如何做設計、如何規劃Architecture 等等;進階的能力部分則涵蓋如何開發、審查、驗證 以及可用性、大型軟體的議題等的議題等。當然,我們今天的討論並不需要侷限在這幾個議題上,而可以有更深、更廣的的討論。 今天很高興我們請到三位軟工界非常熟悉的學者與談。第一位是中央大學的黃為德教授,第二位是銘傳大學的劉龍龍教授,第三位是大同大學的郭譽申教授。三位panelists 各有七分鐘的時間闡述見解共計二十一分鐘。接下來我們會留大約一半的時間進行討論,在座的各位可以在panelists 談完他們的看法之後,大家來討論。 中央大學 黃教授 大家袋子裡面是不是有一台手機,如果手機裡面沒有軟體,你的手機可能無用武之地,你到銀行要領錢,銀行告訴你說電腦壞了,可能是軟體系統故障或惡化(deterioration),叫你兩小時後再來,你可能會抓狂,...

課程改進

今年在輔大招開的TSCE11,其中在Panel Discusion中(主題:軟體核心能力),我提議軟工教育訓練由OO modeling概念開始,而程式則依據models來撰寫,這種提議可能須修改教學程序,不過我認為,「軟體核心能力」的目的乃是要建立優良的軟體系統,而models比複雜的程式容易描述系統,也比較容易保養系統,因為其抽象層次較高,也符合程式語言以及軟體發展方法的演變之故。我提出這種意見,希望對軟體工程教育有興趣的人士能夠討論,提供意見。

大長多多

學生們還是問,為什麼需要軟體工程?和程式設計有什麼不同?為什麼需要作專案管理、監控、控管等等?寫得出程式不是比較實在嗎? 這是因為學生寫的程式太小、參與開發的人太少、專案關係人太少、而維護的時間太短,以致於他們無法想像軟體工程的必要性。 真的軟體專案是『大長多多』的。 到了業界,一個專案要破萬行很容易的,程式一旦 大 ,相互關係就會變複雜,動一行指令可能會牽涉到好多地方。所以需要學軟體工程,學如何切模組、作架構設計。學設計概念,知道如何才容易維護、好擴充功能。程式一旦變大,它的成本也會指數性的上升,你需要學習成本估算的方法。 專案的時間通常很 長 ,不是一個星期能完成的家庭作業。所以你需要專案文件(幫助你記憶),專案管理(來掌握時間與分配人力)。維護當然把整個時程拉的更長,所以設計的時候要考慮彈性、成本要把維護算進去。在組織人力調配上,你需要考慮開發與維護是否是同一組人。在這麼長的時間裡,各種不同的版本會產生,你需要版本控管的機制,也需要需求管理來控管變更。 學生的作業多是老師給好的題目,於是很難體會為什麼需要系統分析。業界的專案牽涉的人 多 ,光是『安排』訪談可能就需要一個月。每個人的意見都不一樣,你必須學習一些系統分析的方法來收集、挖掘、歸納、整理、協調、妥協這些需求,再讓這些需求一個個的被所有人確認。除了清楚的腦袋、好的溝通能力、專業技術的判斷,你也需要一些系統分析的方法論。 一個真正系統的完成,需要的專業知識太多,決不是一個人能夠完成的,我們需要很 多 人一起來開發。如何組織這些人?如何分工?是依照<專案管理師、系統分析師、系統設計師、系統工程師、系統測試人員>來切割?還是依據領域來切割?這麼多人合作,版本管理更重要了。組織也需要定一套一致的 coding standard 及 SOP來提升整體的效率。 學校的『小短少少』的環境有時候很難體會軟體工程的重要性。透過專題的製作與建教合作或許有些幫助。