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