?"語言并非僅僅是一種用以交流思想的工具,而且是存在的住所。"
編程思維與編程語言是編程中兩大重要板塊。輕松搭建編程邏輯的關(guān)鍵,在于準確把握它們的本質(zhì)。
編程語言種類有很多,Python、C語言、C++,Java.....當(dāng)然還有孩子喜歡的Scratch圖形化編程語言。這么多編程語言,共通之處在哪里?新手老師,如何快速掌握一門編程語言?孩子學(xué)編程語言,關(guān)鍵在于學(xué)什么?
一、萬變不離其宗,編程語言的實質(zhì)是什么?
語言是人類最重要的交際工具,是人們溝通的主要表達方式。
人類迄今為止發(fā)明了三種標志性的語言,分別是自然語言、數(shù)學(xué)語言、程序語言,分別對應(yīng)了人類的三個文明時代:農(nóng)業(yè)與手工業(yè)時代、工業(yè)時代、信息時代。
每一種符號體系的建立都是人類智慧跨越式的發(fā)展,是上了一個大臺階。
相比于人類語言,琳瑯滿目的編程語言,它們的實質(zhì)是什么?
實際上,任何一門編程語言至少包含兩類內(nèi)容:? ? ?
知識(編程語言的共性,可遷移)
規(guī)則(編程語言的特性,不可遷移)
知識是共性,面向所有編程語言通用。
規(guī)則是特性,一門編程語言特有的規(guī)則。
就像人類語言用于人與人的交流,編程語言能實現(xiàn)人與機器之間的交流溝通,讓人類可以享受智能服務(wù)的便利與好處。編程語言的實質(zhì),在于人機高效溝通的規(guī)則。
1)首先,編程是一門語言類技能
通俗的說,語言基本被定義成一種人際溝通的工具,或用于人際溝通的一組符號。而編程語言(Programming Language)可以簡單理解為一種計算機和人都能識別的語言。既然能稱作做語言,同樣也遵循著語言的規(guī)律。
我們學(xué)習(xí)一門語言,最接近本質(zhì)地學(xué)習(xí)一門語言時,我們最關(guān)心什么?
答案就是這個語言的規(guī)范/語言標準。正是這份規(guī)范/標準里的內(nèi)容,讓一門語言真正成了一門語言。
人類語言的規(guī)則,并沒有一開始就被固化在某處,而是會經(jīng)過一個動態(tài)學(xué)習(xí)的過程,然后最終被固化在人類大腦中。
人類的語言是人與人直接交流用的,經(jīng)過了幾十萬年的打磨,可以比較隨意地表達,文字順序亂了我們也能看得懂,因為有文化和語境的幫助。然而,機器為了準確,不能有這樣的隨意性,必須得有一定的規(guī)范。
2)其次,編程語言規(guī)范,起源于人機相互馴化
編程語言和人類語言相似的地方,在于都有一定規(guī)則:
誰是傾聽者、執(zhí)行者,誰就要理解命令者語言背后隱含的意義;同樣的,誰是發(fā)號施令者,發(fā)起溝通的人,誰就有義務(wù)把話說清楚、說明白、保證對方基本能聽懂。
橫梗在現(xiàn)實的問題是:機器與人類不同。
機器,是人類發(fā)明出來的傀儡,勝在“嚴謹刻板”“唯令是從”,也敗在“機械呆板”“不知變通”。
人類不屑于機器唯令是從的特性,機器也沒有快速理解人類意圖的智慧。
人類的語言充滿迂回,不同個性的人溝通時,過于木訥,缺乏共同的文化背景、經(jīng)歷與共識,不敞開天窗說亮話,就有人根本聽不出話中話、弦外之音,機器更是如此。
然而,畢竟是我們想讓機器代勞,我們就得使盡招數(shù)讓機器力所能及,就是我們?nèi)祟愊热ダ斫鈾C器的行事風(fēng)格和思維方式,然后再教會機器全力理解人類的意圖與規(guī)則。
這就相當(dāng)于我們想讓英國人替我們完成一個任務(wù),我們說英語的效率最高;我們想讓計算機完成任務(wù),我們就要去理解計算機的運作方式,然后輸入計算機能識別的語言。
編程語言的誕生與演化,其實是人類與機器互相學(xué)習(xí)、雙向馴化的產(chǎn)物,是“讓機器聽人類”與“還是讓人類懂機器”雙方博弈的結(jié)果。
二、編程語言的演變:編程語言是如何演化的?
編程語言自誕生起,就是在不斷的進化升級,進化的方向包括兩種:更像機器的語言,還是更像人類的語言。
1)第一階段:機器語言
第一代計算機語言,稱為機器語言。用二進制代碼0和1描述的指令稱為機器指令。全部指令的集合構(gòu)成計算機的機器語言。
機器的底層世界只是有電和沒電兩種狀態(tài),分別用1和0表示,這就是二進制的來源。在計算機內(nèi)部,無論是一部電影還是一首歌曲或是一張圖片等等,最終保存的都是0和1組成的代碼。
機器語言對于CPU來說十分親切友好,能夠被CPU識別并執(zhí)行,但是對于設(shè)計開發(fā)人員卻完全相反。畢竟機器語言不是人類擅長使用的語言,它的可閱讀性很差。
理解機器語言尚需要時間,更別提用它編寫程序。人們很快就設(shè)計出來了各種高級語言來編程,但是也帶來了新的問題——計算機讀不懂我們寫的程序。
2)第二階段:匯編語言
為了辨別和記憶,人類開始使用第二種語言,即將 0/1 代碼翻譯為英文單詞,這些英文單詞直接對應(yīng)著一串 0/1 指令。這個就是匯編語言。
通過專門的軟件就可以將這些英文單詞轉(zhuǎn)化成 0/1 代碼并由計算機執(zhí)行,這種專門起翻譯的作用的軟件叫作編譯器。
這些英文單詞和與它們對應(yīng)的 0/1 代碼之間的對應(yīng)關(guān)系,以及語言的語法,在編寫這個軟件的時候就已經(jīng)寫在里面了。只需要通過編譯器就可以將這些都轉(zhuǎn)化成 0/1 代碼,大大方便程序的編寫。
3)第三階段:高級語言
第三代語言又叫“高級語言”,就是我們今天不斷進階的各類編程語言,可閱讀性更強,能夠方便地表達程序的功能,更好地描述使用的算法,更容易被初學(xué)者所掌握。
編程一般用高級語言,計算機不能直接理解高級語言,只能理解和運行機器語言,所以必須要把高級語言翻譯成機器語言,計算機才能運行高級語言所編寫的程序。
三、思維vs語言:為什么學(xué)習(xí)編程能夠訓(xùn)練思維?
在農(nóng)業(yè)與手工業(yè)時代,人類對上帝的隱喻就是一個農(nóng)夫;工業(yè)時代,上帝被假想為一個偉大的機械工程師;而今天,最精妙的隱喻就是——上帝是一個程序員。當(dāng)你觀察DNA上基因的序列時,你一定覺得那是偉大程序員的作品。
編程語言是一種簡潔的、高純度的、形式化的知識系統(tǒng)。它的類比對象是自然語言、數(shù)學(xué)語言,是一種思維工具。它的關(guān)鍵作用是塑造一種全新的世界觀、思維方式、解決問題的手段,掌握它的人可以發(fā)掘出這個世界更深、更廣的可能性。
不論是歷史中的可編程發(fā)明,還是近代的計算機編程語言發(fā)展,我們都能從中看出,編程技術(shù)的目的是駕馭機器、駕馭計算機,讓它們更高效地解決問題。
所以孩子學(xué)編程時,要逐步接觸、理解、體驗編程的邏輯操作、算法、數(shù)據(jù)結(jié)構(gòu)、工程設(shè)計等通用的工程方法與數(shù)學(xué)知識,這樣才符合孩子的學(xué)習(xí)成長規(guī)律。
學(xué)生在需要使用新的編程語言時,這些核心知識也能夠幫助他們更快融匯貫通。更重要的是,學(xué)生可以脫離編程語言,更純粹地思考如何讓計算機解決問題,具有“編程思維”。
現(xiàn)在為了競賽升學(xué),很多家長送孩子去學(xué) C++ 之類的編程語言。在小學(xué)階段就開始學(xué) Python和C++編程語言意義不大。因為孩子的抽象思維和形式邏輯思維發(fā)展還不完善,對純代碼難以產(chǎn)生真正的理解,很容易死記硬背。
而語言是死的,而思維是活的。學(xué)編程,重要的是掌握編程語言的語言特性,而不是語言本身。畢竟,大多數(shù)孩子未來不會靠編程吃飯,學(xué)習(xí)編程的目的,更偏重于培養(yǎng)編程思維,把編程中的概念和解決問題的方法論,盡可能地應(yīng)用到學(xué)習(xí)和生活中去。
寫在最后
對于兒童而言,編程語言的學(xué)習(xí),可以是無意識的伴隨狀態(tài),關(guān)鍵在于學(xué)習(xí)編程語言的規(guī)則,也就是規(guī)則背后思維的訓(xùn)練!不管是從語言角度,還是從思維角度出發(fā),學(xué)編程對孩子最重要的還是掌握編程思維、搭建編程邏輯。打好編程思維基礎(chǔ)后,掌握了用搜索引擎查找資料、閱讀官方文檔、在社區(qū)求助的能力之后,孩子日后完全可以自學(xué)任何一門編程語言,真正受益!