清華大學(xué)自動(dòng)化系 2020 C++ 大作業(yè)引熱議,網(wǎng)友:建議直接入職 BAT!
本文轉(zhuǎn)自雷鋒網(wǎng),如需轉(zhuǎn)載請(qǐng)至雷鋒網(wǎng)官網(wǎng)申請(qǐng)授權(quán)。
你以為上了大學(xué)就再也沒有作業(yè)的煩惱了嗎?
并不是。
近日,來自知乎網(wǎng)友的靈魂一問:“如何看待清華大學(xué)自動(dòng)化系 2020 年大一 c++大作業(yè)是寫一個(gè)功能更強(qiáng)大的雨課堂(雷課堂)?”在網(wǎng)上討論火熱。雷鋒網(wǎng)編輯也看了下這個(gè)作業(yè),表示連題目都沒看懂,學(xué)渣哭泣......
為什么要設(shè)計(jì)這樣一個(gè)作業(yè)?
首先,我們來看下這個(gè)作業(yè)設(shè)計(jì)的大背景。
受疫情影響,在線教育成為這段時(shí)間學(xué)生和家長(zhǎng)的常態(tài)。據(jù)教育部數(shù)據(jù),截至4月初,參加在線課程學(xué)習(xí)的學(xué)生達(dá) 11.8 億人次,參與在線教學(xué)教師 1600 萬人。
清華大學(xué)以“雨課堂”為主、騰訊會(huì)議和 ZOOM 等網(wǎng)絡(luò)會(huì)議軟件為輔,2019-2020 春季學(xué)期共實(shí)現(xiàn)了4422 門次課程的網(wǎng)絡(luò)教學(xué)。“雨課堂”以 Office 插件形式,實(shí)現(xiàn)一對(duì)多的 PPT 展示、在線答題、彈幕、隨機(jī)點(diǎn)名等師生互動(dòng)的交互式教學(xué),并可以匯總關(guān)鍵詞、懂/不懂、簽到、在線時(shí)長(zhǎng)、注意力集中程度、答題情況等群體和個(gè)體統(tǒng)計(jì)數(shù)據(jù)。但網(wǎng)絡(luò)會(huì)議軟件在多方語音互動(dòng)、快速屏幕/窗口共享切換等方面特色突出,但教學(xué)信息統(tǒng)計(jì)功能缺失。
因此,在本學(xué)期 C++ 課程開始前的系統(tǒng)測(cè)試中,有同學(xué)建議自主開發(fā)一款集合雨課堂和網(wǎng)絡(luò)會(huì)議優(yōu)點(diǎn)于一身的網(wǎng)絡(luò)教學(xué)軟件,經(jīng)討論,清華大學(xué)以“雷課堂” (Thunder Class)為題,設(shè)計(jì)了本學(xué)期的大作業(yè)。
堪稱史上最難作業(yè):清華大學(xué)自動(dòng)化系2020年c++大作業(yè)
那么,這個(gè)作業(yè)的主要內(nèi)容什么呢?
作業(yè)主要分為四個(gè)部分,即基本功能要求;系統(tǒng)設(shè)計(jì)要求;代碼與發(fā)布要求;報(bào)告要求四部分。
雷鋒網(wǎng)截取了部分作業(yè)要求,大家一起來康康為什么這個(gè)作業(yè)堪稱史上最難作業(yè)。
1. 基本功能要求(*代表教師用戶具有的功能)
1.1 用戶登陸:根據(jù)用戶名密碼登陸軟件,三次密碼輸入錯(cuò)誤自動(dòng)退出雷課堂軟件。根據(jù)賬號(hào)類型(教師/學(xué)生)不同自動(dòng)切換功能。必須包含一個(gè)賬戶名為 Admin,密碼為 Admin 的管理員賬號(hào),此賬號(hào)僅能用于管理教師和學(xué)生賬戶的增刪改。(不需考慮如何在增刪改用戶和密碼后通知該賬戶持有者。畢竟我們有微信)
1.2 語音設(shè)備選擇和切換:教師開始上課前/學(xué)生加入課堂前,應(yīng)可自主選擇語音輸入和播放設(shè)備;并可在課程持續(xù)期間隨時(shí)切換語音設(shè)備。
1.3 共享屏幕*:教師在上課過程中,可共享整個(gè)屏幕或某個(gè)窗口內(nèi)容給全體同學(xué)(包括但不限于PPT 和代碼編輯器);可隨時(shí)切換共享源、停止或再次開始共享屏幕。
1.4 語音直播*:開始上課時(shí),自動(dòng)開始語音采集,并實(shí)時(shí)的通過網(wǎng)絡(luò)傳送給所有已經(jīng)連接到本課堂的學(xué)生。
1.5 隨機(jī)語音提問*:教師可一鍵(單次鼠標(biāo)點(diǎn)擊或單次快捷鍵)在全體在線同學(xué)中隨機(jī)選擇一名。被選中的同學(xué)的麥克風(fēng)將被自動(dòng)打開,并發(fā)送給教師和其余全體同學(xué)。教師可再次一鍵結(jié)束此次語音提問。
1.6 在線發(fā)題*:教師可在上課過程中多次動(dòng)態(tài)編輯并向全體同學(xué)發(fā)送單選/多選題,并實(shí)時(shí)統(tǒng)計(jì)個(gè)選項(xiàng)選擇人數(shù)、選擇每個(gè)選項(xiàng)的同學(xué)名單、每位同學(xué)作答的耗時(shí)。教師亦可隨時(shí)中斷發(fā)題,但仍需統(tǒng)計(jì)上述信息
1.7 在線答題:學(xué)生在收到試題時(shí),應(yīng)彈出置頂窗口顯示題目和選項(xiàng),并開始計(jì)時(shí)。直到學(xué)生提交答案或教師中斷發(fā)題時(shí),才關(guān)閉窗口,并將答案和耗時(shí)反饋給教師。
1.8 學(xué)生簽到:進(jìn)入課堂時(shí)自動(dòng)簽到。而教師可收到何時(shí)學(xué)生簽到和退出課堂的信息。(多次簽到和退出均需記錄)
1.9 注意力:課堂持續(xù)期間,學(xué)生簽到后,“雷課堂軟件處于焦點(diǎn)窗口狀態(tài)的時(shí)長(zhǎng)”與學(xué)生在線時(shí)長(zhǎng)的百分比,將在下課時(shí)反饋給教師做記錄。
1.10 上課/下課*:上課時(shí),教師端開始隨時(shí)接收用戶登錄請(qǐng)求,并根據(jù)用戶名密碼自動(dòng)決定是否允許學(xué)生端連入。一旦允許連入,之后的語音、屏幕共享均、語音提問、在線答題信息均會(huì)傳送給該同學(xué)。教師下課時(shí),應(yīng)在接收了全體在線同學(xué)的注意力數(shù)據(jù)后再斷開與學(xué)生端的網(wǎng)絡(luò)連接,之后自動(dòng)生成全部課上統(tǒng)計(jì)信息,以文件形式存儲(chǔ)并在教師端界面上顯示。
1.11 進(jìn)入課堂/退出課堂:在輸入了教師端的IP 地址(或IP 和端口號(hào))后,連接到教師端,實(shí)現(xiàn)進(jìn)入課堂功能并開始網(wǎng)絡(luò)數(shù)據(jù)通信。如在30 秒內(nèi)不能連接到教師端,應(yīng)彈出提示。在主動(dòng)退出課堂或直接關(guān)閉了軟件時(shí),應(yīng)向教師端發(fā)送注意力數(shù)據(jù),再斷開與教師端的網(wǎng)絡(luò)連接。(不需考慮如何獲取教師端IP 和端口號(hào),畢竟我們有課程微信群)
1.12 麥克風(fēng)管制:除非收到教師語音提問,否則麥克風(fēng)時(shí)刻處于靜音狀態(tài)。
2. 系統(tǒng)設(shè)計(jì)要求
2.1 除程序主函數(shù)(廣義的主函數(shù),可能是WinMain 或其他)和必要的友元函數(shù)(要在報(bào)告和程序中額外說明每個(gè)友元函數(shù)的不可替代性:為什么一定要用友元才能實(shí)現(xiàn))外,不允許出現(xiàn)任何一個(gè)非類成員函數(shù)。
2.2 任何不改變對(duì)象狀態(tài)(不改寫自身對(duì)象數(shù)據(jù)成員值)的成員函數(shù)均需顯示標(biāo)注const。
2.3 全部類分為三大類:界面類(開發(fā)環(huán)境提供的、與圖形界面相關(guān)的類)、業(yè)務(wù)流程類(僅有一個(gè),用于和界面實(shí)現(xiàn)耦合)、核心類(其余全部類)。僅有界面類可以用開發(fā)環(huán)境自動(dòng)生成代碼框架。僅有業(yè)務(wù)流程類可以包含開發(fā)環(huán)境提供類的指針。核心類只允許使用C++11 支持的標(biāo)準(zhǔn)語法、STL、操作系統(tǒng)API。(此條為強(qiáng)烈建議,未實(shí)現(xiàn)界面類和核心類分離將嚴(yán)重影響成績(jī))
2.4 全部語音、屏幕共享、網(wǎng)絡(luò)傳輸?shù)刃枋褂貌僮飨到y(tǒng)API 的相關(guān)操作,均需封裝成類代碼,再被其他核心類使用。不允許其他核心類直接調(diào)用操作系統(tǒng)API。
2.5 除界面類外,任何第三方類庫(kù)的使用,只能處于源代碼級(jí)別,不可依賴lib/so/dylib 文件(靜態(tài)庫(kù)也不可以)和DLL 文件。全部第三方類庫(kù)需在報(bào)告和程序中著名來源和版權(quán)信息。
3. 代碼與發(fā)布要求
3.1 通過開發(fā)環(huán)境自動(dòng)生成的界面類代碼,全部數(shù)據(jù)成員和成員函數(shù)需在類聲明時(shí)加以注釋,函數(shù)體內(nèi)的必要步驟要加以注釋。
3.2 其他全部類代碼的數(shù)據(jù)成員和成員函數(shù)的聲明和實(shí)現(xiàn)均需加以注釋,成員函數(shù)的必要步驟要加以注釋。
3.3 其他代碼規(guī)范需遵循學(xué)堂發(fā)布的編碼規(guī)范要求。
3.4 發(fā)布的程序必須是可運(yùn)行于Win10/Mac os 10.14 操作系統(tǒng)下的32bit 或64bit的Release 版本:不依賴于具體開發(fā)環(huán)境的依賴庫(kù)、不依賴操作系統(tǒng)驅(qū)動(dòng)或功能模塊配置、僅僅軟件自身可執(zhí)行文件和必要的數(shù)據(jù)庫(kù)庫(kù)文件(如使用了數(shù)據(jù)庫(kù))。在不可避免的依賴數(shù)據(jù)庫(kù)驅(qū)動(dòng)時(shí),應(yīng)提供自動(dòng)化安裝包:運(yùn)行安裝包即可自動(dòng)安裝和配置數(shù)據(jù)庫(kù)驅(qū)動(dòng)、安裝軟件本身的可執(zhí)行文件和數(shù)據(jù)庫(kù)庫(kù)文件。特別地:只要可執(zhí)行文件和數(shù)據(jù)庫(kù)庫(kù)文件的相對(duì)路徑不變,數(shù)據(jù)庫(kù)驅(qū)動(dòng)、可執(zhí)行文件和數(shù)據(jù)庫(kù)庫(kù)文件安裝的絕對(duì)路徑不可影響軟件正常運(yùn)行。(Mac os 也僅可用C++編程,不可使用Object-C、Swift 或其他語言)
看完作業(yè)要求的雷鋒網(wǎng)編輯,我只想問:“這個(gè)作業(yè)是有可能完成的嗎”?
打開網(wǎng)友的評(píng)論發(fā)現(xiàn),我才發(fā)現(xiàn),不是我一個(gè)人.......
@ATP合成酶:不只是圖像,做直播需要實(shí)時(shí)采集,壓縮成 H264,然后再用 RTSP/RTMP 推流出去,光直播這一項(xiàng)難度就太大了。
@Reading:按照這個(gè)發(fā)展速度 10 后,人均院士。
@就是想換一個(gè)名字:震驚!清華軟院大四特獎(jiǎng)得主的編程水平還不如自動(dòng)化大一學(xué)生。[捂臉][捂臉][捂臉][捂臉]
@學(xué)渣不配擁有網(wǎng)名:哈哈哈救救孩子。
@木菜Kina2:還有C++寫跨平臺(tái)圖形界面……我已經(jīng)無法想象這個(gè)難度了…
@一個(gè)笨比:建議直接入職 BAT!
但總的來說,讓大家覺得難的點(diǎn)主要是兩個(gè):一是工作量極大,即便是程序員也需要兩年才能完成,二是難度系數(shù)極高。
最后,弱弱的吐槽一下,也就是清華大學(xué)敢出這個(gè)作業(yè),學(xué)生們也敢接招,換做我,估計(jì)就是直接退學(xué)了.......