寫程式架生

又叫軟件開發架生，係電腦程式嘅一種，泛指啲整嚟預咗幫人創造程式、做 debug 或者做第啲寫程式相關工作嘅程式同功能。

舉例說明，Spyder 軟件係隻相當出名嘅 Python 開源寫程式架生，有多種功能畀人用佢寫程式：
有源碼編輯器畀用家睇同編輯寫緊嗰個程式嘅源碼；
有 debugger 方便用家做 debug；
顯示啲變數嘅數值；
... 呀噉。隨住軟件工程嘅發展，人類對寫程式架生有一定嘅需求，而每個領域往往有佢哋專用嘅架生－寫遊戲程式同繪圖軟件用嘅功能可以好唔同；經驗有返咁上下豐富嘅軟件工程師，都要熟自己嗰行用開嘅寫程式架生，並且按自己手上單工作揀要用邊隻架生。

篇文以下嘅內容，假設睇嘅人已經識基礎嘅電腦程式編寫同軟件工程。

源碼編輯

源碼編輯器係指畀用家編輯個程式嘅源碼嘅文字編輯器：一個源碼編輯器可以單獨存在，亦可以係一個網頁瀏覽器或者綜合開發環境嘅一部份。源碼編輯器多數都會有功能或多或少噉自動處理代碼風格嘅嘢，包括－
句法突顯：按一段字嘅特性，將段字顯示做唔同嘅色水或者唔同字款，等段字更加易睇；即係例如顯示段源碼嗰陣，表示變數嘅字冚唪唥黑色，表示迴圈陳述式嘅字冚唪唥藍色，表示注釋嘅字冚唪唥綠色... 如此類推，好似下圖幅 gif 噉，噉用家容易一眼就睇到每段字係表示啲乜。
自動完成：指估計用家跟住想打啲乜碼，畀用家齋靠撳一兩個掣就即刻打段碼出嚟；好似下圖幅 gif 噉，用家淨係打咗 Conso，個編輯器經已估佢想打 Console 同相關嘅陳述式，仲畀佢有得打打吓直接叫個編輯器出其中一段陳述式。
括弧配對：指「檢驗啲括弧啱唔啱」嘅功能，例如 ((())) 呢段碼有 3 個 ( 3 個 )，所以啲括弧配對得啱，而 (({))) 呢段碼就唔啱－有 2 個 ( 3 個 )，而個 { 冇對應嘅 }。括弧配對功能就係攞一段碼，然後話畀用家知「啲括弧啱唔啱，而如果唔啱，係喺邊個位出錯」噉嘅資訊。

極簡化：指由段碼度攞走啲唔必要嘅字符，例如係空格呀噉。用以下呢行 JavaScript 碼做例子－
var array = [];
for (var i = 0; i < 20; i++) {
  array[i] = i;
}
極簡化咗就會變做噉－
for(var a=[i=0];i<20;a[i]=i++);
搵重複：指探測段碼入面有冇重複咗－代碼重複係指源碼有其中段出現咗超過一次，而呢種情況一般畀人認為係唔理想嘅，例如會嘥位；唔少寫程式架生都曉自動噉摷吓段碼，睇吓段碼有冇重複嘅情況，有嘅話就建議用家整個子程序嚟解決呢個問題。
代碼審查：喺專業嘅軟件工程當中，寫好個程式嘅源碼之後通常會搵人睇吓段碼，當中負責睇段碼嘅人係冇份寫段碼嘅；寫程式架生好多時會有啲功能，幫手做代碼審查嘅工作，例如有唔少常犯錯誤都係電腦程式可以輕易噉探測到嘅，所以寫程式架生好多時會內置埋「自動噉檢查吓啲碼，睇吓啲碼有冇呢啲常犯錯誤」嘅功能。
... 呀噉。

相關功能

除咗畀用家編輯源碼之外，寫程式架生好多時仲會有以下呢啲功能：
圖像用家介面：指將編程相關嘅功能用圖像化嘅方式表示出嚟；例如源碼編輯器除咗會顯示段源碼，好多時仲會喺顯示源碼嘅視窗隔離顯示另一個視窗，後者顯示個程式用緊嗰啲檔案嘅目錄，或者顯示第啲有用嘅資訊。
編譯架生：編譯係指將一段源碼轉化做第隻程式語言嘅過程；喺編程上，編譯器最常見嘅用途係，攞嚟將段由高級程式語言寫嘅碼轉化做電腦識睇識行嘅機械碼。
自動組建：軟件組建係軟件工程嘅一樣必要工序，指將段源碼轉化做可以實際攞去行嘅程式；實際經驗表明，喺大啲嘅軟件項目當中，吓吓手動噉做軟件組建行唔通，所以應用上嘅軟件工程都會用組建自動化－有啲特製程式自動噉做軟件組建。
Log：指一個紀錄作業系統或者第啲軟件運行嘅檔案；例如一個伺服器嘅 log 會紀錄好似噉嘅資訊－
用家 112XXXXXX 喺 YYYY 年 M 月 D 日 13:51:31 用過 http:xxxxxxxxxx 呢個檔案；
用家 129XXXXXX 喺 YYYY 年 M 月 D 日 13:51:40 用過 http:xxxxxx234x 呢個檔案；
...
Log 喺做 debug 等嘅工作嗰陣好有用。
手稿語言：指用嚟操作同更改一個現存系統嘅功能嘅程式語言，好多時係喺行個程式嗰陣直譯，而唔係編譯咗先行嘅；例如遊戲引擎 Unity 係一隻用嚟整電子遊戲嘅軟件，有多種方便整遊戲嘅功能，包括畀用家用 C♯ 呢隻物件導向程式語言寫手稿，用手稿嚟設定隻遊戲入面啲物件嘅行為－C♯ 就係 Unity 嘅手稿語言。
控制流程圖：指將控制流程－迴圈同 if-then 等－用圖像化嘅方式呈現出嚟；好似下圖噉，想像下圖嗰 4 個波 A B C D 都各自係段碼，
個程式會行 A；
A 行完之後個程式有句條件陳述式，if 某條件係真就行 B，else 個程式就會行 C，
無論個程式行嘅係 B 定 C，最後都會行 D。
唔少人認為，控制流程圖令複雜嘅程式清楚易睇好多，有啲寫程式架生仲做到自動由源碼度產生一幅控制流程圖。

版本控制：指「管理住對一件軟件產品改咗啲乜」呢種功能，最簡單嘅做法係同每個檔案名加返個冧把－即係 XXX V1.0 或者 XXX V2.0 噉；版本控制相關嘅功能好緊要－事實表明，有咁上下大嘅軟件項目會有數量龐大次嘅編輯，而且有陣時軟件工程師仲會發覺 10 次前吓修改有問題，所以想返轉頭搵返 10 次編輯前嗰個版本；因為噉，軟件工程師正路會想有套系統，清清楚楚噉打理好整緊嗰隻軟件嘅版本。
性能分析：指幫手分析一個程式嘅「性能」嘅功能；如果話件架生識得做性能分析，係指件架生曉畀出一啲顯示個程式「寫得有幾好」嘅重要資訊－例如係個程式行嗰陣用咗幾多時間或者用咗幾多記憶體，或者係個程式用每個子程序用咗幾多次... 呀噉。呢啲功能對最佳化嚟講好有用。
Bug 跟蹤管理系統：泛指用嚟紀錄住啲有關 bug 嘅報告嘅應用程式；喺實際應用上，軟件工程整嘅程式梗會有返咁上下複雜，難免會有 bug；因為噉，專業嘅軟件工程師成日都會用 bug 跟蹤管理系統，即係個系統識喺有 bug 出現嗰陣，將有關隻 bug 嘅資訊－例如「隻 bug 發生嗰時隻程式處於咩狀態」噉－紀錄低同埋提供報告畀軟件工程師知，方便工程師同隻軟件做 debug 。
垃圾回收：記憶洩漏係指個程式攞咗啲記憶體嚟用，但用完之後又冇「放返開」啲記憶體，於是個程式就霸咗一啲佢唔會用嘅記憶體，所以就搞到部電腦有嘅系統資源量不必要噉減少咗。具體啲講，程式嘅源碼入面成日會有類似以下噉嘅碼－
攞 XXX 呢件資源嚟用；
將攞到嘅資源做 YYY 噉嘅運算；
好多時，用家仲有必要手動噉加多行碼，話畀部電腦知「個程式用完 XXX 呢嚿資源喇，嚿資源霸咗嘅記憶體可以空出嚟做第啲嘢」。如果用家冇噉做，就會引致記憶洩漏，喺複雜啲嘅軟件當中，記憶洩漏會搞到隻軟件行起上嚟明顯慢咗。到咗廿一世紀初，多人用嘅程式語言或者寫程式架生往往會或多或少噉有垃圾回收－指教部電腦自動噉釋放啲「個程式打後唔再提到」嘅記憶體－或者類似嘅功能。
SWIG：SWIG 係一隻開源軟件架生，能夠將用 C 或者 C++ 寫嘅程式「連接」第啲高級程式語言；SWIG 係一部編譯器，能夠攞住由 C 或者 C++ 寫成嘅程式，容許由第啲程式語言－包括 Python 同埋 Java－寫成嘅程式個 C/C++ 程式嘅 output 去用。
二進制代碼嘅兼容性：喺廿一世紀初，無論一個電腦程式嘅源碼係用咩語言寫，部電腦攞個程式去行嗰陣都係要經編譯器，將段源碼轉換做電腦內部實際行嘅機械碼；唔同 CPU 架構用嘅機械碼語言可以好唔同，所以是但攞段碼，嗰段碼喺電腦 A 上面行到，但段碼搬咗去電腦 B 上面就有可能要重新做過編譯先至行得到；有啲寫程式架生做嘅，就係探測兩部機之間有冇二進制代碼嘅兼容性。
自動編程：指「人類用家畀啲高層次嘅指令，然後件架生自動噉產生出段源碼」噉嘅功能。
... 呀噉。

IDE

綜合開發環境係指設計嚟幫人開發軟件嘅應用程式。一般嚟講，一隻 IDE 會有返個圖像用家介面，將啲重要嘅資訊清楚噉顯示嗮畀用家睇，而且基本上會有齊嗮寫程式架生嗰啲主要功能，包括 debugger、手稿語言同埋源碼編輯器... 等等，令用家有得一站式噉做嗮開發軟件要做嗰啲工作，唔使整整吓轉去第隻軟件度。

例子可以睇吓 Unity 等嘅遊戲引擎。遊戲引擎係設計嚟俾人開發電子遊戲嘅 IDE，會有齊嗮啲畀人用嚟開發遊戲用嘅配套，包括係電子遊戲成日用嗰啲聲效、圖像技術同物理模擬，而且仲會將呢啲嘢擺喺個圖像用家介面當中，隻 IDE 有若干個視窗，一個視窗顯示手上有嘅檔案、下一個視窗顯示隻遊戲個虛擬世界、下一個視窗用文字型式列出個世界有嘅物件同每件物件嘅名... 呀噉。

軟體開發套件
程式語言
cmd.exe
用家體驗
用家創新

文獻

Boehm, B. W. (1976). Software engineering. IEEE Trans. Computers, 25(12), 1226-1241.
Delahaye, M., & Du Bousquet, L. (2015). Selecting a software engineering tool: lessons learnt from mutation analysis (PDF). Software: Practice and Experience, 45(7), 875-891.
Gray, J. P., Liu, A., & Scott, L. (2000). Issues in software engineering tool construction. Information and software technology, 42(2), 73-77.
Kernighan, B. W., & Plauger, P. J. (1976). Software tools. ACM SIGSOFT Software Engineering Notes, 1(1), 15-20.
Yoon, Y., & Myers, B. A. (2011, October). Capturing and analyzing low-level events from the code editor. In Proceedings of the 3rd ACM SIGPLAN workshop on Evaluation and usability of programming languages and tools (pp. 25-30).

攷

拎

Programming Tool. Techopedia.
20 BEST Software Development Tools (2022 Rankings). Software Testing Help.

寫程式架生