以下係電腦科學(computer science)上常用嘅詞彙一覽。

各種唔同嘅運算機械

電腦科學,又叫運算科學,係專門研究運算嘅一個科學工程領域[1][2]。「電腦」廣義上指運算機械,即係曉用數據做運算,並且俾出一啲有用結果嘅機械,簡單例子:而家手上有一柞「每個學生喺呢次考試當中攞到嘅分數」嘅數據,要用呢柞數字計出邊個考第一。電腦科學就係集中思考曉做呢啲嘢嘅機械點樣表示同儲起數據、用各種嘅演算法嚟處理數據以及彼此之間傳送數據等嘅問題[3][4]

到咗廿一世紀,電腦科學經已係一個蓬勃嘅獨立科學領域,引起咗哲學社科科幻等領域嘅討論,而且仲有得按照所使用嘅技術或者想達到嘅目的分做多個唔同嘅子領域。電腦科學啲子領域好多時仲要專化到彼此之間溝通唔到-所以有大量嘅專業行話詞彙[5]

理論電腦科學

編輯

運算理論

編輯
内文:運算理論

運算理論(theory of computation)係研究運算本身嘅數學性質嘅一套理論[7]

  • 黑盒(black box): 如果話一部機械係一部黑盒,就表示研究者知佢嘅 inputoutput,但完全唔知部機械係點樣由 input 計個 output 出嚟嘅;喺運算理論嘅分析上,研究者成日都會將唔係重點分析緊嘅部份當做黑盒噉嚟睇[8]
  • 圖靈論題(Turing thesis):根據圖靈論題,一個施喺自然數身上嘅函數可以靠有效方法(指部運算機械會喺數量有效嘅時間之內計完)嚟計到答案 if and only if 個函數可以用圖靈機嚟計到答案;用日常用語講嘅話,意思即係指任何物理上有可能計到嘅問題都可以用圖靈機嚟計[9]
  • 有效方法(effective method):運算理論上嘅一個概念。如果話一個方法係「可以解決運算問題 A 嘅有效方法」,意思即係話用呢個方法解決問題 A 嗰陣[10]
    • 部電腦會行完若干步之後停低。
    • 部電腦實會出到正確嘅答案。
    • 原則上,個步驟可以由一個手上揸住紙筆嘅人做完,而且個人淨係需要跟從個方法啲步驟。
  • 圖靈機(Turing machine):運算模型嘅一種,一部圖靈機嘅運作如下:一部圖靈機會讀取一條分做若干個格嘅帶,條帶每個格裏面都會有個符號(可以係 1 同 0 等多個款);喺每一個時間點,部圖靈機個讀取器都會位於條帶其中一格,而部機會做以下三個基本作業當中是但一個[11][12]
    1. 讀取讀取器下嗰格係乜符號;
    2. 編輯嗰格-寫一個新嘅符號落去或者刪除咗嗰格佢;
    3. 將條帶向左或者向右移一格,等個讀取器可以讀取打前嗰個格隔離嘅一個格。
    • 圖靈機呢部抽象機械就噉睇好似好簡單,但查實可以計到好多嘢[13]
 
一條圖靈機輸入帶嘅抽象圖解;  代表第   款符號。
  • 多項式時間(polynomial time):如果話一段演算法係多項式時間,即係話段演算法「要行幾耐」有個上限T(n)=O(nk),當中 k 係某啲正嘅常數[14]
  • 難解問題(intractable problem):指一條理論上可以解決,但實際上冇可能係夠短嘅時間內解嘅問題,即係例如一條運算問題理論上係解到嘅,但要解決條問題需要嗰個演算法極複雜,複雜到就算用最先進嘅超級電腦嚟行,都要行成 100 年先行得-喺實際應用上根本解決唔到[15]

電腦數據

編輯
内文:電腦數據
  • 資料類型(data type):係一件資料會具有嘅一個屬性,一件資料嘅類型會話俾個編譯器知,個程式打算點樣用呢件資料。常見(絕大多數程式語言都支援)嘅資料類型包括
    • 整數(integer),指件資料表示緊一個整數
    • 浮點數(floating point number),指件資料表示緊一個可以係小數實數
    • 字符(character),指件資料表示緊一個文字等非數字嘅符號
    • 布林(Boolean)指件資料表示緊一個真(1)假(0)值
    • ... 等等。舉個例說明,想像家陣部電腦收到一個訊號「00001」,如果呢個訊號標明咗係一個整數,噉部電腦就知呢段訊號代表緊「1」呢個數字,但如果個訊號標明咗係一個布林資料,噉呢段訊號所代表嘅係「真」。喺寫程式嗰陣,每個變數常數都會有佢嘅資料類型,亦有程式語言係曉自動噉探測件資料嘅類型,例如 Python [16][17]
    • 原始資料類型(primitive):指最基本嗰拃資料類型,隻程式語言入面啲進階嘅資料類型都係用呢啲原始類型組合建構出嚟嘅,整數浮點數布林都係常見嘅原始資料類型[18]
       (真)、 (假)
整數 浮點數 字符 布林
  • 數據結構(data structure):指一部電腦內部組織數據嘅方法[19]。精確啲噉講嘅話,一款數據結構係描述數據嘅代數結構,會指明嗮以下嘅資訊[20]
    • 啲數據同埋佢哋嘅數值、
    • 唔同數據之間嘅關係、同埋
    • 屬呢種數據結構嘅數據可以攞啲咩算子計或者擺入啲乜嘢函數嗰度。
    • 陣列(array):陣列係用嚟裝相關嘅數據嘅;一個陣列正路會有個整數 n 表示佢嘅大細(裝到幾多件數據);一個陣列會包含最多 n 咁多件嘅數據,會有次序(每件數據掕若干個整數,表示佢喺個陣列邊個位),而且啲數據通常(但唔一定)冚唪唥都屬同一隻類型[21]。以下係一個一維、11 件數據咁長嘅陣列:
     
    • 鏈結串列(linked list):都係攞嚟裝相關嘅數據嘅;一條鏈結串列會有若干件次序固定嘅數據,條鏈結串列當中每個位(node)都會有「件數據嘅數值係乜」、「件數據指住嘅下一件數據係邊件」同「件數據嘅前一件數據係邊件」(固定次序;下圖噉)嘅資訊,一位用家搜尋一條鏈結串列嗰陣一定要焗住跟條串列個次序(或者前後掉轉)噉嚟搜尋,冇得話例如(好似陣列噉)隨機噉揀是但一件數據嚟讀取[註 1],不過鏈結串列好處係可以容易噉由柞數據當中攞走其中一件而唔使重新排過嗮柞數據(一個陣列攞走咗其中一件再排過就要改嗮後面嗰啲數據嘅位置數值[22]
     
    • 堆疊(stack):柞數據係最後入嘅最先出(last in first out,LIFO)嘅,即係話柞數據有次序之分,排最尾嗰件數據會優先噉被提取,就好似一疊洗好咗嘅噉,最尾擺入疊碟嗰隻碟會最先俾人攞走;可以對堆疊做嘅運算最基本有 push(擺件數據落堆疊上面)同 pop(刪除堆疊最上面嗰件數據),可以睇下圖嘅圖解。堆疊喺回溯法(backtracking)上成日用-例如想像家陣有個人工智能程式喺度行迷宮,個程式要一路記住自己行過嘅位置,一去到掘頭路就返轉頭,即係話「過去嘅位置」會成一個堆疊,要返轉頭行每一步嗰陣就將最近嗰件數據(個堆疊最頂嗰件)攞走[23]。睇埋遞歸
     
    • 隊列(queue):柞數據係最先入嘅最先出(first in first out,FIFO)嘅,即係話嗰柞數據有次序之分,當中排最先嗰件數據會優先噉被提取,就好似一班人喺度排隊噉;可以對堆疊做嘅運算最基本有 enqueue(擺件數據落隊列最後)同 dequeue(刪除堆疊最先嗰件數據),可以睇下圖嘅圖解。喺實際應用上,隊列最常見嘅用途嚟攞嚟「排隊」-俾部電腦知有啲咩數據等緊要處理,並且將啲數據優先處理[24]
     
     
    • (tree):柞數據有高低層之分,好似一幅樹狀圖噉;一樖數據樹會有若干個節點(node),而且啲節點分層,除咗做起始點嗰個節點(根節點;root)之外,每個節點有一個(而且頂櫳一個)母節點(parent;指喺嗰個節點上面,連住嗰個節點嘅另一個節點),於是就形成柞節點喺起始點嗰度一層層噉每層都分叉嘅樣;好似下圖噉,紅色 2 嗰點係根節點,而根節點下有一層層嘅節點,每個節點都有個母節點(例如 7 嗰點嘅母節點就係個根節點)[26]
     
    • (graph):一幅圖數據有若干個節點,而且每個節點都最少有一條(edge)連去另外一個節點嗰度,而如果有兩個節點之間有條邊連住,佢哋就算係相鄰(adjacent)嘅;好似係下圖噉,下圖係一幅有 6 個節點嘅圖數據,當中節點 1 同節點 2 之間有連結(可以由節點 1 行去節點 2 或者相反)、節點 1 同節點 5 之間有連結(可以由節點 1 行去節點 5 或者相反)... 如此類推[27]
     
  • 整數過溢(integer overflow):電腦運算上會遇到嘅一種問題,指要處理嘅數值嘅大得滯或者細得滯,搞到部電腦表示唔到佢;例如部電腦用咗 16 個位元嚟記住個數,即係話個數如果係正嘅整數,最多淨係可以有   咁大,而如果計計吓數個數變成大過呢個值,就會有整數過溢嘅情況[28]
  • 算術下溢(arithmetic underflow):電腦運算上會遇到嘅一種問題,指要處理嘅數值嘅精細得滯,搞到部電腦表示唔到佢;例如部電腦用咗 16 個位元嚟記住個數,即係話個數如果係浮點數,頂嗮櫳都淨係可以有小數點後 15 個位,而如果計計吓數個數變成精細到超過小數點後 15 個位,就算係有算術下溢嘅情況[29]。睇埋混沌理論
  • 字符編碼(character encoding):指講明電腦內部嗰啲 0011 點樣對應唔同嘅符號
    • ASCII:一套用嚟同廿世紀英文做字符編碼嘅標準方案;响 ASCII 入面,100 0001 對應 A100 0010 對應 B100 0011 對應 C ... 呀噉,所以部電腦就可以靠記住一串串嘅 01 嚟表示文字性質嘅數據[30]
    • 統一碼(Unicode):可以話係 ASCII 嘅延伸版;統一碼嘅基本原理同 ASCII 一樣,每個符號都對應電腦內部嘅一串 01,不過統一碼就包埋好多英文以外嘅字符,好似係漢字呀噉,而且仲包埋好似古埃及聖書體呢啲冇人再用(但可能考古學等領域嘅研究上會用)嘅文字[31]
  • 檔案格式(file format):一款檔案格式係指一套儲住啲電腦位元嘅方案;例如 JPEGGIF 都係圖像檔案格式(用嚟教部電腦儲住啲描述圖像嘅數據嘅檔案格式),但兩者有啲唔同-JPEG 能夠做到將份圖像檔案壓縮到本來嘅 1/10 咁大(同時幅圖嘅質素唔會明顯走樣),而 GIF 就出嗮名支援動畫(呢樣嘢係早期版本嘅 JPEG 唔支援嘅);喺各種嘅電腦應用上,工作者要理解自己處理嘅數據可以用邊啲檔案格式儲起,並且根據自己嘅需要揀用邊一種格式[32][33]
    • JSON(JavaScript Object Notation):由 JavaScript 演變出嚟嘅一種檔案格式,常用於網絡嘅數據交流;JSON 會用人類睇得明嘅文字嚟儲同傳達包含一拃拃名-值對陣列(或者第啲做咗序列化嘅數值)嘅數據物件[34]
  • 十六進制編輯器(hex editor):一種電腦程式,特徵係俾用家打開一個電腦檔案,然後俾用家睇同更改個檔案嘅數據,當中個編輯器將啲數據以十六進制數噉嘅形式嚟呈現俾用家睇[35]
 
用一個十六進制編輯器打開個檔案出嘅樣
  • 紀錄檔案(logging / log file):指一個紀錄作業系統或者第啲軟件運行嘅檔案;例如一個(簡化版)伺服器嘅紀錄檔案會紀錄好似噉嘅資訊[36]
    用家 112XXXXXX 喺 YYYY 年 M 月 D 日 13:51:31 用過 http:xxxxxxxxxx 呢個檔案;
    用家 129XXXXXX 喺 YYYY 年 M 月 D 日 13:51:40 用過 http:xxxxxx234x 呢個檔案;
    ...
    • 紀錄檔案喺做 debug 等嘅工作嗰陣好有用。

程式編寫

編輯
唔同程式嘅語言:低級程式語言(上)、C 程式語言(中)同埋 Python 程式語言(下)
睇埋:創發
  • Hello World:係指喺螢幕顯示「Hello, World!」(你好,世界!)噉嘅字串嘅電腦程式;呢種程式通常都係每種程式語言最基本、最簡單嘅程式,常用於示範一隻程式語言點運作。例如係以下呢段 C 嘅碼噉:
    int main() /* 下面嘅係主程序... */
    {
        printf("Hello, World!"); /* 呢句嘢叫部電腦出「Hello, World!」噉嘅字串。 */
    }
    
  • 直譯器(interpreter):指一個能夠直接噉執行以某啲程式語言寫嘅指示嘅程式
  • 讀取-求值-輸出循環(read-eval-print loop,REPL):一種簡單嘅編程環境,部機係噉重複「攞一條表達式、行、然後彈個 output 出嚟睇」噉嘅過程[37]
  • 條件陳述式(conditional statement):絕大多數程式語言都會有嘅一種陳述式,功能係視乎情況(睇埋邏輯與邏輯或邏輯非)決定係咪要做某啲運算同採取某啲行動-一句條件陳述式會掕住一柞同一句佢要評估嘅條件,當個電腦程式行到個條件陳述式嗰時,如果個條件係真,個程式就會行條件陳述式掕住嗰柞碼,否則個程式就唔會行嗰柞碼[38]。好似以下噉:
    • IF..GOTO,如果 .. 為真,goto 某個位,常見於非結構化程式語言
    • IF..THEN..(ENDIF),如果 .. 為真,做 THEN 後面嘅 ..,ENDIF 用途在於標記掕住碼嘅終結。
    • IF..THEN..ELSE..(ENDIF),如果 .. 為真,做 THEN 後面嘅 ..,否則做 ELSE 後面嘅 ..,ENDIF 用途在於標記掕住碼嘅終結。
    • IF..THEN.. ELSE IF .. THEN .. ELSE..(ENDIF)
  • 遞歸(recursion):指一個子程式用到佢自己,例如以下呢段簡單嘅[39]
    function dream()
        print "Dreaming"
        dream() // dream 呢個子程式當中用到自己。
    
  • 應用程式(application software):電腦程式一種,指個程式設計嚟做某啲特定嘅作業,對部電腦本身嘅運作冇幫助,通常攞嚟俾終端用家用嘅;例如一隻電子遊戲或者一隻文書處理器就係應用程式-一隻電子遊戲會呈現一隻遊戲娛樂玩家,而一隻文書處理器會俾用家有得處理文字,兩種程式都唔會幫部電腦運作[40]
  • Regex(全名 regular expression):指由一段字符當中搵出某串特定嘅字符,好似係[41]
    ^The(搵出以 The 做開頭嘅字符串)
    end$(搵出以 end 做結尾嘅字符串)
    ^The end$(搵出同「The end 」完美符合嘅字符串)... 呀噉。
  • cmd.exe:又有叫命令提示符(command prompt),係好多個作業系統(包括 Microsoft Windows)預設嘅命令行直譯器,會俾用家以命令行介面嘅形式嚟指揮部電腦做嘢,一行指令望落係類似噉嘅樣[42]
    C:\>CommandA && CommandB && CommandC
 
Windows 10 上面嘅命令提示符
  • 呢嚿嘢(this):常見於 OOP 嘅一種功能,指隻程式語言有方法喺一句指令入面講行緊嗰段碼屬嘅一件物件或者類別;例如想像遊戲編程,其中一件物件有個子程序,個子程序會改變件物件嘅位置,就有可能會出現類似以下噉嘅
    this.position = [0,0,0];;意思係「呢嚿嘢(this)嘅位置(position)要變成(=)指定咗嘅值([0,0,0])。
  • 函式庫(library):指電腦程式用嘅非揮發性(唔會一熄機就冇咗嘅)資源,包括數據庫數據以及陳述式噉;資訊科技工作者好興用函式庫嚟交流,令大家做嘢更加方便,例如 AI 噉,會有 AI 工作者搵埋一拃 AI 工作成日用嘅子程序,將呢啲子程序變成陳述式;第啲 AI 工作者攞去用,就可以達到「用一句碼就叫到部電腦做一樣 AI 常用嘅子程序」噉嘅效果[43]

程式語言

編輯
内文:程式語言

程式語言(programming language):泛指用嚟教電腦做運算嘅人造語言,每隻字都會有清楚同固定嘅定義;廿一世紀初常用嘅程式語言有 PythonJavaJavaScriptCSQLMATLAB 同埋 Processing 等等。

  • 程式語言理論(programming language theory):電腦科學嘅一個子領域,包含研究程式語言呢樣嘢應該點樣設計、分析同埋分門別類嘅一套理論;程式語言理論會用邏輯形式化-即係每個符號都有清晰定義,唔似得自然語言咁多歧義-嘅語言嚟表達唔同嘅程式語言,剖析唔同程式語言彼此之間喺解難能力上有乜嘢差異,例如係「某隻程式語言會唔會比起第啲語言更加擅長解某啲類型嘅問題」等嘅課題[44]
    • 抽象句法樹(abstract syntax tree,AST):用樹狀圖噉嘅方法嚟表示一段用程式語言寫嘅源碼;噉做可以攞走源碼當中啲標點符號同第啲對分析嚟講冇用嘅符號,等分析起上嚟易睇啲[45]
  • 語言原始體(language primitive):指一隻程式語言入面最簡單嘅元素,簡單到唔會靠第啲元素嚟定義;包括咗「要處理嘅數據」同「做喺啲數據上做啲咩運算」。
  • 句法(syntax):指一隻程式語言入面指定「邊啲符號(包括數字字母)嘅組合算係有意思」嘅法則,好似喺 C 程式語言入面,printf("xxx"); 呢行碼會教部電腦顯示出 xxx 噉嘅字,因為 C 語言嘅句法指明咗 printf陳述式係教部電腦做「顯示段字出嚟」嘅作業[46]
  • 抽象化(abstraction):指由研究緊嗰樣物件嗰度攞走不必要嘅資訊,等個研究者可以集中諗件物件重要嗰啲部份;喺編程上,抽象化包括(例如)同一個子程序改返個名,然後次次想部電腦行個子程序嗰陣直接用嗰個名而唔係將個子程序成段碼再打多次。
  • 變數(variable)同常數(constant):喺編程上,一個變數係指某個儲存位置(記憶體地址)加一個符號性嘅名(識別碼),而個變數會有個喺程式執行期間可以改變嘅數值;而常數就係指個儲存位置嘅數值喺程式執行期間唔可以被改變[47]
  • 算子(operator):指一隻程式語言入面行為似函數噉嘅嘢,例如「」或者「比較兩個數嘅大細」呀噉;運算數(operand)就係指俾算子攞去計嘅數,例如 1 + 1 當中嘅 1 係運算數,而 + 就係算子[48]
  • 子程序(subroutine):指一個大型程式當中特定嘅一拃程式碼,由一個或者多個陳述式組成,專門完成某項工作,而且獨立於子程式以外嘅陳述式。通常用嚟教個程式做一啲要重複做若干次嘅工作。
  • 表達式(expression):喺一段程式碼當中,一段表達式係結合咗若干個常數變數子程序算子而成嘅物體,能夠俾隻程式語言攞去行。
  • 求值策略(evaluation strategy):指一隻程式語言用咩方法嚟同啲表達式做求值;舉例說明,想像家陣要行以下噉嘅表達式[49]
      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) => ...
    
    • 唔同嘅求值策略都有各自嘅利弊,同一條表達式,有可能用一種求值策略會攞到正確答案,但用另一種求值策略就會搞到輕機[50]
  • 領域特定語言(domain-specific language,DSL)同通用電腦語言(general-purpose language,GPL):領域特定語言係指淨係適用於某個應用領域嘅電腦語言,例如 GameMaker 呢隻遊戲引擎就設有淨係可以喺 GameMaker 入面用嘅手稿語言,呢種語言喺 GameMaker 以外嘅環境係完全冇用嘅[51];領域特定語言嘅相對係通用電腦語言-通用電腦語言可以用喺多種唔同嘅環境度,例如係 PythonC 呀噉。

編程範式

編輯
 
Car 呢件物件喺個程式入面用嚟表示一架虛擬嘅「車」,會有若干隻特性同埋方法。
  • 物件導向編程(object-oriented programming,OOP):以物件(object)嚟做一個程式嘅基本單元;一件物件會包括一柞特定嘅數據,呢啲數據(特性)因為用途上有某啲共通點而俾設計者擺埋一齊嚟睇;除此之外,一件物件通常仲會掕住一啲專門處理同嗰件物件相關嘅工作嘅子程序,呢啲子程序就係嗰件物件嘅方法[52][53]
  • 程序式編程(procedural programming):強調「電腦程式係一連串要行嘅指令」,集中於將寫緊嘅電腦程式分開做若干橛,每橛都係一拃彼此相關嘅指令(程序;睇埋子程序嘅概念)[54]

編程原則

編輯

電腦工程

編輯
内文:電腦工程
  • 電腦架構
  • 並行運算
  • 平行運算
  • 分散運算
  • 性能(performance):指一個電腦系統能夠做幾多有用嘅運算同埋做起呢啲運算上嚟嘅效率係點;性能可以用多種指標量度,而一般嚟講,一部性能良好嘅電腦具有以下嘅特徵:
    • 做起運算上嚟用嘅時間少;
    • 用嘅運算資源(睇埋寄存器)少;
    • 快速嘅數據壓縮同解壓;
    • 數據傳遞花嘅時間短... 等等[55]
  • 系統資源(system resource):指一個電腦系統入面一啲會俾個系統消耗嚟做運算工作嘅嘢,例如係記憶體噉。
  • 電腦叢集(computer cluster):指若干部一齊做嘢嘅電腦,呢啲電腦之間嘅連接程度高到可以當做一個系統噉嚟睇,每個節點都會做同樣嘅功能,並且由某啲軟件中央噉控制住;一嚿電腦叢集裏面嗰啲電腦通常都會用區域網絡連埋一齊[56]
 
呢間倉入面有一大拃一齊做嘢嘅電腦,呢啲電腦組成一嚿電腦叢集,可以攞嚟做啲齋靠一部機做唔到嘅嘢。
  • 緩存(cache):一類嘅硬件或者軟件部份,專門攞嚟儲住啲數據,而目的係為咗第時俾用家以更快嘅速度攞啲數據嚟用;一部廿一世紀初嘅電腦,通常會將最近用過或者不嬲成日用嘅數據儲喺緩存度,達致提升電腦性能(部機處理起數據上嚟快咗)嘅效果[57]

作業系統

編輯
内文:作業系統

作業系統(operating system)係一個負責管理部電腦啲硬件軟件資源嘅電腦程式,係電腦系統嘅基石。比較出名嘅作業系統有 Microsoft WindowsmacOS

  • 內核(kernel):位於一個作業系統嘅「核心」嘅電腦程式,負責控制個系統嘅唔同部份;喺多數嘅作業系統嗰度,內核係部機著嗰陣其中一個最先撈嘅程式,跟手會幫手做第啲開機要做嘅工作[58]
  • 硬件抽象層(hardware abstraction layer,HAL):一浸硬件抽象層係個作業系統入面嘅一柞程式,會負責將啲硬件抽象化噉表示出嚟,目的係俾作業系統有得同部電腦嘅硬件負動;硬件抽象層可以由內核嗰度接收指令[59]
  • 應用程式介面(application programming interface,API):一種俾兩個或者以上電腦程式彼此之間通訊嘅軟件;例如喺一部個人電腦上面行一隻應用程式嘅話,隻程式就需要同部機嘅作業系統交流,而部機嗰啲應用程式介面就會幫手做呢樣工作[60]
    • DirectX:係一系列用嚟教部電腦處理啲多媒體嘢嘅 API,對電子遊戲嚟講零舍重要;用電子遊戲程式做例子,DirectX 會負責扮演部電腦(包括個人電腦同好似 Xbox 噉嘅遊戲機)同遊戲程式之間條橋樑,每隻版本嘅 DirectX 都會有一套特定嘅多媒體功能係佢支援嘅,並且指定咗話呢啲功能可以由電腦程式指揮部機啲硬件(假設呢啲硬件同嗰隻版本嘅 DirectX 相容)做。DirectX 令到電子遊戲開發等嘅工作易搞咗好多-喺初頭嗰陣,電腦係會俾隻遊戲程式直接同硬件通訊嘅,但噉做搞到啲遊戲開發者焗住吓吓都要每款機都同佢寫一柞碼做呢種通訊,於是微軟就開發咗 DirectX 呢隻 API,遊戲開發者變成淨係需要諗「自己整嗰隻遊戲寫嚟同邊隻版本嘅 DirectX 相容」就得[61]
  • 檔案系統(file system):作業系統當中用嚟控制「數據點樣儲起同提取」嗰部份;檔案系統做嘅主要係將一部電腦入面啲數據斬件分好,而且每一件數據(一個電腦檔案;file)都同佢改返個名,等用家能夠輕鬆噉睇得出邊件數據打邊件;冇咗檔案系統嘅話,部電腦入面嗰啲數據只會係一大嚿雜亂無章嘅數據,冇方法俾用家知道邊一段係屬邊件數據,更加唔會做到正確噉儲起同提取數據[62]

電腦通訊

編輯

電腦網絡

編輯
 
一幅抽象圖解顯示一拃電腦點樣用一個網絡連埋一齊。
内文:電腦網絡
  • 對談(session):喺電腦科學上,一場對談係指兩部或者以上嘅通訊緊嘅機之間,一場暫時嘅資訊交流,例如當一位用家用自己部個人電腦網頁嚟睇嗰陣,佢部機會同網頁伺服器通訊,要求部伺服器交出有關嗰個網頁嘅資訊[63]
  • 電腦網絡
  • 節點(node):一個電腦網絡入面嘅一個通訊終點,通常係一部有能力收發訊號電子架生
  • 覆蓋網絡(overlay network):指一個「建立喺第個網絡之上」嘅電腦網絡;個網絡啲節點之間會有連繫,而呢啲連繫冚唪唥都會喺底層嗰個網絡嗰度有對應[64]
  • 私人網絡(private network):指個網絡入面啲 IP 位址係私人嘅-會用自己嘅一套方案嚟安排 IP 位址,令到外界難以干涉個私人網絡內部嘅通訊[65]。睇埋 VPN
  • 互聯網(Internet):一個遍及全地球嘅龐大電腦網絡,會用 TCP/IP 嚟俾網絡同電腦之間通訊,包括咗淨係地區性(例如淨係香港內)以至全地球嘅電腦網絡連繫,亦都同時包括公開同私人(淨係得有授權嘅人先可以進入)嘅網絡[66]
    • 黑暗網絡(darknet):網絡嘅一種;一個黑暗網絡係一個喺互聯網裏面嘅覆蓋網絡用家一定要用某啲特定嘅軟件或者授權先至可以用;黑暗網絡好多時都係外人入唔到,甚至唔能夠知道入面發生緊咩事嘅,所以成日俾人攞嚟做啲犯法嘅嘢[67]
  • 萬維網(World Wide Web,WWW):互聯網會用到嘅一套資訊系統軟件,俾人通過互聯網嚟傳送文件或者第啲資源,當中每一件資源都有會掕住個 URL(例如 https://example.com/ 噉)嚟識別佢[68]
    • Web 1.0Web 2.0Web 1.0 泛指 1990 年代至 2004 年嘅 WWW;喺呢個時期,會用互聯網嘅人幾乎冚唪唥都係純接收資訊;喺 2000 年代後半橛,開始有咗社交媒體YouTube 等嘅平台,令到「整自己嘅內容,再將啲內容掟上網」呢家嘢變得好易做,於是「由用家創造嘅內容」-好似係社交媒體上嘅貼文、影片網誌呀噉-出現咗爆發性嘅增長,用家會用各自整嘅內容互相影響,出現咗一套同打前嘅互聯網完全唔同嘅資訊生態,而呢個時期嘅互聯網就俾人嗌做 Web 2.0 [69]
  • 電郵(email)
    • 垃圾電郵(email spam / junk mail):係指由某啲人大量噉周圍傳嘅電郵,好多時會係廣告反垃圾電郵技術(anti-spam)會教電腦攞一封電郵做 input,而 output 就俾出「封電郵係咪垃圾電郵」,係嘅就自動將封電郵掟去垃圾信箱度[70]

電腦保安

編輯

電腦保安(cybersecurity)係電腦科學嘅一門,泛指針對「點樣保護電腦系統入面嘅資訊」嘅研究。電腦保安係一門好緊要嘅技術,例如銀行資訊系統實要處理啲客嘅信用咭號碼噉嘅敏感資訊,有好多罪犯都會嘗試偷呢啲資訊,所以銀行嘅資訊科技人員就要諗計好好保護呢啲資訊[71]

  • 惡意程式(malware):「有惡意」嘅軟件,即係指隻軟件設計出嚟用意係想對電腦、伺服器、用家或者電腦網絡造成傷害。
    • 病毒(virus):一種常見嘅惡意程式,一旦一隻電腦病毒開始行,佢就會郁手篡改第啲電腦程式,對呢啲程式(host)做代碼注入(code injection;指加插一啲本來唔屬於嗰個程式嘅碼),從而自我複製,好多時仲會控制 host 所屬嘅電腦,要呢啲電腦幫手散佈隻病毒(例如教部電腦將隻病毒附喺電郵度再傳去俾第啲電腦)[72]
    • 廣告軟件(adware):泛指一啲用嚟勁喺用家部機度顯示廣告嘅軟件;呢啲軟件可以透過好多途徑進入用家嘅電腦,例如係「匿喺」一啲正常嘅程式裏面,一齊俾用家下載落部機度;一旦一隻廣告軟件裝咗落部機度,就會開始用各種方法向用家顯示廣告,例如係上上吓網無啦啦彈個廣告出嚟,或者係擅自改咗用家網頁瀏覽器頭版噉;比較有攻擊性嘅廣告軟件甚至會(例如)靜靜雞查用家「上邊啲網站」嘅資訊,再將呢啲資訊傳返去開發隻軟件嘅人度,用嚟做「已知呢位用家對呢啲呢啲嘢有興趣,要彈啲咩廣告俾呢位用家睇?」噉嘅決策[73]
    • 鍵盤側錄(keylogging / keystroke logging):係指一部電腦(通常暗中)記住喺某段時間內用家撳咗鍵盤邊啲掣,可以係一嚿硬件;鍵盤側錄程式一般都唔犯法,成日俾 IT 工作者攞嚟查返啲用家做過啲乜,不過亦都有啲人會用鍵盤側錄嚟做「偷密碼」等嘅犯法嘢[74]
  • 網絡攻擊
    • 阻斷服務攻擊(denial-of-service attack,Dos attack):指攻擊者嘗試搞到攻擊目標(好多時係一部伺服器)冇辦法通過互聯網向啲用家提供服務;例如攻擊者用某啲方法突然間係噉勁要求部目標伺服器做嘢,搞到部伺服器唔夠系統資源服務正常嘅用家。分散式阻斷服務攻擊(distributed Dos,DDos)係 Dos 嘅一種,指個攻擊者利用俾佢攻陷咗嘅一柞電腦嚟做「用家」,控制呢柞電腦一齊勁要求個目標伺服器做嘢(好似下圖嘅抽象圖解噉)[75]
     
  • 夾硬執行代碼(arbitrary code execution,ACE):指揀定一部機,再揀定一柞命令或者電腦碼,並且夾硬要部機執行嗰柞命令或者碼;黑客好多時都會用呢種做法嚟犯罪,簡單例子係夾硬叫受害者部機傳送一啲敏感嘅個人資料[76]
  • 防毒軟件(antivirus software):泛指用嚟幫一部電腦探測、防範同清除惡意程式嘅軟件;响一開始嗰陣,防毒軟件淨係攞嚟防電腦病毒嘅,不過到咗廿一世紀初,防毒軟件曉應付嘅唔淨只係電腦病毒,仲會有功能幫用家防範勒索軟件特洛伊木馬程序濫發電子訊息釣魚等嘅威脅[77]
  • 虛擬私人網路(virtual private network,VPN):軟件嘅一種,主要功能係將一個私人網絡「擴張」到去一個公用網絡(例如互聯網)度,等用家有得喺唔使俾個公用網絡睇到自己 IP 位址(好多時係透過加密嘅技術)嘅情況下同個網絡收發資訊-達致「保護用家個人資料」噉嘅效果;喺廿一世紀初,VPN 嘅使用幾有爭議性,例如唔少人都質疑 VPN 係咪信得過,會唔會乘機偷用家嘅個資[78]

密碼學

編輯
内文:密碼學
  • 密碼學
    • 雜湊函數(hash function):一種函數;一個雜湊函數能夠攞任何長度嘅數據(input),再將段數據轉化成一個長度固定嘅位陣列output;下圖嘅 digest),例如攞一大拃人嘅英文名(可以有幾多個字母都得),再將啲名冚唪唥轉換做兩個位嘅數-John Smith02Lisa Smith03Sam Doe02... 呀噉[79]
    • 密碼雜湊函數(cryptographic hash function):密碼學上成日用嘅一類演算法;一個密碼雜湊函數會將任何長度嘅數據(input)轉化成一個長度固定嘅位陣列output;下圖嘅 digest),而且有以下嘅特徵[80]
      • 冇隨機性喺入面;
      • 要「由出嗰啲位陣列嗰度,計返串輸入數據出嚟」,係極之困難甚至冇可能嘅;
      • 是但搵兩串唔同嘅輸入數據,佢哋出嘅位陣列都會唔一樣;
      • 串輸入數據變咗少少,出嘅位陣列都會唔同嗮樣。
       
    • 區塊鏈(blockchain):一種分散式嘅數據庫;一條區塊鏈會用好多部彼此之間有網絡連住、但位置上可以相距好遠嘅電腦,喺一條區塊鏈當中,數據會斬開做一嚿嚿區塊(block),每嚿區塊都會儲若干嘅數據,儲滿就封(唔俾人再改)同埋連去打前嗰啲區塊度(用 prev_hash),而且每嚿區塊都掕住咗個時間標記(好似下圖噉)[81]
      • 區塊鏈最出名嘅用途係用嚟儲住加密電子貨幣啲交易紀錄:一條區塊鏈正路會將網絡入面唔同電腦嘅紀錄做較對,如果有其中一部機啲數據同其餘嗰啲機唔夾,噉就知道嗰部機啲數據有問題,而噉亦都表示,如果有黑客想偷錢(必然會涉及篡改紀錄)就實要改個網絡入面 51% 嘅電腦儲咗嘅數據-呢樣係一樣極之困難嘅工作,而且因為一條區塊鏈每嚿區塊都帶有有關打前啲區塊嘅資訊(用咗密碼雜湊函數),令到防守方更加容易留意到有人對啲紀錄做咗手腳[81]
         

資訊系統

編輯
内文:資訊系統
  • 數據刮取(data scraping):指用電腦程式由人睇得到嘅輸出嗰度攞數據
    • 網頁刮料(web scraping):指由網頁嗰度做數據刮取;例如寫個程式,個程式曉直接噉用 HTTP 等嘅方法上網,並且由啲網頁嗰度攞數據,數吓(例如)某隻字喺每個睇咗嘅網頁當中出現咗幾多次,然後個程式仲會將呢啲數據傳送返去事先指定好嘅數據庫嗰度,等設計個程式嘅人有得分析呢啲數據[82]

數據庫

編輯
内文:數據庫

數據庫(database)係指俾電腦有系統性噉儲住啲資料嘅地方;當中「有系統性」意思即係話個數據庫唔淨只曉儲住啲數據,仲會設計到方便啲用家搵資料-簡單例子,廿一世紀初嘅數據庫最起碼仲會包埋某啲形式嘅搜尋功能,俾用家靠打關鍵字等嘅方法摷資料,而喺實際應用上,(例如)一間企業可以用個數據庫儲住一間佢哋啲員工嘅資料,等間企業嘅管理者可以隨時靠打員工嘅名或者姓嚟搵到有關嗰位員工嘅資料[83][84]

  • 關係數據庫(relational database):數據庫幅表會以表格嘅方式出現,有若干行打橫嘅同埋若干行打戙嘅,每列表示一個個案,每行表示一款數據[83]
  • 時間標記(timestamp):指一串用嚟記住一件事件幾時發生嘅資訊;數據庫入面嘅每一件數據通常都會掕住個時間標記,用嚟表示嗰件數據係幾時記錄入去個數據庫度嘅[85]
  • 序列化(serialization):係指將一個數據結構或者物件轉化成一個可以儲起嘅格式,等呢啲數據可以傳去第度而且收數據嗰方可以重新砌返啲數據出嚟。有好多程式語言(例如 PythonC#)都會有特定嘅陳述式做序列化[86]。例如 C# 就有類似噉嘅做法:
       [SerializeField] InputField feedback1; // feedback1 會做序列化。
    
    • 做序列化可能嘅用意包括係想將啲數據傳去數據庫嗰度,例如行為分析上就成日會將自己嘅軟件設計成曉將描述用家行為嘅數據傳返去間企業嘅數據庫嗰度。
  • 數據庫管理系統(database management system,DBMS):泛指一啲專門設計嚟俾用家攞嚟管理數據庫嘅軟件,最少會有齊增查改刪(CRUD)嘅功能。增查改刪包括[87]
    1. 增加Create)指加新嘅數據個案落個數據庫嗰度;
    2. 查閱Read)指俾用家查同睇數據庫入面嘅數據;
    3. 更改Update)指俾用家改嘅數據庫嘅數據;
    4. 刪除Delete)指俾用家剷走唔想要嘅數據。

軟件工程

編輯
内文:軟件工程

軟件工程(software engineering)係工程學嘅一門,專研究點樣去規範噉開發維護電腦軟件,而軟件工程師(software engineer)就係指專業噉做軟件工程嘅人[88][89]

  • 軟件(software):泛指一隻或者一柞程式,能夠教部電腦做出特定嘅運算嚟達到用家想要嘅功能[88]
    • 本台(native)同跨平台(cross-platform)軟件:一隻本台軟件係專門設計嚟淨係喺某隻作業系統上面行嘅軟件,而一隻跨平台軟件就係可以喺唔同嘅作業系統上面行嘅軟件[90];例如一部 Game Boy 會由佢嘅咭匣嗰度攞軟件行,呢啲軟件嘅係專門設計嚟喺 Game Boy 上面行嘅,而想喺 Game Boy 以外嘅平台嗰度行呢啲碼就要用到模擬器-一種模仿 Game Boy 噉行啲碼嘅架生;同「用返隻本台軟件屬嘅平台嚟行」相比,「用模擬器嚟行」通常梗會慢咗啲-模擬器定義上就係模仿第個平台嘅硬件或者軟件,所以實要喺「想行嗰段碼」之外再行啲額外嘅碼[91]
  • 軟件最佳化(software optimization / software optimisation):指將一隻軟件改到更加有效率,等個系統行起上嚟唔使用咁多系統資源;簡單例子有檢查吓隻軟件嘅源碼,確保段源碼完全冇任何多餘(即係有同冇都唔會影響隻軟件嘅功效)嘅碼-想像家陣編寫緊一隻網上遊戲程式,隻遊戲好受歡迎,有數以十萬計嘅玩家,如果個程式嘅源碼當中有一行多餘嘅碼,噉十萬幾位玩家玩起上嚟部伺服器就要行多十萬幾行多餘嘅碼,會搞到部伺服器嘅負責大咗好多。因為噉,最佳化喺實際嘅軟件工程工作上係一個相當受重視嘅課題[92]
  • 由上至下設計(top-down design)同由下至上設計(bottom-up design):廣義上係指兩種處理資訊嘅做法,由上而下係指將一個有返咁上下複雜系統整體噉嚟睇先,跟住再將個系統啲組成部份逐個逐個攞嚟睇(睇咗上層嘅嘢先睇下層),而由下至上係指將啲組成部份逐個逐個攞嚟睇先,跟住先將個系統整體噉嚟分析。喺軟件工程上,由上至下係指諗好咗隻軟件「要有咩功能」先,諗完先至諗源碼要點寫,而由下至上就係指郁手寫咗啲源碼先,「柞源碼要點樣砌埋一齊成一個整體」就遲啲先算[93]
  • 整合開發環境(integrated development environment,IDE):係指設計嚟係要俾做電腦相關工作嘅人攞佢嚟開發軟件應用程式,通常會起碼有齊原始碼編輯器(俾用家攞嚟寫源碼)、組建自動化(將源碼轉化做行得嘅程式嘅功能)同埋除錯器等嘅功能[94]
  • 流動應用程式(mobile application / app):泛指專門設計嚟俾智能電話等嘅流動裝置用嘅應用程式;喺廿一世紀初,流動裝置係個個人都有嘅咁滯,所以流動應用程式有相當嘅市場,有唔少軟件工程師都會花心機嚟研究流動應用程式嘅開發[95]

軟件設計

編輯

軟件設計

  • 物件導向設計(object-oriented design):指攞個軟件設計上撞到嘅問題,喺郁手寫源碼打前,諗計度出一個由物件組成嘅系統物件導向編程)用嚟解決個問題[96]
  • 設計模式(design pattern):指一拃設計軟件嗰陣常用嘅方法,設計軟件嘅人唔一定要跟呢啲方法,但主流認為每隻設計模式都能夠有效解決某啲做 OOP 嗰時成日會撞到嘅問題[97]
    • 建立型模式(creational pattern):指集中諗「點樣建立物件」嘅設計模式。
      • 單例模式(singleton pattern):指成個類別得一個實例,用家唔可以隨便建立新嘅實例;喺最簡單嗰種做法當中,個程式會有類似以下呢段 Java 碼入面嘅 getInstance 噉嘅程序,用嚟確保個實例唔會喺個程式入面出現多過一次[98]
            public static synchronized Singleton getInstance() // synchronized 確保唔可以有兩段或者以上嘅過程同時行呢段碼;
            {
                if (obj==null) // 如果冇 instance...
                    obj = new Singleton(); // 就整個新 instance
                return obj; // 將個新 instance 俾做 output
            }
        
      • 工廠方法模式(factory method pattern):又係種建立型模式,用工廠(喺 OOP 當中泛指曉建立第啲物件嘅物件)入面嘅方法嚟建立物件,而唔係吓吓都要想用件物件嘅物件親自(用自己嘅方法)建立[99]
    • 結構型模式(structural pattern):軟件設計模式嘅一類,專門透過「搵出簡單方法嚟實現想要嘅物體間關係」嚟達致有效嘅軟件設計。
    • 行為型模式(behavioral pattern):軟件設計模式嘅一類,專門透過「搵出物件之間嘅常見通訊規律」嚟達致有效嘅軟件設計。
      • 觀察者模式(observer pattern):指一件物件(Subject)內部留意住佢啲觀察者(observer);每當某啲狀態出現變化嗰陣,Subject 都會通知自己啲觀察者,而且通常係透過叫觀察者嘅方法嚟通知[100][101]

評估軟件

編輯
  • 可返用性:指一個程式入面啲部份(尤其係源碼)可以喺第時寫新程式嗰陣返用,喺軟件工程上係軟件嘅一樣重要特徵;有唔少電腦工作者都指出,OOP 其中一個最大嘅優點係啲程式可返用性高-例如喺電子遊戲製作上,遊戲製作師好容易可以攞自己程式入面啲類別去分享(睇埋遊戲資產),令到第啲人想喺自己整嘅電子遊戲裏面加類似嘅物件嗰陣可以慳返工夫[102]
  • 模塊性:簡化講係指個程式嘅唔同部份有幾易「分拆開,每嚿都可以獨立運作」-高嘅模塊性表示個程式就算其中一橛軭咗,個程式嘅其餘部份都可以繼續運作;有唔少電腦工作者指,OOP 喺模塊性方面嘅表現相當惡劣-例如淨係繼承嘅功能,就成日搞到啲程式出現「其中一段碼(例:類別)改咗,另外第啲碼(例:啲子類別)跟住就出問題」噉嘅情況[103]

數碼藝術

編輯
 
一幅用光線追蹤造嘅圖像
内文:數碼藝術

電腦圖像

編輯
内文:電腦圖像

電腦圖像(computer graphics / computer-generated imagery,CG / CGI):指運用電腦整出嚟嘅圖像或者影片[104]

  • 二維電腦圖像(2D computer graphics):二維嘅電腦圖像。
  • 三維電腦圖像(3D computer graphics):三維嘅電腦圖像。
    • 景檔案(scene file):一個景檔案會包含咗多種資訊,包括係「個景入面用咗啲乜嘢立體模型」、「每個立體模型喺邊個位置」、「光源喺邊」、「個鏡頭擺喺邊個位置」同埋「幾何變換」呀噉,描述個景係點嘅。然後部電腦會將呢個檔案入面嘅數據傳去一個彩現程式嗰度,等個程式做一大柞人手做唔嚟嘅運算,計出個鏡頭會睇到嘅(二維)影像應該係點嘅樣嘅,並且將個鏡頭所睇到嘅影像俾出嚟做輸出[105][106]

電腦音樂

編輯
内文:電腦音樂

電腦音樂

拉雜應用

編輯

科學運算

編輯
内文:科學運算

人機互動

編輯
 
一個人戴住 VR 頭罩嚟體驗一個虛擬世界
  • 個人資訊科學(personal informatics):指人用各種嘅電腦方法監察住自己嘅行為;一個做個人資訊科學嘅系統會有感應器係噉感應住用家做嘅嘢(例如每日行咗幾多步),跟住仲會將呢啲資訊顯示俾用家睇,用意係想幫人更加妥善噉管理自己嘅生活(例如俾用家靠睇住自己每日行咗幾多步,嚟計劃點樣減肥)[110]

相關數學

編輯
睇埋:離散數學

註釋

編輯
  1. 陣列當中嘅一件數據可以用
    output = array[n];
    噉嘅方法嚟輕易讀取。

睇埋

編輯

文獻

編輯
  • 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.
  1. "Computer science is the study of information" Department of Computer and Information Science 互聯網檔案館歸檔,歸檔日期2009年5月29號,., Guttenberg Information Technologies
  2. "Computer science is the study of computation." Computer Science Department, College of Saint Benedict 互聯網檔案館歸檔,歸檔日期2007年2月3號,., Saint John's University
  3. Definition - What does Computer Science mean?. Techopedia.
  4. "Computer Science is the study of all aspects of computer systems, from the theoretical foundations to the very practical aspects of managing large software projects." Massey University 互聯網檔案館歸檔,歸檔日期2006年6月19號,.
  5. Pamela McCorduck (2004, pp. 424) writes of "the rough shattering of AI in subfields—vision, natural language, decision theory, genetic algorithms, robotics ... and these with own sub-subfield—that would hardly have anything to say to each other."
  6. Computation in Physical Systems. Stanford Encyclopedia of Philosophy.
  7. Sipser, M. (2006). Introduction to the Theory of Computation (Vol. 2). Boston: Thomson Course Technology.
  8. Wiener, Norbert; Cybernetics: or the Control and Communication in the Animal and the Machine, MIT Press, 1961, ISBN 0-262-73009-X, page xi.
  9. Ben-Amram, A.M. (2005). "The Church-Turing Thesis and its Look-Alikes" (PS). SIGACT News. 36 (3): 113-116.
  10. Hunter, Geoffrey, Metalogic: An Introduction to the Metatheory of Standard First-Order Logic, University of California Press, 1971.
  11. Hodges, Andrew (2012). Alan Turing: The Enigma (The Centenary Edition). Princeton University Press.
  12. Petzold, C. (2008). The annotated Turing: a guided tour through Alan Turing's historic paper on computability and the Turing machine. Wiley Publishing.
  13. Rabin, Michael O. (June 2012). Turing, Church, Gödel, Computability, Complexity and Randomization: A Personal View 互聯網檔案館歸檔,歸檔日期2019年6月5號,..
  14. Sipser, Michael (2006). Introduction to the Theory of Computation. Course Technology Inc.
  15. Meurant, Gerard (2014). Algorithms and Complexity. p. 4.
  16. Shaffer, C. A. (2011). Data Structures & Algorithm Analysis in C++ (3rd ed.). Mineola, NY: Dover. 1.2.
  17. Cleaveland, J. Craig (1986). An Introduction to Data Types. Addison-Wesley.
  18. Stone, R. G.; Cooke, D. J. (5 February 1987). Program Construction. Cambridge University Press. p. 18.
  19. Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009). Introduction to Algorithms, Third Edition (3rd ed.). The MIT Press.
  20. Wegner, Peter; Reilly, Edwin D. (2003-08-29). Encyclopedia of Computer Science. Chichester, UK: John Wiley and Sons. pp. 507-512.
  21. CS240 -- Lecture Notes: Arrays 互聯網檔案館歸檔,歸檔日期2016年4月21號,..
  22. Collins, William J. (2005) [2002]. Data Structures and the Java Collections Framework. New York: McGraw Hill. pp. 239-303.
  23. Backtracking 互聯網檔案館歸檔,歸檔日期2022年1月21號,..
  24. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms, 2nd Edition. MIT Press and McGraw-Hill, 2001. Section 10.1: Stacks and queues, pp. 200-204.
  25. McKenzie, B. J.; Harries, R.; Bell, T. (February 1990). "Selecting a hashing algorithm". Software Practice & Experience. 20 (2): 209-224.
  26. Susanna S. Epp (Aug 2010). Discrete Mathematics with Applications. Pacific Grove, CA: Brooks/Cole Publishing Co. p. 694.
  27. Millington, I. (2019). AI for Games. CRC Press. Ch. 4.
  28. Muntean, Paul Ioan; Monperrus, Martin; Sun, Hao; Grossklags, Jens; Eckert, Claudia (2019). "IntRepair: Informed Repairing of Integer Overflows". IEEE Transactions on Software Engineering. 47 (10): 2225-2241.
  29. Coonen, Jerome T (1980). "An implementation guide to a proposed standard for floating-point arithmetic". Computer. 13 (1): 68-79.
  30. Vint Cerf (1969-10-16). ASCII format for Network Interchange. IETF.
  31. Unicode Demystified: A Practical Programmer's Guide to the Encoding Standard, Richard Gillam, Addison-Wesley Professional; 1st edition, 2002.
  32. Amon, P., Rathgen, T., & Singer, D. (2007). File format for scalable video coding. IEEE Transactions on Circuits and Systems for Video Technology, 17(9), 1174-1185.
  33. Hamilton, E. (2004). JPEG file interchange format 互聯網檔案館歸檔,歸檔日期2022年7月1號,. (PDF).
  34. ECMA-404: The JSON Data Interchange Format (1st ed.). Geneva: ECMA International. October 2013.
  35. Conti, G., Dean, E., Sinda, M., & Sangster, B. (2008, September). Visual reverse engineering of binary and data files. In International Workshop on Visualization for Computer Security (pp. 1-17). Springer, Berlin, Heidelberg.
  36. Rice, R. E., & Borgman, C. L. (1983). The use of computer-monitored data in information science. Journal of the American Society for Information Science, 44, 247-256.
  37. Grillmeyer, O. (2013). Exploring Computer Science with Scheme. Undergraduate Texts in Computer Science. Springer New York. p. 239. Retrieved 2021-06-26. The central component to the Scheme interpreter is the read-eval-print loop. Commands are read in, then evaluated. Finally, the evaluated result is printed."
  38. Gabbay, D., Giordano, L., Martelli, A., Olivetti, N., & Sapino, M. L. (2000). Conditional reasoning in logic programming. The Journal of Logic Programming, 44(1-3), 37-74.
  39. Recursion and Backtracking.
  40. Ceruzzi, Paul E. (2000). A History of Modern Computing. Cambridge, Massachusetts: MIT Press.
  41. Aho, Alfred V. (1990). van Leeuwen, Jan (ed.). Algorithms for finding patterns in strings. Handbook of Theoretical Computer Science, volume A: Algorithms and Complexity. The MIT Press. pp. 255-300.
  42. Stanek, William R. (2008). Windows Command-Line Administrator's Pocket Consultant (2nd ed.). Microsoft Press.
  43. Levine, John R. (2000) [October 1999]. "Chapter 9: Shared Libraries & Chapter 10: Dynamic Linking and Loading". Linkers and Loaders. The Morgan Kaufmann Series in Software Engineering and Programming (1 ed.). San Francisco, USA: Morgan Kaufmann.
  44. Gordon, M. J. (1988). Programming language theory and its implementation (Vol. 10). Englewood Cliffs, NJ: Prentice-Hall.
  45. Neamtiu, Iulian; Foster, Jeffrey S.; Hicks, Michael (May 17, 2005). Understanding Source Code Evolution Using Abstract Syntax Tree Matching. MSR'05. Saint Louis, Missouri: ACM.
  46. Friedman, Daniel P.; Mitchell Wand; Christopher T. Haynes (1992). Essentials of Programming Languages (1st ed.). The MIT Press.
  47. Schilling, Jonathan L. (April 1995). "Dynamically-Valued Constants: An Underused Language Feature". SIGPLAN Notices. 30 (4): 13-20.
  48. Iverson, K. E. (1962, May). A programming language (PDF). In Proceedings of the May 1-3, 1962, spring joint computer conference (pp. 345-351).
  49. Abelson, Harold; Sussman, Gerald Jay (1996). Structure and Interpretation of Computer Programs (Second ed.). Cambridge, Massachusetts: The MIT Press. p. 21-22.
  50. Normal, Applicative and Lazy Evaluation. Kevin Sookocheff.
  51. Marjan Mernik, Jan Heering, and Anthony M. Sloane (2005). When and how to develop domain-specific languages. ACM Computing Surveys, 37(4): 316-344.
  52. Kindler, E.; Krivy, I. (2011). "Object-Oriented Simulation of systems with sophisticated control". International Journal of General Systems: 313-343.
  53. Oppel, Andy (2005). SQL Demystified. McGraw Hill. p. 7.
  54. Procedural programming vs object-oriented programming. neonbrand.com.
  55. Computer Performance Analysis with Mathematica by Arnold O. Allen, Academic Press, 1994. $1.1 Introduction, pg 1.
  56. Bader, David; Pennington, Robert (May 2001). "Cluster Computing: Applications". Georgia Tech College of Computing. Archived from the original on 2007-12-21. Retrieved 2017-02-28.
  57. Zhong, Liang; Zheng, Xueqian; Liu, Yong; Wang, Mengting; Cao, Yang (February 2020). "Cache hit ratio maximization in device-to-device communications overlaying cellular networks". China Communications. 17 (2): 232-238.
  58. Randal E. Bryant; David R. O’Hallaron (2016). Computer Systems: A Programmer's Perspective (Third ed.). Pearson. p. 17.
  59. Schoeberl, M., Korsholm, S., Kalibera, T., & Ravn, A. P. (2011). A hardware abstraction layer in Java. ACM Transactions on Embedded Computing Systems (TECS), 10(4), 1-40.
  60. Reddy, Marathi (2011). API Design for C++. Elsevier Science.
  61. Luna, F. (2012). Introduction to 3D game programming with DirectX 11. Stylus Publishing, LLC.
  62. Arpaci-Dusseau, Remzi H.; Arpaci-Dusseau, Andrea C. (2014), File System Implementation, Arpaci-Dusseau Books.
  63. Yeager, N. J., & McGrath, R. E. (1996). Web server technology. Morgan Kaufmann.
  64. Sasu Tarkoma (2010). Overlay Networks: Toward Information Networking. CRC Press.
  65. Y. Rekhter; B. Moskowitz; D. Karrenberg; G. J. de Groot; E. Lear (February 1996). Address Allocation for Private Internets. Network Working Group IETF.
  66. McKnight, L. W., & Bailey, J. P. (Eds.). (1998). Internet economics. MIT Press.
  67. Gayard, Laurent (2018). Darknet: Geopolitics and Uses. Hoboken, NJ: John Wiley & Sons.
  68. Tobin, James (12 June 2012). Great Projects: The Epic Story of the Building of America, from the Taming of the Mississippi to the Invention of the Internet. Simon and Schuster.
  69. Blank, G., & Reisdorf, B. C. (2012). The participatory web: A user perspective on Web 2.0. Information, Communication & Society, 15(4), 537-554.
  70. Xie, S., Wang, G., Lin, S., & Yu, P. S. (2012, August). Review spam detection via temporal pattern discovery. In Proceedings of the 18th ACM SIGKDD international conference on Knowledge discovery and data mining (pp. 823-831).
  71. Schatz, Daniel; Bashroush, Rabih; Wall, Julie (2017). "Towards a More Representative Definition of Cyber Security". Journal of Digital Forensics, Security and Law. 12 (2).
  72. Stallings, William (2012). Computer security : principles and practice. Boston: Pearson. p. 182.
  73. Tulloch, Mitch (2003). Koch, Jeff; Haynes, Sandra (eds.). Microsoft Encyclopedia of Security. Redmond, Washington: Microsoft Press. p. 16.
  74. Nyang, DaeHun; Mohaisen, Aziz; Kang, Jeonil (2014-11-01). "Keylogging-Resistant Visual Authentication Protocols". IEEE Transactions on Mobile Computing. 13 (11): 2566-2579.
  75. Schwabach, Aaron (2006). Internet and the Law. ABC-CLIO.
  76. Team, KernelCare. "Remote code execution attack: what it is, how to protect your systems". blog.kernelcare.com.
  77. Szor, Peter (2005). The Art of Computer Virus Research and Defense. Addison-Wesley.
  78. Mason, Andrew G. (2002). Cisco Secure Virtual Private Network. Cisco Press. p. 7.
  79. Knuth, D. (1973). The Art of Computer Programming, Vol. 3, Sorting and Searching, p.527. Addison-Wesley, Reading, MA., United States.
  80. Alshaikhli, Imad Fakhri; AlAhmad, Mohammad Abdulateef (2015), "Cryptographic Hash Function", Handbook of Research on Threat Detection and Countermeasures in Network Security, IGI Global.
  81. 81.0 81.1 Narayanan, Arvind; Bonneau, Joseph; Felten, Edward; Miller, Andrew; Goldfeder, Steven (2016). Bitcoin and cryptocurrency technologies: a comprehensive introduction. Princeton: Princeton University Press.
  82. Kenneth, Hirschey, Jeffrey (2014-01-01). "Symbiotic Relationships: Pragmatic Acceptance of Data Scraping". Berkeley Technology Law Journal. 29 (4).
  83. 83.0 83.1 Kroenke, David M. and David J. Auer (2007). Database Concepts. 3rd ed. New York: Prentice.
  84. Post, G. V. (1999). Database management systems: designing and building business applications. Irwin/McGraw-Hill.
  85. Claudia Maria Bauzer Medeiros (19 September 2009). ADVANCED GEOGRAPHIC INFORMATION SYSTEMS -Volume I. EOLSS Publications. p. 59.
  86. Sumaray, A., & Makki, S. K. (2012, February). A comparison of data serialization formats for optimal efficiency on a mobile platform. In Proceedings of the 6th international conference on ubiquitous information management and communication (pp. 1-6).
  87. Connolly, Thomas M.; Begg, Carolyn E. (2014). Database Systems - A Practical Approach to Design Implementation and Management (6th ed.). Pearson. p. 64.
  88. 88.0 88.1 Abran, Alain; Moore, James W.; Bourque, Pierre; Dupuis, Robert; Tripp, Leonard L. (2004). Guide to the Software Engineering Body of Knowledge. IEEE.
  89. Laplante, Phillip (2007). What Every Engineer Should Know about Software Engineering. Boca Raton: CRC.
  90. Choudhary, S.R. (2014). "Cross-platform testing and maintenance of web and mobile applications". Companion Proceedings of the 36th International Conference on Software Engineering - ICSE Companion 2014: 642-645.
  91. "How Does Emulation Work and Why Is It So Slow?". MakeUseOf. Retrieved 2019-11-22.
  92. Wadleigh, K. R., & Crawford, I. L. (2000). Software optimization for high-performance computing. Prentice Hall Professional.
  93. Bottom Up or Top Down?. Embedded computer design.
  94. Muşlu, K., Brun, Y., Holmes, R., Ernst, M. D., & Notkin, D. (2012). Speculative analysis of integrated development environment recommendations. ACM SIGPLAN Notices, 47(10), 669-682.
  95. Gao, J.; Bai, X.; Tsai, W.; Uehara, T. (February 2014). "Mobile Application Testing: A Tutorial". Computer. 47 (2): 46-55.
  96. Gamma, E., Helm, R., Johnson, R., Johnson, R. E., & Vlissides, J. (1995). Design patterns: elements of reusable object-oriented software. Pearson Deutschland GmbH.
  97. Design Patterns. oodesign.com.
  98. Singleton Pattern. oodesign.com.
  99. Cohen, Tal; Gil, Joseph (2007). "Better Construction with Factories" (PDF). Journal of Object Technology. Bertrand Meyer. 6 (6): 103.
  100. Erich Gamma; Richard Helm; Ralph Johnson; John Vlissides (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison Wesley. pp. 293.
  101. "The Observer design pattern - Problem, Solution, and Applicability 互聯網檔案館歸檔,歸檔日期2018年5月16號,.". w3sDesign.com. Retrieved 2017-08-12.
  102. Cardelli, Luca (1996). "Bad Engineering Properties of Object-Oriented Languages". ACM Comput. Surv. 28 (4es): 150-es.
  103. Armstrong, Joe. In Coders at Work: Reflections on the Craft of Programming. Peter Seibel, ed. Codersatwork.com
  104. Foley, J. D., Van, F. D., Van Dam, A., Feiner, S. K., Hughes, J. F., Hughes, J., & Angel, E. (1996). Computer graphics: principles and practice (Vol. 12110). Addison-Wesley Professional.
  105. Bouknight, W. J. (1970). "A procedure for generation of three-dimensional half-tone computer graphics presentations". Communications of the ACM. 13 (9): 527-536.
  106. Phong, B-T (1975). "Illumination for computer generated pictures". Communications of the ACM. 18 (6): 311-316.
  107. Zheng, J. M., Chan, K. W., & Gibson, I. (1998). Virtual reality. Ieee Potentials, 17(2), 20-23.
  108. Vince, J. (2004). Introduction to virtual reality. Springer Science & Business Media.
  109. VR overview. Unity Manual.
  110. Kersten-van Dijk, E. T., Westerink, J. H., Beute, F., & IJsselsteijn, W. A. (2017). Personal informatics, self-insight, and behavior change: A critical review of current literature (PDF). Human-Computer Interaction, 32(5-6), 268-296.