電腦科學,又叫運算科學 ,係專門研究運算 嘅一個科學 工程 領域。「電腦 」廣義上指運算機械 ,即係曉用數據 做運算,並且俾出一啲有用結果嘅機械 ,簡單例子:而家手上有一柞「每個學生喺呢次考試當中攞到嘅分數」嘅數據,要用呢柞數字計出邊個考第一。電腦科學就係集中思考曉做呢啲嘢嘅機械點樣表示同儲起數據、用各種嘅演算法 嚟處理數據以及彼此之間傳送數據等嘅問題。
到咗廿一世紀,電腦科學經已係一個蓬勃嘅獨立科學領域,引起咗哲學 、社科 同科幻 等領域嘅討論,而且仲有得按照所使用嘅技術或者想達到嘅目的分做多個唔同嘅子領域。電腦科學啲子領域好多時仲要專化到彼此之間溝通唔到-所以有大量嘅專業行話詞彙。
理論電腦科學
運算理論 運算理論 (theory of computation)係研究運算 本身嘅數學 性質嘅一套理論。
黑盒 (black box): 如果話一部機械 係一部黑盒,就表示研究者知佢嘅 input 同 output ,但完全唔知部機械係點樣由 input 計個 output 出嚟嘅;喺運算理論嘅分析上,研究者成日都會將唔係重點分析緊嘅部份當做黑盒噉嚟睇。 圖靈論題 (Turing thesis):根據圖靈論題,一個施喺自然數 身上嘅函數 可以靠有效方法 (指部運算機械 會喺數量有效嘅時間 之內計完)嚟計到答案 if and only if
個函數可以用圖靈機 嚟計到答案;用日常用語講嘅話,意思即係指任何物理上有可能計到嘅問題都可以用圖靈機嚟計。 有效方法 (effective method):運算理論 上嘅一個概念。如果話一個方法係「可以解決運算問題 A 嘅有效方法」,意思即係話用呢個方法解決問題 A 嗰陣: 部電腦會行完若干步之後停低。 部電腦實會出到正確嘅答案。 原則上,個步驟可以由一個手上揸住紙筆嘅人做完,而且個人淨係需要跟從個方法啲步驟。 圖靈機 (Turing machine):運算模型 嘅一種,一部圖靈機嘅運作如下:一部圖靈機會讀取一條分做若干個格嘅帶,條帶每個格裏面都會有個符號(可以係 1 同 0 等多個款);喺每一個時間點,部圖靈機個讀取器都會位於條帶其中一格,而部機會做以下三個基本作業當中是但一個: 讀取讀取器下嗰格係乜符號; 編輯嗰格-寫一個新嘅符號落去或者刪除咗嗰格佢; 將條帶向左或者向右移一格,等個讀取器可以讀取打前嗰個格隔離嘅一個格。 圖靈機呢部抽象 機械就噉睇好似好簡單,但查實可以計到好多嘢。 一條圖靈機輸入帶嘅抽象圖解; s i {\displaystyle s_{i}} 代表第 i {\displaystyle i} 款符號。 多項式時間 (polynomial time):如果話一段演算法係多項式時間,即係話段演算法「要行幾耐」有個上限 ,T(n)=O(nk )
,當中 k 係某啲正嘅常數。 難解問題 (intractable problem):指一條理論上可以解決,但實際上冇可能係夠短嘅時間內解嘅問題,即係例如一條運算問題理論上係解到嘅,但要解決條問題需要嗰個演算法 極複雜,複雜到就算用最先進嘅超級電腦 嚟行,都要行成 100 年先行得-喺實際應用上根本解決唔到。 電腦數據 資料類型 (data type):係一件資料 會具有嘅一個屬性,一件資料嘅類型會話俾個編譯器 知,個程式打算點樣用呢件資料。常見(絕大多數程式語言 都支援)嘅資料類型包括 整數 (integer),指件資料表示緊一個整數 、 浮點數 (floating point number),指件資料表示緊一個可以係小數 嘅實數 、 字符 (character),指件資料表示緊一個文字 等非數字嘅符號 、 布林 (Boolean)指件資料表示緊一個真(1)假(0)值 ... 等等。舉個例說明,想像家陣部電腦收到一個訊號 「00001」,如果呢個訊號標明咗係一個整數,噉部電腦就知呢段訊號代表緊「1」呢個數字,但如果個訊號標明咗係一個布林資料,噉呢段訊號所代表嘅係「真」。喺寫程式嗰陣,每個變數 同常數 都會有佢嘅資料類型,亦有程式語言係曉自動噉探測件資料嘅類型,例如 Python 。 原始資料類型 (primitive):指最基本嗰拃資料類型 ,隻程式語言入面啲進階嘅資料類型都係用呢啲原始類型組合建構出嚟嘅,整數 、浮點數 同布林 都係常見嘅原始資料類型。 1 , 2 , 3... {\displaystyle 1,2,3...} 0.1 , 0.2 , 0.3... {\displaystyle 0.1,0.2,0.3...} A , B , C . . . {\displaystyle {\text{A}},{\text{B}},{\text{C}}...} 1 {\displaystyle 1} (真)、 0 {\displaystyle 0} (假) 整數 浮點數 字符 布林
數據結構 (data structure):指一部電腦內部組織數據嘅方法。精確啲噉講嘅話,一款數據結構係描述數據嘅代數結構 ,會指明嗮以下嘅資訊 : 啲數據同埋佢哋嘅數值、 唔同數據之間嘅關係、同埋 屬呢種數據結構嘅數據可以攞啲咩算子 計或者擺入啲乜嘢函數 嗰度。 陣列 (array):陣列係用嚟裝相關嘅數據嘅;一個陣列正路會有個整數 n
表示佢嘅大細(裝到幾多件數據);一個陣列會包含最多 n
咁多件嘅數據,會有次序(每件數據掕若干個整數,表示佢喺個陣列邊個位),而且啲數據通常(但唔一定)冚唪唥都屬同一隻類型 。以下係一個一維 、11 件數據咁長嘅陣列: 鏈結串列 (linked list):都係攞嚟裝相關嘅數據嘅;一條鏈結串列會有若干件次序固定嘅數據,條鏈結串列當中每個位(node
)都會有「件數據嘅數值係乜」、「件數據指住 嘅下一件數據係邊件」同「件數據嘅前一件數據係邊件」(固定次序;下圖噉)嘅資訊,一位用家搜尋 一條鏈結串列嗰陣一定要焗住跟條串列個次序(或者前後掉轉)噉嚟搜尋,冇得話例如(好似陣列噉)隨機 噉揀是但一件數據嚟讀取,不過鏈結串列好處係可以容易噉由柞數據當中攞走其中一件而唔使重新排過嗮柞數據(一個陣列攞走咗其中一件再排過就要改嗮後面嗰啲數據嘅位置數值。 堆疊 (stack):柞數據係最後入嘅最先出 (last in first out,LIFO)嘅,即係話柞數據有次序之分,排最尾嗰件數據會優先噉被提取,就好似一疊洗好咗嘅碟 噉,最尾擺入疊碟嗰隻碟會最先俾人攞走;可以對堆疊做嘅運算最基本有 push
(擺件數據落堆疊上面)同 pop
(刪除堆疊最上面嗰件數據),可以睇下圖嘅圖解。堆疊喺回溯法 (backtracking)上成日用-例如想像家陣有個人工智能程式 喺度行迷宮 ,個程式要一路記住自己行過嘅位置,一去到掘頭路就返轉頭,即係話「過去嘅位置」會成一個堆疊,要返轉頭行每一步嗰陣就將最近嗰件數據(個堆疊最頂嗰件)攞走。睇埋遞歸 。 隊列 (queue):柞數據係最先入嘅最先出 (first in first out,FIFO)嘅,即係話嗰柞數據有次序之分,當中排最先嗰件數據會優先噉被提取,就好似一班人喺度排隊噉;可以對堆疊做嘅運算最基本有 enqueue
(擺件數據落隊列最後)同 dequeue
(刪除堆疊最先嗰件數據),可以睇下圖嘅圖解。喺實際應用上,隊列最常見嘅用途嚟攞嚟「排隊」-俾部電腦知有啲咩數據等緊要處理,並且將啲數據優先處理。 樹 (tree):柞數據有高低層之分,好似一幅樹狀圖 噉;一樖數據樹會有若干個節點 (node),而且啲節點分層,除咗做起始點嗰個節點(根節點 ;root)之外,每個節點有一個(而且頂櫳一個)母節點 (parent;指喺嗰個節點上面,連住嗰個節點嘅另一個節點),於是就形成柞節點喺起始點嗰度一層層噉每層都分叉嘅樣;好似下圖噉,紅色 2 嗰點係根節點,而根節點下有一層層嘅節點,每個節點都有個母節點(例如 7 嗰點嘅母節點就係個根節點)。 圖 (graph):一幅圖數據有若干個節點 ,而且每個節點都最少有一條邊 (edge)連去另外一個節點嗰度,而如果有兩個節點之間有條邊連住,佢哋就算係相鄰 (adjacent)嘅;好似係下圖噉,下圖係一幅有 6 個節點嘅圖數據,當中節點 1 同節點 2 之間有連結(可以由節點 1 行去節點 2 或者相反)、節點 1 同節點 5 之間有連結(可以由節點 1 行去節點 5 或者相反)... 如此類推。 整數過溢 (integer overflow):電腦運算上會遇到嘅一種問題,指要處理嘅數值嘅大得滯或者細得滯,搞到部電腦表示唔到佢;例如部電腦用咗 16 個位元 嚟記住個數,即係話個數如果係正嘅整數 ,最多淨係可以有 2 16 {\displaystyle 2^{16}} 咁大,而如果計計吓數個數變成大過呢個值,就會有整數過溢嘅情況。 算術下溢 (arithmetic underflow):電腦運算上會遇到嘅一種問題,指要處理嘅數值嘅精細得滯,搞到部電腦表示唔到佢;例如部電腦用咗 16 個位元 嚟記住個數,即係話個數如果係浮點數 ,頂嗮櫳都淨係可以有小數點 後 15 個位,而如果計計吓數個數變成精細到超過小數點後 15 個位,就算係有算術下溢嘅情況。睇埋混沌理論 。 字符編碼 (character encoding):指講明電腦內部嗰啲 0011
點樣對應唔同嘅符號 。 ASCII :一套用嚟同廿世紀英文 做字符編碼嘅標準方案;响 ASCII 入面,100 0001
對應 A
、100 0010
對應 B
、100 0011
對應 C
... 呀噉,所以部電腦就可以靠記住一串串嘅 0
同 1
嚟表示文字 性質嘅數據。 統一碼 (Unicode):可以話係 ASCII 嘅延伸版;統一碼嘅基本原理同 ASCII 一樣,每個符號都對應電腦內部嘅一串 0
同 1
,不過統一碼就包埋好多英文以外嘅字符,好似係漢字 呀噉,而且仲包埋好似古埃及 嘅聖書體 呢啲冇人再用(但可能考古學 等領域嘅研究上會用)嘅文字。 檔案格式 (file format):一款檔案格式係指一套儲住啲電腦位元 嘅方案;例如 JPEG 同 GIF 都係圖像檔案格式 (用嚟教部電腦儲住啲描述圖像 嘅數據嘅檔案格式),但兩者有啲唔同-JPEG 能夠做到將份圖像檔案壓縮到本來嘅 1/10 咁大(同時幅圖嘅質素唔會明顯走樣),而 GIF 就出嗮名支援動畫 (呢樣嘢係早期版本嘅 JPEG 唔支援嘅);喺各種嘅電腦應用上,工作者要理解自己處理嘅數據可以用邊啲檔案格式儲起,並且根據自己嘅需要揀用邊一種格式。 十六進制編輯器 (hex editor):一種電腦程式 ,特徵係俾用家打開一個電腦檔案 ,然後俾用家睇同更改個檔案嘅數據,當中個編輯器將啲數據以十六進制 數噉嘅形式嚟呈現俾用家睇。 用一個十六進制編輯器打開個檔案出嘅樣 紀錄檔案 (logging / log file):指一個紀錄作業系統 或者第啲軟件 運行嘅檔案;例如一個(簡化版)伺服器 嘅紀錄檔案會紀錄好似噉嘅資訊- 用家 112XXXXXX 喺 YYYY 年 M 月 D 日 13:51:31 用過 http:xxxxxxxxxx 呢個檔案; 用家 129XXXXXX 喺 YYYY 年 M 月 D 日 13:51:40 用過 http:xxxxxx234x 呢個檔案; ... 程式編寫
Hello World :係指喺螢幕 顯示「Hello, World!」(你好,世界!)噉嘅字串嘅電腦程式 ;呢種程式通常都係每種程式語言最基本、最簡單嘅程式,常用於示範一隻程式語言點運作。例如係以下呢段 C 嘅碼噉: int main () /* 下面嘅係主程序... */ { printf ( "Hello, World!" ); /* 呢句嘢叫部電腦出「Hello, World!」噉嘅字串。 */ } 直譯器 (interpreter):指一個能夠直接噉執行 以某啲程式語言 寫嘅指示嘅程式 。 讀取-求值-輸出循環 (read-eval-print loop,REPL):一種簡單嘅編程環境,部機係噉重複「攞一條表達式 、行、然後彈個 output 出嚟睇」噉嘅過程。 條件陳述式 (conditional statement):絕大多數程式語言都會有嘅一種陳述式,功能係視乎情況(睇埋邏輯與 、邏輯或 同邏輯非 )決定係咪要做某啲運算 同採取某啲行動-一句條件陳述式會掕住一柞碼 同一句佢要評估嘅條件,當個電腦程式 行到個條件陳述式嗰時,如果個條件係真,個程式就會行條件陳述式掕住嗰柞碼,否則個程式就唔會行嗰柞碼。好似以下噉: IF..GOTO
,如果 .. 為真,goto 某個位,常見於非結構化 嘅程式語言 。 IF..THEN..(ENDIF)
,如果 .. 為真,做 THEN
後面嘅 ..,ENDIF
用途在於標記掕住碼嘅終結。 IF..THEN..ELSE..(ENDIF)
,如果 .. 為真,做 THEN
後面嘅 ..,否則做 ELSE
後面嘅 ..,ENDIF
用途在於標記掕住碼嘅終結。 IF..THEN.. ELSE IF .. THEN .. ELSE..(ENDIF)
遞歸 (recursion):指一個子程式 用到佢自己,例如以下呢段簡單嘅碼 噉: function dream () print "Dreaming" dream () // dream 呢個子程式當中用到自己。 應用程式 (application software):電腦程式 一種,指個程式設計嚟做某啲特定嘅作業,對部電腦本身嘅運作冇幫助,通常攞嚟俾終端用家 用嘅;例如一隻電子遊戲 或者一隻文書處理器 就係應用程式-一隻電子遊戲會呈現一隻遊戲 嚟娛樂 玩家 ,而一隻文書處理器會俾用家有得處理文字 ,兩種程式都唔會幫部電腦運作。 Regex (全名 regular expression):指由一段字符 當中搵出某串特定嘅字符,好似係 ^The
(搵出以 The
做開頭嘅字符串) end$
(搵出以 end
做結尾嘅字符串) ^The end$
(搵出同「The end
」完美符合嘅字符串)... 呀噉。 cmd.exe :又有叫命令提示符 (command prompt),係好多個作業系統 (包括 Microsoft Windows )預設嘅命令行直譯器 ,會俾用家以命令行介面 嘅形式嚟指揮部電腦做嘢,一行指令望落係類似噉嘅樣: C:\>CommandA && CommandB && CommandC
Windows 10 上面嘅命令提示符 呢嚿嘢 (this):常見於 OOP 嘅一種功能,指隻程式語言有方法喺一句指令入面講行緊嗰段碼屬嘅一件物件或者類別;例如想像遊戲編程 ,其中一件物件有個子程序,個子程序會改變件物件嘅位置,就有可能會出現類似以下噉嘅碼 : this.position = [0,0,0];
;意思係「呢嚿嘢(this
)嘅位置(position
)要變成(=
)指定咗嘅值([0,0,0]
)。 函式庫 (library):指電腦程式 用嘅非揮發性 (唔會一熄機就冇咗嘅)資源,包括數據庫 嘅數據 以及陳述式 噉;資訊科技工作者好興用函式庫嚟交流,令大家做嘢更加方便,例如 AI 噉,會有 AI 工作者搵埋一拃 AI 工作成日用嘅子程序 ,將呢啲子程序變成陳述式;第啲 AI 工作者攞去用,就可以達到「用一句碼就叫到部電腦做一樣 AI 常用嘅子程序」噉嘅效果。 程式語言 程式語言 (programming language):泛指用嚟教電腦做運算嘅人造語言 ,每隻字都會有清楚同固定嘅定義 ;廿一世紀初常用嘅程式語言有 Python 、Java 、JavaScript 、C 、SQL 、MATLAB 同埋 Processing 等等。
程式語言理論 (programming language theory):電腦科學 嘅一個子領域,包含研究程式語言 呢樣嘢應該點樣設計 、分析同埋分門別類嘅一套理論;程式語言理論會用邏輯 等形式化 -即係每個符號都有清晰定義 ,唔似得自然語言 咁多歧義 -嘅語言嚟表達唔同嘅程式語言,剖析唔同程式語言彼此之間喺解難能力上有乜嘢差異,例如係「某隻程式語言會唔會比起第啲語言更加擅長解某啲類型嘅問題」等嘅課題。 抽象句法樹 (abstract syntax tree,AST):用樹狀圖 噉嘅方法嚟表示一段用程式語言寫嘅源碼 ;噉做可以攞走源碼當中啲標點符號 同第啲對分析嚟講冇用嘅符號,等分析起上嚟易睇啲。 語言原始體 (language primitive):指一隻程式語言入面最簡單嘅元素,簡單到唔會靠第啲元素嚟定義;包括咗「要處理嘅數據 」同「做喺啲數據上做啲咩運算 」。 句法 (syntax):指一隻程式語言入面指定「邊啲符號 (包括數字 同字母 )嘅組合算係有意思」嘅法則,好似喺 C 程式語言 入面,printf("xxx");
呢行碼會教部電腦顯示出 xxx
噉嘅字,因為 C 語言嘅句法指明咗 printf
嘅陳述式 係教部電腦做「顯示段字出嚟」嘅作業。 抽象化 (abstraction):指由研究緊嗰樣物件嗰度攞走不必要嘅資訊,等個研究者可以集中諗件物件重要嗰啲部份;喺編程上,抽象化包括(例如)同一個子程序 改返個名,然後次次想部電腦行個子程序嗰陣直接用嗰個名而唔係將個子程序成段碼再打多次。 變數 (variable)同常數 (constant):喺編程上,一個變數係指某個儲存位置(記憶體地址 )加一個符號性嘅名(識別碼 ),而個變數會有個喺程式執行 期間可以改變嘅數值;而常數就係指個儲存位置嘅數值喺程式執行期間唔可以被改變。 算子 (operator):指一隻程式語言 入面行為似函數 噉嘅嘢,例如「加 減 」或者「比較兩個數嘅大細」呀噉;運算數 (operand)就係指俾算子攞去計嘅數,例如 1 + 1
當中嘅 1
係運算數,而 +
就係算子。 子程序 (subroutine):指一個大型程式 當中特定嘅一拃程式碼,由一個或者多個陳述式 組成,專門完成某項工作,而且獨立於子程式以外嘅陳述式。通常用嚟教個程式做一啲要重複做若干次嘅工作。 表達式 (expression):喺一段程式碼當中,一段表達式係結合咗若干個常數 、變數 、子程序 同算子 而成嘅物體,能夠俾隻程式語言攞去行。 求值策略 (evaluation strategy):指一隻程式語言用咩方法嚟同啲表達式 做求值;舉例說明,想像家陣要行以下噉嘅表達式 def double x = ( plus x x ) // 「double x 意思等同 x + x」 def average x y = ( divide ( plus x y ) 2 ) // 「average x y 意思等同『(x + y) 除以 2』」 用正常次序求值 (normal-order evaluation)嘅話,會做嘅嘢係「吓吓都郁手拆咗最左嗰個子程序先」→ ( double ( average 2 4 )) => ( plus ( average 2 4 ) ( average 2 4 )) => ( plus ( divide ( plus 2 4 ) 2 ) ( average 2 4 )) => ... 而用應用次序求值 (applicative-order evaluation)嘅話,會做嘅嘢係「吓吓都郁手拆咗最入嗰個子程序先」→ double ( average 2 4 ) => double ( divide ( plus 2 4 ) 2 ) => double ( divide 6 2 ) => ... 唔同嘅求值策略都有各自嘅利弊,同一條表達式,有可能用一種求值策略會攞到正確答案,但用另一種求值策略就會搞到輕機 。 領域特定語言 (domain-specific language,DSL)同通用電腦語言 (general-purpose language,GPL):領域特定語言係指淨係適用於某個應用領域嘅電腦語言 ,例如 GameMaker 呢隻遊戲引擎 就設有淨係可以喺 GameMaker 入面用嘅手稿語言 ,呢種語言喺 GameMaker 以外嘅環境係完全冇用嘅;領域特定語言嘅相對係通用電腦語言-通用電腦語言可以用喺多種唔同嘅環境度,例如係 Python 同 C 呀噉。 編程範式 Car
呢件物件喺個程式入面用嚟表示一架虛擬嘅「車」,會有若干隻特性同埋方法。 物件導向編程 (object-oriented programming,OOP):以物件 (object)嚟做一個程式嘅基本單元;一件物件會包括一柞特定嘅數據 ,呢啲數據(特性 )因為用途上有某啲共通點而俾設計者擺埋一齊嚟睇;除此之外,一件物件通常仲會掕住一啲專門處理同嗰件物件相關嘅工作嘅子程序 ,呢啲子程序就係嗰件物件嘅方法 。 程序式編程 (procedural programming):強調「電腦程式係一連串要行嘅指令」,集中於將寫緊嘅電腦程式分開做若干橛,每橛都係一拃彼此相關嘅指令(程序;睇埋子程序 嘅概念)。 編程原則 電腦工程
電腦架構 並行運算 平行運算 分散運算 性能 (performance):指一個電腦系統能夠做幾多有用嘅運算 同埋做起呢啲運算上嚟嘅效率 係點;性能可以用多種指標量度 ,而一般嚟講,一部性能良好嘅電腦具有以下嘅特徵: 做起運算上嚟用嘅時間少; 用嘅運算資源(睇埋寄存器 )少; 快速嘅數據壓縮同解壓; 數據傳遞花嘅時間短... 等等。 系統資源 (system resource):指一個電腦系統 入面一啲會俾個系統消耗嚟做運算 工作嘅嘢,例如係記憶體 噉。 電腦叢集 (computer cluster):指若干部一齊做嘢嘅電腦,呢啲電腦之間嘅連接程度高到可以當做一個系統 噉嚟睇,每個節點 都會做同樣嘅功能,並且由某啲軟件中央噉控制住;一嚿電腦叢集裏面嗰啲電腦通常都會用區域網絡 連埋一齊。 呢間倉入面有一大拃一齊做嘢嘅電腦,呢啲電腦組成一嚿電腦叢集,可以攞嚟做啲齋靠一部機做唔到嘅嘢。 緩存 (cache):一類嘅硬件或者軟件部份,專門攞嚟儲住啲數據,而目的係為咗第時俾用家以更快嘅速度攞啲數據嚟用;一部廿一世紀初嘅電腦,通常會將最近用過或者不嬲成日用嘅數據儲喺緩存度,達致提升電腦性能 (部機處理起數據上嚟快咗)嘅效果。 作業系統 作業系統 (operating system)係一個負責管理部電腦啲硬件 同軟件 資源嘅電腦程式,係電腦系統 嘅基石。比較出名嘅作業系統有 Microsoft Windows 同 macOS 。
內核 (kernel):位於一個作業系統嘅「核心」嘅電腦程式 ,負責控制個系統嘅唔同部份;喺多數嘅作業系統嗰度,內核係部機著 嗰陣其中一個最先撈嘅程式,跟手會幫手做第啲開機要做嘅工作。 硬件抽象層 (hardware abstraction layer,HAL):一浸硬件抽象層係個作業系統入面嘅一柞程式,會負責將啲硬件 抽象化 噉表示出嚟,目的係俾作業系統有得同部電腦嘅硬件負動;硬件抽象層可以由內核嗰度接收指令。 應用程式介面 (application programming interface,API):一種俾兩個或者以上電腦程式 彼此之間通訊嘅軟件;例如喺一部個人電腦 上面行一隻應用程式 嘅話,隻程式就需要同部機嘅作業系統交流,而部機嗰啲應用程式介面就會幫手做呢樣工作。 DirectX :係一系列用嚟教部電腦處理啲多媒體 嘢嘅 API,對電子遊戲 嚟講零舍重要;用電子遊戲程式 做例子,DirectX 會負責扮演部電腦(包括個人電腦 同好似 Xbox 噉嘅遊戲機 )同遊戲程式之間條橋樑,每隻版本嘅 DirectX 都會有一套特定嘅多媒體功能係佢支援嘅,並且指定咗話呢啲功能可以由電腦程式指揮部機啲硬件(假設呢啲硬件同嗰隻版本嘅 DirectX 相容)做。DirectX 令到電子遊戲開發 等嘅工作易搞咗好多-喺初頭嗰陣,電腦係會俾隻遊戲程式直接同硬件通訊嘅,但噉做搞到啲遊戲開發者 焗住吓吓都要每款機都同佢寫一柞碼做呢種通訊,於是微軟就開發咗 DirectX 呢隻 API,遊戲開發者變成淨係需要諗「自己整嗰隻遊戲寫嚟同邊隻版本嘅 DirectX 相容」就得。 檔案系統 (file system):作業系統當中用嚟控制「數據點樣儲起同提取」嗰部份;檔案系統做嘅主要係將一部電腦入面啲數據斬件分好,而且每一件數據(一個電腦檔案 ;file)都同佢改返個名,等用家能夠輕鬆噉睇得出邊件數據打邊件;冇咗檔案系統嘅話,部電腦入面嗰啲數據只會係一大嚿雜亂無章嘅數據,冇方法俾用家知道邊一段係屬邊件數據,更加唔會做到正確噉儲起同提取數據。 電腦通訊
電腦網絡 一幅抽象圖解顯示一拃電腦點樣用一個網絡連埋一齊。 對談 (session):喺電腦科學上,一場對談係指兩部或者以上嘅通訊緊嘅機之間,一場暫時嘅資訊 交流,例如當一位用家用自己部個人電腦 開網頁 嚟睇嗰陣,佢部機會同網頁伺服器 通訊,要求部伺服器交出有關嗰個網頁嘅資訊。 電腦網絡 節點 (node):一個電腦網絡入面嘅一個通訊終點,通常係一部有能力收發訊號 嘅電子架生 。 覆蓋網絡 (overlay network):指一個「建立喺第個網絡之上」嘅電腦網絡;個網絡啲節點 之間會有連繫,而呢啲連繫冚唪唥都會喺底層嗰個網絡嗰度有對應。 私人網絡 (private network):指個網絡入面啲 IP 位址 係私人嘅-會用自己嘅一套方案嚟安排 IP 位址,令到外界難以干涉個私人網絡內部嘅通訊。睇埋 VPN 。 互聯網 (Internet):一個遍及全地球 嘅龐大電腦網絡 ,會用 TCP/IP 嚟俾網絡同電腦 之間通訊,包括咗淨係地區性(例如淨係香港 內)以至全地球嘅電腦網絡連繫,亦都同時包括公開同私人(淨係得有授權嘅人先可以進入)嘅網絡。 黑暗網絡 (darknet):網絡嘅一種;一個黑暗網絡係一個喺互聯網裏面嘅覆蓋網絡 ,用家 一定要用某啲特定嘅軟件 或者授權先至可以用;黑暗網絡好多時都係外人入唔到,甚至唔能夠知道入面發生緊咩事嘅,所以成日俾人攞嚟做啲犯法 嘅嘢。 萬維網 (World Wide Web,WWW):互聯網會用到嘅一套資訊系統 軟件 ,俾人通過互聯網嚟傳送文件 或者第啲資源,當中每一件資源都有會掕住個 URL (例如 https://example.com/
噉)嚟識別佢。 Web 1.0 同 Web 2.0 :Web 1.0 泛指 1990 年代至 2004 年嘅 WWW;喺呢個時期,會用互聯網嘅人幾乎冚唪唥都係純接收資訊;喺 2000 年代後半橛,開始有咗社交媒體 同 YouTube 等嘅平台,令到「整自己嘅內容,再將啲內容掟上網」呢家嘢變得好易做,於是「由用家創造嘅內容」-好似係社交媒體上嘅貼文、影片 同網誌 呀噉-出現咗爆發性嘅增長,用家會用各自整嘅內容互相影響,出現咗一套同打前嘅互聯網完全唔同嘅資訊生態,而呢個時期嘅互聯網就俾人嗌做 Web 2.0 。 電郵 (email) 垃圾電郵 (email spam / junk mail):係指由某啲人大量噉周圍傳嘅電郵,好多時會係廣告 ;反垃圾電郵技術 (anti-spam)會教電腦攞一封電郵做 input
,而 output
就俾出「封電郵係咪垃圾電郵」,係嘅就自動將封電郵掟去垃圾信箱度。 電腦保安 電腦保安 (cybersecurity)係電腦科學嘅一門,泛指針對「點樣保護電腦系統 入面嘅資訊 」嘅研究。電腦保安係一門好緊要嘅技術,例如銀行 啲資訊系統 實要處理啲客嘅信用咭號碼 噉嘅敏感資訊,有好多罪犯 都會嘗試偷呢啲資訊,所以銀行嘅資訊科技人員就要諗計好好保護呢啲資訊。
惡意程式 (malware):「有惡意」嘅軟件 ,即係指隻軟件設計出嚟用意係想對電腦、伺服器、用家 或者電腦網絡造成傷害。 病毒 (virus):一種常見嘅惡意程式,一旦一隻電腦病毒開始行,佢就會郁手篡改第啲電腦程式 ,對呢啲程式(host)做代碼注入 (code injection;指加插一啲本來唔屬於嗰個程式嘅碼),從而自我複製 ,好多時仲會控制 host 所屬嘅電腦,要呢啲電腦幫手散佈隻病毒(例如教部電腦將隻病毒附喺電郵 度再傳去俾第啲電腦)。 廣告軟件 (adware):泛指一啲用嚟勁喺用家 部機度顯示廣告 嘅軟件;呢啲軟件可以透過好多途徑進入用家嘅電腦,例如係「匿喺」一啲正常嘅程式裏面,一齊俾用家下載落部機度;一旦一隻廣告軟件裝咗落部機度,就會開始用各種方法向用家顯示廣告,例如係上上吓網無啦啦彈個廣告出嚟,或者係擅自改咗用家網頁瀏覽器 嘅頭版 噉;比較有攻擊性嘅廣告軟件甚至會(例如)靜靜雞查用家「上邊啲網站」嘅資訊,再將呢啲資訊傳返去開發隻軟件嘅人度,用嚟做「已知呢位用家對呢啲呢啲嘢有興趣,要彈啲咩廣告俾呢位用家睇?」噉嘅決策 。 鍵盤側錄 (keylogging / keystroke logging):係指一部電腦(通常暗中)記住喺某段時間內用家撳咗鍵盤 邊啲掣,可以係一嚿硬件 ;鍵盤側錄程式一般都唔犯法,成日俾 IT 工作者攞嚟查返啲用家做過啲乜,不過亦都有啲人會用鍵盤側錄嚟做「偷密碼 」等嘅犯法嘢。 網絡攻擊 阻斷服務攻擊 (denial-of-service attack,Dos attack):指攻擊者嘗試搞到攻擊目標(好多時係一部伺服器 )冇辦法通過互聯網 向啲用家 提供服務;例如攻擊者用某啲方法突然間係噉勁要求部目標伺服器做嘢,搞到部伺服器唔夠系統資源 服務正常嘅用家。分散式阻斷服務攻擊 (distributed Dos,DDos)係 Dos 嘅一種,指個攻擊者利用俾佢攻陷咗嘅一柞電腦嚟做「用家」,控制呢柞電腦一齊勁要求個目標伺服器做嘢(好似下圖嘅抽象圖解噉)。 夾硬執行代碼 (arbitrary code execution,ACE):指揀定一部機,再揀定一柞命令 或者電腦碼 ,並且夾硬要部機執行嗰柞命令或者碼;黑客 好多時都會用呢種做法嚟犯罪 ,簡單例子係夾硬叫受害者部機傳送一啲敏感嘅個人資料。 防毒軟件 (antivirus software):泛指用嚟幫一部電腦探測、防範同清除惡意程式 嘅軟件;响一開始嗰陣,防毒軟件 淨係攞嚟防電腦病毒 嘅,不過到咗廿一世紀初,防毒軟件曉應付嘅唔淨只係電腦病毒 ,仲會有功能幫用家防範勒索軟件 、特洛伊木馬程序 、濫發電子訊息 同釣魚 等嘅威脅。 虛擬私人網路 (virtual private network,VPN):軟件嘅一種,主要功能係將一個私人網絡 「擴張」到去一個公用網絡(例如互聯網 )度,等用家有得喺唔使俾個公用網絡睇到自己 IP 位址 (好多時係透過加密 嘅技術)嘅情況下同個網絡收發資訊-達致「保護用家個人資料」噉嘅效果;喺廿一世紀初,VPN 嘅使用幾有爭議性,例如唔少人都質疑 VPN 係咪信得過,會唔會乘機偷用家嘅個資。 密碼學 密碼學 雜湊函數 (hash function):一種函數 ;一個雜湊函數能夠攞任何長度嘅數據(input ),再將段數據轉化成一個長度固定嘅位陣列 (output ;下圖嘅 digest
),例如攞一大拃人嘅英文 名(可以有幾多個字母都得),再將啲名冚唪唥轉換做兩個位嘅數-John Smith
→ 02
、Lisa Smith
→ 03
、Sam Doe
→ 02
... 呀噉。 密碼雜湊函數 (cryptographic hash function):密碼學上成日用嘅一類演算法 ;一個密碼雜湊函數會將任何長度嘅數據(input )轉化成一個長度固定嘅位陣列 (output ;下圖嘅 digest
),而且有以下嘅特徵: 冇隨機性喺入面; 要「由出嗰啲位陣列嗰度,計返串輸入數據出嚟」,係極之困難甚至冇可能嘅; 是但搵兩串唔同嘅輸入數據,佢哋出嘅位陣列都會唔一樣; 串輸入數據變咗少少,出嘅位陣列都會唔同嗮樣。 區塊鏈 (blockchain):一種分散式嘅數據庫 ;一條區塊鏈會用好多部彼此之間有網絡 連住、但位置上可以相距好遠嘅電腦,喺一條區塊鏈當中,數據會斬開做一嚿嚿區塊 (block),每嚿區塊都會儲若干嘅數據,儲滿就封(唔俾人再改)同埋連去打前嗰啲區塊度(用 prev_hash
),而且每嚿區塊都掕住咗個時間標記 (好似下圖噉)。 區塊鏈最出名嘅用途係用嚟儲住加密電子貨幣 啲交易紀錄:一條區塊鏈正路會將網絡入面唔同電腦嘅紀錄做較對,如果有其中一部機啲數據同其餘嗰啲機唔夾,噉就知道嗰部機啲數據有問題,而噉亦都表示,如果有黑客 想偷錢(必然會涉及篡改紀錄)就實要改個網絡入面 51% 嘅電腦儲咗嘅數據-呢樣係一樣極之困難嘅工作,而且因為一條區塊鏈每嚿區塊都帶有有關打前啲區塊嘅資訊 (用咗密碼雜湊函數 ),令到防守方更加容易留意到有人對啲紀錄做咗手腳。 資訊系統
數據刮取 (data scraping):指用電腦程式 由人睇得到嘅輸出嗰度攞數據 。 網頁刮料 (web scraping):指由網頁 嗰度做數據刮取;例如寫個程式,個程式曉直接噉用 HTTP 等嘅方法上網,並且由啲網頁嗰度攞數據,數吓(例如)某隻字喺每個睇咗嘅網頁當中出現咗幾多次,然後個程式仲會將呢啲數據傳送返去事先指定好嘅數據庫嗰度,等設計個程式嘅人有得分析呢啲數據。 數據庫 數據庫 (database)係指俾電腦有系統性噉儲住啲資料 嘅地方;當中「有系統性」意思即係話個數據庫唔淨只曉儲住啲數據,仲會設計 到方便啲用家 搵資料-簡單例子,廿一世紀初嘅數據庫最起碼仲會包埋某啲形式嘅搜尋功能 ,俾用家靠打關鍵字等嘅方法摷資料,而喺實際應用上,(例如)一間企業 可以用個數據庫儲住一間佢哋啲員工 嘅資料,等間企業嘅管理者 可以隨時靠打員工嘅名或者姓嚟搵到有關嗰位員工嘅資料。
關係數據庫 (relational database):數據庫幅表會以表格 嘅方式出現,有若干行打橫嘅列 同埋若干行打戙嘅行 ,每列表示一個個案,每行表示一款數據。 時間標記 (timestamp):指一串用嚟記住一件事件幾時發生嘅資訊;數據庫入面嘅每一件數據通常都會掕住個時間標記,用嚟表示嗰件數據係幾時記錄入去個數據庫度嘅。 序列化 (serialization):係指將一個數據結構 或者物件 轉化成一個可以儲起嘅格式 ,等呢啲數據 可以傳去第度而且收數據嗰方可以重新砌返啲數據出嚟。有好多程式語言 (例如 Python 同 C# )都會有特定嘅陳述式 做序列化。例如 C# 就有類似噉嘅做法: [SerializeField] InputField feedback1 ; // feedback1 會做序列化。 做序列化可能嘅用意包括係想將啲數據 傳去數據庫嗰度,例如行為分析 上就成日會將自己嘅軟件 設計成曉將描述用家 行為嘅數據傳返去間企業 嘅數據庫嗰度。 數據庫管理系統 (database management system,DBMS):泛指一啲專門設計嚟俾用家攞嚟管理數據庫嘅軟件 ,最少會有齊增查改刪 (CRUD)嘅功能。增查改刪包括: 增加 (C reate)指加新嘅數據個案落個數據庫嗰度; 查閱 (R ead)指俾用家查同睇數據庫入面嘅數據; 更改 (U pdate)指俾用家改嘅數據庫嘅數據; 刪除 (D elete)指俾用家剷走唔想要嘅數據。 軟件工程
軟件工程 (software engineering)係工程學 嘅一門,專研究點樣去規範噉開發 同維護 電腦軟件 ,而軟件工程師 (software engineer)就係指專業 噉做軟件工程嘅人。
軟件 (software):泛指一隻或者一柞程式 ,能夠教部電腦 做出特定嘅運算 嚟達到用家 想要嘅功能 。 本台 (native)同跨平台 (cross-platform)軟件:一隻本台軟件係專門設計嚟淨係喺某隻作業系統 上面行嘅軟件,而一隻跨平台軟件就係可以喺唔同嘅作業系統上面行嘅軟件;例如一部 Game Boy 會由佢嘅咭匣 嗰度攞軟件行,呢啲軟件嘅碼 係專門設計嚟喺 Game Boy 上面行嘅,而想喺 Game Boy 以外嘅平台嗰度行呢啲碼就要用到模擬器 -一種模仿 Game Boy 噉行啲碼嘅架生;同「用返隻本台軟件屬嘅平台嚟行」相比,「用模擬器嚟行」通常梗會慢咗啲-模擬器定義 上就係模仿第個平台嘅硬件 或者軟件,所以實要喺「想行嗰段碼」之外再行啲額外嘅碼。 軟件最佳化 (software optimization / software optimisation):指將一隻軟件改到更加有效率 ,等個系統行起上嚟唔使用咁多系統資源 ;簡單例子有檢查吓隻軟件嘅源碼 ,確保段源碼完全冇任何多餘(即係有同冇都唔會影響隻軟件嘅功效)嘅碼-想像家陣編寫緊一隻網上遊戲 嘅程式 ,隻遊戲好受歡迎,有數以十萬計嘅玩家 ,如果個程式嘅源碼當中有一行多餘嘅碼,噉十萬幾位玩家玩起上嚟部伺服器 就要行多十萬幾行多餘嘅碼,會搞到部伺服器嘅負責大咗好多。因為噉,最佳化喺實際嘅軟件工程工作上係一個相當受重視嘅課題。 由上至下設計 (top-down design)同由下至上設計 (bottom-up design):廣義上係指兩種處理資訊 嘅做法,由上而下 係指將一個有返咁上下複雜 嘅系統 整體噉嚟睇先,跟住再將個系統啲組成部份逐個逐個攞嚟睇(睇咗上層嘅嘢先睇下層),而由下至上 係指將啲組成部份逐個逐個攞嚟睇先,跟住先將個系統 整體噉嚟分析。喺軟件工程上,由上至下 係指諗好咗隻軟件「要有咩功能」先,諗完先至諗源碼 要點寫,而由下至上 就係指郁手寫咗啲源碼先,「柞源碼要點樣砌埋一齊成一個整體」就遲啲先算。 整合開發環境 (integrated development environment,IDE):係指設計嚟係要俾做電腦相關工作嘅人攞佢嚟開發軟件 嘅應用程式 ,通常會起碼有齊原始碼編輯器 (俾用家攞嚟寫源碼 )、組建自動化 (將源碼轉化做行得嘅程式 嘅功能)同埋除錯器 等嘅功能。 流動應用程式 (mobile application / app):泛指專門設計嚟俾智能電話 等嘅流動裝置 用嘅應用程式 ;喺廿一世紀初,流動裝置係個個人都有嘅咁滯,所以流動應用程式有相當嘅市場 ,有唔少軟件工程師都會花心機嚟研究流動應用程式嘅開發。 軟件設計 軟件設計
物件導向設計 (object-oriented design):指攞個軟件設計上撞到嘅問題,喺郁手寫源碼 打前,諗計度出一個由物件 組成嘅系統 (物件導向編程 )用嚟解決個問題。 設計模式 (design pattern):指一拃設計軟件嗰陣常用嘅方法,設計軟件嘅人唔一定要跟呢啲方法,但主流認為每隻設計模式都能夠有效解決某啲做 OOP 嗰時成日會撞到嘅問題。 建立型模式 (creational pattern):指集中諗「點樣建立物件 」嘅設計模式。 單例模式 (singleton pattern):指成個類別得一個實例 ,用家唔可以隨便建立新嘅實例;喺最簡單嗰種做法當中,個程式會有類似以下呢段 Java 碼入面嘅 getInstance
噉嘅程序,用嚟確保個實例唔會喺個程式入面出現多過一次: public static synchronized Singleton getInstance () // synchronized 確保唔可以有兩段或者以上嘅過程同時行呢段碼; { if ( obj == null ) // 如果冇 instance... obj = new Singleton (); // 就整個新 instance return obj ; // 將個新 instance 俾做 output } 工廠方法模式 (factory method pattern):又係種建立型模式,用工廠 (喺 OOP 當中泛指曉建立第啲物件嘅物件)入面嘅方法嚟建立物件,而唔係吓吓都要想用件物件嘅物件親自(用自己嘅方法)建立。 結構型模式 (structural pattern):軟件設計模式嘅一類,專門透過「搵出簡單方法嚟實現想要嘅物體間關係」嚟達致有效嘅軟件設計。 行為型模式 (behavioral pattern):軟件設計模式嘅一類,專門透過「搵出物件 之間嘅常見通訊規律」嚟達致有效嘅軟件設計。 觀察者模式 (observer pattern):指一件物件(Subject
)內部留意住佢啲觀察者 (observer);每當某啲狀態出現變化嗰陣,Subject
都會通知自己啲觀察者,而且通常係透過叫觀察者嘅方法嚟通知。 評估軟件 可返用性 :指一個程式入面啲部份(尤其係源碼 )可以喺第時寫新程式嗰陣返用,喺軟件工程 上係軟件嘅一樣重要特徵;有唔少電腦工作者都指出,OOP 其中一個最大嘅優點係啲程式可返用性高-例如喺電子遊戲製作 上,遊戲製作師 好容易可以攞自己程式入面啲類別 去分享(睇埋遊戲資產 ),令到第啲人想喺自己整嘅電子遊戲 裏面加類似嘅物件嗰陣可以慳返工夫。 模塊性 :簡化講係指個程式嘅唔同部份有幾易「分拆開,每嚿都可以獨立運作」-高嘅模塊性表示個程式就算其中一橛軭咗,個程式嘅其餘部份都可以繼續運作;有唔少電腦工作者指,OOP 喺模塊性方面嘅表現相當惡劣-例如淨係繼承 嘅功能,就成日搞到啲程式出現「其中一段碼(例:類別)改咗,另外第啲碼(例:啲子類別)跟住就出問題」噉嘅情況。 數碼藝術 一幅用光線追蹤 造嘅圖像 電腦圖像 電腦圖像 (computer graphics / computer-generated imagery,CG / CGI):指運用電腦整出嚟嘅圖像 或者影片 。
二維電腦圖像 (2D computer graphics):二維 嘅電腦圖像。 三維電腦圖像 (3D computer graphics):三維 嘅電腦圖像。 景檔案 (scene file):一個景檔案會包含咗多種資訊 ,包括係「個景入面用咗啲乜嘢立體模型 」、「每個立體模型喺邊個位置」、「光源喺邊」、「個鏡頭擺喺邊個位置」同埋「幾何變換 」呀噉,描述個景係點嘅。然後部電腦會將呢個檔案入面嘅數據傳去一個彩現 程式嗰度,等個程式做一大柞人手做唔嚟嘅運算 ,計出個鏡頭會睇到嘅(二維)影像應該係點嘅樣嘅,並且將個鏡頭所睇到嘅影像俾出嚟做輸出。 電腦音樂 電腦音樂
拉雜應用 科學運算 人機互動 人機互動 虛擬實境 (virtual reality,縮寫 VR):泛指用電腦嚟模擬出一個虛擬世界 俾用家 體驗;喺廿一世紀初,虛擬實境嘅標準做法係俾用家 戴住個特製嘅頭罩 -個頭罩會向用家對眼 顯示個虛擬世界嘅影像 ,而且個罩仲內置咗感應器 曉感應用家嘅郁動 ,每當用家郁嗰陣,虛擬實境裏面嘅景物就會跟住郁,令用家覺得自己好似置身响個虛擬世界入面噉。Unity 等嘅遊戲引擎 有功能俾用家攞嚟製作虛擬實境用嘅虛擬世界。 一個人戴住 VR 頭罩 嚟體驗一個虛擬世界 。 個人資訊科學 (personal informatics):指人用各種嘅電腦方法監察住自己嘅行為 ;一個做個人資訊科學嘅系統會有感應器 係噉感應住用家做嘅嘢(例如每日行咗幾多步),跟住仲會將呢啲資訊顯示俾用家睇,用意係想幫人更加妥善噉管理自己嘅生活(例如俾用家靠睇住自己每日行咗幾多步,嚟計劃 點樣減肥)。 相關數學 註釋 睇埋 文獻 Abelson, H., & Sussman, G. J. (1996). Structure and interpretation of computer programs (PDF). The MIT Press. Arpaci-Dusseau, R. H., & Arpaci-Dusseau, A. C. (2018). Operating systems: Three easy pieces . Arpaci-Dusseau Books LLC. Bryant, R. E., David Richard, O. H., & David Richard, O. H. (2003). Computer systems: a programmer's perspective . Upper Saddle River: Prentice Hall. Felleisen, M., Findler, R. B., Flatt, M., & Krishnamurthi, S. (2018). How to design programs: an introduction to programming and computing . MIT Press. Hellerstein, J. M., Stonebraker, M., & Hamilton, J. (2007). Architecture of a database system . Now Publishers Inc. Hellerstein, J. M., & Stonebraker, M. (Eds.). (2005). Readings in database systems . MIT press. Kleppmann, M. (2017). Designing data-intensive applications: The big ideas behind reliable, scalable, and maintainable systems . " O'Reilly Media, Inc.". Kurose, J. F., & Ross, K. W. (2007). Computer Networking: A Top-Down Approach Edition . Addision Wesley. Lehman, E., Thomson Leighton, F., & Meyer, A. R. (2017). Mathematics for Computer Science . L. Lov'asz & K. Vesztergombi (1999). Discrete Mathematics (PDF). Lecture Notes, Yale University. Nisan, N., & Schocken, S. (2021). The elements of computing systems: building a modern computer from first principles . MIT press. Nystrom, R. (2021). Crafting Interpreters . Genever Benning. Patterson, D. A., & Hennessy, J. L. (2016). Computer organization and design ARM edition: the hardware software interface . Morgan kaufmann. Polya, G. (2004). How to solve it: A new aspect of mathematical method (No. 246). Princeton university press. Skiena, S. S. (1998). The algorithm design manual (Vol. 2). New York: springer. Strang, G. (1993). Introduction to linear algebra . Wellesley, MA: Wellesley-Cambridge Press. 攷 拎
This article uses material from the Wikipedia 粵語 article 電腦科學詞彙表 , which is released under the Creative Commons Attribution-ShareAlike 3.0 license ("CC BY-SA 3.0") ; additional terms may apply (view authors ). 呢度嘅所有文字係根據 CC BY-SA 4.0 牌照嘅條款發佈;可能會有附加嘅條款。 Images, videos and audio are available under their respective licenses. ®Wikipedia is a registered trademark of the Wiki Foundation, Inc. Wiki 粵語 (DUHOCTRUNGQUOC.VN) is an independent company and has no affiliation with Wiki Foundation.