2019年3月25日 星期一

遠距教學隔空抓藥 ── 陪女兒寫作業


自寶貝女兒上資管系以來,每隔一兩週都有程式作業。因為是做老爸的本行,上學期每逢週末都坐鎮家中備詢,好久沒出門,悶得慌。這學期開學才兩週,作業又來啦!老爸早已安排南下,於是交待寶貝及早進行,免得沒人可問。可是大一學生啊!正是享受人生的年紀,跑社團忙外務,無論如何,作業都是拖到面對死亡線(deadline)才開始。老爸週六清早睡醒準備出門,發現女兒傳來的訊息:「55555555….(嗚嗚嗚嗚嗚),這次作業好難,只有六分(滿分六十)」。


無奈啦,只好帶上筆電,路上慢慢看,下車前給點提示和範例,教她先自己努力,晚上進旅館再說。其實晚上本來準備夜拍,難得南部下大雨,乃是上天安排老父救女來著。剛入住就打給小傢伙,結果:「55555555,還是只有六分,而且程式輸出根本不對,只是剛好矇到而已」。


先說明一下作業型態。程式題有一份很長的文件,說明情境並規定輸入輸出格式、測試資料有多少筆、各佔多少分之類。學生用 C++ 語言寫好程式,上傳到學校網站,通常幾秒鐘內會得到回覆。剛開始多半是「編譯錯誤」或「執行錯誤」,表示語法或邏輯有問題;慢慢變成「答案錯誤」,算是漸入佳境;最後得到「Accepted」,就是通過,得分啦!然而系統只評分數,並不會指出錯誤在那裡。


上學期剛開始,小傢伙都是直接寫好程式,馬上丟進評分系統測試,根據傳回的錯誤型態進行修正。題目簡單,程式短小的時候,這樣做還可以;期中以後,程式愈寫愈長,也愈來愈複雜,我就告訴她不行,連「編譯錯誤」在那裡,都要反覆推敲,太沒有效率啦!建議她找一套開發工具,行話所謂 IDE,至少能快速走過「編譯錯誤」和「執行錯誤」階段,省很多時間。可這小妮子,不知自恃聰明還是懶得嘗新,始終沒放在心上,居然一學期也這麼過了。儘管期末作業真的頗為吃力,被老爸嚴重警告,卻依然不為所動。

下學期一開張,就有一定複雜度。老師給了兩週時間,這傢伙依然拖到截止前三、四天,才心不甘情不願開始動手。結果光是「編譯錯誤」和「執行錯誤」,就搞了兩天,包括老爸南下之前,熬到大半夜。


我說這怎麼成,兩三天工夫只排除語法邏輯錯誤,輸出完全不對,其實是零分,表示有肉眼無法察覺的重大瑕疵。無論如何要教她學會如何操作開發工具,否則別說這次陣亡,以後只會愈來愈慘。老爸比較趁手的是微軟的 Visual Studio,可沒想到官網下載的 VS2017,簡直肥得不可思議,一兩小時居然裝不起來。教小妮子問學長同學,看人家都用什麼,結果下載一套 Dev C++,至少很快可以上手。

不過這玩意兒老爸就不太熟啦。雖然編譯除錯工具大同小異,可慣用的 hot key 之類卻不大一樣,只好一邊解釋用法,一邊教她自己去找出來。接著父女倆南北兩地同步追蹤修正,怪的是,老爸這邊已經可以吐出結果,小傢伙卻連測試資料都讀不到(註)。雖說老爸用的是 VS ,但基本的 C++ 應該沒啥差別才是。在這關節上卡了近一個鐘頭,惱得老爸差點爆粗口。

註:學生程式只須經由 console (cin / cout) 進行輸入輸出,學校評分系統則以 pipeline 接續。在家抓蟲必須自行建立這個 pipeline,通常以 file stream 取代 cin,也就是由文字檔讀取測資的意思。


所謂測資,是由題本抄下的範例,存成文字檔,當作程式的輸入。小傢伙雖然寄了原始碼,卻沒把測資一併寄來。好在沒幾行,老爸自行複製貼上存了檔,結果竟然南轅北轍。搞半天不得要領,忽然靈機一動,把我存檔的測資寄給女兒,讓她試試,不料一試就靈,差點吐血。原來我老人家用骨灰級編輯軟體,存的文字檔是 ANSI 編碼,也就是 ASCII;小傢伙用 Windows 10 內建記事本,預設存檔是 UNICODE 編碼。猜猜 C++ 這種侏儸紀語言,吃的是什麼編碼?倘若用 C# 或 Java 之類,就不會在文字編碼上頭鬼打牆了。

接下來一段段帶小妮子抓蟲,慢慢修正,終於範例測資順利通過。雖然評分系統依然只給六分,至少是實在分數,而非湊巧矇對。此刻已然午夜,透早出門南下的老爸漸漸不支,吩咐小妮子接下來要注意什麼,有那些手段可用,然後要靠自己了。次日也是行程滿檔,估計要到傍晚搭車北上,才有時間回頭看。


清晨早起,發現一條小傢伙的訊息,凌晨兩點發的。儘管開頭依然「55555555」,不過進步到 15 分。回訊誇獎幾句,跟她說不妨和同學討論;人人都有盲點,一起分享交流,說不定有所突破。中午再收到簡訊,有 33 分了!合作果然帶來進步。不過這階段又卡了很久,傍晚才再傳捷報, 57 分!只差三分。原來下午助教發通告提示,有個直覺不太可能的狀況,居然是佔分極重的邊界條件。把這狀況考慮進來,就幾乎過關了。晚上小妮子有個聚會,要快樂一整夜,看樣子沒時間搶滿分。老爸答應在車上看看,後來應該也看出端倪,然而死亡線已到,Game Over 啦。

跟小妮子說,雖然沒拿滿分,但重要的一是學會使用開發除錯工具,日後應付複雜題目,會更加游刃有餘;二是懂得團隊合作,互通有無,將來真正在這行吃飯,可能比個人能力更有助益。而且,雖然文字編碼很鳥很無聊,至少瞭解數位世界詭譎,歷史包袱無所不在,一不小心就成為絆腳石。上課時老師講古,就不要嫌人家老骨董啦。



 




《以下留言與回覆,來自 聯網

01.  behappy  2019/03/25 07:52

有老爸幫忙真好。我每次有電腦方面問題,問我家吃軟體飯的女兒,回答都是兇巴巴。

格主於 2019/03/25 12:15回覆

大概上班一堆問題,回家還要面對,心情不太好吧!自己女兒沒辦法,看到她心就化了。得意


02.  chia chia  2019/03/25 09:37

父女是同行多有共同話題,我家爸爸和女兒也是性質行業 得意

格主於 2019/03/25 12:17回覆

現在還能教她,再過十幾廿年老爸落伍,得換她來教我了。大笑


03.  柔怡  2019/03/28 00:58

雖然文中有關程式的內容我一概不懂,但是"劇情"實在好有趣,有老爸指點功課,小妮子真幸運。那幾個55555......年輕世代的語言實在太好玩啦!

憶起當年求學時的慘痛經驗,電腦老師上課講的話彷彿外星語,我完全聽不懂,大一下被活當,面對補考真是萬念俱灰,只好死馬當活馬醫,背兩個程式應付,果然~不是我背的題目,只好硬著頭皮寫滿一整張文不對題的答案,因為聽說老師離職了,補考的試卷由別的老師代改(但我現在回想,應該還是由他改卷子才對,整學期結算成績後才會走人),於是斗膽在最後加上"改卷的老師對不起,因為我們老師都沒教這些,只好背些答案來寫,懇請老師高抬貴手,讓我過關..."。由於我們老師是出名"不會教"的老師,也真的沒教過試卷上那些內容,或許哀兵策略奏效,改卷老師放我一馬。我有自知之明,大二趕緊轉系~大笑


格主於 2019/03/29 18:49回覆

哈哈!學生時代為求過關各顯神通,什麼把戲都有。

記得有一門課要寫組合語言,學期作業居然不收電子檔,要求把程式印出來。當年的報表紙印了幾十頁,我猜老師大概想用風扇吹。

有位同學跑來求救,說期末考必當,得靠作業補救,可是寫不出來啊!問我能不能替他寫一份交差?喂!那是組合語言耶!寫起來多累你知道嗎?(肯定不知道)

我說多寫一份沒辦法,可是我賭老師不會看,所以把我自個兒的程式前後抖亂,照樣印出幾十頁給他交差。結果不但過關,分數還不低,顯然風扇吹不動的贏大笑



04.  Charles Lin   2019/03/31 14:37

父女情深,小妮子一定羨煞她同學,有老爸幫忙隔空抓藥。

格主於 2019/04/01 08:57回覆

做老爸的只希望她順利畢業,以後甭操心就好了。大笑

沒有留言:

張貼留言