プログラマ(英: programmer)とは、コンピュータのプログラムを作成する人全般を指す。プログラマーとも表記される(#プログラマに対する呼称参照)。

## プログラマの仕事

以下に、プログラマの仕事としてみなされることの多い仕事を挙げる。

- システムの設計
- プログラミング
  - 全体設計
  - 詳細設計
  - コーディング
  - デバッグ
  - ソフトウェアテスト
  - パッケージング
- プログラムの導入
  - 配置(デプロイ、deploy)
  - 設定(コンフィグ、configuration)
- プログラムの利用
- プログラムの分析
- プログラムに関する文書の作成
  - 仕様書の執筆やメンテナンス
  - リファレンスマニュアルの執筆やメンテナンス
  - オペレーターズマニュアルの執筆やメンテナンス
  - ユーザーズマニュアルの執筆やメンテナンス
  - チュートリアルの執筆や監修やメンテナンス
  - クックブックの執筆や監修やメンテナンス

## 歴史

### 始まり

史上初のプログラマは、「コンピュータの父」チャールズ・バベッジが作成した解析機関のオペレータであったエイダ・ラブレス(ラブレース伯爵夫人オーガスタ・エイダ・キング・1815-1852)であるとされる。プログラミング言語のAdaは、彼女の名前に因んで命名された。

### 1940年代

1940年代に入り、初期コンピュータが登場しはじめると、人手では時間がかかり過ぎる科学的計算に使用された。その際、計算内容の変更に伴い回路変更が必要であったが、その作業は急速に増大していく。この頃は、プログラマとハードウェア設計者との区別は難しく、どこからがプログラマでどこからが回路設計者かは議論あるいは解釈の余地があるが、回路変更作業の増大と高度複雑化に伴い、徐々にプログラマと呼べる存在が確立していった。仮に、回路設計の変更をもってプログラミングとするならば、設計図を変更し、半田ごてを持ったり、ケーブルの差し替えを行う事が初期プログラマの仕事となる。あるいは、回路設計業務から離れ、スイッチのオンオフをもってプログラムと考えることも可能ではあるが、それらをハード設計の仕事とみなせば、プログラマの登場とは回路変更を行わずにコンピュータの処理内容変更が可能となり、入出力装置が発展してからである。

1944年にハワード・エイケンによってコンピュータ用穿孔機と読み取り機が発明されると、紙によるプログラムの提供が可能となる。1945年にフォン・ノイマンによりプログラム内蔵したコンピュータが発明されると、目的別に回路変更を行う煩雑さから解放されていくようになり、これら以降、ハードウェアとソフトウェアがそれぞれ分立していくようになる。ただし、この頃のプログラマは、ハード設計者と同一である事も多く、また職業としては数学者と記載される事が多い。この頃のプログラマとして前記エイケンの元(ハーバード大学エイケン計算研究所)にいた、グレース・マレー・ホッパーがいる。ハード設計者ではない者として、ENIACのプログラミング担当者は弾道研究所で雇用されていた計算手から選ばれたが、ほとんどが大学で数学を専攻した数学者で回路設計者とは無縁であり、肩書きも「計算手(computer)」であった。

### 1950年代

1950年代に入ると、プログラミング言語が登場してくる。アセンブリ言語がこの頃登場し長らく使われた他、より人間が使用する言語に比較的近い高級言語も生み出された。前述のホッパーが1952年(あるいは言語として完成した1957年頃)にコンパイラを発明した。より完成度が高いコンパイラとしてはジョン・バッカスが1954年(あるいは1958年頃)に開発したFortranが登場し、また、ホッパーは自らのコンパイラを発展させたCOBOLを1959年に開発した。これらをもって、より人間の言語に近いプログラミング言語の登場となり、プログラムの記述も属機械的な数字の羅列あるいは単調な穿孔機による紙へのパンチ、穴の有無から、より人間の言語に近いコードとなっていき、ほぼ同時期に登場したトランジスターによるコンピュータの集積回路化にあわせ、ソフトウェアーとハードウェアの分立がより明確化していく。それに従い、専業としてのプログラマが登場してくる。なお、余談だが、ホッパーはプログラミング言語部門責任者として海軍に復帰所属し、特例措置的に少将まで昇進しており、海軍は彼女の死後、その功績を称えて米海軍イージス艦(アーレイ・バーク級ミサイル駆逐艦)にホッパーと名付けた。彼女は、数学者・コンピュータ科学者・軍人と記載される事が多いが、プログラマとして見れば、おそらく初めて軍艦に名付けられたプログラマであろう。

### 1960年、70年代

1960年代には、行政手続の際職業欄にプログラマと記述し窓口に拒絶された話が残っている。この頃は、1952年に商用コンピュータをIBMが発売して幾分経過したとは言え、多くのプログラマは国防関係の機関所属であったり、学術研究機関所属である場合が多く、社会的にプログラマとして認知されていたわけではなかった。プログラミング言語の登場とコンピュータの高度化により、プログラミング処理の幅が広がってくるに従い商業利用へ拡大していくと、さまざまな企業ニーズに合わせプログラマとしての企業雇用が増えてくる。また、IBMの701シリーズからオペレーティングシステム(OS)が本格的に普及し始めた事により、「ハードウェア」・「ハードウェアを操作するOS」・「OS上で稼動するソフトウェア」の分立が始まる。これらにより、プログラマは機械従属的な操作や基盤部分開発から徐々に解放され、より創造的なソフトウェア構築にシフトして行くことになる。

1970年代に入ると、パーソナルコンピュータが登場するようになり、それに伴い、パッケージソフトウェアの開発が盛んになってくる。また、コンピュータ処理能力も増大し、商用利用以外にも、ゲームなどの娯楽部門にも転用されるようになってくる。コンピュータの多分野進出すると、それに伴い徐々に社会的に職業としても認知されるようになってくる。これらの結果、1970年代後半に入ると様々な需要に即したプログラミング言語・OS・コンピュータメーカの乱立が始まり、一種の戦国時代とも言える状況が出現すると、増大する需要にともないプログラマの深刻な不足が問題化した。この頃の主要プログラミング言語はアセンブラ・COBOL・Fortran・BASICそして1973年に登場したC言語であり、また、その他膨大な数のプログラミング言語が登場しては、消えていった。また、スーパーコンピュータ・メインフレーム・オンラインシステム・ワークステーション・パーソナルコンピュータ・マイコン・工業用ロボットなどの組み込みシステム・ゲームなどの様々なカテゴリ分けも発生していき、プログラマ達はそれぞれに特化していくようになる。

### 1980年、1990年代

1980年代に入るとパーソナルコンピュータの爆発的普及が始まり、プログラマの中には自らのアイデアを商品化し巨万の富を得るものが出てくる。それに伴い、ソフトウェア産業という区分が発生し、企業単位でプログラム開発に業務特化したものが続々と登場してくるようになる。この頃をさして(プログラマの)黎明期と呼ばれ、無数のパソコンメーカ、ソフトウェアハウス、膨大な数のソフトウェアが開発されるようになり、さらに熾烈な競争時代へと突入していく。

1990年代に突入すると、あらゆる分野にコンピュータが進出するようになる。また、プログラマであるビル・ゲイツが1993年にフォーブス誌の世界長者番付一位となるとプログラマという職業が完全に社会的認知を受けるようになってくる。それまで、商用ソフトウェアを一人のプログラマが設計していた事例も見受けられていたが、ソフトウェア開発の巨大化に伴い、一人もしくは少数のプログラマによる開発が難しくなり、より大人数、組織化した開発プロジェクトが標準化してくるようになる。それに伴い、それまでプログラマの役割も分科されるようになり、ソースコードを記述するプログラマと、その設計および指示を行うシステムエンジニアに分かれてくるようになる。

また、それまで属人的に行われていた(いわゆる脳内での思考)設計も、書類化するようになり、仕様書による分担作業とプログラマの仕事は変質していく。これらは、より大規模な軍需産業などであれば1970年代から見られた状況だが、ほぼ職業プログラマ全域に広まるのはこの頃である。その為、プログラマの上位概念あるいは、分立職業者としてシステムエンジニアを重視する風潮が生まれた。なお、この頃ビルゲイツが「自分はシステムエンジニアではなく、プログラマである」と発言している。

ほぼ同時期に、ネットワーク技術向上に伴い、パソコン通信あるいはインターネットが登場してくるようになると、これまでと違った個人活動的プログラマが登場してくるようになる。個人でプログラムを行い、それらをネットワークを使って有償もしくは無料にて配布するシェアウェアプログラマあるいはフリープログラマである。

### 2000年代

1990年代末以降、パソコン分野での競争が一段落し、パソコン業界でのOSはWindowsが主流に、プログラミング言語はC言語の派生言語(主なものはC、Java、C++、C#、Objective-C)が主流となった。反面、サーバ、リッチクライアント、組み込みシステムなどデスクトップコンピュータ以外の市場が著しく拡大し、開発環境は多様化している面もある。ネットワーキング・コンピューティング、クラウドコンピューティング分野の新たな需要にこたえる形で、オープンソース系UNIXやサーバサイドプログラミングが広がり、JavaScript、Rubyなどの簡易なスクリプト言語が普及した。高機能な組み込みオペレーティングシステムを搭載した携帯電話などの組み込みシステムの出現により、組み込み分野でもオブジェクト指向など大規模な汎用システムで培われた開発手法が広く使われるようになった。

また、プログラムはさらに巨大複雑化し、必要な知識も個人ですべて把握するのは不可能な量となった。そのため、プログラマはより狭く深い部分に特化する事例が多い。これら複合要因により、同じプログラマと言ってもある部分だけは詳しいが他の分野は把握していない事も多く、システムの全体を把握しようにも、もはや人間の記憶限界を超えた分量であるため事実上不可能である。

コンピュータはあらゆる生活の基盤に無くてはならないものとなったために、プログラマに課せられた社会的責任は増大しつつある。プログラムの流通を安全なものとするために、電子署名、サンドボックス、ソフトウェア配信サービスなどのシステムが整備されている。

## プログラマに対する呼称

「プログラマ」という単語が表す職務をさらに細分化したものとして、以下のようなものが挙げられる。

- アプリケーション開発者(デスクトップ・ウェブ・モバイルなど)
- システムソフトウェア開発者
- 組み込みファームウェア開発者
- ソフトウェア技術者(ソフトウェアエンジニア)
- 計算機科学者
- ソフトウェアアナリスト
- システムエンジニア(SE)

など。

これらの職業においては通常、単なるプログラミング(コーディング)を越えた知識が要求される。そのため、「プログラムコードを書くだけ」のように捉えられうる「プログラマ」や「コーダ」という呼称は、時に、職業上の肩書きとしては軽蔑的な過度の単純化であると捉えられることがある。このことは、開発者・アナリスト・計算機科学者などの当事者、もしくはこれらの職業名の微妙な違いに首をかしげる外部の業界の人間のあいだにおいて論争の火種となってきた。

計算機科学分野では最高峰の賞であるチューリング賞受賞者のケン・トンプソンは、受賞記念講演の際「私はプログラマです」と述べている。

### 「プログラマ」と「プログラマー」

電子情報通信学会などの投稿規定では、「プログラマ」と表記することとされている。これは、かつて語末の長音省略を定めていたJIS規格の過去の版などの影響によるものである。長音符#語末長音符の省略を参照のこと。技術分野以外では長音符を省略しないことを原則とする規定もあるため、その場合「プログラマー」と書かれる。

## その他

### プログラマ35歳定年説

プログラミング技術は進歩が激しく、技術の陳腐化も著しいため、プログラマは常に新しい技術に目を向け習得していくバイタリティや、場合によっては永年の努力によって培ってきた技術を捨て去る柔軟性が必要である。また、年功序列的賃金体系のもとでは、高年齢のプログラマはコストが高すぎると考える企業がある(特にプログラミングを単純作業と考える企業に多い)。俗にIT土方とも呼ばれデスマーチとなった場合は徹夜が続いたり体力が必要となってくる。そのため、プログラマとしての限界は30 - 35歳前後もしくは10年程度という説が日本国を含め多くの国に存在していた。これは「プログラマ35(30)歳定年説」と呼ばれる。現在では経験豊かなプログラマにも一定の需要があり、35歳定年説は多くの国でもはや過去のものとなっているが、コストの観点からは一定年齢に至ったプログラマに、より単価の高い職へ転向がすすめられることがある(参考:SEと記者,どちらが短命?、36歳になって思う「プログラマ35歳定年説」)。

パソコンが登場した頃10代だった若者が、現在60代になっており、アメリカ合衆国をはじめ60歳以上のプログラマも珍しくはなくなっている。典型的な事例ではWindows NT開発者で知られるマイクロソフトのデヴィッド・カトラーは70歳を超えてもソースコードを自ら記述しており、実例からも35歳定年説は意味がない。ただし、パソコン黎明期といわれた1980年代においては、30歳代までに巨万の富を稼ぎ、そのまま引退する事例もあった(HyperCard の開発者ビル・アトキンソンなど)。日本では、長時間労働、下流工程での賃金の頭打ちなどにより35歳定年説をささやく人がいる。

### プログラマの三大美徳

ラリー・ウォールによれば、プログラマの三大美徳とは次の通りである。

- 怠惰(Laziness)
- 短気(Impatience)
- 傲慢(Hubris)

プログラマに必要とされる効率や再利用性の重視、処理速度の追求、品質にかける自尊心をなぞらえたものである。