計算機程序

計算機程序

計徠算機程序又稱“計算機軟體”。通過指令的順序,使計算機能按所要求的功能進行精確記述的邏輯方法。計算機本身作為機器可以獲得專利,但計算機程序是一種數學邏輯方法,各國一般不予保護。隨著電子技術的廣泛應用,導致產生了專門提供計算機所需軟體的新興工業部門及新型商品——計算機程序。因此,也產生了對此類創造性活動的產品予以保護的需要。美國1980年12月12日生效的新修訂專利法已將計算機程序列為版權的保護對象。不過一些學者認為,用專利法或派權法對軟體進行保護均不適宜,因為軟體的壽命較短,經常變化,而專利的保護期一般是10—20年,版權的保護期更長如有必要,對軟體的保護還應另頒單行法規更為適宜。世界知識產權組織也曾召開專家會議,討論對計算機軟體的保護問題。會議建議補充專利法、版權法及不正當競爭法,酌情建立計算機程序保護制度。

簡介


計算機程序(Computer program),也稱為軟體(software),簡稱程序(英語:Program),是指一組指示計算機或其他具有信息處理能力裝置執行動作或做出判斷的指令,通常用某種程序設計語言編寫,運行於某種目標計算機體系結構上。
計算機程序是計算任務的處理對象和處理規則的描述。任何以計算機為處理工具的任務都是計算任務。處理對象是數據或信息,處理規則反映處理動作和步驟。 
計算機程序通常是用高級語言編寫源程序,程序包含數據結構,演演算法,存儲方式 編譯等,經過語言翻譯程序(解釋程序和編譯程序)轉換成機器接受的指令。程序可按其設計目的的不同,分為兩類:一類是系統程序,它是為了使用方便和充分發揮計算機系統效能而設計的程序,通常由計算機製造廠商或專業軟體公司設計,如操作系統、編譯程序等;另一類是應用程序,它是為解決用戶特定問題而設計的程序,通常由專業軟體公司或用戶自己設計,如賬務處理程序、文字處理程序等。

表現形式

計算機程序通常都具有兩種表現形式:程序的目標代碼,即目標程序,指可體現為一個電脈衝序列的一串二進 制數(由“0”和“1”組成)指令編碼。這種電脈衝序列是 用來驅動計算機工作(以取得某種結果)時的計算機程 序的表現形式。源程序,指由一系列排列有序的符號化指令或符號化語句。作為符號化的指令序列或語句序列,程序可以用數字、文字及符號表現,並且可以用有形媒體如紙、磁帶、磁碟等把表現加以固定。當一項程序以源代碼的形式開發出來之後,通常可利用計算機系統將其“翻譯”成可供計算機執行的目標代碼。

腳本程序

通常,計算機程序要經過編譯和鏈接而成為一種人們不易理解而計算機理解的格式,然後運行。未經編譯就可運行的程序通常稱之為腳本程序。

程序運行

為了一個程序運行,計算機載入程序代碼,可能還要載入數據,從而初始化成一個開始狀態,然後調用某種啟動機制。在最低層上,這些是由一個引導序列開始的。
在大多數計算機中,操作系統例如Windows等,載入並且執行很多程序。在這種情況下,一個計算機程序是指一個單獨的可執行的映射,而不是當前在這個計算機上運行的全部程序。

體系結構

在一台基於最常見的馮諾依曼體系結構(又稱Harvard Architecture)的計算機上,程序從某種外部設備,通常是硬碟,被載入到計算機里。如果計算機選擇馮諾依曼體系結構,那麼程序就被載入入內存。指令序列順序執行,直到一條跳轉或轉移指令被執行,或者一個中斷出現。所有這些指令都會改變指令寄存器的內容。
基於這種體系計算機如果沒有程序的支持將無法工作。一個計算機程序是一系列指令的集合。
程序里的指令都是基於機器語言;程序通常首先用一種計算機程序設計語言編寫,然後用編譯程序或者解釋執行程序翻譯成機器語言。有時,程序也可以用彙編語言編寫,彙編語言實質就是表示機器語言的一組記號-在這種情況下,用於翻譯的程序叫做彙編程序(Assembler)。

程序數據


計算機程序數據可以被定義為被程序處理的信息。當我們考慮到整個計算機系統時,有時程序和數據的區別就不是那麼明顯了。中央處理器有時有一組微指令控制硬體,數據可以是一個有待執行的程序,程序可以編寫成去編寫其它的程序;所有這些例子都使程序和數據的比較成為一種視角的選擇。有人甚至斷言程序和數據沒有區別。
編寫一個程序去生成另外一個程序的過程被稱之為原編程(Metaprogramming)。它可以被應用於讓程序根據給定數據生成代碼。單一一個程序可能不足以表示給定數據的所有方面。讓一個程序去分析這個數據並生成新的程序去處理數據所有的方面可能會容易一些。Lisp就是一例支持這種編程模式的程序語言。
在神經網路里儲存的權重是一種數據。正是這些權重數據,跟網路的拓撲結構一起,定義了網路的行為。人們通常很難界定這些數據到底表示什麼或者它們是否可以由程序來代替。這個例子以及跟人工智慧相關的其它一些問題進一步考驗程序和數據的區別。

演演算法

演演算法指解決某個問題的嚴格方法,通常還需輔以某種程度上的運行性能分析。演演算法可以是純理論的,也可以由一個計算機程序實現。理論演演算法通常根據複雜性分為不同類別;實現的演演算法通常經過頗析(Profiling)以測試其性能。請注意雖然一個演演算法在理論上有效可行,但是一個糟糕的實現仍會浪費寶貴的計算機資源。

開發

編寫程序是以下步驟的一個往複過程:編寫新的源代碼,測試、分析和提高編寫的代碼以找出語法和語義錯誤。從事這種工作的人叫做程序設計員??趨多樣,由此產生了不同種類的程序設計員,每一種都有更細緻的分工和任務。軟體工程師和系統分析員就是兩個例子。編程的長時間過程被稱之為“軟體開發”或者軟體工程。後者也由於這一學科的日益成熟而逐漸流行。
因此,如今程序設計員可以指某一領域的編程專家,也可以泛指軟體公司里編寫一個複雜軟體系統里某一塊的一般程序員。一組為某一軟體公司工作的程序員有時會被指定一個程序組長或者項目經理,用以監督項目進度和完成日期。大型軟體通常經歷由系統設計師的掌握的一個長時間的設計階段,然後才交付給開發人員。
兩種常見的程序開發方式之一是項目組開發方式。使用這種方式項目組裡每一個成員都能對項目的進行發表意見,而由其中的某一個人協調不同意見。這樣的項目組通常有10個左右的成員,這樣做是為了便於管理。第二種開發方式是結對開發。