計算機語言算不算語言?
之前的提問可能因為沒有任何解釋和說明,帶祝大家爭論的範圍過於廣泛,這裡吧問題里的語言進行一個簡單的定義:
一種溝通的工具如果在這種定義下認為不是語言那麼是否在某種定義下會認為是一種語言呢?
首先需要明白的是何謂語言,先援引一段維基百科的詞條:
語言,就廣義而言,是用於溝通的一套方式,有其符號與處理規則,一般稱為文法。符號通常稱為文字,會以視覺、聲音或者觸覺方式來進行傳遞。 語言用來傳遞已知或未知事物的含義。 「語言」一詞可以更廣義的理解為已知或未知世界的基礎構成系統。
嚴格來說,語言是指人類溝通所使用的語言——自然語言。在一個先進的社會中一般人都必須通過學習才能獲得語言能力。語言的目的是交流觀念、意見、思想等。 語言學就是從人類研究語言分類與規則而發展出來的。研究語言的專家被稱呼為語言學家。
從第一段中語言的特點來分析計算機語言:
- 計算機語言是程序員與程序員,程序員與計算機溝通的橋樑。
- 計算機語言有其嚴格的符號集合和處理規則。
- 計算機語言可以利用感官傳遞符號信息。
- 計算機語言可以傳遞含義,其含義即計算機的行為。
從以上幾點不難看出:計算機語言符合語言的基本定義。
第二段指出了語言是指人類溝通所使用的語言,這豈不是打臉啪啪啪么?實際上,這樣的定義是站在普通大眾的角度看來的,隨機選取地球上一位人類,其會計算機編程的概率不大,但會說話的概率則比較大,對於普通大眾而言,語言就是自然語言是很直接正常的想法。
只是世界上還有一些不那麼流行的「語言」,比如數學語言,程序語言。數學語言比較抽象,通常人們不稱之為語言,但數學家們溝通就靠他們了。程序語言比自然語言抽象,比數學語言具象,是編程者所使用的語言。
很容易發現這兩種語言的特點就是相對抽象,並且使用者較自然語言少了許多,使用範圍與自然語言相比有一定偏差。若處在一個全是數學家的場合,這種符號出現完全沒有問題。若處在一個全是程序員的環境,別人問你會啥語言,你回答:「英文,中文!」,人們將紛紛一臉無奈。
如果你對一個韓國人說中文,那中文不是語言。如果你對普通人說手語,那手語不是語言。同理,如果你在和懂數學的人說話,數學語言就是語言,和一幫程序員說話,編程語言就是語言,和親戚聚會時它們都不是語言。根據實際的使用環境確定計算機語言是否為語言。
以上是從實際使用的角度出發獲得的分析,從題主的描述中,我覺得這樣的回答比較貼切。以下我將從語言學的角度進行分析,雖然我是學軟體工程的,但我曾經選修過兩門課程《編譯原理》和《自動機理論》,這兩門課讓我對編程語言有了更為深刻的認識。(其實忘得差不多了(。﹏。)
// ---注釋掉的分割線---
從形式語言的角度(數學),語言該如何理解呢?實際上語言就是字元串的集合,首先我們有一個字元表,我們有字元串,它由有限個中的符號連接而成,而字元串的集合也就是某種語言了,從這個角度來解釋,計算機語言肯定是語言。
語言學家喬姆斯基(Chomsky)曾經根據語言的表達能力定義過四類語言,它們的表達能力從弱到強分別為:正則語言、上下文無關語言、上下文有關語言和遞歸可枚舉語言。從語言學角度來說編程語言屬於上下文無關,自然語言是上下文有關語言。
自然語言的表達能力比編程語言要強,但理解的難度也比編程語言大很多。因為上下文成為了語法的影響因素,一個比較好的例子就是:陳好讀書。前頭巴拉巴拉講陳好還是巴拉巴拉講陳浩,會賦予其不同的意思。計算機語言中也會有類似的衝突和動態特性,但其複雜程度遠小於自然語言,且這些衝突不常使得語法層次結構發生變化,程序員也會有意避開危險的操作。
編程語言在很久之前就可以在短時間內進行編譯,不會有多少人吐槽編譯器出錯,而自然語言至今谷歌翻譯仍然被人們反覆吐槽。自然語言比編程語言難很多,屬於不同類別,但都是語言。
// ---注釋掉的分割線---
從編程語言本身的角度,如果你說機器語言或者彙編語言不是語言,還說得過去,畢竟完全是以機器的使用為主體,一點都不和人的思路接軌。但是在計算資源比較豐富之後,程序語言開始向高級語言發展,如今的編程語言已經具有大量自然語言的特性,學習和使用一門編程語言的時間和代價已經下降了很多了。從個人角度,我更樂意視編程語言為語言,否則總覺得對不起那幫含辛茹苦設計語言,編寫編譯器,為我們降低遊戲難度的高手們。
// ---注釋掉的分割線---
總結:從各種角度而言,我都更傾向於認為計算機語言是語言。只是要注意使用環境,要了解自然語言與編程語言之間的異同。語言和語言之間有區別,但語言還是語言。按照題主的設定 "一種溝通的工具",那麼當今的計算機語言更像是指導規則+函數的集合;並且我認為,即便是有一天計算機和人類可以完全實現溝通,那也應該是用人類的語言溝通,計算機語言的工作也只是翻譯或者指導計算機學英文、中文
綜上,按照題主的設定,個人認為計算機語言不算一門語言我覺得更多的是學習一門語言背後的實現機制,比如在不同硬體配置的計算機上,為什麼能跑出來一樣的效果。同樣的輸入,同樣的輸出,不同的演算法在時間或者空間資源上怎麼會有差。在執行語言寫的文件時,操作系統又怎麼分配資源。大家都知道計算機只能識別二進位,那麼你寫的語言又是怎麼編譯成二進位讓計算機識別的呢。綜上:就計算機本身這件事而言,我們要學習的不僅僅是一門語言而已。
當然算了
語言學本身就有數學語言學這個分支下屬的代數語言學(或者叫形式語言學)研究的內容就包括計算機語言至於「因為你說話不會總是用main或者其它一些奇怪的約定開頭」這種論調看來這位朋友大概只寫過 C 家族的語言
尋本溯源,語言並非只有人類才有,狹義來說是一種通過發聲與外界同類交流溝通的方式,動物之間也有,廣義來說只要有助於雙方溝通交流即可,所以才有肢體語言一說,所以編程語言如果作為人與電腦的溝通交流方式,當然可以算作一門語言啦。
我認為是語言。所謂語言,是一種溝通的工具,它表達的是需要傳送的內容。它需要雙方存在某種程度的共識。舉個例子,去早餐店買麵包,首先,你說的話肯定要和賣家是一種語言,意思就是他要知道你要表達什麼;其次,你要表達你想買什麼樣的麵包,是全麥的,還是肉鬆的等等,而店是他的,他自然知道如何給你提供相應的產品;最後,可能你想砍價,那你就要知道如何去砍價,你要有策略,比如對成分,保質期等等進行發難,而店家也需要具備一定的邏輯去應對。計算機語言也具備這些特點,比如,你想讓計算機做事情,最基本的,你需要一個標準輸入,並且你需要用計算機懂的語言才能讓計算機明白,比如c,彙編等等,這也是溝通的第一步。然後,你需要通過你選擇的語言告訴計算機如何去做事情,比如分配內存,移動指針,調用函數等,計算機內部的機制知道如何去處理你發出的請求。你還需要具備專業的水準,想讓計算機完成一件事情,你要了解計算機的內部規則,還需知道你完成這件事的策略,這就需要你對數據結構,演算法,有非常清楚的認知,並能夠基於你所要達成的事去制定你的策略。總得看來,語言是有效溝通的工具,而一個有效的溝通需要三個層面的共識,我姑且理解為:基準層,概念層和策略層。所以,個人認為,計算機語言不失為一個語言。
不是,因為你說話不會總是用main或者其它一些奇怪的約定開頭 也不會說一半然後jmp到某個說過或沒說過話中 計算機語言只是控制邏輯表達式
我是一名少兒編程老師,每次去和孩子們第一次解釋計算機語言的時候,都是用這樣的方式開場的。在我們的世界上有著各種各樣的語言,不同的地區,不同的人群,都講著不同的語言,而語言的區別不僅僅在於人和人之間,也區別於動物之間,不同的語言我們如果沒有學習的話,是無法理解它所表達的意思的,簡單的來說,如果我們沒有學習英語,那麼我們一定聽不懂用英文說的話,如果外國人沒有學習過漢語,也是一樣,而這個時候如果想要很好的交流,那麼我們就需要去學習或者翻譯。不過在我們的身邊還存在著另一種不一樣的語言,它就是計算機的語言,我們平常在操作計算機時與他的互動並不是真正的與計算機溝通的方式,而是無數的工程師們,幫大家提前翻譯好了,在什麼時候,計算機該怎麼做,而對於計算機來說,最基本的語言是什麼呢?0和1,真和假,是和否,不過由於這樣的計算機語言過於複雜,我們不這樣講,這裡我講的計算機的語言是指目前常見的各種編程語言,我們需要將自己的要求,翻譯為計算機所聽得懂的語言,而這個過程在過去,非常的專業和複雜,而在今天,孩子們就已經能夠去通過計算機語言和計算機溝通,來創造屬於自己的新世界了。當然,為了讓孩子們能夠更好的和計算機溝通,強大的計算思維邏輯能力必不可少,演算法、抽象、分類等等在過去都是非常枯燥難懂的概念,而今天卻成為了孩子們最喜歡的遊戲活動。其實到最後跑題了
不是。按照現代語言學對語言的定義,「語言」指的是語音本身,而非其表意符號。
你所謂的語言概念應當是人類語言吧。人類語言至少待能說。你拿c語言交流一下?
是毛線語言,別偷換概念了好嗎,照你們這樣換概念,什麼都是語言,藝術系信息技術系直接歸併外語系好不好?你換一種手槍的打法,我們直接管你叫polyglot好不好?因為照你們的說法,信息傳播即語言啊
拜託對語言學有點基本的了解再來答題,語言是言語交際的方式,是有定義特徵的。
什麼是定義特徵?別的不說,最起碼要有創造性。什麼是創造性?能傳遞無數的信息。你用計算機語言寫首詩我看看?你用計算機語言討論一下計算機語言的發展歷程我看看?罵個娘我看看?膜個蛤我看看?搞清楚是用計算機語言,不是寫了半天最後輸出內容時用英語漢語各種真正的語言如果你所謂的語言,是指英文/中文/德文/法文/日文這一種的,那麼計算機語言不是一種語言。
你很顯然不會和別人「說」這種語言,不會以這種語言和別人溝通。對於計算機來說,是。對於人來說,不是。
推薦閱讀:
※國人對於國外CS教材是否存在盲目崇拜心理?
※Node.js是用來做什麼的?
※前端的表單驗證還有必要嗎?
※如何用計算機程序驗證E=mc^2?