《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 業(yè)界動(dòng)態(tài) > 為什么學(xué)計(jì)算機(jī)的學(xué)生應(yīng)該向開(kāi)源項(xiàng)目做貢獻(xiàn)?

為什么學(xué)計(jì)算機(jī)的學(xué)生應(yīng)該向開(kāi)源項(xiàng)目做貢獻(xiàn)?

2021-07-10
來(lái)源:CSDN
關(guān)鍵詞: 開(kāi)源 編程

編程是所有計(jì)算機(jī)科學(xué)、信息學(xué)、軟件工程和計(jì)算機(jī)工程專業(yè)的必修課。幾十年來(lái),這項(xiàng)技能成為了區(qū)分計(jì)算機(jī)專業(yè)的畢業(yè)生與其他學(xué)科的同齡人的關(guān)鍵。我認(rèn)為21世紀(jì),編程的熟練程度本身既不能代表市場(chǎng)對(duì)計(jì)算機(jī)畢業(yè)生的技術(shù)水平要求,也不能成為有分量的資格證書(shū)。因此,我建議應(yīng)該鼓勵(lì)計(jì)算機(jī)專業(yè)的學(xué)生通過(guò)課程活動(dòng)為開(kāi)源軟件項(xiàng)目貢獻(xiàn)代碼。

微信圖片_20210710162842.jpg

我在軟件工程課程中實(shí)踐這種方法已經(jīng)有15年了,向開(kāi)源項(xiàng)目貢獻(xiàn)代碼是必做的作業(yè)。本文中將根據(jù)個(gè)人的經(jīng)驗(yàn),說(shuō)明為什么向開(kāi)源項(xiàng)目貢獻(xiàn)代碼能夠體現(xiàn)出學(xué)生對(duì)編程技巧的掌握情況,學(xué)生可以從這些活動(dòng)中學(xué)到什么,如何將向開(kāi)源項(xiàng)目貢獻(xiàn)代碼嵌入到課程中,以及如何幫助學(xué)生完成這份作業(yè)。

  向開(kāi)源項(xiàng)目貢獻(xiàn)代碼是編程的新概念

  如今,編程只是軟件開(kāi)發(fā)人員必須掌握技能之一。出現(xiàn)這種情況的原因有兩個(gè):

  首先,編程實(shí)踐的發(fā)展遠(yuǎn)遠(yuǎn)超出了Fred Brooks于20世紀(jì)70年代推廣的首席程序員模型,系統(tǒng)的規(guī)模擴(kuò)大了幾個(gè)數(shù)量級(jí)、工具更加先進(jìn)、流程的自動(dòng)化也得到了普及,還有團(tuán)隊(duì)合作、工作流程以及管理的日益復(fù)雜化。

  其次,行業(yè)最佳實(shí)踐與大型成功的開(kāi)源軟件項(xiàng)目所遵循的實(shí)踐已經(jīng)趨同。各個(gè)企業(yè)都吸收并貢獻(xiàn)了許多開(kāi)源開(kāi)發(fā)實(shí)踐。因此,相應(yīng)的知識(shí)和技術(shù)力在志愿者項(xiàng)目與企業(yè)項(xiàng)目之間是通用的。

  因此,我們的教學(xué)必須從課程的教育實(shí)驗(yàn)室走向?qū)嶋H的組織環(huán)境。學(xué)生可以通過(guò)為開(kāi)源項(xiàng)目做貢獻(xiàn),在實(shí)踐中獲得了廣泛的技能、知識(shí)和經(jīng)驗(yàn),使他們成長(zhǎng)為全面發(fā)展的現(xiàn)代開(kāi)發(fā)人員,而不是好萊塢影片中的獨(dú)狼程序員。傳統(tǒng)的編程作業(yè)最難獲得的技能是以下社交與組織能力:

  熟悉背景:了解項(xiàng)目范圍、使命、合作開(kāi)發(fā)團(tuán)隊(duì)以及新的領(lǐng)導(dǎo)形式下實(shí)際的開(kāi)發(fā)工作狀況;

  與項(xiàng)目的全球及多元化社區(qū)互動(dòng);

  協(xié)商功能的請(qǐng)求、要求以及實(shí)現(xiàn)方法;

  處理溝通問(wèn)題,例如無(wú)人響應(yīng),這在志愿者運(yùn)營(yíng)的項(xiàng)目中很常見(jiàn);

  通過(guò)問(wèn)題分類和發(fā)布計(jì)劃等實(shí)踐,認(rèn)識(shí)作為產(chǎn)品的軟件;

  接收、討論和處理代碼審查意見(jiàn)。

  與技術(shù)相關(guān)的學(xué)習(xí)成果包括分析、評(píng)估、應(yīng)用和創(chuàng)建等,具體內(nèi)容如下:

  瀏覽項(xiàng)目的資產(chǎn),例如軟件代碼、議題、文檔和拉取請(qǐng)求;

  快速評(píng)估軟件系統(tǒng)或組件的產(chǎn)品和流程質(zhì)量,這在現(xiàn)代軟件的重用中經(jīng)常需要;

  配置、構(gòu)建、運(yùn)行和調(diào)試第三方代碼;

  設(shè)置和運(yùn)行包含不同軟件和硬件要求的軟件密集型系統(tǒng)。我開(kāi)設(shè)的課程中包含手機(jī)、汽車電子、應(yīng)用服務(wù)器、數(shù)據(jù)庫(kù)、容器、物聯(lián)網(wǎng)設(shè)備和嵌入式設(shè)備;

  選擇實(shí)際的貢獻(xiàn)目標(biāo)。(學(xué)生往往會(huì)在初期階段高估他們?yōu)轫?xiàng)目做貢獻(xiàn)的能力。)這是敏捷開(kāi)發(fā)沖刺中的一項(xiàng)關(guān)鍵活動(dòng);

  閱讀第三方代碼,找出需要添加的功能或修復(fù)的問(wèn)題;

  通過(guò)添加新功能或修復(fù)錯(cuò)誤來(lái)修改大型第三方系統(tǒng);

  編寫(xiě)測(cè)試來(lái)證明自己貢獻(xiàn)的代碼無(wú)論在當(dāng)下還是將來(lái)都能夠按預(yù)期工作;

  學(xué)習(xí)使用多種編程語(yǔ)言和工具開(kāi)發(fā)的軟件系統(tǒng)。學(xué)生經(jīng)常驚訝地發(fā)現(xiàn),掌握集成開(kāi)發(fā)環(huán)境 (IDE) 的知識(shí)遠(yuǎn)遠(yuǎn)不足以為項(xiàng)目做貢獻(xiàn);

  記錄自己的工作,一般都會(huì)使用聲明式標(biāo)記語(yǔ)言,例如 Markdown 或文檔生成器代碼注釋;

  遵循復(fù)雜的配置管理(版本控制)工作流程,例如處理問(wèn)題分支和重新提交代碼;

  通過(guò)預(yù)提交和持續(xù)集成的檢查和測(cè)試。

  從這些實(shí)踐中獲得的社交經(jīng)驗(yàn)和技術(shù)經(jīng)驗(yàn)都是現(xiàn)代辦公環(huán)境所必須的,這些超出了ACM/IEEE 提出的軟件工程課程大綱。同時(shí),課程的實(shí)踐也與ACM/IEEE課程大綱中的許多內(nèi)容息息相關(guān)。這主要包括:鍛煉個(gè)人技能,例如批判性判斷、有效溝通和認(rèn)識(shí)到自己的局限;培養(yǎng)自主學(xué)習(xí)的技能;了解解決軟件工程問(wèn)題的多個(gè)維度;使用適當(dāng)?shù)淖钚鹿ぞ撸唤F(xiàn)實(shí)世界的基礎(chǔ);并通過(guò)各種教學(xué)和學(xué)習(xí)方法推進(jìn)教育。

  在軟件工程課程中嵌入開(kāi)源開(kāi)發(fā)

  這門(mén)把“向開(kāi)源軟件做貢獻(xiàn)”作為必做作業(yè)的課程名為“實(shí)踐中的軟件工程”,是大三課程的一部分。(該課程在 2019 年獲得了管理學(xué)院的卓越教學(xué)獎(jiǎng)。)每年我們都會(huì)向20~50名雅典經(jīng)濟(jì)與商業(yè)大學(xué)管理科學(xué)與技術(shù)系軟件和數(shù)據(jù)分析技術(shù)專業(yè)的學(xué)生教授這門(mén)課程。這門(mén)課程也是該大學(xué)信息學(xué)系的推薦選修課。

  該課程在某種程度上顛覆了傳統(tǒng)的課堂教學(xué)方法,最后的成績(jī)完全由課程作業(yè)決定。向開(kāi)源軟件的貢獻(xiàn)度占總分的50%。學(xué)生可以單獨(dú)或結(jié)對(duì)完成作業(yè)。結(jié)對(duì)的目的是幫助沒(méi)有安全感的學(xué)生,但要求結(jié)對(duì)完成的工作量必須多于個(gè)人,而且貢獻(xiàn)必須來(lái)自個(gè)人的GitHub賬號(hào)。

  我們根據(jù)學(xué)生提供的在線開(kāi)源項(xiàng)目工作(代碼提交和交互)、他們的最終書(shū)面報(bào)告以及課堂演示來(lái)評(píng)估學(xué)生的表現(xiàn)。一共需要三場(chǎng)演講,分別在第 4 周(描述所選項(xiàng)目)、第 8 周(概述提議的貢獻(xiàn))和第 14 周(總結(jié)貢獻(xiàn)的實(shí)現(xiàn))。貢獻(xiàn)的代碼是否被接受并不會(huì)作為作業(yè)的評(píng)判標(biāo)準(zhǔn),但會(huì)得到積極的評(píng)估。其他評(píng)估要素包括,學(xué)生對(duì)自己選擇的項(xiàng)目的理解和文檔、貢獻(xiàn)的廣度、實(shí)現(xiàn)的質(zhì)量、代碼與項(xiàng)目的集成、測(cè)試實(shí)施、與項(xiàng)目開(kāi)發(fā)團(tuán)隊(duì)的合作、口頭陳述、書(shū)面報(bào)告的質(zhì)量,以及他們?cè)诎姹究刂?、代碼審查、議題管理和文檔等活動(dòng)中使用的工具。

  理論上,他們可以作弊(通過(guò)復(fù)制項(xiàng)目分支的貢獻(xiàn)等),這可能會(huì)成為一個(gè)問(wèn)題,但我們要求學(xué)生在課堂上展示他們的成果,而且我們會(huì)讓學(xué)生們明白,他們貢獻(xiàn)的代碼會(huì)成為個(gè)人的一項(xiàng)戰(zhàn)績(jī),而且將來(lái)還會(huì)被潛在雇主的詢問(wèn),這些措施可以杜絕作弊。

  成功地向開(kāi)源項(xiàng)目做貢獻(xiàn)

  剛開(kāi)始接觸這門(mén)課程的時(shí)候,學(xué)生們都懷著惶恐的心情,但在完成后都會(huì)非常高興。為了確保學(xué)生能夠?yàn)殚_(kāi)源項(xiàng)目做出有意義的貢獻(xiàn),我們需要考慮到他們的經(jīng)驗(yàn)不足與現(xiàn)代開(kāi)源軟件開(kāi)發(fā)的快節(jié)奏與復(fù)雜性。

  這些年來(lái),通過(guò)我分配的作業(yè)可以看出,為開(kāi)源項(xiàng)目做貢獻(xiàn)的難度越來(lái)越低。各個(gè)項(xiàng)目變得更具包容性。許多項(xiàng)目簡(jiǎn)化了新手入門(mén)指導(dǎo),團(tuán)隊(duì)更加多樣化(包括女性領(lǐng)導(dǎo)),公開(kāi)聯(lián)系方式很常見(jiàn),回復(fù)通常都很有禮貌,而且支持Windows 構(gòu)建(盡管一些學(xué)生采用 Linux 以避免出現(xiàn)故障)。由于拉取請(qǐng)求工作流程中的手動(dòng)控制、持續(xù)集成的廣泛采用、多樣化的代碼檢查機(jī)器人、友好的代碼審查流程以及拉取請(qǐng)求草案的使用,做貢獻(xiàn)的難度已降低。

  盡管如此,學(xué)生們接觸的開(kāi)源項(xiàng)目環(huán)境與傳統(tǒng)學(xué)術(shù)作業(yè)環(huán)境的體驗(yàn)仍然相去甚遠(yuǎn)。因此,小規(guī)模的貢獻(xiàn)才是比較現(xiàn)實(shí)的目標(biāo)。為了讓這門(mén)課程的作業(yè)發(fā)揮作用,關(guān)鍵在于降低對(duì)學(xué)生所做貢獻(xiàn)度的期望。對(duì)于一個(gè)本科生來(lái)說(shuō),為開(kāi)源做貢獻(xiàn)的門(mén)檻非常高,即便是向一個(gè)大型項(xiàng)目貢獻(xiàn)20行代碼也是值得慶賀的成就。我們給學(xué)生選擇項(xiàng)目的建議可以總結(jié)如下:

  選擇一個(gè)有多位活躍貢獻(xiàn)者的項(xiàng)目,這樣就有一個(gè)社區(qū)來(lái)指導(dǎo)并回答你的問(wèn)題。

  選擇一個(gè)相對(duì)流行的項(xiàng)目(獲得了一些GitHub給星),證明這個(gè)項(xiàng)目提供了有用的功能,并且以相對(duì)合理的方式開(kāi)發(fā)。你應(yīng)該避免上傳到GitHub已久的廢棄論文項(xiàng)目。

  避免過(guò)于受歡迎的項(xiàng)目,因?yàn)槟愕呢暙I(xiàn)會(huì)被其他競(jìng)爭(zhēng)者、噪音和官僚主義淹沒(méi)。(盡管如此,我們的一些學(xué)生還是參與了轟動(dòng)一時(shí)的項(xiàng)目,例如 Tensorflow 和 Visual Studio Code。)

  確認(rèn)可以在自己的計(jì)算機(jī)上構(gòu)建和運(yùn)行項(xiàng)目。

  確保項(xiàng)目定期接受來(lái)自外部的拉取請(qǐng)求,保證自己也有機(jī)會(huì)。

  嘗試提供一個(gè)簡(jiǎn)單的bug修復(fù),作為熱身練習(xí),測(cè)試一下自己是否有能力嚴(yán)格遵守項(xiàng)目的工作流程。

  查找?guī)в小癎ood first issue”標(biāo)記的議題,這表明該項(xiàng)目對(duì)新貢獻(xiàn)者很友好。

  至于選擇貢獻(xiàn)怎樣的代碼,則完全由學(xué)生自己決定。他們可以從項(xiàng)目的議題列表中選擇一個(gè)開(kāi)放的任務(wù),或者提出自己的增強(qiáng)或修復(fù)意見(jiàn)。學(xué)生在與項(xiàng)目的核心團(tuán)隊(duì)互動(dòng)后也會(huì)經(jīng)常改變策略。盡管讓他們自由選擇自己的貢獻(xiàn)似乎讓這個(gè)作業(yè)變得很容易,但我發(fā)現(xiàn)大約一半學(xué)生貢獻(xiàn)的代碼都被采納了。

  學(xué)生在作業(yè)中面臨的最常見(jiàn)問(wèn)題包括無(wú)法構(gòu)建項(xiàng)目(通常是由于缺乏經(jīng)驗(yàn)和平臺(tái)不兼容),以及項(xiàng)目團(tuán)隊(duì)缺乏溝通(學(xué)生會(huì)過(guò)分焦慮,認(rèn)為他們貢獻(xiàn)的代碼必須被采納)。另一方面,學(xué)生們最大的快樂(lè)在于,發(fā)現(xiàn)自己的代碼被某個(gè)全世界都在使用的生產(chǎn)軟件所采納。在課程評(píng)估中,學(xué)生都很開(kāi)心,他們表示自己在向開(kāi)源軟件做貢獻(xiàn)的過(guò)程中獲得了許多實(shí)踐技能,同時(shí)也更自信了。




電子技術(shù)圖片.png

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。