|
系列文章導航:
軟件發展至今,無論是編程語言,還是軟件工程,乃至是互聯網的趨勢發展,都是飛速發展。于是,我們便迷茫于這樣形形色色的語言和概念之間,無所適從。其實,我們不妨返璞歸真,回到最初,讓我們從語義出發,來討論這形形色色的種種,你是否恍然大悟呢?
1. 何為語義
我們無論是在編程,還是在架構一個完整而龐大的軟件,總結起來,無外乎在構建一個場景,或者說,在搭建一個虛擬的世界。
那么我們在回想一下我們在小學寫作文的過程,無外乎也是在描述一段場景,或者是重繪當初的場景,也就是老師常說的要寫真人,寫真事,抒發真實情感;或者是描述自己虛幻的場景,或表達夢境,或表達理想。
讓我們對比這兩件事情,我們會發現,他們都是在用語言構建一個世界,唯一不同的只是一個是用我們的自然語言,一個是用我們的計算機語言,只此而已。
那么,當我們埋怨我們被無數的概念所砸到,被無數的編程思想所淹沒的時候,埋怨著設計無從下手的時候,我們是否可以去嘗試著返璞歸真,用我們小時候最擅長的作文來反過來思考這些問題呢?說白了,也就是從自然語言向計算機語言,或者是自然語言思維向計算機語言思維的轉化過程。
這就是我想在本文中提出的,針對自然語言的編程。
2. 看編程語言的發展
讓我們先來探討下編程語言的發展。
從第一代語言開始,當時的世界只有0和1,偉大的程序員們靠著向紙帶上打孔來編程。
而后到了第二代產生了匯編語言,程序員們可以用一些指令來操作內存,從而達到自己想要的效果。
在我看來,機器語言到匯編語言的轉變絕對是一個質的飛躍,不僅代表著軟件和硬件地分離,更是程序員們可以用自己的語言(類英語)來表達自己的想法。
在之后就產生了過程式語言,這里以C語言為代表,這時也產生了一種編程思想,叫做面向過程的軟件設計。程序員們可以用自己的思維去思考問題:這個事情應該先做什么,后做什么,而每個步驟就是一個方法。我們也稱之為自頂向下的軟件過程。
隨著軟件的發展,軟件越來越龐大,功能越來越多,從軟件過程的角度來講,我們可以說,樹頂越來越多,我們再也無法像曾經一樣,抓住一個或少數的樹頂,然后向下延伸,這時,便產生了近十年的熱潮:面向對象的軟件設計。
面向對象的軟件設計是考慮,這個有哪幾個對象,每個對象都能干什么,從而根據對象的協作去完成一個大的任務。而每個對象對其他的對象都是不知情的,也就是說每個對象都可以不去關注整個軟件的整體業務邏輯,我也把這個特性稱為軟件對對象的透明性。
在旁支,又產生了函數式語言,面向服務的軟件設計,面向契約的軟件設計,并發式編程等形形色色的概念,而這些,我會在下文中來簡要探討。
3. 思維成熟的歷程
短短地幾十年,看軟件世界的變革,你是否有些無所適從呢?那么,在未來的軟件世界里,也就是在我們未來的工作里,編程語言又會變成什么樣呢?當面向過程與面向對象這些我們熟悉地概念被時代所拋棄后,我們又該何去何從呢?
好,我們先不去想這些煩心的事,讓我們向前追溯,回歸童年時代,來想想我們寫作文的歷程。
從幼兒園時,我們不認識幾個字,我們想寫一篇文章,想的不是我們怎么樣構建好一個場景,而是我們要如何把我認識的這些有限的字用上,而最后故事的過程,我們不得而知。這時,我們不是在為了寫作文而寫作文,而是為了可以向大人們展示,我認字的多少。這不正像最初的機器語言時代么?我們關注的是0和1的組合,把自己的著重點都放在了詞匯之間的組合上,而一些程序員卻常常會為此忽略了整個宏觀的程序。
接下來,我們上了小學,我們不再沉迷于生字,生詞的堆積,我們學會了很多漂亮的句子,詩詞,名言警句,那么這里,我們可能關注的是,我們如何更好地組織這些句子,讓整個文章讀起來更通順,也是在小學時,誕生了中國經典的語文題目:改病句。好,我們來想想匯編語言,匯編語言把0,1代碼封裝,暴露給我們一個個操作內存和運算的指令,我們需要關注的是我們怎么樣把這些指令組合到一起,是先mov然后add然后中斷,抑或是……..否則,整個程序很可能都因此崩潰。
然后,我們上了初中,我們開始寫記敘文,這時的情節非常簡單,出場人物很少,這時,老師向我們灌輸了經典的“三段論”思想:事情的起因是什么,事情是什么樣的,事情的結果是什么。當我們構思一篇文章的時候,需要做的就是把這件事情考慮清楚,然后按照順序去一件事情一件事情按順序去寫,這也就是我們的面向過程編程。
當我們長大了,成熟了,當時韓寒,郭敬明,安妮寶貝,以及越來越多的網絡小說讓我沉迷上了構造一個個悲情的故事,故事的主角開始多了起來,主角之間都有著錯綜復雜的關系,三角戀,甚至四角戀的橫行,以及多故事線索的穿插,讓我們曾經的思維越來越不夠用。于是,就產生了一種當時我很癡迷的格式,在文章開始,我會首先介紹所有的故事主角,然后根據他們的角色去劃他們的關系,行為。這就是我們的面向對象軟件設計。
由此可見,軟件設計思想的發展其實和我們的思維是一樣的,是隨著世界的復雜性的增加而調整設計的思維,調整我們思考問題的方式和出發點。
4. 未來的發展歷程
在前文我們說到,世界的復雜性增加驅動著軟件工程思維的成熟,那么我們關注未來軟件工程的發展方向,實際上也就是在關注未來軟件世界,也就是軟件業務,需求的發展方向,也就是關注未來人們需要什么樣的軟件。然后從自然語言出發,究竟怎么樣的組織思維可以更好地我們所要構建的虛擬世界。
同樣,當我們理解一個全新的軟件思維時,如果我們無法理解,我們不妨去思考著與之對應的自然語言思維。
諸如面向服務的概念產生時,其實是不是,我們在借用著其他文章的結果或者結局呢?比如我想寫一篇作文,其中有一個場景是我想抨擊政府,我可能就直接說“劉和珍君的死,在今天是否依然會重演呢”,這里我只是引用了,或者說是借用了魯迅先生所為我搭建好的場景,而只關注其結果,然后對外展示,或者作為我整個文章過程的一個小插曲。如果我們沒有面向服務,那么我們是不要要再把整個《紀念劉和珍君》的文章再重寫一次呢?
下文簡介:
在本文中,主要是很籠統的介紹了自然語言和軟件工程之間的想通之處,在接下來的兩篇文章中,我會著重描述從語義上去分析各種編程范式,以及基于語義的一些旁支細節,再到自然語言與軟件工程之間的關系,敬請關注。謝謝!
it知識庫:基于自然語言的軟件工程和程序設計(上),轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。