我的程式觀 (轉)
我的程式觀 (轉)[@more@]請先看下面的圖示:
機器程式碼 --〉高階語言實現 --〉結構圖 -〉自然語言
我們很早就認識到,高階語言是機器語言的抽象,結構圖是對高階語言的抽象,
而自然語言是對結構圖的抽象.這是很好理解的,也符合我們的思維習慣.可是
倒過來看,逆向思維一下,會有更驚人的發現.它們不正是我們"做"一個標
準的流程嗎?
可以說,它們表達的都是同一個東西,只是抽象的層次不同而已.抽象層次越高,
所需要處理的基本抽象思考要素也就越多(它們通常被包含在豐富的語義中).
但是,涉及到的具體實現細節反而越少.一句話,我們的軟體活動大都是從高度
抽象到底層抽象,這個演化過程是客觀規律,隨著軟體工程水平的提高,從此岸
到彼岸的直接跨越就變得非常不合理(以前確實存在過,不過想想當時的軟工
水平吧).
有了從高到低的抽象層次,就需要逐步地象下樓梯一樣一層層往下.然而下的
過程是危險的,也是值得研究的.什麼是這個過程中最重要的,我覺得是保持一
致性,起碼是概念的一致性.為什麼呢?舉個簡單的例子:
客戶說我要一個資訊,這是一個聽起來很簡單的自然語言表達,可是因為
過於抽象而讓開發者無從下手.於是開發者要和客戶進行不斷地溝通,是客戶
的概念能毫無遺漏地傳達給開發者(如果客戶很幸運有明確的概念的話).遺
憾的是,這個過程是沒有保障的.當客戶的概念大部分(或全部)都已傳達給開
發者時,他開始設計,目的只有一個,實現那個概念.設計的輸出將作為編碼的
輸入,我們仍然無法保障這個過程的一致性.可以看到,到此為止,系統中沒有
保障的因素已經很多,如果中間存在任何稍大的不一致,就必須重複進行大量
的工作,就好像已從20樓走到2樓,突然發現忘了穿鞋,還得回到20樓一樣令人
同情.假設我們已經順利地到了2樓(值得慶祝),剩下的工作將容易許多,高階
語言到機器程式碼的一致性目前已經得到很好的保障,這個成就讓軟體業的生產
率提高了很多.可是這對我們現今的並沒有實質性的幫助,因為:
在當前整個軟體開發週期中,這個過程只佔了少量的精力和時間(我認為接近
於零),沒有一個高階語言員會關注自己程式碼的反結果.類似的還有
開發工具等相當次要的因素.所以,問題仍然很嚴重.
危機不可避免地存在著,關注它們不代表我是悲觀主義者.和所有不能由人類
完全控制卻可以供人類充分研究並利用的自然科學一樣,軟體工程學必然有
客觀的規律.矛盾總是存在的,因為那些一致性不可能100%的滿足(人與人的
交流不可能是無縫的,除非被Clone),但我們可以不斷校正,運用合理的方法
學使之接近理想狀態,即不斷地進步.在這方面,中國人又一次落後了,大學裡
教條似的軟體工程學,企業界對於新技術的偏執和對設計,管理的忽視,怎麼
可能從根本上提高我們極低的軟體水平.而從事理論研究,以科學的態度對待
軟體業的研究人員,又在哪裡呢?
機器程式碼 --〉高階語言實現 --〉結構圖 -〉自然語言
我們很早就認識到,高階語言是機器語言的抽象,結構圖是對高階語言的抽象,
而自然語言是對結構圖的抽象.這是很好理解的,也符合我們的思維習慣.可是
倒過來看,逆向思維一下,會有更驚人的發現.它們不正是我們"做"一個標
準的流程嗎?
可以說,它們表達的都是同一個東西,只是抽象的層次不同而已.抽象層次越高,
所需要處理的基本抽象思考要素也就越多(它們通常被包含在豐富的語義中).
但是,涉及到的具體實現細節反而越少.一句話,我們的軟體活動大都是從高度
抽象到底層抽象,這個演化過程是客觀規律,隨著軟體工程水平的提高,從此岸
到彼岸的直接跨越就變得非常不合理(以前確實存在過,不過想想當時的軟工
水平吧).
有了從高到低的抽象層次,就需要逐步地象下樓梯一樣一層層往下.然而下的
過程是危險的,也是值得研究的.什麼是這個過程中最重要的,我覺得是保持一
致性,起碼是概念的一致性.為什麼呢?舉個簡單的例子:
客戶說我要一個資訊,這是一個聽起來很簡單的自然語言表達,可是因為
過於抽象而讓開發者無從下手.於是開發者要和客戶進行不斷地溝通,是客戶
的概念能毫無遺漏地傳達給開發者(如果客戶很幸運有明確的概念的話).遺
憾的是,這個過程是沒有保障的.當客戶的概念大部分(或全部)都已傳達給開
發者時,他開始設計,目的只有一個,實現那個概念.設計的輸出將作為編碼的
輸入,我們仍然無法保障這個過程的一致性.可以看到,到此為止,系統中沒有
保障的因素已經很多,如果中間存在任何稍大的不一致,就必須重複進行大量
的工作,就好像已從20樓走到2樓,突然發現忘了穿鞋,還得回到20樓一樣令人
同情.假設我們已經順利地到了2樓(值得慶祝),剩下的工作將容易許多,高階
語言到機器程式碼的一致性目前已經得到很好的保障,這個成就讓軟體業的生產
率提高了很多.可是這對我們現今的並沒有實質性的幫助,因為:
在當前整個軟體開發週期中,這個過程只佔了少量的精力和時間(我認為接近
於零),沒有一個高階語言員會關注自己程式碼的反結果.類似的還有
開發工具等相當次要的因素.所以,問題仍然很嚴重.
危機不可避免地存在著,關注它們不代表我是悲觀主義者.和所有不能由人類
完全控制卻可以供人類充分研究並利用的自然科學一樣,軟體工程學必然有
客觀的規律.矛盾總是存在的,因為那些一致性不可能100%的滿足(人與人的
交流不可能是無縫的,除非被Clone),但我們可以不斷校正,運用合理的方法
學使之接近理想狀態,即不斷地進步.在這方面,中國人又一次落後了,大學裡
教條似的軟體工程學,企業界對於新技術的偏執和對設計,管理的忽視,怎麼
可能從根本上提高我們極低的軟體水平.而從事理論研究,以科學的態度對待
軟體業的研究人員,又在哪裡呢?
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-977192/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JAVA基礎:我個人的物件導向的程式觀(轉)Java物件
- 我的物件導向程式觀物件
- 我的 JavaScript 世界觀JavaScript
- 我的學習觀
- 我就是程式,程式就是我嗎? (轉)
- 我的關於軟體工程的一些觀點ZT (轉)軟體工程
- 十條不錯的程式設計觀點[轉]程式設計
- “旁觀者效應”是如何毀掉我們的程式碼的
- 悠然亂彈:我的架構觀架構
- 觀、礪、破——我的演算法之道演算法
- 我看程式設計師 (轉)程式設計師
- 轉享: 樂觀 vs 悲觀協議協議
- 怎樣知道我的程式是否執行在DELPHI? (轉)
- 我這個程式設計師 (轉)程式設計師
- Bjarne Stroustrup:概觀C++程式設計語言 (轉)JARC++程式設計
- 我的 .emacs(轉)Mac
- 流程的角色觀及其管理(上)(轉)
- 流程的角色觀及其管理(下)(轉)
- 樂觀的程式設計師程式設計師
- 程式設計師的幸福觀程式設計師
- Linux面面觀 (轉)Linux
- 學Java,觀GP (轉)Java
- 如何正確的對待設計模式——我的觀點設計模式
- 我的使用createremotethread控制excel右鍵的源程式 (轉)REMthreadExcel
- Nginx(八): 觀程式鎖的實現Nginx
- 程式設計師的企業觀程式設計師
- 樂觀的程式設計師們程式設計師
- 我來悟微服務(1)-夜觀天象微服務
- 大資料storm學習之我觀大資料ORM
- 加密技術面面觀 (轉)加密
- 炒股軟體面面觀 (轉)
- 程式媛的人生觀
- 程式語言面面觀
- “我,不懂程式碼,36歲轉行開發”
- 讓我們重視程式執行效率 (轉)
- 觀點:我們高估了人工智慧的經濟效益人工智慧
- 我如何轉行為程式設計師:心態支撐著我程式設計師
- kingofark關於學習C++和程式設計的50個觀點 (轉)GoC++程式設計