軟件工程:偉大的程序員不寫代碼?快看看未來(lái)“好的”編程語(yǔ)言應(yīng)該長(zhǎng)什么樣

每篇一格言:
to err is human; to forgive, divine(博主譯:人非圣賢,孰能無(wú)過(guò);聞過(guò)則喜,點(diǎn)凡成圣)
——Alexander Pope

前言

2020年3月TIOBE編程語(yǔ)言排行榜:Java繼續(xù)蟬聯(lián)榜首,C、Python、C++、C#、Visual Basic .NET、JavaScript、PHP、SQL、Go分列前十。這不禁令人深思,像C和C++這種誕生于40年前的語(yǔ)言,為何仍然這么有生命力?

下面隨我一起,思考“好的”編程語(yǔ)言應(yīng)該是什么樣子的。
在定義什么是”好“之前,首先需要考慮的是,為什么會(huì)有編程語(yǔ)言,或者說(shuō),編程語(yǔ)言是干什么用的?


在這里插入圖片描述

1.編程語(yǔ)言,人與機(jī)器的溝通工具

計(jì)算機(jī)的天然語(yǔ)言是二進(jìn)制組成的指令;
人類用的語(yǔ)言稱為自然語(yǔ)言。,計(jì)算機(jī)無(wú)法理解;
于是問(wèn)題來(lái)了:怎樣讓計(jì)算機(jī)理解人類的指令并執(zhí)行任務(wù)呢?
直接的思路是把人類用的自然語(yǔ)言翻譯成機(jī)器語(yǔ)言,但這是十分困難的,主要原因是自然語(yǔ)言不是一種形式語(yǔ)言,翻譯自然語(yǔ)言有三個(gè)難點(diǎn):
歧義性:
自然語(yǔ)言充滿了歧義,需要通過(guò)上下文才能理解確切含義
冗余性:
自然語(yǔ)言存在大量冗余,這些冗余主要是為了消除歧義而存在,但帶來(lái)的問(wèn)題就是不夠簡(jiǎn)潔。
言外之意:
自然語(yǔ)言中有很多字面以外的意思,如果不結(jié)合具體情境極易造成誤解。

在這里插入圖片描述

因此,我們需要一種形式語(yǔ)言,也就是編程語(yǔ)言,它是簡(jiǎn)潔、準(zhǔn)確、有效的,人能看懂,同時(shí)也容易翻譯成機(jī)器語(yǔ)言,來(lái)解決與機(jī)器的溝通問(wèn)題。

2.編程語(yǔ)言,發(fā)揮人與機(jī)器的優(yōu)勢(shì)

既然編程語(yǔ)言是人與機(jī)器的溝通工具,那么它應(yīng)該是側(cè)重于適應(yīng)人還是側(cè)重于適應(yīng)機(jī)器呢?換句話說(shuō),是讓人用起來(lái)更方便,還是讓機(jī)器更方便?在回答該問(wèn)題之前,我們需要先討論人與機(jī)器的比較優(yōu)勢(shì)。

機(jī)器相對(duì)于人的優(yōu)勢(shì):

運(yùn)算速度極高,遠(yuǎn)勝于人;
嚴(yán)謹(jǐn)度極高:
對(duì)于人類來(lái)說(shuō),打錯(cuò)一個(gè)字,算錯(cuò)一個(gè)數(shù)是很常見的;對(duì)于機(jī)器來(lái)說(shuō),這是不被允許的。
處理問(wèn)題的復(fù)雜度規(guī)模遠(yuǎn)勝于人:
一次處理一千萬(wàn)行代碼,對(duì)于人是個(gè)巨大的挑戰(zhàn);對(duì)于機(jī)器來(lái)說(shuō)只是個(gè)普通工程。

人相對(duì)于機(jī)器的優(yōu)勢(shì):

我認(rèn)為人類的最大優(yōu)勢(shì)是思維方式的不同,主要有下面幾點(diǎn):
辯證思維:
機(jī)器最擅長(zhǎng)的是邏輯思維,true or false,這是機(jī)器的底層硬件中的設(shè)計(jì)如此;
人類還具備辯證思維,也就是“亦真亦假”,“對(duì)立統(tǒng)一”,目前機(jī)器不具備這種理解能力。
模糊思維:
“直覺(jué)告訴我,這是對(duì)的”,“大概是往這個(gè)方向走”,人類擅長(zhǎng)做出模糊判斷,但是對(duì)于機(jī)器來(lái)說(shuō),這是不可思議的。
創(chuàng)新思維:
創(chuàng)新思維是指以新穎獨(dú)創(chuàng)的方法解決問(wèn)題的思維過(guò)程,通過(guò)這種思維能突破常規(guī)思維的界限,以超常規(guī)甚至反常規(guī)的方法、視角去思考問(wèn)題。目前在這一點(diǎn)上,機(jī)器只能拙劣的模仿,無(wú)法超越。

在這里插入圖片描述

通過(guò)對(duì)比,我們可以得出這樣的推論:

推論1:編程語(yǔ)言的設(shè)計(jì)原則是充分發(fā)揮人和機(jī)器的比較優(yōu)勢(shì)。

一個(gè)具體的例子是內(nèi)存管理。由于內(nèi)存管理很復(fù)雜,它應(yīng)該由編程語(yǔ)言負(fù)責(zé),因?yàn)闄C(jī)器最擅長(zhǎng)處理復(fù)雜的結(jié)構(gòu)和邏輯關(guān)系。有誰(shuí)會(huì)認(rèn)為開發(fā)者花費(fèi)大量精力處理內(nèi)存泄漏是值得的呢?開發(fā)者沒(méi)有必要越俎代庖去管理內(nèi)存,反過(guò)來(lái)說(shuō),如果管理內(nèi)存是必須的,那開發(fā)者是不是也要直接操作ALU呢?當(dāng)然不是。應(yīng)該想想我們編程的目的是什么。
而之所以目前開發(fā)者需要掌握內(nèi)存管理知識(shí),是因?yàn)榫幊陶Z(yǔ)言沒(méi)有做好。但相比較而言,java比C++做的更好。


在這里插入圖片描述

3.編程語(yǔ)言,以人為本還是以機(jī)器為本?

軟件開發(fā)行業(yè)存在一條鄙視鏈,通常是用匯編語(yǔ)言的看不起用C語(yǔ)言的,用C和C++的看不起用java的。這是為什么呢?博主推測(cè)可能是因?yàn)榈图?jí)語(yǔ)言要求更多的硬件知識(shí),而這些知識(shí)在高級(jí)語(yǔ)言中已經(jīng)不那么重要了。所以鄙視鏈的核心是知識(shí)結(jié)構(gòu)。
但是,從另一個(gè)角度看,只有高級(jí)語(yǔ)言才更符合編程語(yǔ)言的設(shè)計(jì)原則。
為什么呢?

3.1誰(shuí)是主角?

在編程這件事上,人是主體,機(jī)器是客體,起決定作用的是人。人是否有足夠的時(shí)間和條件發(fā)揮創(chuàng)造力、有效的工作直接決定著編程的成敗。


在這里插入圖片描述

據(jù)此我們可以得出另一個(gè)推論:

推論2:編程語(yǔ)言的另一設(shè)計(jì)原則是充分便利開發(fā)者。

如果一個(gè)指令讓開發(fā)者用一條語(yǔ)句就能實(shí)現(xiàn)的話,又有何必讓他操作指針,寄存器,甚至機(jī)器碼呢?對(duì)于人來(lái)說(shuō),指針,寄存器這些是很不友好的。讓容易疏忽犯錯(cuò)的人類去操作指針,然后再花費(fèi)大量的精力去debug野指針和內(nèi)存踩壞的問(wèn)題,這樣的思路正確嗎?

4. 編程語(yǔ)言,暢想未來(lái)

在我看來(lái),當(dāng)前的軟件開發(fā)行業(yè)仍然處于手工業(yè)時(shí)代。代碼基本靠人敲,bug基本靠人改,原始而低效。
不久的將來(lái)可能會(huì)朝著機(jī)械化生產(chǎn)演變,到那時(shí),
優(yōu)秀的軟件開發(fā)者會(huì)變成“思想的巨人,行動(dòng)的矮子”。
這句話該如何理解呢,那就是開發(fā)者注重研究設(shè)計(jì)思想并提供給機(jī)器,而代碼組織、編譯、debug這些工作交給編程機(jī)器來(lái)處理了。

在這里插入圖片描述

我們以這段假想的對(duì)話作結(jié)尾:

面試官:知道指針怎么用嗎?
開發(fā)者:不知道。
面試官:知道hashmap的原理嗎?
開發(fā)者:不清楚。
面試官(不耐煩):說(shuō)說(shuō)你清楚啥?
開發(fā)者:我知道該做出什么樣的軟件產(chǎn)品,并且知道如何讓機(jī)器理解并制作出這樣的軟件出來(lái)。我的目標(biāo)是軟件設(shè)計(jì),就像服裝設(shè)計(jì),不需要關(guān)注怎樣紡布織毛衣,而是把精力花在設(shè)計(jì)出受歡迎的時(shí)裝上。至于紡布和織毛衣,交給機(jī)器就好。

面試官:(沉思)。。。你是未來(lái)型人才。你的思想已經(jīng)超前了10年。我們決定給你offer,10年以后你來(lái)上班吧。

發(fā)表時(shí)間:2020-3-12

本文為博主原創(chuàng)。看完請(qǐng)點(diǎn)贊,我們2030年再見。

本文由博客群發(fā)一文多發(fā)等運(yùn)營(yíng)工具平臺(tái) OpenWrite 發(fā)布

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容