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