楊葉濤
(1. 中國地質(zhì)大學(xué)(武漢) 地球物理與空間信息學(xué)院,湖北 武漢 430079)
掌握時空數(shù)據(jù)分析技能是地球信息科學(xué)研究生從事學(xué)習(xí)與相關(guān)研究的基礎(chǔ)。近年來,從越來越多的遙感平臺、現(xiàn)場儀器、傳感網(wǎng)絡(luò)和其他配備GPS的智能設(shè)備中衍生出的空間數(shù)據(jù)集出現(xiàn)了爆炸式增長。處理這類“大地理數(shù)據(jù)”需要強有力的軟件工具,以實現(xiàn)復(fù)雜空間數(shù)據(jù)的高效處理與分析[1]。在本科學(xué)習(xí)階段,處理空間數(shù)據(jù)的GIS 和遙感課程通常采用Arc-GIS、ENVI 等專業(yè)圖形用戶界面的軟件進(jìn)行教學(xué)[2],但這些平臺的應(yīng)用范圍有限,無法滿足復(fù)雜的數(shù)據(jù)分析需求,難以實現(xiàn)復(fù)雜的地理空間工作流程。GRASS、GDAL/OGR、PKTOOLS、CDO、Orfeo Tool-Box 等開源地理軟件能快速有效地處理柵格、矢量等多種格式地理數(shù)據(jù)集,并能通過BASH、Python 等編程語言集成到復(fù)雜的工作流中[3]。然而,研究生階段的學(xué)術(shù)課程往往不涉及這些開源軟件及其相關(guān)的編程語言。在沒有合適課程的情況下,獲得編程技能往往需要長期的獨立學(xué)習(xí)和強烈的個人動力。如果在研究生階段開設(shè)開源軟件地理計算相關(guān)課程,研究生通過該課程學(xué)習(xí)獲得這種技能,將會對他們的研究工作提供巨大幫助。
為滿足地球信息科學(xué)研究生對數(shù)據(jù)處理分析技能的需求,筆者開發(fā)并講授了《GIS 編程》研究生課程。該課程主要講授Linux 操作系統(tǒng)下的地理計算開源軟件編程,包括課堂教學(xué)、小組討論、項目實習(xí)、小組報告等環(huán)節(jié)。課程的教學(xué)內(nèi)容基于OSGeo在線資源提供特定的教程和工具來分析地理數(shù)據(jù)[4],同時采用多種編程語言與AWK、 BASH、 PYTHON、GRASS、GDAL/OGR、PKTOOLS、Orfeo ToolBox 等開源軟件來構(gòu)建數(shù)據(jù)處理與分析工具。首先教授如何使用命令行來調(diào)用開源軟件處理大型數(shù)據(jù)集的基本編程概念,通過簡單腳本,演示如何自動化完成基本的數(shù)據(jù)處理與分析任務(wù)和如何修改簡單程序以解決特定問題,同時實現(xiàn)最佳性能和可靠的結(jié)果;然后展示如何通過復(fù)雜腳本來定義流程復(fù)雜的科學(xué)分析與數(shù)據(jù)處理工作流,以及根據(jù)需要在開源工具基礎(chǔ)上開發(fā)新的功能模塊;最后根據(jù)課程講授的知識,以特定研究為目標(biāo),從數(shù)據(jù)準(zhǔn)備、流程設(shè)計、代碼編寫和結(jié)果分析進(jìn)行開源軟件編程實踐。盡管第一印象是一門計算機編程課程,但實際上該課程的重點是科學(xué)概念的應(yīng)用,在定制計算機腳本的幫助下,指導(dǎo)學(xué)生解決科學(xué)研究特定的問題。
《GIS 編程》不是專注于一種編程語言或開源軟件,而是介紹多種開源軟件和編程語言,并教授研究生如何組合每種開源軟件和語言中最有用的功能。課程大多數(shù)的工作流程腳本實例都基于強大的開源地理工具,這些開源工具充當(dāng)手頭數(shù)據(jù)處理任務(wù)的模塊。對于課程中涉及的每種編程語言或開源軟件均按照以下結(jié)構(gòu)進(jìn)行教學(xué):①程序語言的語法,包括各種關(guān)鍵字和選項的詳細(xì)信息;②指導(dǎo)閱讀編程語言或開源軟件的幫助文檔和其他可用文檔;③解釋編程語言中常見的語法問題和解決它們的過程(主要依靠程序調(diào)試來講解);④學(xué)習(xí)編寫能鏈接不同開源工具的腳本或不同編程語言開發(fā)的程序塊;⑤處理計算輸出,可視化和解釋數(shù)據(jù),講解如何根據(jù)開源軟件和部分編程實現(xiàn)數(shù)據(jù)結(jié)果的可視化,根據(jù)編程算法原理解釋數(shù)據(jù)結(jié)果如何取得良好的效果;⑥基于開源軟件和編程語言評價數(shù)據(jù)處理結(jié)果與驗證框架。
課程總課時為32學(xué)時,共9周時間,主要是針對研究生開設(shè)的課程。課堂課程和上機實驗課程相結(jié)合,先完成課堂課程,再開始上機課程。
第一周進(jìn)行課程導(dǎo)讀與介紹,在上機實習(xí)中安裝Linux 系統(tǒng)并建立實習(xí)環(huán)境;第二、三周講授命令行語言Bash和腳本語言Python,并在實習(xí)中完成語言編寫練習(xí);第四周講授GDAL/OGR開源庫,提供了讀取矢量數(shù)據(jù)和柵格數(shù)據(jù)的API接口,在實習(xí)中采用Bash和Python語言通過GDAL/OGR開源庫的接口讀取、查詢、創(chuàng)建空間數(shù)據(jù);第五周講授GRASS 免費開源軟件,在實習(xí)中學(xué)習(xí)軟件使用和使用腳本語言Python調(diào)用GRASS庫處理二維、三維空間數(shù)據(jù);第六、七周講授開源遙感影像處理軟件Orfeo ToolBox 和開源GIS 處理軟件QGIS/PostGIS,在實習(xí)中學(xué)習(xí)軟件的使用,并使用Python語言編寫插件,加載到軟件中,快速便捷地處理空間數(shù)據(jù);第八周在課堂上演示項目操作流程、腳本語言編寫,回顧課程知識,在實習(xí)中引導(dǎo)學(xué)生小組項目開發(fā);第九周學(xué)生上臺進(jìn)行PPT 項目答辯,演示項目運行,老師評估打分。
地球信息科學(xué)開設(shè)研究生開源軟件編程課程固然對研究生技能提升有幫助,但其本身也面對諸多現(xiàn)實問題,如研究生在本科階段學(xué)習(xí)與訓(xùn)練的差異、學(xué)生的編程障礙、學(xué)生編程知識缺乏等。這些障礙并不是每個研究生都會面對和解決的,各種各樣的因素塑造并影響著每個學(xué)生的經(jīng)歷。在課程教學(xué)設(shè)計中克服這些障礙,才能達(dá)到較好效果,使學(xué)生能夠充分掌握這種技能。
地球信息科學(xué)研究生的本科專業(yè)來源廣泛,包含地質(zhì)學(xué)、生態(tài)環(huán)境、遙感和地理信息等相關(guān)專業(yè)。學(xué)生進(jìn)入研究生學(xué)習(xí)階段發(fā)現(xiàn),他們研究需要的數(shù)據(jù)處理能力和其他計算技能需要提高。盡管大多數(shù)相關(guān)專業(yè)本科生都認(rèn)同編程和使用專業(yè)軟件是學(xué)生必備的“硬技能”,但這些專業(yè)提供給學(xué)生的相關(guān)能力訓(xùn)練存在跨專業(yè)的差距,即便是同一專業(yè)在不同學(xué)校也存在差距[5]。筆者通過多年調(diào)查發(fā)現(xiàn),大多數(shù)研究生只能使用ArcGIS、ENVI 軟件處理空間數(shù)據(jù),這反映了一個持續(xù)存在的問題。在接受調(diào)查的學(xué)生當(dāng)中,缺乏訓(xùn)練被視為限制他們處理研究產(chǎn)生數(shù)據(jù)能力最重要的因素。在編程能力訓(xùn)練中,相關(guān)院校專業(yè)通常要求學(xué)生完成一門編程入門課程,學(xué)生缺乏應(yīng)用編程解決實際問題的能力,因而在研究生學(xué)習(xí)階段,缺乏將編程技能與研究方向聯(lián)系起來的能力。雖然研究生的計算機知識因本科專業(yè)和研究生導(dǎo)師而異,但他們?nèi)狈ρ芯宽椖克璧谋匾挠嬎銠C知識和技能是地球信息科學(xué)研究生普遍存在的情況。
面對學(xué)習(xí)編程的艱巨任務(wù),學(xué)生經(jīng)常會有畏懼心理,認(rèn)知和教育心理學(xué)家對此進(jìn)行了很好的描述。與筆者交流過的大多數(shù)研究生反映,他們把編程作為一種工具來完成與其研究方向相關(guān)的任務(wù),而不是專門學(xué)習(xí)編程,因此在處理數(shù)據(jù)時,傾向于使用他人編寫的代碼,而不是嘗試自己編寫代碼,如在Smith 等2014年的一項調(diào)查中,有一半的英國學(xué)者表示他們不自己編寫代碼[6]。另外,學(xué)生突然接觸到專業(yè)領(lǐng)域的復(fù)雜代碼,且未學(xué)習(xí)過編寫的語言,通常會認(rèn)為編寫類似代碼是困難的,自己不能寫出類似的代碼,產(chǎn)生諸如“解決專業(yè)問題編程不適合我”“我只是不擅長這方面編程”“編程太難了,我不會”的想法。不幸的是,這種現(xiàn)象會在學(xué)生中普遍傳播,形成一種風(fēng)氣。同時,作為學(xué)生獲取編程開發(fā)相關(guān)信息的主要渠道,博客、論壇等在線文章含有大量的簡單專業(yè)性代碼,學(xué)生在學(xué)習(xí)初期不再自己敲代碼,反而直接復(fù)制粘貼博客、論壇上的代碼,當(dāng)老師講授的內(nèi)容稍微加深一點,博客論壇上又沒有與之匹配的代碼,學(xué)生則寫不出代碼,產(chǎn)生畏懼寫代碼的心理障礙。
在本科學(xué)習(xí)階段,學(xué)生都是按照老師指定教學(xué)計劃或指導(dǎo)書進(jìn)行實踐[7],缺乏對各種編程語言優(yōu)缺點和局限性的了解。同時,面對開源軟件,即使完成了復(fù)雜的安裝和配置[8],想要使用開源軟件解決問題必須首先學(xué)習(xí)編程的基礎(chǔ)知識。編程基礎(chǔ)知識包括編程語言的語法規(guī)則、如何以切實可行的算法解決問題以及如何用編程的方式完成空間數(shù)據(jù)分析的整個流程。編程基礎(chǔ)知識的缺乏,導(dǎo)致學(xué)生面臨著陡峭的學(xué)習(xí)曲線,無法通過傳統(tǒng)課程的方式獲得相關(guān)知識與技能,因而導(dǎo)致研究目標(biāo)的進(jìn)展緩慢。
在本科專業(yè)背景、編程障礙以及編程知識缺乏的不利條件下,如何激發(fā)學(xué)生的學(xué)習(xí)熱情、營造良好的學(xué)習(xí)氛圍,對于課程的成功與否至關(guān)重要。在線討論、小組合作以及項目工程導(dǎo)向都是營造這種學(xué)習(xí)氛圍的重要因素。在課程學(xué)習(xí)中設(shè)置QQ 群或在線論壇,鼓勵學(xué)生在線討論問題,可以幫助發(fā)現(xiàn)更多問題,學(xué)生提出的問題可能也是其他學(xué)生正面臨的問題;同時,學(xué)生在討論中回答其他同學(xué)的問題,可以獲得成就感,增強學(xué)習(xí)動力。學(xué)生還可以建立不同的學(xué)習(xí)群或社區(qū),一起交流分享信息,使得在困難的編程學(xué)習(xí)上不顯得孤獨無助。任課老師也可以隨時監(jiān)測QQ群或論壇內(nèi)信息,掌握學(xué)生的實際學(xué)習(xí)狀況。
這門課程對老師也有極高的要求,開設(shè)相關(guān)課程老師必須具備地球信息科學(xué)與計算機科學(xué)兩方面強大的背景知識,同時課程的成功與否與開課老師計算機科學(xué)方面的技能密切關(guān)聯(lián)。由于專業(yè)限制,老師往往在地球科學(xué)方面知識背景強大,但計算機技能相對薄弱,導(dǎo)致授課過程中,老師往往局限特定的軟件和單一語言,如老師更多習(xí)慣使用ArcGIS軟件和其對應(yīng)的ArcPy 語言進(jìn)行編程或ENVI 軟件和其對應(yīng)的IDL 語言,而不是將課程講授的重點放到數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)模型與算法等計算機編程的相關(guān)概念上來。這樣就存在明顯的問題,軟件環(huán)境和計算機語言是不斷變化的,如果只講授一門語言和對應(yīng)的語言工具,學(xué)生掌握的技能可能很快被淘汰,因此開設(shè)相關(guān)課程的老師必須具備地球信息科學(xué)與計算機科學(xué)雙學(xué)科背景。
在筆者教學(xué)的兩年間,經(jīng)過系統(tǒng)完整的課程教學(xué)和上述教學(xué)措施,大部分學(xué)生都能彌補本科階段的差異,克服心理上編程障礙,補充完整編程基礎(chǔ)知識,還能開發(fā)出很好的GIS 項目,如利用Python 開發(fā)的GRASS項目——核電站冷卻水水溫分布和赤道中太平洋大氣二氧化碳濃度變化與洋面溫度變化的關(guān)系、基于QGIS的建筑物提取的Python插件等。
開設(shè)《GIS 編程》研究生課程,學(xué)習(xí)開源地理計算工具和編程語言,可以提高研究生解決地理空間問題的能力,同時通過激發(fā)批判性、分析性和創(chuàng)新性思維提出新的研究思路,幫助研究生對處理地理空間問題的可行性進(jìn)行初步檢驗。由于時空數(shù)據(jù)處理的復(fù)雜性,開源地理計算工具繁多且不斷演化升級,采用開源軟件結(jié)合編程來解決科學(xué)研究問題是一個巨大的挑戰(zhàn),課程內(nèi)容的設(shè)置、教學(xué)方式的研究相對于傳統(tǒng)課程也是如此,但只有克服這些挑戰(zhàn),開源工具與編程才能真正成為研究生必備的科研技能。