Re: [問卦] 就問 為什麼學校軟體工程不教這些?

看板Gossiping作者 (真心離傷心最近)時間2年前 (2021/09/29 02:15), 2年前編輯推噓10(10034)
留言44則, 10人參與, 2年前最新討論串2/3 (看更多)
你這個問題問得真是太好了,我建議你親身回到學校去體驗看看問題出在哪個環節。 如果你礙於時間因素不方便回到大學校園。那可以聽聽看我對於這件事的理解。 首先從學校系所課程裡的三個利害關係人的態度談起,最後再來講講業界的態度。 學校系所課程裡主要的三個利害關係人依據其涉及範圍及程度排序後大概是: 1. 教授 2. 學生 3. 系所行政及學生家長 先從對教授課程內容影響最深的教授說起好了 我認識一個對軟體工程專業程度及推廣程度都算滿有心得的教授,我曾經問過該位教授 為什麼學校不開課專門講設計模式跟某些版控及DevOps軟體,當然該校開設的部分課程 中已經有"軟體工程"這門科目了,其中也有些許的篇幅稍微提及設計模式及軟體架構等等 但是我當時覺得,該校的課程內容僅僅只是講到設計模式的皮毛而已,對學生的實際應用 能力幾乎沒有幫助。 這位教授只是笑笑的跟我說:"每學期的教學時數相當有限。我們當老師的就是引進門而已 ,要不要再繼續研究哪個領域就看學生個人了,有興趣的學生自然會深入了解。至於在課 堂上教授特定軟體的話,學生畢業後未必會用的到,在學校就是讓他們稍微接觸一下,讓 他們有個概念知道有這個軟體是做甚麼用的就好。" 我當時還以為這位教授是個沒有教學熱忱的老師,直到我接觸到學生們才知道這位教授為 何會這麼說。 連一個對軟體工程有深刻了解和大力推廣的教授都無力施展了,那對軟體工程學派沒有涉 獵的教授又怎麼會在乎呢? 講到學生,學生雖然不會直接影響授課內容但是我覺得學生是這些環節中最關鍵的一環 我接觸到的學生雖然不是什麼一流大學,但好歹也是國立的學生,在有唸書的學生中算是 中間值吧,既不到特別優秀也不到特別差勁。 在課程中很明顯感覺得出來學生的觀念還停留在某某某會做甚麼樣的程式耶好厲害這種做 出來能work就好的想法,縱使前幾個學期已經學過軟體工程的基礎理論也是如此。學生間 的價值觀是:"完成的程式的花俏度或是運用的語法越罕見代表技術越厲害"。學生並不 在乎自己的程式是如何從無到有建構出來的,更遑論測試跟註解這些在單人開發且無須後 續維護下看起來幾乎完全不必要的東西。換句話說,學校中學到的軟體開發理論在他們的 作業過程中近乎無用。我要寫註解幹嘛,這code我寫的你問我我答得出來就好啊、我給變 數隨便取名有甚麼關係,我知道那個變數是做甚麼用的阿、我的code邏輯那麼單純,硬要 套設計模式要做甚麼……諸如此類的。學生看到的是如果乖乖的課堂將上學到的應用在作 業上反而要花更多時間成本卻看沒有任何後續的好處,所以他們會覺得課堂上的理論只是 空話、只是書本上的理論。也確實如此,簡單的單人開發且不需要後續維護的一次性軟體 寫註解、測試案例、規格說明書反而會更花時間,而且架構簡單的東西硬要套設計模式更 是不合理的行為。 因此,我曾經想過那要是教授給他們困難的作業讓他們作可以使他們養成使用設計模式的 習慣嗎? 不過我後來很快地就放棄這個愚蠢的想法了,班上有大半的人對寫程式是沒有興 趣,畢業後會走coding相關行業的不到1/3,更要命的是學生想要自如地應用設計模式的 基本能力不夠。大部分的學生都是看著課本一步一腳印的學coding的,哪一個章節教什麼 語法就跟著操作,很少有學生會去思考語法的應用,這個學習方法在碰到比較抽象的概念 的時候就會出現一知半解的狀況,像是學生可能知道Java中轉型(Polymorphism)的用法, 但是對於為何要轉型及何時該應用轉型能有自己的理解的就極少。而且能理解轉型的用法 在班上已經算是高材生了,更多的同學連物件導向都搞不清楚,不知道物件的用途跟應用 方法、把code全都寫在main方法裡面,如果要叫這些學生自如地應用設計模式可能是難如 登天。 再講到家長跟系所行政,這個部分就真的挺可悲的。 我們的政府總是慣於喊口號勝於在基本功上下苦功,如果說學生年紀小見識未廣盲目追求 華麗的東西而忽視基礎還情有可原,但是我們的大人也不了解基本功的重要性。 而且受到口號的影響,現在家長聽到AI、大數據這些名詞就覺得讓孩子學這個很有前途。 既然家長這麼喜歡,現實面上系所為了招生也不得不開更多的AI、大數據為科目 名稱的課程。而且不只招生連高中資訊體驗營之類的營隊或是XXX推廣課程都是要拿AI、大 數據這些當名目才有人來。只能說現在大數據、AI這幾個詞就是比較吃香阿。 最後給版友總結一下, 軟體工程幾乎可以算是一個學門,就如同建築學一樣。但是這個新興學門目前還算小, 只能依附在資訊科系底下,而且老教授他們當年念書可能是沒有系統化的軟體工程理論。 所以不是每個資訊系的教授都重視軟體工程,而且限於每學期的授課時數,教授也沒有 時間深入講授軟體工程理論。而大部分的學生是不理解軟體工程理論或程式語法的抽象 概念以至於不適合在課堂上講授進階的開發方法及設計模式應用實踐。家長則是因為受到 AI、大數據這些口號的影響改變喜好而使得資訊系所紛紛將課程資源轉向容易招生的這些 科目。 ※ 引述《lycppt ()》之銘言: : 為什麼學校軟體工程不教這些 : 開發理論、策略及實踐啊? : 版控理念及策略 : 設計模式 : 軟體架構模式 : 持續性整合 / 部署 : CMMI : 敏捷開發 : 隕石開發 : 測試驅動開發 : 模型驅動開發 : 行為驅動開發 : 領域驅動開發 : Clean Code : Clean Architecture : 話說以上這些是要歸在資工還是資管啊? : 整天只想搞機器學習 深度學習 : 弄個驚天動地的 AI 演算法 : 務實點好嗎 : 沒這些工程方法把它們整合在一起 : 是有三小路用逆 : 系統架構搞的跟違建危樓一樣 : 程式碼寫的跟義大利麵一樣 : 有個厲害AI 演算法也枉然 : 就問 學校軟體工程為何不教這些? : -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.227.120.26 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1632852903.A.423.html

09/29 02:19, 2年前 , 1F
推認真
09/29 02:19, 1F

09/29 02:21, 2年前 , 2F
現在這麼多非資工系的想轉行寫程式,資
09/29 02:21, 2F

09/29 02:22, 2年前 , 3F
工系居然有 2/3 的人不想以寫程式為業
09/29 02:22, 3F

09/29 02:23, 2年前 , 4F
而且是國立排名中間的資工系
09/29 02:23, 4F
更嚇人的是女生想寫程式的更少 成績再好也一樣 某班前五名有三個女的 有兩個都不想寫程式 ※ 編輯: virnux (61.227.120.26 臺灣), 09/29/2021 02:25:47

09/29 02:25, 2年前 , 5F
給些基礎觀念我覺得就可~等工作後Code看多了
09/29 02:25, 5F

09/29 02:25, 2年前 , 6F
有需要的時候自然就會去深入了解
09/29 02:25, 6F

09/29 02:27, 2年前 , 7F
女生幹麻寫程式,尤其長的正的
09/29 02:27, 7F

09/29 02:27, 2年前 , 8F
當然台大資工也有正的教師
09/29 02:27, 8F
不是阿阿阿 不想寫輕鬆過也行吧 當學霸推個清大o文系要做甚麼 ※ 編輯: virnux (61.227.120.26 臺灣), 09/29/2021 02:30:06

09/29 02:31, 2年前 , 9F
推 概念正確
09/29 02:31, 9F

09/29 02:36, 2年前 , 10F
09/29 02:36, 10F

09/29 02:44, 2年前 , 11F
以我接觸過地方國立資工學生會繼續
09/29 02:44, 11F

09/29 02:45, 2年前 , 12F
走coding 不是套好人家早就寫好的那
09/29 02:45, 12F

09/29 02:45, 2年前 , 13F
種學生 一屆大概不到兩成
09/29 02:45, 13F

09/29 03:10, 2年前 , 14F
像這種問題是不是只要設計作業花點心思就好?
09/29 03:10, 14F

09/29 03:10, 2年前 , 15F
比方說期中考就是做某程式的前半部,期末考就
09/29 03:10, 15F

09/29 03:10, 2年前 , 16F
是接受其他同學的前半部程式。
09/29 03:10, 16F
交換作業有個問題就是: 萬一第一個人寫得很爛 那第二個人算分要怎麼算? 那第一個人寫得很好 第二個人的分數又要怎麼算? 程式人大都寧願自己動手重寫而不是選擇在理解前人的框架下進行開發 這跟技術力差距有關還有文化都有關 所以如果依照你的想法,就會變成大家後半部都是拿自己的前半部去改來交作業。 我有試過從設計作業著手 就是一系列的程式,程式output要求都相同但唯有裡面的演算法運算邏輯不同。 可是大部分想拿高分或是對自己有要求的同學還是會選擇著重在GUI方面, 縱使有提過可以用物件的方式去封裝演算法的邏輯部分,同學們依然還是使用在同一個 物件中呼叫新方法去執行新的演算法邏輯。 ※ 編輯: virnux (61.227.120.26 臺灣), 09/29/2021 03:33:18

09/29 05:32, 2年前 , 17F
第二個人的分數可以跟第一個人連動,小組作業
09/29 05:32, 17F

09/29 05:32, 2年前 , 18F
不都是這樣嗎?要是這樣同學也有問題,那小組
09/29 05:32, 18F

09/29 05:32, 2年前 , 19F
作業就不用做了。且我覺得,接前人的爛攤子很
09/29 05:32, 19F

09/29 05:32, 2年前 , 20F
符合職場啊。如果前面同學寫得好,後面同學還
09/29 05:32, 20F

09/29 05:32, 2年前 , 21F
要硬改,分數就低,兩者連動。
09/29 05:32, 21F
我覺得你的理念很有意思,就是承先啟後而非一起作業的teamwork。 但是實行起來有幾個難點在於: 1. 很容易變成變相的一同作業 其實班上快30個人,扣掉毫無架構的寫法、沒交作業跟屍體後作業的版本最多就五六個。 大部分的學生的GUI跟各種功能都是去問班上那幾個厲害的同學寫出來的, 跑不了怎麼改到過也是問他們。所以其實程式要怎麼改都是班上那兩三個人想出來的。 再來學生事先不知道誰會接他的作業,但是分數因為會連動。想要拿高分的那群學生就會 交流彼此拿到的題目,或是透過朋友去問那原本是誰寫的題目,又變成變相的一同作業。 2. 部署上的問題 我拿到的code已經是第一手的了,依然還是有很多奇奇怪怪的東西。 像是code的原始檔內容全部縮成一兩行,程式可以跑但就是閱讀前要先花功夫讓程式碼分 行 XD、有使用外部jar檔的,這個jar檔的使用課本上當然沒有教,也不是作業的必要內容 ,那是同學自學來的成果,那他的code如果交到沒有學到的同學就很不公平、再來有些同 學會去做讀/寫檔案的動作,偏偏他們又是把檔案路徑寫死的 (對,當初課堂上有強調過路 徑不要寫死,要寫死好歹也在作業說明或是註解裡註明絕對路徑,這些強調在平台上的作 業評分須知裡也可以找到)、有的同學交來的原始檔編碼不太一樣、不給原始檔只給編譯過 後的檔案的(對,這還特別強調過只收.java檔不收.class檔,交了是零分)、或是在我換了 好幾台電腦他的GUI介面中文字都是亂碼的,特別找他來問他也不知道為什麼,在他的筆電 上跑的時候中文字也確實是亂碼、還有根本就是屍體的東西。 這些千奇百怪的狀況都是課本裡沒有的,當然我自己可以解決絕大部分,但是萬一要把這 些狀況都丟給學生那就會引起民怨: "這個課本沒有教耶"、"這OOO狀況要怎麼弄?"、"為 什麼某某某抽到的那麼簡單,我抽到的有個jar檔,這是甚麼?"、"他這個開不起來耶,助 教你是不是給錯檔案了"、"他這個檔案裡的code都縮成一行耶,助教是不是在整我。" 所以我覺得在實務面上光是要讓他們適應不同的開發環境的問題本身就是一個很大的難題 了。我有做過實驗,在統一的開發環境下導入某個品質管理系統軟體,只要按照PPT說明 100%就能成功執行,可是一個班上能自行參照PPT及講者講解完成的大約只有1/4~1/3的人 而已,有些同學甚至連如何顯示隱藏檔名都不知道、沒了Eclipse就不會寫java、不會基礎 cmd指令及語法,也不懂得如何看cmd的錯誤訊息等等。 綜合以上總總,我是覺得不太適合在學校弄這塊。 ※ 編輯: virnux (61.227.120.26 臺灣), 09/29/2021 06:27:51

09/29 05:35, 2年前 , 22F
比如被第二位同學改動少的,第一位同學分數也
09/29 05:35, 22F

09/29 05:35, 2年前 , 23F
09/29 05:35, 23F

09/29 09:01, 2年前 , 24F
業界也是這樣 這一個寫出來的就是大神
09/29 09:01, 24F

09/29 09:02, 2年前 , 25F
垃圾人才去維護 有用的npi
09/29 09:02, 25F

09/30 02:28, 2年前 , 26F
就我在美國看他們教Programming 入門是
09/30 02:28, 26F

09/30 02:29, 2年前 , 27F
這樣。一堂課200人。20個助教。一個助教
09/30 02:29, 27F

09/30 02:30, 2年前 , 28F
帶10個。除了老師上課還會有助教帶lab。
09/30 02:30, 28F

09/30 02:30, 2年前 , 29F
作業也是助教一行一行改。作業要拿滿分
09/30 02:30, 29F

09/30 02:31, 2年前 , 30F
不是跑出來結果對就好。每一行的sytle都
09/30 02:31, 30F

09/30 02:31, 2年前 , 31F
要合理。物件導向的設計都要合理。不然
09/30 02:31, 31F

09/30 02:32, 2年前 , 32F
就是一分一分扣。從基礎課就打好程式不
09/30 02:32, 32F

09/30 02:32, 2年前 , 33F
不是跑得出結果就是好程式的概念,服務
09/30 02:32, 33F

09/30 02:33, 2年前 , 34F
是共同開發的。確保自己的code別人看的
09/30 02:33, 34F

09/30 02:33, 2年前 , 35F
懂也是評分標準。剛忘了講docstring,
09/30 02:33, 35F

09/30 02:34, 2年前 , 36F
comment都列入計分。再者只有在這些入
09/30 02:34, 36F

09/30 02:34, 2年前 , 37F
門課取得高分的同學未來拿的到CS主修。
09/30 02:34, 37F

09/30 02:35, 2年前 , 38F
講穿了就是教育資源。Top10 CS的學校這
09/30 02:35, 38F

09/30 02:35, 2年前 , 39F
樣教學生。後端結果來看,每年就業博覽
09/30 02:35, 39F

09/30 02:36, 2年前 , 40F
會參加的廠商就是比排名50以後的學校多
09/30 02:36, 40F

09/30 02:36, 2年前 , 41F
好幾倍。台灣要推軟體業,就要從根開始
09/30 02:36, 41F
感謝分享 長見識了~ 在台灣是這樣的: 學生要的是分數,把學生分數評的偏低老師的教學評量大概也不好看, 作業東抄西抄老師也不太管,管了自己的教學評量也難看。 再來,光物件導向這東西學個兩年都不嫌少,偏偏這東西又沒有標準答案,每個程式人對 物件的劃分都有自己的理解。所以這東西在台灣要考只能考背法條式的,學生看到又臭又 長還要背,十之八九都把這些東西當空話。 不過我認同在基礎課就灌輸學生不是跑得出結果就是好程式的觀念非常重要,可惜的是我 們偉大的委員們為了在教學上可以看到立竿見影的成果,並不重視這些開發的觀念。他們 培育出來的種子老師大多是只會語法的資訊老師,再加以各種中文教科書的作業或習題大 都是一翻兩瞪眼型的 "試完成輸入ooo後輸出xxx的程式" 結果取向題目。所以這些委員、 資訊老師、學生看到的和要的都是"結果"而已,開發過程自然就沒人重視。 ※ 編輯: virnux (61.227.121.199 臺灣), 09/30/2021 20:51:40

10/01 02:03, 2年前 , 42F
再爆一掛,在美國抄作業很容易死。
10/01 02:03, 42F

10/01 02:04, 2年前 , 43F
都念CS了,學校有算法去找出作業相似
10/01 02:04, 43F

10/01 02:04, 2年前 , 44F
度。抄作業被發現就準備退學。
10/01 02:04, 44F
文章代碼(AID): #1XKrkdGZ (Gossiping)
文章代碼(AID): #1XKrkdGZ (Gossiping)