程式設計師

程式設計師（Programmer，Computer Programmer或Coder；程式師），可以指在程序設計某個專業領域中的專業人士，或是從事軟體撰寫，程序開發、維護的專業人員。但一般Coder特指進行編寫代碼的編碼員。

一個程式設計師最常使用的程式語言（如彙編語言、COBOL、C、C++、C#、JavaScript、Lisp、Python）可以加在「程式設計師」這個詞前面用來修飾。

涉及編程的一系列職業，如（軟體）開發人員、網路開發人員、行動應用程式開發人員、嵌入式韌體開發人員、軟體工程師、電腦科學家、遊戲程序師、遊戲開發人員和軟體分析師，通常還需要一系列其他類似的技能。用程式設計師這個詞來指代這些職位，有時被認為是一種侮辱性的簡化，甚至是貶損。

## 歷史

英國著名詩人拜倫的女兒愛達·勒芙蕾絲曾設計了巴貝奇分析機上計算伯努利數的一個程序，她甚至還建立了遞歸和子程序的概念。由於愛達在程序設計上的突破性創新，她被稱為世界上第一位程式設計師。

## 工作範圍

本節的一些內容來自《職業前景手冊》，2006-07版，該手冊作為美國政府的一部作品進入公有領域。

電腦程式員編寫、測試、調試和維護被稱為電腦程式的詳細指令，電腦必須遵循這些指令來執行它們的功能。程式設計師還構思、設計和測試用電腦解決問題的邏輯結構。編程領域的許多技術創新——先進的計算技術、複雜的新語言和編程工具——重新定義了程式設計師的角色，提升了當今許多編程工作。職位名稱和描述可能會有所不同，取決於組織。

程式設計師在許多環境中工作，包括企業資訊技術（「IT」）部門、大型軟體公司、小型服務公司和各種規模的政府實體。許多專業程式設計師也以獨立承包人的身份在客戶現場為諮詢公司工作。程式設計師通常不需要有從業執照就可以工作，但他們一般都會持有專業認證。編程被廣泛認為是一個專業（但有些權威機構不同意這個看法，他們認為只有那些法律上規定要有從業執照的職業才能叫做專業）。

程式設計師的工作差別很大，這取決於他們為之編寫程序的業務類型。例如，更新財務記錄所涉及的指示，與飛行模擬器中訓練飛行員時模擬在飛機上的狀況所需的指示大不相同。簡單的程序可以在幾個小時內完成，更複雜的程序可能需要一年以上的工作，而其他的程序則永遠不會被認為是「完善的」，而是只要繼續使用就會不斷進行改進。在大多數情況下，幾個程式設計師在高級程式設計師的監督下作為一個團隊一起工作。

<image>

程式設計師根據主要由高級程式設計師和系統分析員確定的規範編寫程序。在設計過程完成後，程式設計師的工作就是將設計轉換成電腦可以遵循的一系列邏輯指令。程式設計師用眾多程式語言中的一種來編寫這些指令。根據用途的不同，會使用不同的程式語言。例如，COBOL通常用於通常在大型和中型計算機上運行的業務應用程式，而Fortran則用於科學和工程。C++和Python廣泛用於科學和商業應用程式。Java、C#、JS與PHP是Web和商業應用程式的流行程式語言。程式設計師通常了解一種以上的程式語言，因為許多語言是相似的，他們通常可以相對容易地學習新的語言。在實際中，通常會用程式設計師們了解的語言來描述程式設計師，比如，Java程式設計師，或者用他們所扮演的角色或他們的工作環境來描述：比如，資料庫程式設計師、大型機程式設計師、Web開發人員等。

當修改組成程序的原始碼時，程式設計師需要讓其他程式設計師知道程序要執行的任務。他們通過插入注釋以及編寫文檔，來讓其他人更容易理解程序。為了節省工作量，程式設計師經常使用基本代碼庫，這些庫可以針對特定的應用程式進行修改或自定義。這種方法可以產生更可靠和一致的程序，並通過消除一些重複性的步驟來提高程式設計師的生產力。

### 測試和調試

程式設計師通過運行程序並查找錯誤來測試程序。一旦確定了錯誤，程式設計師通常會進行適當的修正，然後重新檢查程序，直到錯誤（bug）的嚴重程度達到可接受的低水平。這個過程稱為測試和調試。這些都是每個程式設計師工作的重要部分。程式設計師可以在程序的整個生命周期中繼續修復這些問題。更新、修復、修改和擴展現有程序有時稱為維護編程。程式設計師可能會編寫使用者指南和在線幫助，或者他們可能會與技術作者合作完成這些工作。

### 應用程式與系統編程

電腦程式員通常分為兩大類：應用程式員和系統程式設計師。應用程式員編寫程序來處理特定的工作，例如在組織內跟蹤庫存的程序。他們還可以修改現有的套裝軟體（packaged software），或定製通常從獨立軟體供應商購買的通用應用程式。相比之下，系統程式設計師編寫程序來維護和控制電腦系統軟體，如作業系統和資料庫管理系統。這些工作人員對指令進行更改，這些指令決定了系統的網路、工作站和CPU如何處理給定的各種作業，以及如何與印表機和磁碟驅動器等外圍設備通信。

### 資格和技能

軟體開發人員需要在電腦技術的某些方面具有深厚的技術專長。有些職位需要相關領域的學位，如電腦科學、資訊技術、工程、編程或任何其他與IT相關的研究生學習。一個理想的軟體開發人員是一個自我激勵的專業人員，在諸如C++、C#、PHP、Java、C、JavaScript、Visual Basic、Python、Smalltalk等關鍵程式語言上擁有動態的動手實踐經驗。

根據開發人員Eric Sink的說法，系統設計、軟體開發和編程之間的差異更加明顯。在當前的市場環境中，程式設計師和開發人員之間已經存在隔離，因為實現程序的人和設計類結構或層次結構的人是不一樣的。開發人員成為軟體架構師或系統架構師（即設計大型軟體系統的多層體系結構或組件交互的架構師）後，差異會更大。

### 軟體類型

軟體開發公司的程式設計師可以直接與來自不同領域的專家合作來開發軟體，包括為特定客戶設計的程序或通用的套裝軟體，從電子遊戲到教育軟體，再到用於桌面出版和財務規劃的程序。套裝軟體的編程是電腦服務行業增長最快的部分之一。一些公司或組織，即使是小公司，也建立了自己的IT團隊，以確保內部軟體的設計和開發能夠滿足內部最終使用者非常特殊的需求，特別是在現有軟體不適合或成本太高的情況下。研究中心的情況就是如此。

在一些組織中，特別是小型組織中，通常被稱為程式設計師分析師的人同時負責系統分析和實際的編程工作。從大型機環境過渡到主要基於個人電腦（PC）的環境，模糊了曾經嚴格的程式設計師和使用者之間的區別。越來越多的熟練的終端用戶正在接管許多以前由程式設計師執行的任務。例如，越來越多地使用套裝軟體，如電子表格和資料庫管理軟體包，讓使用者可以編寫簡單的程序來訪問數據和執行計算。

此外，網際網路的興起使得Web開發成為編程領域的一個重要組成部分。目前，更多的軟體應用程式是網路應用程式，任何人都可以使用網頁瀏覽器。這類應用程式的例子包括Google搜索服務、Outlook.com電子郵件服務和Flickr照片分享服務。

編程編輯器，也稱為原始碼編輯器，是專門為編寫程序原始碼的程式設計師或開發人員設計的文本編輯器。這些編輯器中的大多數都含有對程式設計師有用的特性，可能包括語法突顯、自動縮進、自動完成、括號匹配、語法檢查以及允許插件。這些特性幫助使用者進行編碼、調試和測試。

集成開發環境（Integrated Development Environment），簡稱IDE，是程式設計師廣泛使用的一種，集合了原始碼編輯器、編譯器、版本控制等功能的應用程式，常見的有Microsoft Visual Studio，InteliJ IDEA等等。

## 相關職業

- 系統管理員（SA）
- 系統設計師（SD）
- 資料庫管理員（DBA）
- 應用分析師（AA）
- 技術支持（TS）