編者按:近年來,在信息技術(shù)課程變革和國家一系列政策的助推下,中小學(xué)編程教學(xué)受到了各方的普遍關(guān)注,成為了新的教育熱點。不久前,教育部在答復(fù)政協(xié)提案《關(guān)于穩(wěn)步推動編程教育納入我國基礎(chǔ)教學(xué)體系,著力培養(yǎng)數(shù)字化人才的提案》時,明確表示將編程教育納入中小學(xué)相關(guān)課程。
本期對話,首都師范大學(xué)樊磊教授與北京市東城區(qū)教育研修學(xué)院研修員魏寧,將圍繞中小學(xué)編程教學(xué)以及Python編程語言展開深入探討,以期為從事編程教學(xué)的一線教師提供參考。
魏 ?寧
北京市東城區(qū)教育研修學(xué)院研修員,教育碩士,高級教師。北京市教育學(xué)會教育評價專業(yè)委員會理事。主持北京市教育學(xué)會“十三五”教育科研課題1項。特約撰稿人/專欄作者,發(fā)表文章300余篇。
樊 ?磊
首都師范大學(xué)教授。中國教育學(xué)會中小學(xué)信息技術(shù)教育分委會理事,教育部高中、義教信息技術(shù)課程標(biāo)準(zhǔn)專家組成員。人民教育出版社-中國地圖出版社高中信息技術(shù)教材聯(lián)合總主編。
編程教學(xué)篇
魏寧:首先,非常感謝樊磊教授參與此次對話,樊教授是教育部高中及義務(wù)教育課程標(biāo)準(zhǔn)信息技術(shù)學(xué)科核心專家組成員,多個版本的信息技術(shù)、人工智能教材主編,也是教育部剛公布的技術(shù)(信息技術(shù)、通用技術(shù))教學(xué)指導(dǎo)專委會委員,多年來一直倡導(dǎo)編程教學(xué)并做了大量工作,今天的話題我們就從編程教學(xué)開始吧。
關(guān)于編程教學(xué),我想,如果從計算機科學(xué)的角度看,算法以及基于算法的問題求解,既是計算機科學(xué)中最重要的組成部分,也可以說是編程教學(xué)中最基本、最核心的內(nèi)容。我們看到,在高校的計算機以及相關(guān)專業(yè)中,算法已經(jīng)形成了一個完備的知識體系,成為計算機科學(xué)里非常重要的一個分支學(xué)科,但在中小學(xué)的編程教學(xué)里,算法教學(xué)顯然還沒有形成一個體系。
既然中小學(xué)編程教學(xué)里的算法教學(xué)如此重要,我們該如何借鑒高校的成熟經(jīng)驗?zāi)兀恐行W(xué)編程教學(xué)里的算法教學(xué)又該遵循怎樣的指導(dǎo)原則呢?
樊磊:我認(rèn)為,首先,不應(yīng)把中小學(xué)編程教學(xué)里的算法教學(xué)簡單地看作高校相關(guān)課程的預(yù)備或簡化版本,中小學(xué)階段的算法教學(xué)是為編程教學(xué)服務(wù)的,所以必須服從于編程教學(xué)的總目標(biāo)。而且,限于中小學(xué)生的認(rèn)知水平和知識深度,算法教學(xué)在內(nèi)容、案例選擇上無論廣度還是深度都是有限的,當(dāng)然,這種選擇對算法教學(xué)也是十分關(guān)鍵的。
至于中小學(xué)編程教學(xué)里的算法教學(xué)應(yīng)遵循的指導(dǎo)原則,我認(rèn)為有以下幾點:
第一,算法應(yīng)該源自學(xué)生熟悉的應(yīng)用情境,教師要為學(xué)生搭建起從最簡單的情境到算法的一般性描述之間的抽象臺階,也就是我們通常說的教學(xué)的支架、腳手架。
第二,在算法的選擇上,要把握好高階算法和低階算法之間的平衡。所謂高階算法就是能直接解決某類問題的算法,低階算法是指能高效完成特定任務(wù)的底層算法。例如,我們可以考慮在小學(xué)、初中階段以高階算法的案例為主,到了高中階段,適當(dāng)加入少量的低階算法。
第三,算法的目標(biāo)、直觀思想以及逐步導(dǎo)致形式化描述的演化過程是高中(包括小學(xué)、初中)算法教學(xué)的重要部分,教學(xué)中應(yīng)避免直接提出一般化、形式化的算法描述。
第四,算法中所涉及的核心思想、形式化或半形式化表示、算法推導(dǎo)的數(shù)學(xué)及背景知識應(yīng)在學(xué)生的知識范圍內(nèi),或略微超過學(xué)生的知識范圍。
魏寧:對于算法而言,算法策略是一種更高站位上的視角。因為算法策略是在算法設(shè)計中所使用的問題求解的策略,也是計算思維最直接、最具體的體現(xiàn)形式。相對具體的案例,教師該如何在自己的教學(xué)中選擇算法策略呢?
樊磊:在中小學(xué)編程教育中的算法教學(xué)里,常見的算法策略和它們用于處理的任務(wù)主要有:迭代(也稱為循環(huán))——用于處理重復(fù)性的任務(wù);遞歸——用于完成迭代的一種高效方法;蠻力法——在沒有更好的辦法,而且計算資源(時間和空間)允許的前提下,可以嘗試采用的求解問題的方法;回溯——用于測試不可行的選擇,目的在于盡可能排除這類選擇。
此外,啟發(fā)式方法使用所有可用的背景信息,以期合理地縮短求解時間;分治法是求解困難問題時“化難為簡、化大為小”的基本策略;動態(tài)規(guī)劃策略用于嘗試識別并記憶求解過程中的重復(fù)性步驟,從而避免無用的重復(fù)計算或浪費資源;定界的目的則是盡量確定解的邊界,以縮小求解范圍。
魏寧:剛才我們談到了計算思維,自從2007年美國卡內(nèi)基梅隆大學(xué)計算機系主任周以真教授提出計算思維的概念以來,計算思維受到了各國教育界的普遍重視,在我國新修訂的《普通高中信息技術(shù)課程標(biāo)準(zhǔn)》中,計算思維也被列為學(xué)科核心素養(yǎng)之一。
在計算思維的培養(yǎng)中,編程普遍被認(rèn)為是一種有效的途徑。但目前計算思維的研究仍處在起步階段,特別是對中小學(xué)編程教學(xué)如何促進(jìn)學(xué)生計算思維的形成,我們似乎還缺乏有說服力的指導(dǎo)理論。
樊磊:是的,我們可以這樣理解編程教學(xué)與算法思維的關(guān)系,就是把計算思維理解為求解信息處理問題時的一種思維方式,把編程語言理解為描述信息處理過程的形式語言,而編程則是基于信息的推理活動(計算也是一種推理)。編程語言/編程在表示/求解信息處理問題中的作用類似于抽象/邏輯在求解數(shù)學(xué)問題時的表示和推理。
著名數(shù)學(xué)家G.Polya在他的專著《怎樣解題》中提出過一個數(shù)學(xué)問題求解的模型,就是著名的Polya模型。它把解題的過程分為四個步驟:理解問題、設(shè)計求解方案、實施求解方案和核查評估。在Polya模型的基礎(chǔ)上,我們可以設(shè)計一個基于計算思維的問題求解模型。具體地說,在基于計算思維的問題求解模型中,理解問題包括了要能正確地提出問題、表示問題,設(shè)計求解方案的重點在于要能設(shè)計出可以編程實現(xiàn)的算法,在實施求解方案中包括了用語言工具實施算法以及調(diào)試驗證算法,核查評估環(huán)節(jié)重在評估求解方案的效率、代價和精度等。
這些重要的特點,顯然有著方法論的特征,既體現(xiàn)了與一般的問題求解過程的不同,也說明了計算思維的培養(yǎng)是一個逐漸積累和不斷優(yōu)化的迭代過程。只有將問題理解(敘述、表示)和求解(算法設(shè)計、實現(xiàn)、評估、優(yōu)化)看成一個整體,才能體現(xiàn)出計算思維的真正價值,較好地解決編程教學(xué)中的碎片化問題。
魏寧:對于中小學(xué)編程教學(xué)中的程序語言選擇,我們看到,從20世紀(jì)90年代開始,至今已經(jīng)歷了Pascal、Fortran、C、VB、Java等語言的變遷。目前,仍有Pascal、VB、Scratch等多種編程語言在中小學(xué)編程教學(xué)中使用,以至于不少教師戲言,在信息技術(shù)課程中,“工具是最新的,語言是最老的”。但這是不是一種編程語言發(fā)展的常態(tài)呢?
樊磊:編程語言的迭代是技術(shù)發(fā)展的正常趨勢,在教育領(lǐng)域,同樣也要遵從這種趨勢,我理解這是一種正常的現(xiàn)象。
相對于編程語言多樣化的現(xiàn)實,更需要我們思考的是,編程語言的選擇應(yīng)從哪些原則出發(fā)考慮。我想,我們既要站在國家層面上看計算機發(fā)展和人才培養(yǎng)的需要,又要站在教師角度充分考慮一線教師的實際狀況,同時也要符合學(xué)生的長遠(yuǎn)發(fā)展。在編程教學(xué)語言的選擇上,要廣泛征求各方面的意見和建議,采取科學(xué)合理的方案,多級聯(lián)動。面對洶涌而來的科技大潮和技術(shù)快速迭代的現(xiàn)實,我們更需要理性審視,不盲從、不武斷,這才是自信和定力的體現(xiàn)。
魏寧:我們再談一個學(xué)校教育之外的話題,隨著國家一系列政策的出臺,近年來,編程培訓(xùn)產(chǎn)業(yè)鏈條快速發(fā)展,少兒“編程熱”也迅速升溫。據(jù)測算,2020年國內(nèi)少兒編程市場將接近260億元的規(guī)模,少兒編程繼英語、奧數(shù)之后,成為新的培訓(xùn)熱門,甚至有人說:“不懂編程等于半個文盲?!睂τ诰幊踢@種社會現(xiàn)象,我注意到您一直持理性態(tài)度。前一段時間您在一次接受記者采訪時針對社會“編程熱”就說,“并非每個小孩都需要學(xué)編程,在學(xué)有余力且感興趣的情況下可以學(xué)”,您還提醒記者要冷靜看待編程學(xué)習(xí),這被認(rèn)為是給編程熱潑了一盆冷水。您是怎么看的?
樊磊:是的,我認(rèn)為,從國家和社會層面看,需要對計算機技術(shù)、信息技術(shù)感興趣且有潛力的學(xué)生,也希望發(fā)現(xiàn)這樣一批苗子。但我們的校內(nèi)的編程教學(xué)還不能完全滿足家長的需求,這就造成了一個明顯的缺口,編程培訓(xùn)市場就迎合了這樣一個需求。如果我們過于拔高編程對學(xué)生的作用,甚至從未來升學(xué)的功利性去考慮,那么,我確實建議“并非每個小孩都需要學(xué)編程,在學(xué)有余力且感興趣的情況下可以學(xué)”。
對大多數(shù)學(xué)生來說,從個人發(fā)展來看,編程就像語言一樣,是一個主要用來溝通、表達(dá)創(chuàng)意和思想、解決問題的工具。不同的是,編程主要是和計算機或互聯(lián)網(wǎng)的“溝通”。所以,學(xué)習(xí)編程語言,就是讓我們可以解決新問題、使用新技術(shù),更好地表達(dá)自己。
從長遠(yuǎn)看,市場化的編程培訓(xùn)還是應(yīng)該納入信息素養(yǎng)教育的大框架下,讓其成為信息素養(yǎng)教育落地的一個載體,這樣才會更有持續(xù)性。
總之,在“編程熱”這個問題上,學(xué)校、家長不要“走偏”,要牢記編程是一個工具,是要為學(xué)生學(xué)習(xí)、發(fā)展和思維培養(yǎng)服務(wù)的。
Python篇
魏寧:在中小學(xué)信息技術(shù)課程中,對于編程教學(xué),目前的新教材普遍采用了Python作為核心編程語言。我知道,前一段時間,您也專門編寫了《面向中小學(xué)教師的Python編程入門》一書。作為國內(nèi)Python編程語言方面的專家,您是怎樣看待Python語言的呢?對于中小學(xué)的編程教學(xué),Python語言的優(yōu)勢體現(xiàn)在哪里呢?
樊磊:Python是現(xiàn)代編程思想的產(chǎn)物,它具有語法簡單、開源、跨平臺、擴(kuò)展性強等諸多特點,且擁有眾多功能強大的應(yīng)用擴(kuò)展庫,是眾多領(lǐng)域的主流應(yīng)用(如可視化、生物信息學(xué)、大數(shù)據(jù)分析等)開發(fā)的首選語言。
對于基礎(chǔ)教育而言,它的優(yōu)勢主要體現(xiàn)在以下幾個方面:
第一,從計算機科學(xué)的觀點看,Python是一種比較中性的語言,既吸納了近二十年來編程語言領(lǐng)域中的重要研究成果和新概念(如Lambda機制),同時在語言的最基本內(nèi)核層面上又極少采用不成熟的或未經(jīng)考驗的新編程機制。
第二,從運行機制方面看,Python同時具備解釋型、編譯型和腳本型語言的共同特點。
第三,從開發(fā)環(huán)境看,Python的開發(fā)環(huán)境支持包括Windows、OS X、Linux在內(nèi)的所有主流操作系統(tǒng)和平臺。
第四,從擴(kuò)展硬件方面看,Python的開源硬件接口庫種類繁多、功能完善,基本覆蓋了當(dāng)前基礎(chǔ)教育領(lǐng)域中用到的擴(kuò)展硬件。
第五,從語言支持服務(wù)方面看,Python是典型的開源平臺,與C/C++、JavaScript等重要編程語言有很好的應(yīng)用庫共享機制。
第六,從應(yīng)用層面看,Python有大量各種各樣的庫/框架,使得開發(fā)者僅需要編寫相對較少的代碼就可以完成令人印象深刻的準(zhǔn)專業(yè)級應(yīng)用。
第七,從教學(xué)實施情況看,Python特別適合做數(shù)據(jù)處理(數(shù)據(jù)管理、數(shù)據(jù)可視化、大數(shù)據(jù)分析等)相關(guān)的應(yīng)用,與新課標(biāo)的理念非常吻合。
魏寧:對于Python,我也聽到了一些不同的聲音,如有些一線教師反對Python進(jìn)入中學(xué)課堂。他們的理由是C語言或Java語言相對于Python更加成熟、穩(wěn)定,并且在大學(xué)教育中都有很好的教學(xué)基礎(chǔ),這也就意味著學(xué)生在中學(xué)階段學(xué)習(xí)C或者Java后,在后續(xù)的大學(xué)階段會有比較好的銜接。事實真是這樣的嗎?
樊磊:我認(rèn)為對編程基礎(chǔ)幾乎為零的中學(xué)生而言,首先應(yīng)該讓他們在編程的學(xué)習(xí)中體會到編程的樂趣,盡快獲得成就感,并愛上編程,而不是把編程看作高深莫測、枯燥乏味的事情,甚至對學(xué)習(xí)編程“自帶恐懼”。從當(dāng)下的中學(xué)編程教學(xué)來看,不喜歡編程教學(xué)的學(xué)生不在少數(shù),這是應(yīng)該引起我們反思的現(xiàn)象。從這個角度考慮,選擇Python作為編程語言還是有優(yōu)勢的,因為它的語法簡潔易懂,對語法格式的要求非常低,可以說是最接近自然語言的程序語言,非常適合沒有編程基礎(chǔ)的學(xué)生。對教師而言,Python代碼在設(shè)計上強制要求縮進(jìn),方便了學(xué)習(xí)和維護(hù),教師不需要花費大量的時間去處理代碼的格式錯誤。
至于說和大學(xué)的銜接,我首先要嚴(yán)肅地說明,Python絕不是一種“玩具(Toy)語言”,而是貨真價實的“工作(Working)語言”,是主流編程語言,更是數(shù)據(jù)分析領(lǐng)域的首選語言。假如學(xué)生能在中學(xué)階段接觸并且系統(tǒng)地學(xué)習(xí)Python語言,完全能夠打下良好的基礎(chǔ),并在進(jìn)入大學(xué)后直接深入研究,更快地參與到實際項目的開發(fā)中,乃至為今后的就業(yè)增加有分量的籌碼。
而且,說C或Java比Python在大學(xué)有更好的教學(xué)基礎(chǔ)并不準(zhǔn)確。從國外的趨勢看,Python正在被更多的大學(xué)所青睞。有數(shù)據(jù)顯示,美國綜合排名前100名的大學(xué)超過70%都開設(shè)了Python編程語言類課程,卡內(nèi)基梅隆大學(xué)從2010年開始就用Python取代了Java,作為計算機專業(yè)的第一門編程語言。斯坦福大學(xué)在2015年的時候,就已經(jīng)開發(fā)了22門與Python相關(guān)的課程,并且逐漸將部分的C和Java語言淘汰。
國內(nèi)的高校雖然步子比國外的高校慢一些,但也開始越來越重視Python了。北京理工大學(xué)是國內(nèi)較早引入Python語言的高校,他們的公選課得到了學(xué)生們的高度認(rèn)可,哈爾濱工業(yè)大學(xué)等也陸續(xù)開設(shè)了Python課程,《上海市高等學(xué)校計算機等級考試大綱(2016年修訂)》中也新增了Python程序設(shè)計模塊。我們有理由相信,在不久的將來,Python語言教學(xué)將會在國內(nèi)迎來井噴期。
因此,通過中學(xué)階段對Python的學(xué)習(xí),無論對今后的大學(xué)專業(yè)學(xué)習(xí),還是自主創(chuàng)業(yè),都是有益處的。
魏寧:剛才我們說到了Python語言的很多優(yōu)點,但對中小學(xué)編程教學(xué)而言,Python語言畢竟是個新事物。而且,在現(xiàn)階段,它在編程教學(xué)中似乎也存在著一些問題。
樊磊:是的,不可否認(rèn),現(xiàn)階段,無論是小學(xué)、初中,還是高中,Python在編程和算法教學(xué)中都存在著很多問題。其中比較突出的有:第一,由于課時和年齡的限制,現(xiàn)有教材中涉及的算法內(nèi)容無論在深度上還是廣度上普遍呈現(xiàn)“高不成、低不就”的窘態(tài);第二,由于Python語言封裝了很多基礎(chǔ)算法的實現(xiàn),而且涉及交錯復(fù)雜的概念(如數(shù)據(jù)類型、抽象數(shù)據(jù)類型等),再加上算法與數(shù)學(xué)、數(shù)據(jù)結(jié)構(gòu)、編程語言特性都是密切關(guān)聯(lián)的,單純講算法本身也很難實施,所以,究竟是講算法的底層方法還是講高階應(yīng)用,目前難以取舍;第三,算法教學(xué)對課程的核心——運用計算思維解決問題無論是在求解流程還是在問題深度上,都具有很強的示范性,如果實施不當(dāng),很容易將計算思維培養(yǎng)帶入誤區(qū),這也是實踐中較易出現(xiàn)問題的地方。
魏寧:前面您曾提到了算法教學(xué)應(yīng)遵循的幾個基本原則,那么,對具體的Python語言,它的算法教學(xué)是不是也應(yīng)該遵循這些原則?
樊磊:關(guān)于Python語言算法教學(xué)的指導(dǎo)原則,我想應(yīng)該有以下三點:第一,在算法的編程實現(xiàn)上,原則上不涉及較復(fù)雜或有較高技巧的編程,較復(fù)雜的編程實現(xiàn)只作為Python-like偽代碼實現(xiàn),但算法作為教學(xué)案例,必須首先講清楚其背后的關(guān)鍵思想;第二,高階算法所解決的問題應(yīng)具有典型性、時代性、選擇性、普適性和適用性,并且對學(xué)生的后續(xù)學(xué)習(xí)或其他學(xué)科的學(xué)習(xí)有啟示作用;第三,在時間和條件都允許的情況下,應(yīng)針對解決同一類問題的、基于不同策略所實現(xiàn)的算法之間做性能對比,并挑選出較優(yōu)算法。
魏寧:您能否用一個具體的案例來說明,在編程教學(xué)中,如何貫徹這些原則?
樊磊:好,我就用一個具體的案例來說明Python編程及算法教學(xué)中的一些特點,這個案例的場景來自高中新課標(biāo)教材,就是著名的斐波那契數(shù)列的求解。
首先,斐波那契數(shù)列是最簡單的遞歸定義的函數(shù),也就是函數(shù)體的內(nèi)部包含了對函數(shù)自身的調(diào)用,而Python是支持函數(shù)的遞歸定義的,這也是函數(shù)式編程語言的特征之一。我們要注意到計算最后一個值的時候是需要一點時間的,因為在遞歸調(diào)用中,很多中間值要重復(fù)計算。而為了優(yōu)化斐波那契數(shù)列的遞歸實現(xiàn),一個最簡單的方法就是在每次計算中,將前面已經(jīng)計算過的值“記”下來,不再重復(fù)計算。這種在計算過程中使用記憶的機制可以有效避免重復(fù)及浪費資源,是所謂“動態(tài)規(guī)劃”方法的一個最簡單的例子,也就是資源的動態(tài)再分配。
在此,我們就可以使用Python的迭代器、裝飾器等功能,從而讓斐波那契數(shù)列的函數(shù)更加簡化。教師們不妨嘗試一下斐波那契數(shù)列的Python編程。
魏寧:其實,對大多數(shù)教師,包括相當(dāng)一部分信息技術(shù)教師而言,Python語言都是一種比較“奇怪”的語言,當(dāng)他們在教學(xué)中面對Python語言的時候,多少都會有一種“心里沒底”的感覺。對于現(xiàn)階段在中小學(xué)采用Python作為編程語言的教師來說,在教學(xué)中,他們應(yīng)該注意什么呢?您會給他們提出哪些建議呢?
樊磊:對采用Python作為編程語言的教師,在教學(xué)中,我有以下幾條具體建議:第一,要始終貫徹“需求導(dǎo)向,在做中學(xué)”的定位,千萬不要陷入“程序員模式”的編程教學(xué)中;第二,牢記在Python中,學(xué)會使用函數(shù)比掌握編程技巧更重要;第三,要掌握輸入/輸出函數(shù),能夠靈活運用非數(shù)值數(shù)據(jù)類型,包括字符串、列表和字典;第四,要了解Python語言異常靈活的循環(huán)及控制結(jié)構(gòu);第五,鼓勵教師將Python當(dāng)作現(xiàn)實版的“偽代碼”來使用,即使確實需要用偽代碼,也建議使用Python-like風(fēng)格;第六,如果要使用Python的高級特性,編程案例應(yīng)盡量依托Python語言特點,并以算法實現(xiàn)的需求適當(dāng)漸次地引入,但建議教師們,除非絕對必要,盡量不使用Python的高級特性。
魏寧:我們知道,由于Python具有語法簡單、開源、跨平臺、擴(kuò)展性強等鮮明特點,所以被認(rèn)為是典型的“膠水語言”。因此,在支持創(chuàng)客教育、STEAM教育方面Python語言有著天然的優(yōu)勢。
樊磊:是這樣的,眼下,創(chuàng)客教育、STEAM教育可以說開展得如火如荼。創(chuàng)客的本質(zhì)是“造物”,因此,有很多與硬件編程相關(guān),如Arduino、樹莓派等。但是,如果每使用一種硬件產(chǎn)品就要學(xué)習(xí)該產(chǎn)品的編程語言,這會讓創(chuàng)客的學(xué)習(xí)增加大量的成本,在一定程度上是阻礙創(chuàng)客教育發(fā)展的。這時,Python語言作為膠水語言的優(yōu)勢就顯現(xiàn)出來了,正因為Python具有很強的擴(kuò)展性,有很多與硬件相配套的庫,如Python能方便地與Arduino、Minecraft、樹莓派建立關(guān)聯(lián),更是樹莓派的官方編程語言,所以,使用Python語言,教師可以在課堂教學(xué)中列舉更多的案例,從而拓展教學(xué)范疇,學(xué)生也可以直接把它運用到創(chuàng)客造物中去,這既為教師、學(xué)生省去了額外的學(xué)習(xí)成本,也為創(chuàng)客教育的發(fā)展提供了良好的教與學(xué)環(huán)境。
魏寧:非常感謝樊磊教授和我們一起分享有關(guān)編程教學(xué)的理念和實踐策略,以及關(guān)于Python編程語言的方方面面,我想這對一線教師從事編程教學(xué)或者具體的Python語言教學(xué)都會很有幫助。
樊磊:也謝謝你們提供這樣一個交流的窗口,祝編程教學(xué)和Python語言教學(xué)在教師們的共同努力下,取得更輝煌的成績。
本期對話在成文過程中,參考了樊磊教授的兩篇文章《高中信息技術(shù)課程中編程語言的地位、選擇及實施方法》《在高中信息技術(shù)課中培養(yǎng)學(xué)生計算思維的有效方法探討》,特此向兩篇文章的合作作者倪俊杰、林偉致謝!