李曉明
摘 要:信息技術(shù)應(yīng)該在新文科建設(shè)中發(fā)揮顯著的作用,其中一個重要的方面就是加強文科學(xué)生計算思維的培養(yǎng),一個正在興起的交叉學(xué)科就是計算社會科學(xué)。本文介紹了一門全新的文科課程的教學(xué)實踐,該課程以若干社會科學(xué)經(jīng)典問題為抓手,從計算思維的視角展開討論,落實到實際編程進(jìn)行相關(guān)模型的模擬分析,展現(xiàn)了在文科開設(shè)具有深度計算要求課程的潛力。
關(guān)鍵詞:新文科;計算思維;教學(xué)實踐;問題驅(qū)動
文科學(xué)生需要加強計算思維的培養(yǎng),已成為一種普遍的共識?!缎挛目平ㄔO(shè)宣言》中所倡導(dǎo)的“融入現(xiàn)代信息技術(shù)賦能文科教育”“主動適應(yīng)并借力現(xiàn)代信息技術(shù)手段,實現(xiàn)文科教育高質(zhì)量高水平發(fā)展”就包含這樣的指向。同時,《新文科建設(shè)宣言》指出要“緊緊抓住課程這一最基礎(chǔ)最關(guān)鍵的要素,持續(xù)推動教育教學(xué)內(nèi)容更新”“鼓勵支持高校開設(shè)跨學(xué)科跨專業(yè)新興交叉課程、實踐教學(xué)課程,培養(yǎng)學(xué)生的跨領(lǐng)域知識融通能力和實踐能力”,強調(diào)了課程建設(shè)的重要性。
過去幾十年來,文科計算機教育在我國高校是得到重視的,每個學(xué)校至少有一門專門的必修課,名為“計算機文化基礎(chǔ)”或“大學(xué)計算機”等。然而,隨著信息技術(shù)的發(fā)展,經(jīng)濟(jì)社會數(shù)字化轉(zhuǎn)型浪潮的興起,僅一門那樣的課程已不能滿足要求,人們呼吁更有深度的文科計算機課程的建設(shè)。作為對這種需求的響應(yīng),北京大學(xué)在2021年秋季新開出了一門選修課“社會科學(xué)研究問題的計算實踐”,面向社會科學(xué)專業(yè)二年級以上本科生,計2學(xué)分。
課程的初衷,是希望讓有興趣和志趣的文科生在常規(guī)的文科計算機課程之外,有機會對計算在社會科學(xué)問題研究中的作用,從體驗和認(rèn)識上達(dá)到一個新的高度。
一、課程設(shè)計思想
“社會科學(xué)研究問題的計算實踐”課程描述中的學(xué)習(xí)目標(biāo)是這樣寫的:通過本課程,預(yù)期學(xué)習(xí)者可以在問題抽象、計算抽象、算法設(shè)計,以及Python編程實現(xiàn)等方面,達(dá)到一定成熟度,初步形成一種通過計算的途徑來分析研究社會科學(xué)問題的態(tài)度和技能。
為達(dá)成上述學(xué)習(xí)目標(biāo)的課程設(shè)計可能有多種方案。例如可能是以實驗課的形式指導(dǎo)學(xué)生完成幾個大作業(yè),還可能是直接帶著學(xué)生分小組做幾個基于大數(shù)據(jù)的研究項目,等等。由于這些都還沒有現(xiàn)成的東西可參照,很大程度就看教師自己的偏好和積累了。
我們采用的是一種“問題驅(qū)動,計算落地”的做法。這里的“問題”,主要指社會科學(xué)經(jīng)典研究問題,而不是應(yīng)用問題。在課程說明中是這樣寫的:基于若干經(jīng)典社會科學(xué)問題研究成果,從計算的視角展開討論,強調(diào)通過編寫和運行計算機程序,觀察、推理和評估相關(guān)模型所展現(xiàn)的性質(zhì)和特征,探索相關(guān)社會現(xiàn)象的機制、原理和原因。所涉及的問題包括(但不限于)社會網(wǎng)絡(luò)結(jié)構(gòu)分析、社會網(wǎng)絡(luò)演化規(guī)律、博弈現(xiàn)象、匹配市場機制、網(wǎng)絡(luò)結(jié)構(gòu)平衡的判別、網(wǎng)絡(luò)級聯(lián)的過程,以及富者愈富模型的仿真與驗證、表決機制等方面。
總結(jié)起來,有十多個這樣的問題。所謂“問題驅(qū)動”,指的是在課堂上我們總是從這些問題所體現(xiàn)的社會現(xiàn)象或社會機制開始,進(jìn)行適當(dāng)?shù)某橄?,形成一個研究問題的表達(dá),進(jìn)而建立可供嚴(yán)謹(jǐn)分析討論的模型。對此,下一節(jié)分別有較為詳細(xì)的論述。
所謂“計算落地”,這里就是指對每個問題的學(xué)習(xí)和理解,最后都要以一個計算機程序的形式予以體現(xiàn)。也就是說,對于所形成的模型,都要通過計算得到一種“解”。這樣,課上對每個問題的討論基本都遵循圖1所示的框架。
不過,特別值得強調(diào)的是,我不認(rèn)為這是一門單純的“編程課”,它是問題和方法的學(xué)習(xí)和研究課。編程只是為了更好地學(xué)習(xí)。體現(xiàn)在具體教學(xué)實踐的時間安排上,就是每次課前面用大約80分鐘講問題,后面20分鐘布置作業(yè)??偨Y(jié)起來,學(xué)生需要完成如下所列的作業(yè)。
HW0:節(jié)點聚集系數(shù)和邊嵌入性的計算;
HW1:友誼悖論的驗證;
HW2:同質(zhì)性作用下的網(wǎng)絡(luò)演化過程;
HW3:極化關(guān)系網(wǎng)絡(luò)的結(jié)構(gòu)平衡檢測;
HW4:重復(fù)囚徒困境博弈的循環(huán)賽;
HW5:匹配市場的實現(xiàn);
HW6:網(wǎng)絡(luò)效應(yīng)下的價格策略比較;
HW7:網(wǎng)絡(luò)級聯(lián)過程的仿真;
HW8:富者愈富過程的性質(zhì)驗證;
HW9:網(wǎng)絡(luò)中影響力與共識的關(guān)系;
HW10:孔多塞模型下的表決綜合。
二、課程主要內(nèi)容
下面簡要介紹所討論的社會科學(xué)問題以及相關(guān)計算實踐作業(yè)的要求,每一個問題用兩個學(xué)時,每次作業(yè)要求在一周內(nèi)完成。下面的順序也就是教學(xué)展開的順序。
1.圖論與社會網(wǎng)絡(luò)基礎(chǔ)
這里講的圖論完全是“實用主義”的,即只是包括一些為社會網(wǎng)絡(luò)相關(guān)主題的學(xué)習(xí)所需要的基本術(shù)語概念。同時,強調(diào)了鄰接矩陣(A)及其冪次在網(wǎng)絡(luò)結(jié)構(gòu)意義下的解釋,例如A2[i, j]表達(dá)的是節(jié)點i和j之間長度為2的路徑的條數(shù)。在社會網(wǎng)絡(luò)的語境下,就是i和j的共同朋友的個數(shù),等等。它們是通常圖論課不涉及的。這樣做一是讓學(xué)生能學(xué)習(xí)矩陣運算與網(wǎng)絡(luò)結(jié)構(gòu)信息的對應(yīng)關(guān)系,二是由于矩陣乘冪很容易用程序?qū)崿F(xiàn),作為起步是比較合適的。
這一課布置了兩個作業(yè)(HW0和HW1)。HW0從程序設(shè)計的要求來看很簡單,基本上就是矩陣乘冪的直接應(yīng)用,算是“預(yù)熱”。HW1通過隨機生成一些社會網(wǎng)絡(luò)圖驗證“友誼悖論”——節(jié)點的度小于鄰居節(jié)點度的均值,則是一個非平凡的任務(wù)了。
2.同質(zhì)性及其在社會網(wǎng)絡(luò)演化中的作用
關(guān)于同質(zhì)性的討論是社會科學(xué)中的一個常見話題,它對網(wǎng)絡(luò)結(jié)構(gòu)演化的影響可以抽象歸結(jié)為三元閉包、社團(tuán)閉包和會員閉包三種機制。這樣,如果說上一次課討論的是社會網(wǎng)絡(luò)的靜態(tài)特征問題,這一次課討論的就是網(wǎng)絡(luò)的動態(tài)過程了,而這個過程正好也是可以用矩陣相乘的結(jié)果來驅(qū)動的,于是我們再一次看到了矩陣運算可以揭示網(wǎng)絡(luò)結(jié)構(gòu)的意義。
這一課的計算實踐問題(HW2)就是利用同質(zhì)性原理,在三個門檻值(分別對應(yīng)三元閉包、社團(tuán)閉包和會員閉包)的控制下,采用兩個矩陣,按時間步模擬仿真一個社會歸屬網(wǎng)中邊的變化,也就隱含了其中社會網(wǎng)絡(luò)的變化。
3.極化關(guān)系下網(wǎng)絡(luò)結(jié)構(gòu)的穩(wěn)定性
所謂“極化關(guān)系”,指的是網(wǎng)絡(luò)中的關(guān)系分為“友好”和“敵對”兩種,這在人際關(guān)系和國際關(guān)系的一些特定時期都是顯著的。在這樣的模型中,結(jié)構(gòu)的穩(wěn)定性是關(guān)注的重點,即一個網(wǎng)絡(luò)結(jié)構(gòu)中的各個關(guān)系性質(zhì)是趨向于不變,還是趨向于改變?例如下面這個網(wǎng)絡(luò),用實線邊表示“友好”,虛線邊表示“敵對”,我們關(guān)心它是否穩(wěn)定。這里涉及一個相當(dāng)不簡單的判斷算法,落實到計算問題上,就是要檢測圖中是否存在包含奇數(shù)個敵對邊的圈。課上我們證明了:結(jié)構(gòu)穩(wěn)定,當(dāng)且僅當(dāng)不存在那樣的圈。在圖2中,就有一個2-5-6-11-10-12-9-4-2。包含5條敵對邊,因此是不穩(wěn)定的。
這一課的作業(yè)任務(wù)(HW3)就是要實現(xiàn)這個算法。盡管不簡單,不只是矩陣相乘了,還要用到廣度優(yōu)先搜索等過程,但當(dāng)課程進(jìn)行到第4周的時候,學(xué)生們不但已經(jīng)能理解這個算法,而且也都能夠編程實現(xiàn)了。課程中對問題的深入討論和理解,鼓舞了計算實踐的熱情。
4.博弈論基礎(chǔ)
類似于對圖論的處理,系統(tǒng)學(xué)習(xí)博弈論也不是本課程的目標(biāo)。我們只是通過一些例子,簡略介紹博弈的基本術(shù)語,參與人、策略和回報,以及博弈中參與人互動的含義,強調(diào)博弈均衡的概念——互為最佳應(yīng)對策略組。
這一課的作業(yè)(HW4)是舉行一個由班上所有學(xué)生參與的重復(fù)囚徒困境的循環(huán)賽,針對的是如圖3所示的囚徒困境博弈收益矩陣。
作業(yè)分為兩個階段:第一階段,每個學(xué)生提供一個策略函數(shù),教師收集后統(tǒng)一發(fā)給所有人;第二階段,每人基于前面得到的策略函數(shù)集,完成一個競賽過程管理程序,兩兩循環(huán)比賽并積累積分,最后分析每個參與人總分的情況,觀察在重復(fù)多次的囚徒困境博弈中,人們的長期行為是否基本都是傾向于合作的。
5.清倉價格與匹配市場
這個問題可以看成是博弈論的一種應(yīng)用??紤]n個商品和n個買家之間如何匹配,采用“物以稀為貴”的原理,發(fā)展出一個通過清倉價格的形成,達(dá)成最優(yōu)匹配的算法。課程不僅導(dǎo)出該算法的步驟,而且也證明算法的性質(zhì)。由于這個算法是一個框架性質(zhì)的,相關(guān)步驟和應(yīng)用層的操作關(guān)聯(lián)密切,因而可能在這樣的課中學(xué)習(xí)。為了展現(xiàn)算法的實際意義,我們還采用了書籍拍賣的活動,提供一批書籍,讓同學(xué)們通過出價參與拍賣,目標(biāo)是形成一個書籍和學(xué)生之間的匹配。
這一課的作業(yè)(HW5)就是實現(xiàn)利用“物以稀為貴”原理的匹配市場算法,并基于前面學(xué)生給出的出價矩陣,算出匹配關(guān)系,并按照該關(guān)系進(jìn)行書和學(xué)生的分配。也就是說,每個人能算出自己該得哪本書,而且大家算出的還不沖突。注意到這個算法的一個核心操作是檢測二部圖是否存在完整匹配,但該操作對應(yīng)的子算法比較復(fù)雜,不太可能在本課程中要求學(xué)生掌握,于是我們提供一個函數(shù),將接口交代清楚,讓學(xué)生可以進(jìn)行算法調(diào)用。這樣一種方式,不僅讓學(xué)生完成了一個很有獲得感的程序,而且也具體體會了一種方法——設(shè)計并實現(xiàn)應(yīng)用層框架性算法,認(rèn)識到一些子過程的必要性,但不一定都自己實現(xiàn),可以通過調(diào)用已有函數(shù)達(dá)成目標(biāo)。
6.網(wǎng)絡(luò)效應(yīng)
這個問題與當(dāng)下的平臺經(jīng)濟(jì)相關(guān)。講的是某些產(chǎn)品或服務(wù)具有這樣的性質(zhì):其對于每個客戶的價值,與已有客戶的總量正相關(guān)。例如微信這樣的平臺,參與的人越多,每個人感覺到的價值就越大。課上所要討論的就是這種正相關(guān)關(guān)系的具體特征,體現(xiàn)在幾個不同性質(zhì)的博弈均衡點上。對它們性質(zhì)的理解,有助于制訂合適的產(chǎn)品推廣策略,其基本追求,就是要讓市場規(guī)模盡快通過不穩(wěn)定均衡點,從而啟動市場自身的增長過程。
這一課的作業(yè)(HW6),就是要在一個設(shè)定的網(wǎng)絡(luò)效應(yīng)模型下,從企業(yè)的視角出發(fā),比較幾種不同的價格策略,追求較大的利潤。從數(shù)學(xué)上看,這是一個多變量非線性優(yōu)化問題,不是這門課上合適的內(nèi)容,但從應(yīng)用背景的角度將模型說清楚后,通過程序的模擬,學(xué)生們都能得到不錯的結(jié)果。
7.網(wǎng)絡(luò)級聯(lián)
一種新事物會如何在網(wǎng)絡(luò)中得到傳播,或者說傳播的效果將會如何,在鼓勵創(chuàng)新的年代,是一個尤為值得關(guān)心的問題。網(wǎng)絡(luò)級聯(lián),即人們通過與有關(guān)系的人之間的互動決定是否采納一項新事物(例如某一款新手機),是學(xué)界已經(jīng)形成的一類基本模型,其形象化的表現(xiàn)就是新事物在網(wǎng)絡(luò)中從一些點開始,逐步向周邊擴散,直至完全覆蓋所有節(jié)點,或者到某個程度后再也不會擴散了。作為課堂學(xué)習(xí)的內(nèi)容,我們會討論停止擴散的充要條件。
這一課的作業(yè)(HW7),就是要編一個程序,在給定網(wǎng)絡(luò)結(jié)構(gòu)、初始節(jié)點集合和門檻值的條件下,模擬擴散過程,一步步看哪些節(jié)點“接受了”新事物,直到不再有擴散的可能。
8.流行性
一類事物的不同實例在社會中得到關(guān)注程度的分布,是信息社會和數(shù)字經(jīng)濟(jì)的中心話題之一。從學(xué)理上,涉及冪律、無標(biāo)度、“長尾”、齊普夫律,2/8律,“富者愈富”等概念。教學(xué)目標(biāo)是梳理這些概念之間的一種關(guān)系,它們分別對應(yīng)流行性這種普遍現(xiàn)象背后的“規(guī)律”“性質(zhì)”和“機制”。我們也討論這些認(rèn)識的實用價值,即利基產(chǎn)品在長尾市場中的意義。
這一課的作業(yè)(HW8),則是要仿真一個“富者愈富”過程,觀察所得到的數(shù)據(jù)是否呈現(xiàn)出冪律分布。課程進(jìn)展到這里,學(xué)生們對于完成編程所要求的任務(wù)已經(jīng)比較自如了,于是我們進(jìn)一步要求用盡量少的數(shù)據(jù)存儲空間來解決這個問題。
9.社會網(wǎng)絡(luò)中的影響力和共識
在討論“一個人認(rèn)為哪些人在某個話題上的認(rèn)識比較靠譜,從而對他的認(rèn)識會產(chǎn)生影響”的語境下,有向圖模型就會自然地出現(xiàn)。于是我們在“實用主義”地對有向圖概念做一個簡單介紹后,馬上轉(zhuǎn)到一個人影響力的計算上,也就是PageRank,認(rèn)識到它(P)是一個任意規(guī)格化正行向量左乘鄰接矩陣的一種變形(A*)直至收斂的結(jié)果。然后討論一個初始列向量V右乘A*的含義,按照DeGroot模型,這對應(yīng)一個共識的形成過程,即收斂到一個相同的值c上。按照現(xiàn)實中的樸素認(rèn)識,社會中一個人的影響力越大,他的認(rèn)識在社會共識形成中的作用也會越大。這樣一個樸素認(rèn)識通過PageRank和DeGroot模型得到了生動闡釋。
盡管上述關(guān)系的數(shù)學(xué)證明也是可能在這門課上做的,但我選擇了讓同學(xué)們用程序(HW9)來驗證。即他們的程序要先分別用PageRank算法算出P,再用DeGroot算法基于V算出c,然后看上述關(guān)系是否成立。
10.表決問題
從孔多塞原則(少數(shù)服從多數(shù))開始,看到孔多塞悖論現(xiàn)象,然后討論議程設(shè)置和波達(dá)計數(shù)法,它們一方面作為避免孔多塞悖論的方法,但另一方面又帶來了新的問題,即組織者操縱和策略性投票的問題。在簡略提到阿羅不可能定理后,轉(zhuǎn)到對投票人單峰偏好的要求,進(jìn)而提出并證明了中位項定理,即如果每個人的投票都滿足相對于一種特征序的單峰偏好,則不會有孔多塞悖論出現(xiàn)。并且,群體排序可以按中位項定理的操作獲得。
這一課的作業(yè)(HW10),實際上就是課堂涉及內(nèi)容的一個綜合練習(xí)。給定m個人對n個項目按排序的投票,程序要確定其中是否隱含有孔多塞悖論。如果沒有,就直接給出群體序;如果有,就按照一個特定的屬性序,指出哪些投票是不滿足單峰性質(zhì)的,認(rèn)為它們是“廢票”,剔除后按照中位項定理給出群體排序。
為什么選擇這樣一些問題?主要有如下考慮。第一,希望能觸及社會科學(xué)的多個領(lǐng)域。從上面列舉的能看到,問題涉及社會學(xué)、經(jīng)濟(jì)學(xué)、政治學(xué)、傳播學(xué)等。第二,希望所討論的是經(jīng)典學(xué)術(shù)問題,而不是應(yīng)用解決方案,盡管它們都有實際的背景??梢钥吹?,這些問題都對應(yīng)有過去幾十年甚至幾百年前的研究成果。第三,便于從本科生課程教學(xué)的層面,對問題進(jìn)行建模,并有相適應(yīng)的計算方法。
加州大學(xué)的Martin Hilbert教授在他的計算社會科學(xué)慕課上展示了如圖4這樣的圖,表示的是計算社會科學(xué)的學(xué)理框架。其中,“模型”是中心概念,對此我是認(rèn)同的,因此在本課程的設(shè)計中也特別強調(diào)了模型,涉及編程的計算實踐在一定模型基礎(chǔ)上才可能展開。
三、教學(xué)實踐體會
這樣一門課教下來,作為教師的第一感觸就是學(xué)生們的潛能真是很強。對于有興趣和動力學(xué)習(xí)的內(nèi)容,盡管目標(biāo)初看起來很難達(dá)到,只要教師給搭上適當(dāng)?shù)摹澳_手架”,他們就能攀登上去。這門課作為一門選修課,最初有14個同學(xué),來自哲學(xué)、社會學(xué)、經(jīng)濟(jì)學(xué)、法學(xué)、政府管理等多個領(lǐng)域,從大二到大四都有。前三次課下來,有4個同學(xué)覺得不適應(yīng),選擇了退課,剩下的10個一直堅持到最后。10個學(xué)生,似乎受益面很小,我也的確認(rèn)為這樣一種要求的課不太可能適應(yīng)大面上的教學(xué)。但我想大學(xué)應(yīng)該提供各種有特色、有深度的課程,讓有興趣有能力的學(xué)生有機會去展現(xiàn)他們的潛力。
一個很明顯的現(xiàn)象是,在前幾周,多數(shù)同學(xué)感覺頗有挑戰(zhàn),畢竟他們以前沒有寫過需要幾十行Python代碼才能解決問題的程序。為此,在開始兩周增加了兩次自愿參加的補課,指導(dǎo)他們?nèi)绾螌懗鏊惴ǔ绦?。在那之后,一些同學(xué)依然有困難,但已經(jīng)知道怎么去自己克服了。課程結(jié)束之際,問學(xué)生在這課程的教學(xué)中哪些做法應(yīng)該保持,有同學(xué)說那兩次補課的安排應(yīng)該保持??磥韺λ麄冋嬗袔椭恕?/p>
回到前面提到的本課程的學(xué)習(xí)目標(biāo),一輪教學(xué)實踐下來,我感到有較高的達(dá)成度,學(xué)生們明顯成長了。后面幾個作業(yè),即便布置給計算機類專業(yè)的學(xué)生做,也不算是很簡單的。這一批文科學(xué)生能完成,很大程度是因為教學(xué)讓他們了解了作業(yè)背后問題的意義,以及建模的過程,從而有興致去做。一個學(xué)生談體會說,這門課的作業(yè)與課堂內(nèi)容緊密相關(guān),是其他很多課程沒有的特點。在我看來,那就是“問題驅(qū)動”教學(xué)應(yīng)有的效果。