むきぶつ - SoTA-
【閒聊】為什麼我不支持用 Python 教資工系的程式設計
掰噗~
哪一位聰明的人來回答一下吧?
sudo rm -rf /
我也反對,沒有碰到記憶體操作,以後會吃很多虧。
むきぶつ - SoTA-
背景故事是,敝校(NTU, not CMU)明年的計算機程式設計的授課教授要換人,然後新的授課教授表示不想再用C教學,最後決定只要系上沒強迫一定要用C的話就要改用Python
sudo rm -rf /
不要以為都不會寫到底層。光gc的問題未來出社會就夠搞你了
むきぶつ - SoTA-
我有參與其中一部份的討論(on Facebook),正好最近在 CMU 的 Introduction to Computer System 課程裡掙扎,上來寫一下為什麼我真的非常不支持這件事
むきぶつ - SoTA-
如果要總結一個最簡單的理由的話,那就是Python 太簡單了
維斯坦茲
我覺得用哪種語言教其實沒差
重點是概念要弄懂
而且指標也不是C專有的
むきぶつ - SoTA-
維斯坦茲 : 我不反對用C以外的程式語言,但 Python 我真的不是很能接受
欸個🧊平常心雞蛋冰
覺得差不多耶
本來系上的計算機程式設計也沒講到多底層的東西
むきぶつ - SoTA-
從比較 high-level 的角度來看,程式設計的本質不會受到使用的程式語言的影響;你會了一個語言,理論上就要能夠很快上手其他語言;如果你沒辦法做到這件事,那通常不是語言的問題,是人的問題(當然也有例外啦,e.g. 學一個 functional programming language)
むきぶつ - SoTA-
我不否認計算機程式設計這門課教的東西其實不算深入,至少就我所知,差不多到遞迴的基礎應用後就沒有什麼太重要的東西了
むきぶつ - SoTA-
但我仍然覺得應該選一個相對底層的語言(e.g. C)的原因是,這些語言通常會更直接地反映在你的電腦裡這些指令是怎麼被執行的,而 Python 則是試著幫你把那些大多數人覺得繁瑣的過程都包裝起來,並且有著另外一套跟 C 不相同的思維邏輯
むきぶつ - SoTA-
不可否認的是,很多人在離開學校之後就不會再寫C了(包括我),而是轉投那些寫起來更快更方便,可以簡單地做到不同事情的語言,像 Python 或 Javascript;沒有人會再認真去檢查陣列長度,檢查變數大小與型態轉換,檢查記憶體有沒有好好 free 掉
むきぶつ - SoTA-
但我覺得這並不代表我們作為資工系的學生,腦中可以沒有這些概念;如果我們總是依賴別人幫我們處理好這些底層的細節,十年二十年後這些「別人」又會是誰?我們,至少當中的一部份人,難道不應該就是來幫人解決這些問題的「別人」嗎?
むきぶつ - SoTA-
如果今天我們都能夠肯認像 System Programming 或 Operating System 是系上的必修,難道這不代表連我們自己都認為我們之中的某些人就是該處理這些事情的人嗎?
むきぶつ - SoTA-
與其讓學生先學一個什麼都處理好的語言,回頭再在其他課程上踩坑,我寧可讓大家在一開始就老老實實把這些坑都踩了,之後再意識到其他語言有多方便,畢業之後又跑回來討論是不是該換個語言教程式設計了
むきぶつ - SoTA-
我不覺得我們應該預設每個人都是理想中的好學生,會在課程之外額外學習他們應該要學會的東西;儘管有些人會覺得「學生學得好或不好是他們自己的事」,但如果我們都能夠預見這件事可能發生了,又為什麼不直接預防呢?(至少,我不覺得學會C有多麼糟糕啊?)
むきぶつ - SoTA-
以上,大概說一下我的見解,歡迎大家來吵架討論
sudo rm -rf /
我是覺得,學校的課程應該要考量到所有的情況才對,那個教授我真的覺得不妥。
NaN
NCTU CS 路過,以一個當時完全不會寫程式的新手而言,我自己是覺得第一個語言就學 C 蠻打擊人的,而且同時需要理解的東西太多最後也是不求甚解,我大一的那些基礎知識幾乎都是懵懵懂懂低空飛過,後來學到東西多了比較有感覺之後才把這塊慢慢補上去。

就像數學也不會一來就先教你證明1+1=2一樣,而是先教你怎麼用,證明那些都是更後面有使用有感覺才能看得懂的東西?(好吧這例子好像有點爛
NaN
畢業前還是學一下 C/C++ 當然是好的,但我覺得非常不適合入門
むきぶつ - SoTA-
NaN : 我承認我一直到了修完這門課很久之後我才弄懂關於C的某些東西(可能是在 Architecture 相關的課程裡),但我覺得至少要先懵懵懂懂飛過,將來才有能夠真的好好把它們補上去的可能性
銀の葱
先說上面太長我沒看
但我以前也覺得python沒pointer太簡單不適合CS major的學生
但我現在反而覺得跟其他千百種學問比起來 程式語言真的是相對很容易學習的了啦 不管是c or python 所以也覺得教什麼都好 反正會學習的學生就是會學習 會混的還是會混

system programming and os 我則是覺得全部都應該回歸選修課啦 理想的大學應該是零必修
sudo rm -rf /
NaN : 我不覺得,論語法C沒有多難學。你看K&R 只有幾百頁。你講的很多東西都是背後的計算機原理。你不學c先學其他程式語言。你到時候去學那些背後知識你還是要重新學C
むきぶつ - SoTA-
我也承認學C對於初學者來講可能是非常挫折的事情(我國中的時候第一個寫的語言就是C,所以我可以理解),但我認為這門課原本的授課教授講的就已經很明確了:「你應該每週老老實實花個10~20小時練習寫程式,一個學期過後你自然就能夠學會這件事」
sudo rm -rf /
我覺得反而是一堆沒屁用的通識教育讓學這些的東西時間變少。
NaN
むきぶつ - SoTA- : 這我倒是持相反意見欸,應該說你在寫 code 這條路上走得夠久遲早都會需要學會這些東西,像我也會有一些非本科系畢業的同事,他們不見得就真的完全不會這種東西,當然是會撞過牆才學,但我還是覺得有動機有明確目標的學習才是最有效率的。

一開始就這麼教不是不行,但我自己是覺得對我來說不是最好的方式。
むきぶつ - SoTA-
銀の葱 : 你這個是更 high-level 的思維 xD 如果高等教育真的可以做到這樣的話,我也覺得用什麼語言都無所謂
NaN
sudo rm -rf / : 但其實計概只是資工未來所有課都摸一點的入門啊,你有念完四年那些東西一定都會有門課深入走一次,我自己也是後面兩年才真的懂當初大一在學什麼,那何必一開始就找個難入門的東西來呢XD
銀の葱
對啊我的思維其實就是:
真心想學習的人 就算沒先修c 也會在修system programming的同時 硬是把c也學起來
銀の葱
但是我就放棄了那些無法或是不願意投注自己絕大多數時間在學習上的人了
NaN
銀の葱 : 同感XD
真的有心走這條路的人最後都會學起來XD
むきぶつ - SoTA-
銀の葱 : 對,然後我的觀點就是立基在你的想法短時間內不會發生,並且希望多一點點機會逼著那些學習動機沒有那麼強的人學習 xD 畢竟現實中轉系的人終究還是少數,大多數人仍然是懵懵懂懂地讀完畢業了
企鵝
不是啊 一堆人都是莫名奇妙走這條的 以為每個人都把這些當學習目標喔= =
NaN
むきぶつ - SoTA- : 為什麼我覺得你期望的結果反而應該是反過來支持 python?
讓他們大一先看不出來這個系的深淺,等讀到大三大四想轉系也來不及了剛好啊
むきぶつ - SoTA-
簡單說,如果我們希望在課程設計上能有更大的彈性,那我們要在課程選擇上先提供足夠的彈性,讓那些做了自己不喜歡的選擇的人能有回頭的機會
銀の葱
同意你們的說法
我也同意我的想法是highly biased的 因為我身邊或許有太多這種“硬學”的成功案例
當然也有些失敗的啦...
むきぶつ - SoTA-
銀の葱 : 你自己應該就是 bias 吧,「在這些課裡我學不到我不會的東西」
むきぶつ - SoTA-
NaN : koxx7122: 我覺得是順序問題 xD 要先讓他們能夠選擇自己想做什麼,再來討論要不要修改現有的課程規劃
銀の葱
不是 其實我就是那個先修computer architecture再修operating system
修課順序亂七八糟的人XDD
sudo rm -rf /
我覺得教育要考量到通解,大部分人應該都是搞不清楚狀況。所以應該要選擇讓他們可以學到最紮實的作法。
銀の葱
「哇這個課可以學到好多東西 哇修這個課前需要會的東西我也都不知道 只好趕快學了」這種感覺吧
むきぶつ - SoTA-
銀の葱 : 但你還是學起來了,而且學得比我好 lol
不過畢竟不是每個人都像你一樣,甚至不是每個人都像我或這串裡的其他人一樣,很多人還是需要一些引導跟強制的
sudo rm -rf /
另外大家抱怨這個有個原因是上課時數不夠。我真的覺得一堆沒有意義的必修要拿掉。 普物普化 blabla的那些上課時數拿來強化會好。
企鵝
企鵝
通解那部分
企鵝
話說改了SP不就GGㄌ OS好像沒差
銀の葱
むきぶつ - SoTA- : true. 所以我才會覺得我都做得到 別人也應該做得到 做不到的話就加倍努力
但我也知道這是一廂情願 因為就像 rm說的垃圾課太多了 大家的時間都被浪費掉
むきぶつ - SoTA-
垃圾課太多這件事我不否認啦,不過另外一個角度是每門課的 loading 可能也都太輕了,導致大家不會真的很扎實地學到某些他們應該學到的知識
當然這跟畢業學分數的要求也有掛鉤,更像是雞生蛋蛋生雞的問題吧
むきぶつ - SoTA-
這串的某部份結論其實就是大家一直希望要改革的事情啊 xD 降低畢業學分數、加強課程 loading、減少必修增加選修
むきぶつ - SoTA-
不過如果這些事短期內都不會發生的話,我還是希望先不要用 Python 教程式設計啦
銀の葱
可是你想 假設一下啦 有人邊修程式語言邊修system programming
那他可能一不小心python c sp就都會了 買二送一耶
銀の葱
然後下學期再修個理論性的課 剛好又能用python快速的做一些prototyping
むきぶつ - SoTA-
銀の葱 : 我覺得只有兩個可能,一個是他已經學過至少其中一個語言,所以他這兩門課都順利修完,而且兩個語言都會了
另外一個是他兩門課都爆炸,然後什麼都沒學會
NaN
むきぶつ - SoTA- : 現實是學生很難在對整個系沒有足夠知識的情況下做出選擇吧?
降低入門難度我覺得是個合理讓人可以感受會學到什麼並驗證他想不想學的做法,他想學後面自然會隨著四年課程再去紮實。

我自己的經驗是我大一就囫圇吞棗了一堆我自己大三深入了才慢慢理解的知識,後面仔細想想會覺得大一那段時間有更好的事情可以做,例如先理解寫程式可以達成的功能跟體驗那個實際做出東西的過程,是不是我真的想投入去做的事,而不是聽一堆我兩年後才會理解的底層的東西,卻對寫程式具體的感覺跟會產出什麼還是缺乏概念。
銀の葱
但如果教c
結果也可能是兩個都修完都順利學會
或是放棄 什麼都沒學到

然後其他時候自己學會python

好像沒有差很多?
むきぶつ - SoTA-
NaN : 所以我覺得是順序問題啊,要先讓學生真的能夠做出選擇,才應該去討論我們是不是應該在課程設計上讓他們更容易意識到自己的選擇是否合適
むきぶつ - SoTA-
現實就是絕大多數人並不真的會離開這個系,也沒辦法離開這個系
NaN
むきぶつ - SoTA- : 好吧那問題可能就在我覺得低門檻是個合理的手段來達成他,你不覺得囉XD
NaN
むきぶつ - SoTA- : 我們系走的人還蠻多的其實,四年從250剩下190吧,畢業後也有人就沒走CS去跟隨自己的興趣,也沒有這麼絕對吧(?
むきぶつ - SoTA-
NaN : 我的認知是即便先降低入門難度讓學生感受並驗證這個系是否合適,大多數學生也沒辦法離開這個系,因為我們對於改變主修這件事的門檻太高了(例如,通常你要先在原本的系拿到好成績,但你既然都覺得這個系不適合你了,你又怎麼可能拿到好成績?),所以我們應該先試著降低這個改變的門檻,再去討論是不是要調整課程規劃
むきぶつ - SoTA-
好,妳回答到我想要說的事情了,但我留言已經發出去了
銀の葱
NaN: 但是我的感覺是 c 並沒有比 python 困難很多吧?就算我退五十步 假設c比python困難很多很多 但是c跟後面會遇到的比起來還是小菜一碟..
むきぶつ - SoTA-
銀の葱 : 這個爭執好像太假設性了 xD 感覺繼續討論會變得不知道在討論什麼
銀の葱
對 太發散
NaN
むきぶつ - SoTA- : 呃……我沒跟上為什麼不能執行?
如果感受是否合適本身就是改善這整個制度的一環的話?
先改這個我並沒有看到什麼壞處啊,至少我剛剛的結論還是不會因為第一個學期使用的程式語言,導致你完整讀完四年後獲得的能力不同吧?
NaN
c 跟 python 差蠻多的吧,至少我覺得XD
一樣的時間你能獲得的結果也差很多,前者新手的時間可能都卡在跟目標功能無關的記憶體管理之類的地方,後者新手也可以專注在呈現目標功能。
むきぶつ - SoTA-
NaN : 感受是否合適確實是改善制度的一部份,我覺得先改這個的問題是,即便改了,發現自己不感興趣的學生可能也不太容易能離開這個系;而我的認知是,對於那些不感興趣,但又沒辦法只能繼續讀資工系的學生來說,把比較底層一點的語言當作第一個學期使用的程式語言,可以某種程度上強制讓他們學會某些東西,而不會像 銀の葱 說的直接放生了那些學習意願相對低的人
NaN
我還是沒跟上這個邏輯,一開始就把門檻拉高反而才是放棄那些學習意願低的人吧?
就跟你考題出太難結果PR 0到60的人都只拿得到0分一樣沒有鑒別度了啊。
一開始門檻低但誰都跟得上,而且也不影響最終四年後得到的完整訓練,是個合理的做法啊
むきぶつ - SoTA-
NaN : 妳的舉例跟我的論述不同的點在於,門檻低不一定不會影響是否在這四年裡得到完整的訓練 xD
NaN
emmm 那好吧,可能我們學校課程設計不一樣吧,我要退場了XD
むきぶつ - SoTA-
NaN : 同時我的觀點是把門檻拉高能夠某程度上逼那些學習意願低的人學會他們不一定真的想學,但他們在這個專業裡所需要的知識,畢竟他們跑不掉
NaN
我覺得這個假設又太看得起人性了XD
真的學不起來的人就會開始考古題或找人抄作業了…
むきぶつ - SoTA-
NaN : 補充一下,我們的計程是全部上機考,而且每年都會更新題目,所以沒有考古題或抄作業的問題
むきぶつ - SoTA-
我一直忘了提這件事 xD
銀の葱
我覺得 むきぶつ - SoTA- : 的換句話說就是
趁他們還來的及逃跑的時候先讓他們感受到接下來四年的強度比較好
而不是先教python溫水煮青蛙
因為這樣學生大二大三才開始想要跳船就需要付出相對昂貴的代價?
むきぶつ - SoTA-
銀の葱 : 對 xD 可以這麼說
NaN
むきぶつ - SoTA- : 喔那你們這方面比我嚴……或者我太老了當年還沒開始改革XD
銀の葱
完全100%同意按照台灣國中高中這一套出來的學生 一定是整本背下來
むきぶつ - SoTA-
突然覺得全上機考這件事真的是完全打中台灣學生的學習痛點呢(
NaN
但剛剛又有另一個前提是無法跳船嘛……溫水煮青蛙至少青蛙最終都可以煮四年不會第一年就21回家(?
むきぶつ - SoTA-
NaN : 煮四年他們是還在鍋裡沒錯,但都死掉了
NaN
むきぶつ - SoTA- : 真希望我當年也有全上機考
むきぶつ - SoTA-
NaN : 這件事還可以延伸討論的另外一件事是,台灣絕大多數的學校對於 academic integrity 的重視度都偏低,所以你可以很容易在網路上找到課程/考試的解答,並且大多數人都會很理所當然地使用他們 xD
NaN
因為從小到大的模式就是這樣的啊,凡事一定有解,一個解不夠就背一本www
銀の葱
台灣最重視學術倫理好嗎 那可是畢業條件呢!
沙威瑪。存在感低下
看完你們說的.... 我覺得只會 nodeJS 、 C# 、 Python的我可以去撞豆腐自sa了
むきぶつ - SoTA-
沙威瑪。存在感低下 : 如果你學得夠精的話,學什麼語言都一樣,so that should be fine xD
銀の葱
我覺得沒什麼不好啊 需要做什麼事就學什麼工具而已
極端來講做研究甚至可以不寫任何程式
做工程師也只要會寫shell script
NaN
shell script這麼博大精深怎麼可以用只要
銀の葱
因為用shell script就能做到所有事情所以說只要XD
沙威瑪。存在感低下
shell script 超棒der(?
NaN
喔原來是這個只要
夜想/少年ウィンド
我覺得要先解決高中選科系,沒興趣卻選進資工的問題
むきぶつ - SoTA-
夜想/少年ウィンド : 這是整個體系的問題,所以我們要構造改革
sean robot/蘿蔔
C不難啦,高職的時候兩門課分別上機vb和c,當時都是教科書照打,有時改個題目當練習
大學有java和c(vhdl和plc這種離題的先不算ww),結果雖然有像是資料結構之類的課,可是真的開始操作記憶體位址也是出來好幾年以後
java對我來說很難,c井也是,因為太軟體抽象...c就很簡單,規定填8bit那不要填錯就沒問題了,跟玩樂高一樣(沒有填一包物件這種事情)。但是因為變數少又不求效能的時候,多宣告變數不會產生什麼成本,所以才會沒學操作記憶體位址
當然有時候會覺得寫高階很輕鬆,不過通常只是享受到預先包好的功能所以覺得輕鬆xd
p.s.:後來跟朋友聊天才知道他們說指標就是我說記憶體位址可以用用詞習慣來篩是不是資工背景
p.s.:有段時間要寫簡單有gui可以手機電腦都通的我寫js,結果被弱型別搞死ww
sean robot/蘿蔔
我記得大學有段時間跟教授講8051改用arduino,教授講說這個太高階了這門課要學基礎,後來發現我寫arduino的方法跟寫arduino的人不太一樣xd 我只把他當作avr晶片的編譯器在用,難怪會被這樣講
桑緹雅-我已再經不起離別
歪樓
c我高中學過 有學沒懂
python我這禮拜聽 也是有聽沒有懂
哈哈哈哈我沒有學程式語言的天份XDDDD
(倒是一直注意到教python的講師一開始就寫讓一堆貓貓狗狗在螢幕上散步的程式,貓貓狗狗很可愛,講師很會 是我唯一的收穫哈哈哈哈)
むきぶつ - SoTA-
桑緹雅-我已再經不起離別 : 其實學程式語言是一個相對來說滿不需要天份的事情 xD(比起學習數學或物理來說),絕大多數人都可以透過一定程度的練習來精通基本操作(有些觀念會需要更多練習,但它們應該也不算是無法學會的,e.g. 遞迴);這有點像學游泳或騎腳踏車,一個人沒辦法用看的或聽的就學會程式語言,至少如果是第一次學寫程式的話不太可能;終究還是要自己在電腦上寫一些東西才可能真正學起來
如果妳練習了但還是發現自己不太會寫,唯一的可能是「妳練習得還不夠多」xD
ノワールみたいなPちゃん
學生時期學過VB再學C的表示:我覺得我比較看的懂C在做什麼
介甫★淡水紅豆湯圓獵人
從Labview 換到C++
載入新的回覆