計算機程序
此條目需要補充更多來源。 (2018年7月15日) |
計算機程序(英語:Computer Program)是指一組指示電子計算機或其他具有訊息處理能力的電子裝置每一步動作的指令,通常用某種程序設計語言編寫,運行於某種目標體系結構上。打個比方,一個程序就像一個用漢語(程序設計語言)寫下的紅燒肉菜譜(程序源代碼),用於指導懂漢語的人(體系結構)來做這個菜。 計算機程序是軟件的一個組成部分,它還包括文檔和其他無形組成部分。通常,以英文文本為基礎的計算機程序要經過編譯和連結而成為一種人們不易看清而計算機可解讀的一連串數字的格式,然後放入運行。這種程序也叫作編譯語言。未經編譯就可運行的程序,通常稱之為腳本程序(script)或解釋型語言。
「計算機程序」的各地常用名稱 | |
---|---|
中國大陸 | 計算機程序 |
臺灣 | 電腦程式 |
星馬 | 電腦程序 |
#include <stdio.h>
int main(void) {
printf("Hello world!\n");
return 0;
}
|
C的Hello World程式樣例 |
public class HelloWorld {
public static void main(String[] args){
System.out.println("Hello World!");
}
}
|
Java的Hello World程式樣例 |
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
|
C♯的Hello World程式樣例 |
print("Hello World!")
|
#include <iostream>
int main()
{
std::cout<<"Hello World!"<<endl;
return 0;
}
|
C++的Hello World程式樣例 |
程序的運行
編輯為了一個程序運行,計算機加載程序代碼,可能還要加載數據,從而初始化成一個開始狀態,然後調用某種啟動機制。在最低層上,這些是由一個載入器開始的。
在大多數計算機中,操作系統例如Windows等,加載並且執行很多程序。在這種情況下,一個計算機程序是指一個單獨的可執行的映射,而不是當前在這個計算機上運行的全部程序。
程序里的指令都是基於機器語言。程序通常由一個計算機程序設計語言編寫,然後由該語言的編譯器(或者,有時由匯編程序)編譯為機器語言。
馮諾依曼體系結構(普林斯頓結構)
編輯馮·諾伊曼結構又做普林斯頓結構,在一台基於最常見的馮諾依曼體系結構的計算機上,程序從某種外部設備,通常是硬盤,被加載到計算機之內。 如果計算機選擇馮諾依曼體系結構,那麼程序就被加載入記憶體。 指令序列順序執行,直到一條跳轉或轉移指令被執行,或者一個中斷出現。所有這些指令都會改變指令寄存器的內容。
基於這種體系的計算機,如果沒有程序的支持,將無法工作。一個計算機程序是一系列指令的集合。
程序裡的指令都是基於機器語言;程序通常首先用一種計算機程序設計語言編寫,然後用編譯器或者直譯器翻譯成機器語言。 有時,也可以用組合語言編程,組合語言實質就是表示機器語言的一組記號-在這種情況下,用於翻譯的程序叫做組譯程式。
程序和數據
編輯數據可以被定義為被程序處理的信息。當我們考慮到整個計算機系統時,有時程序和數據的區別就不是那麼明顯了。中央處理器有時有一組微指令控制硬件,數據可以是一個有待執行的程序(參見腳本編程語言),程序可以編寫成去編寫其它的程序;所有這些例子都使程序和數據的比較成為一種視角的選擇。有人甚至斷言程序和數據沒有區別。
編寫一個程序去生成另外一個程序的過程被稱之為元編程(Metaprogramming)。它可以被應用於讓程序根據給定數據生成代碼。單單一個程序可能不足以表示給定數據的所有方面。讓一個程序去分析這個數據並生成新的程序去處理數據所有的方面可能會容易一些。Lisp就是一例支持這種編程模式的程序語言。
在神經網絡裡儲存的權重是一種數據。正是這些權重數據,跟網路的拓撲結構一起,定義了網絡的行為。人們通常很難界定這些數據到底表示什麼或者它們是否可以由程序來代替。這個例子以及跟人工智能相關的其它一些問題進一步考驗程序和數據的區別。
算法
編輯算法指解決某個問題的嚴格方法,通常還需輔以某種程度上的運行性能分析。算法可以是純理論的,也可以由一個計算機程序實現。理論算法通常根據複雜性分為不同類別;實現的算法通常經過剖析(Profiling)以測試其性能。請注意雖然一個算法在理論上有效可行,但是一個糟糕的算法仍會浪費寶貴的計算機資源。(更詳細信息,參見算法信息論(Algorithmic Information Theory))
開發
編輯編寫程序是以下步驟的一個往復過程:編寫新的源代碼,測試、分析和提高新編寫的代碼以找出語法和語義錯誤。從事這種工作的人叫做程序員。由於計算機的飛速發展,編程的要求和種類也日趨多樣,由此產生了不同種類的程序設計員,每一種都有更細緻的分工和任務。軟件工程師和系統分析員就是兩個例子。現在,編程的長時間過程被稱之為「軟件開發」或者軟件工程。後者也由於這一學科的日益成熟而逐漸流行。
因此,如今程序設計員可以指某一領域的編程專家,也可以泛指軟件公司裡編寫一個複雜軟件系統裡某一塊的一般程序員。一組為某一軟件公司工作的程序員有時會被指定一個程序組長或者項目經理,用以監督項目進度和完成日期。大型軟件通常經歷由系統設計師掌握的一個長時間的設計階段,然後才交付給開發人員。牛仔式的編程(未經詳細設計)是不為人所齒的。
兩種當今常見的程序開發方式之一是項目組開發方式。使用這種方式項目組裡每一個成員都能對項目的進行發表意見,而由其中的某一個人協調不同意見。這樣的項目組通常有15個左右的成員,這樣做是為了便於管理。第二種開發方式是結對開發。
參見
編輯參考文獻
編輯- Eric Baum What is Thought MIT Press 2004年 ISBN 0-262-02548-5
- - Chapter Two: The Mind is a Computer Program