像設(shè)計電路一樣編程(2) 電路設(shè)計與軟件編程的區(qū)別
版權(quán)聲明:《像設(shè)計電路一樣編程》系列博客文章由陳明計原創(chuàng),版權(quán)完全屬于陳明計,轉(zhuǎn)載請務(wù)必完全轉(zhuǎn)載。歡迎訪問陳明計的博客:http://blog.sina.com.cn/cmj2。 高級編程語言可分為命令式語言(Imperative programming language)和聲明式語言(declarative programming language),兩者的編程方法有很大的不同。聲明式語言又可分為函數(shù)式語言、邏輯式語言等;而命令式語言可分為馮.諾伊曼式編程語言、腳本編程語言、面向?qū)ο缶幊陶Z言等。目前,軟件編程中命令式語言主導(dǎo)地位,這里將以此為例說明軟件編程與電路設(shè)計的區(qū)別。 電路設(shè)計與軟件編程的區(qū)別表面上看只是一個圖形形式,一個是文字形式;但實質(zhì)上有很大的不同。 迄今為止,凡是能夠?qū)嵱玫碾娮佑嬎銠C都是按照馮·諾依曼提出的結(jié)構(gòu)體系和工作原理來設(shè)計制造的,簡而言之,計算機就是存儲程序并按地址順序執(zhí)行的。其要點如下:
*
* 計算機由運算器、控制器、存儲器、輸入設(shè)備與輸出設(shè)備所組成。其中最廣泛應(yīng)用編程語言的C語言(屬于馮.諾伊曼式編程語言)充分表達計算機結(jié)構(gòu)原理。 因此,計算機編程實際上是“按步驟解決問題”:把解決問題的方法分成若干的大步驟,每個大步驟又分為若干個小步驟,一直分下去,直到分不可分;然后計算機就按照步驟來一絲不茍的執(zhí)行。這種“按步驟解決問題”的思路很利于執(zhí)行,但從步驟中分析解決問題的思路就非常困難了;進而分析程序是否完全符合解決問題的思路也是很困難的。很簡單的例子,網(wǎng)上有大量的教程,很多也是step by step的,但很多人按照教程做,依然無法解決問題。 與計算機編程不同,電路是連續(xù)工作的,沒有“步驟”一說。數(shù)據(jù)(電流或電壓)持續(xù)的流入一個器件,經(jīng)過一個器件加工后,又流出這個器件。例如放大器,會只要通電,就會持續(xù)不斷的對輸入信號放大,在工作范圍內(nèi),輸出信號一直與輸入信號成正比或反比。數(shù)字電路同樣如此,例如二輸入與門,其輸出信號時時刻刻是兩個輸入信號的與。即使有時鐘參與的時序數(shù)字電路,可認(rèn)為時鐘也是一個輸入信號,同樣脫離不了上述規(guī)律。即使不把時鐘當(dāng)作輸入信號,時序電路也沒有“步驟”,只是信號處理不再是連續(xù)的,而是離散的而已。 綜上所述,計算機編程關(guān)注的是解決問題的步驟。如果步驟太多(程序規(guī)模較大),則編程時很容膝疏忽某些步驟,造成程序隱含的BUG。而電路設(shè)計關(guān)注的是數(shù)據(jù)流動,每個器件都對數(shù)據(jù)進行特定的處理,數(shù)據(jù)按照指定的方式路徑流過這些器件后,自然就解決了要解決的問題。因此,電路的行為比計算機編程更容易預(yù)測,更容易理解,也就更不容易出錯。計算機領(lǐng)域中,硬件發(fā)展的速度遠(yuǎn)高于軟件發(fā)展的速度就很好的證明了這一點。 |
|