熊熙+喬少杰+李斌勇


【摘要】文章針對大學(xué)計(jì)算機(jī)專業(yè)新生遇到的如何選擇和學(xué)習(xí)編程語言的問題,分析每種編程語言的特點(diǎn),提出以掌握關(guān)鍵的通用語言特性為核心的學(xué)習(xí)方法。該方法可以使學(xué)生提高學(xué)習(xí)效能,快速掌握具體編程語言的核心技術(shù),提高實(shí)踐技能。
【關(guān)鍵詞】編程語言;語言特性;整體性思維
為適應(yīng)不同應(yīng)用場景和用戶需求,近幾年計(jì)算機(jī)領(lǐng)域出現(xiàn)了眾多的新技術(shù),同時編程語言也種類繁多,使學(xué)生在學(xué)習(xí)過程中感到茫然與困惑。新入學(xué)的計(jì)算機(jī)相關(guān)專業(yè)大一新生,通常會從基礎(chǔ)的C語言開始學(xué)習(xí),然后逐步接觸各種面向?qū)ο缶幊陶Z言,如C++和Java等。此外,實(shí)踐環(huán)節(jié)也要求他們另外掌握一些編程語言,以完成不同的任務(wù)。面對難度和用途各異的編程語言,大學(xué)新生在學(xué)習(xí)過程中問得最多的問題就是應(yīng)該學(xué)習(xí)什么編程語言,以及怎么學(xué)習(xí)。
一、編程語言選擇的困惑
新生在學(xué)習(xí)完計(jì)算機(jī)基礎(chǔ)和面向過程的C語言后,都會進(jìn)入到更加復(fù)雜的面向?qū)ο缶幊陶Z言的學(xué)習(xí)。如何在最短時間掌握一種語言的核心技術(shù),有必要在計(jì)算機(jī)課程初期進(jìn)行介紹,以便學(xué)生選擇課程和自學(xué),并提高其學(xué)習(xí)興趣和學(xué)習(xí)效率,避免少走彎路。這些主要問題包括:
是否應(yīng)該選擇最熱門和最時髦的編程語言來學(xué)習(xí),以利于日后找工作?是否應(yīng)該買一本經(jīng)典書籍來學(xué)習(xí)某種編程語言?在學(xué)習(xí)一門語言的過程中,是否應(yīng)該學(xué)習(xí)完該語言的所有特性以后才開始練習(xí)?如何避免長期不用某種語言導(dǎo)致的知識遺忘?
二、重視語言特性
有不少學(xué)生每學(xué)一種語言,遇到深入一點(diǎn)的特性就放棄,然后轉(zhuǎn)而學(xué)習(xí)其他語言,最后一個學(xué)期下來還是只會簡單的算術(shù)運(yùn)算和循環(huán)。殊不知任何一種編程語言都是各種語言特性的組合。如果將一種編程語言看作一臺電腦,那么它的牌子可能是聯(lián)想、Dell或者蘋果。蘋果電腦一般比其他電腦昂貴,但是并不能簡單認(rèn)定蘋果電腦就一定比聯(lián)想或者Dell好。電腦的好壞主要由其配置決定,比如處理器型號(包括核數(shù)、主頻大小、緩存大小)、內(nèi)存大小、硬盤大小、顯示器分辨率和顯卡型號等等。在這里,電腦的品牌相當(dāng)于編程語言的名稱,而電腦的配置就相當(dāng)于編程語言的語言特性。常用的語言特性包括變量定義、算術(shù)運(yùn)算、循環(huán)語句、函數(shù)定義及調(diào)用、遞歸、靜態(tài)特性、類型轉(zhuǎn)換、面向?qū)ο筇匦浴⒗厥蘸椭羔樚匦缘取?/p>
在學(xué)生接觸C語言之后,有必要為他們概括介紹所有語言的語言特性,使其了解語言特性與特定語言無關(guān),學(xué)好任何一門編程語言都可以成為編程高手。
三、授課方法
(一)介紹所有編程語言的整體概述
TIOBE編程語言社區(qū)排行榜是編程語言流行趨勢的一個指標(biāo),每月更新,這份排行榜排名基于互聯(lián)網(wǎng)上有經(jīng)驗(yàn)的程序員、課程和第三方廠商的數(shù)量。排名使用著名的搜索引擎(諸如Google、Wikipedia、YouTube以及Baidu等)進(jìn)行計(jì)算。圖1列出了2017年7月編程語言排行榜的前10種語言。
(二)介紹編程語言的分類及區(qū)別
本文討論的編程語言都屬于高級語言的范疇,不包括匯編語言等底層編程語言。可以用不同標(biāo)準(zhǔn)對高級編程語言進(jìn)行分類。從對事務(wù)的認(rèn)識上來進(jìn)行區(qū)分,可以分為面向過程的編程語言和面向?qū)ο蟮木幊陶Z言;從可執(zhí)行文件的生成和執(zhí)行過程來劃分,可分為編譯型語言、解釋型語言、混合型語言。
1.編譯型語言,包括C、C++等。這里說的編譯是指在應(yīng)用源程序執(zhí)行之前,就將程序源代碼翻譯成匯編語言,然后進(jìn)一步根據(jù)硬件環(huán)境變成符合運(yùn)行需要的機(jī)器語言的目標(biāo)文件。這種方式使用比較方便,效率較高。但應(yīng)用程序一旦需要修改,必須先修改源代碼,再重新編譯生成新的目標(biāo)文件才能執(zhí)行,只有目標(biāo)文件而沒有源代碼,幾乎是沒法修改的。大多數(shù)軟件產(chǎn)品都是編譯后發(fā)行給用戶的,不僅便于直接運(yùn)行,同時又使他人難于盜用其中的一些原始代碼。
2.解釋型語言,包括Python、Perl、JavaScript等。解釋型語言的實(shí)現(xiàn)中,翻譯器并不產(chǎn)生機(jī)器語言的目標(biāo)文件,而是產(chǎn)生易于執(zhí)行的中間代碼,這種中間代碼與機(jī)器代碼是不同的,中間代碼的解釋是由解釋器軟件支持的,不能直接使用硬件,解釋器軟件通常會導(dǎo)致執(zhí)行效率較低。用解釋型語言編寫的程序是由另一個可以理解中間代碼的解釋程序執(zhí)行的。與編譯程序不同的是,解釋程序的任務(wù)是逐一將源程序的語句解釋成可執(zhí)行的機(jī)器指令,不需要將源程序翻譯成目標(biāo)代碼后再執(zhí)行。解釋程序的優(yōu)點(diǎn)是當(dāng)語句出現(xiàn)語法錯誤時,可以立即引起程序員注意,而程序員在程序開發(fā)期間就能進(jìn)行校正。
3.混合型語言。有些人為了特殊目的制造混合型語言,例如Java。Java程序也需要編譯,但是沒有直接編譯成為機(jī)器語言,而是編譯成為字節(jié)碼,然后在Java虛擬機(jī)上用解釋方式執(zhí)行字節(jié)碼。這種運(yùn)行方式具有一些優(yōu)勢,但同時直接導(dǎo)致了復(fù)雜的環(huán)境、不算很高的效率和很多的爭議。
基于以上劃分標(biāo)準(zhǔn),表1列出了幾種常用編程語言的特性與區(qū)別。
(三)推薦合理的入門語言
大學(xué)新生因?yàn)閯偨佑|計(jì)算機(jī)專業(yè)知識,只是模糊了解一些編程技術(shù)。因此,有必要從一種體系完整的、沒有明顯缺陷的語言出發(fā),培養(yǎng)編程興趣,掌握最關(guān)鍵的語言特性,然后由此把這些概念應(yīng)用到其他語言。
總的說來,腳本語言不適合作為入門語言,尤其是那些源于早期UNIX系統(tǒng)的腳本語言,例如Shell。使用腳本語言作為編程入門語言,一個很嚴(yán)重的問題就是使得學(xué)習(xí)者抓不住關(guān)鍵。腳本語言為了簡化編程,往往把一些系統(tǒng)工具性質(zhì)的東西(比如正則表達(dá)式、Web概念等)加入到語法里面,導(dǎo)致初學(xué)者為它們浪費(fèi)太多時間,卻沒有掌握核心的語言特性,即變量、函數(shù)、遞歸、類型等。因此,好的入門語言應(yīng)該使學(xué)習(xí)者專注于學(xué)習(xí)最核心的語言特性。
選擇編程語言時可以參考圖1的排行榜,盡量選擇流行度高的語言,以保證未來更多的就業(yè)崗位,同時也應(yīng)該考慮編程語言對核心語言特性的表現(xiàn)方式。鑒于此,這些語言可以推薦為入門之用:C、Java、Python、JavaScript。相比之下,這些語言則不適合用于編程入門:Shell、PowerShell、Perl、PHP、Basic、Go。
(四)培養(yǎng)興趣,重視實(shí)踐
在具體學(xué)習(xí)某種編程語言的過程中,學(xué)生應(yīng)該掌握以下基本方法。
第一,在掌握上述通用語言特性的基礎(chǔ)上,針對某種編程語言,首先粗看語法,將之前學(xué)習(xí)的語言特性具體化,理解該語言特性的具體表示形式;然后閱讀一些示范性小程序,了解該特性的實(shí)際用法;接著快速練習(xí),并在練習(xí)過程中有針對性地查找相關(guān)資料,深化對該特性的認(rèn)知。
第二,初學(xué)者切忌閱讀過厚的經(jīng)典編程書籍,因?yàn)檫@些書籍大多是資深程序員所寫,對許多高級特性講解十分透徹,但是并不適合初學(xué)者。
第三,在掌握基礎(chǔ)語法、特性和使用方法后,可以結(jié)合稍大的具體例子進(jìn)行練習(xí),以培養(yǎng)編程興趣,提升成就感。當(dāng)完成所有語言特性學(xué)習(xí)以后,可以在github中關(guān)注某些開源項(xiàng)目,以實(shí)際項(xiàng)目驅(qū)動學(xué)習(xí),同時鞏固所學(xué)的各種語法,提升編程技術(shù)。
第四,在掌握一門語言以后,需要重新將該編程語言的語言特性抽象出來,為以后快速學(xué)習(xí)其他編程語言做好準(zhǔn)備,也可以在長時間不用該語言導(dǎo)致知識遺忘時進(jìn)行快速回顧。
四、結(jié)語
如何選擇合適的編程語言,是一個基礎(chǔ)性的問題,容易被教師和學(xué)生忽略。掌握關(guān)鍵的語言特性是學(xué)習(xí)的核心,并在此基礎(chǔ)上通過實(shí)踐逐步學(xué)習(xí)某種語言的語法,循序漸進(jìn)地培養(yǎng)編程興趣。相信大多數(shù)學(xué)生都會愛上編程和計(jì)算機(jī)技術(shù)的。endprint