# 如何開始入門軟體工程領域 - 名詞解釋（長期更新）

現在應該開始有很多人想要踏入軟體工程的領域，但在進入這個領域之前，覺得先了解一些名詞，可以在入門時更有方向也更知道要用什麼關鍵字去找尋有用的資訊。這篇文章就是想要幫助想要入門的人理解一些軟體工程裡的專有名詞。

## 作業系統

這一區塊主要解釋跟作業系統層面相關的名詞

| 英文 | 中文 | 解釋 |
| --- | --- | --- |
| Operation system  
簡稱 OS | 作業系統 | 就是電腦的作業系統，是三大作業系統分別是：Linux、Windows、macOS |
| Linux |  | 自由和開放原始碼的 UNIX-like 作業系統，是目前全世界佔比最高的作業系統，主要是使用於電腦伺服器和軟體開發上。對於一般消費大眾較不常見，但其實平常使用的線上等服務都是使用此作業系統。 |
| Kernel | 核心 | 可以想像是作業系統的大腦，是處理所有事物中的核心程式 |
| Shell |  | OS 的操作介面，為作業系統解譯程式傳入需要處理的指令，來管理您與作業系統之間的互動。 |
| Terminal | 終端機 | 是一台[電腦](https://www.wikiwand.com/zh-tw/%E9%9B%BB%E8%85%A6)或者計算機系統，用來讓用戶輸入數據，及顯示其計算結果的機器，簡而言之就是人類使用者與計算機互動的裝置 |
| Open source | 開放原始碼 | 一種開放分享程式碼的文化，需要注意的是開放分享不意味著免費喔。依照不同的開放授權，有些也只允許使用在非營利的情況。 |

## 程式語言

| 英文 | 中文 | 解釋 |
| --- | --- | --- |
| Programming Language | 程式語言 | 透過一系列的語法轉換成可以與作業系統溝通的語言 |
| Library | 函式庫 |  |
| Framework | 框架 |  |
| Software Development Kit  
SDK | 軟體開發套件 | 可以想像就是英雄套裝，當你需要變成鋼鐵人，你就下載這個 SDK 來使用你就使用鋼鐵裝。你想變成雷神索爾，你下載相對應的 SDK 就可以索爾。 |
| Application programming interface  
API | 應用程式介面 | 可以想像就是皮卡丘，你叫皮卡丘使用十萬伏特，他就會使用十萬伏特。 |
| Integrated Development Environment  
IDE | 整合開發環境 | 一種輔助程式開發人員開發軟體的應用軟體 |
| Version control | 版本控制 | 目前主流常見的版本控制工具是 Git，所謂的版本控制就是控制每次的程式語言版本。因為每次不可能記住每次夕改程式語言時改了什麼，所以就利用版本控制工具來紀錄每次的修改。 |
| Frontend | 前端 | 通常指的是使用者可以看到的範圍，例如網站介面、行動裝置介面（但行動裝置通常會稱作 Mobile 端） |
| Backend | 後端 | 使用者看不到的範圍，例如伺服器、資料庫等 |

Library 和 Framework 的概念比較需要拉出來解釋，很常會搞混。Library 是類似 SDK 的東西，通常是包裝了許多常用的功能。但是使用後並不影響既有的程式架構。Framework 也是包裝了許多的功能，但是如果要使用的話，就必須按照它規定的規則來使用。

有點像是 Library 是自由重量的啞鈴，你可以用啞鈴做到很多種不同的運動來訓練不同的身體部位。但是 Framework 就像是機械式器材，你就是只能照他的使用方式來訓練特定的部位。

## 生態圈

| 英文 | 中文 | 解釋 |
| --- | --- | --- |
| Cloud service 或 Public Cloud | 公有雲 | 就是一堆開放給大眾付錢使用的伺服器，目前最大宗的三家就是：AWS(Amazon 爸爸)、Azure(微軟爸爸)、GCP(Google 爸爸) |
| GitHub |  | 目前最大眾使用來分享程式碼的網站，目前已被微軟收購 |
| VSCode |  | 目前被主流使用的程式編輯軟體 |
| Stack Overflow |  | 最主流的軟體問答網站 |
| LeetCode |  | 最主流知名的程式練習網站，擁有豐富的題庫來訓練程式語言的邏輯思維和演算法 |
