プログラマ
出典: フリー百科事典『ウィキペディア(Wikipedia)』
プログラマ(programmer)とは、コンピュータのプログラムを作成する人全般を指す。プログラマーとも表記される(#プログラマに対する呼称参照)。
目次 |
[編集] プログラマの仕事
プログラミングは、論理的な思考や発想が要求される作業であり、ちょっとしたことでバグなどを生むことがあるため、緻密さと根気も要求される。
プログラムの作成にあたっては、実際にプログラムを記述するコーディング以外にも種々の作業が必要とされる。
また、プログラムを作成する能力は、プログラムの作成のみならずコンピューターを使いこなすためにも必要とされるので、プログラマに任される仕事は単にプログラムの作成だけではない。
以下に、プログラマの仕事としてみなされることの多い作業を挙げる。企業によっては、以下の作業を分担して行うこともあり、その場合は適した名前で呼ばれることが多い。
- プログラムの作成
- プログラムの導入
- 配置(デプロイ、deploy)
- 設定(コンフィグ、configuration)
- プログラムの利用
- プログラムの分析
- プログラムに関する文書の作成
- ユーザマニュアルの作成
- プログラム解説書の作成
[編集] 他の職種との境界
日本の、特にソフトウェア受託開発業においては、しばしばプログラマという語はシステムエンジニア(SE)という職種との対比で用いられる。システムエンジニアがシステムの設計を行うのに対し、プログラマは設計に基づいて実装のみを行うという意味を含んでいる。
ただし、ソフトウェアの分野では、設計方式が確立されていないこともあって、設計が実装レベルの作業に委ねられていることも多い。そのため、一人の技術者がプログラマおよびシステムエンジニア双方の領域にまたがる作業を行うことも多く、その境界は曖昧になっている。結果としてプログラマは、システムエンジニアと同義と捉えられることがあり、どちらを名乗るかは、本人や所属企業の任意による面もある。
同様に、プログラマは、職務内容によってディベロッパー、ITエンジニア、ソフトウェアエンジニア、アーキテクト、ITアーキテクト、エンタープライズアーキテクトと呼ばれることや、そのような肩書きと同一視されることもある。
[編集] 歴史
[編集] 歴史の始め
史上初のプログラマは、詩人バイロンの娘、 エイダ・ラブレス(ラブレース伯爵夫人オーガスタ・エイダ・キング・1815-1852)であるとされる。彼女はチャールズ・バベッジが作成した解析機関のオペレータであった。プログラミング言語Adaは、彼女の名前に因んで命名された。ただし、それはあくまで概念的あるいは数学的なものでしかなく実質的なプログラマはコンピュータの登場からである。
[編集] 1940年代
1940年代に入り、初期コンピュータが登場しはじめると、人手では時間がかかり過ぎる科学的計算に使用された。その際、計算内容の変更に伴い回路変更が必要であったが、その作業は急速に増大していく。この頃は、プログラマとハードウェア設計者との区別は難しく、どこからがプログラマでどこからが回路設計者かは議論あるいは解釈の余地があるが、回路変更作業の増大と高度複雑化に伴い、徐々にプログラマと呼べる存在が確立していった。仮に、回路設計の変更をもってプログラミングとするならば、設計図を変更し、半田ごてを持ったり、ケーブルの差し替えを行う事が初期プログラマの仕事となる。あるいは、回路設計業務から離れ、スイッチのオンオフをもってプログラムと考えることも可能ではあるが、それらをハード設計の仕事とみなせば、プログラマの登場とは回路変更を行わずにコンピュータの処理内容変更が可能となり、入出力装置が発展してからである。
1944年にハワード・エイケンによってコンピュータ用穿孔機(せんこうき)と読み取り機が発明されると、紙によるプログラムの提供が可能となる。1945年にフォン・ノイマンによりプログラム内蔵したコンピュータが発明されると、目的別に回路変更を行う煩雑さから開放されていくようになり、これら以降、ハードウェアとソフトウェアーがそれぞれ分立していくようになる。ただし、この頃のプログラマは、ハード設計者と同一である事も多く、また職業としては数学者と記載される事が多い。この頃のプログラマとして前記エイケンの元(ハーバード大学エイケン計算研究所)にいた、グレース・マレー・ホッパー女史がいる。
[編集] 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年代以降
1980年代に入るとパーソナルコンピュータの爆発的普及が始まり、プログラマの中には自らのアイデアを商品化し巨万の富を得るものが出てくる。それに伴い、ソフトウェア産業という区分が発生し、企業単位でプログラム開発に業務特化したものが続々と登場してくるようになる。この頃をさして(プログラマの)黎明期と呼ばれ、無数のパソコンメーカ、ソフトウェアハウス、膨大な数のソフトウェアが開発されるようになり、さらに苛烈な競争時代へと突入していく。
1990年代に突入すると、あらゆる分野にコンピュータが進出するようになる。また、プログラマであるビル・ゲイツが1993年にフォーブス誌の世界長者番付一位となるとプログラマという職業が完全に社会的認知を受けるようになってくる。それまで、商用ソフトウェアを一人のプログラマが設計していた事例も見受けられていたが、ソフトウェア開発の巨大化に伴い、一人もしくは少数のプログラマによる開発が難しくなり、より大人数、組織化した開発プロジェクトが標準化してくるようになる。それに伴い、それまでプログラマの役割も分科されるようになり、ソースコードを記述するプログラマと、その設計および指示を行うシステムエンジニアに分かれてくるようになる。また、それまで属人的に行われていた(いわゆる脳内での思考)設計も、書類化するようになり、仕様書による分担作業とプログラマの仕事は変質していく。これらは、より大規模な軍需産業などであれば1970年代から見られた状況だが、ほぼ職業プログラマ全域に広まるのはこの頃である。その為、プログラマの上位概念あるいは、分立職業者としてシステムエンジニアを重視する風潮が生まれた。なお、この頃ビルゲイツが「自分はシステムエンジニアではなく、プログラマである」と発言している。ほぼ同時期に、ネットワーク技術向上に伴い、パソコン通信あるいはインターネットが登場してくるようになると、これまでと違った個人活動的プログラマが登場してくるようになる。個人でプログラムを行い、それらをネットワークを使って有償もしくは無料にて配布するシェアウェアプログラマあるいはフリープログラマである。また、本来見ることができない内部を見るハッカーなども登場してくるようになる。
2000年以降の現代では、それぞれの分野での競争が一段落するようになり、パソコン業界でのOSはWindowsが主流となり、プログラミング言語はC言語系が主流となるようになる。反面、新たな需要にこたえる形で、htmlなどの簡易言語が普及し、携帯電話分野ではjavaが主流を占めるなど、それぞれの住み分け専業化が明確化してくる。また、プログラムはさらに巨大複雑化し、必要な知識も個人ですべて把握するのは不可能な量となった。そのため、プログラマはより狭く深い部分に特化する事例が多い。これら複合要因により、同じプログラマと言ってもある部分だけは詳しいが他の分野は把握していない事も多く、全体を把握しようにも、もはや人間の記憶限界を超えた分量であるため事実上不可能に近い。このため、2000年問題などのシステム掌握限界による問題などが多数発生した。コンピュータは生活基盤に無くてはならないものとなったために、プログラマに課せられた社会的責任は増大しつつある。
[編集] 文化
歴史は浅い。しかしそれ故に、プログラマは独特な文化を持つと言われている。いわゆるギークに属する人間が携わる事が多い職種であることも手伝って、部外者にとっては奇妙な冗談に思えるジョークをプロジェクトなどの名称に盛り込む事もしばしばである。(Linuxのパッケージの一つの名称の「kondara」など)
またプログラマにも種類があり、組み込み系開発、基幹系業務開発、データベース系開発、Web開発、研究開発ではそれぞれ、まったくといっていいほど文化や労働形態や仕事内容が異なる。
ただし、世間的には「プログラマ=コンピュータに詳しい人=ハッカー=オタク」といったステレオタイプなイメージを持たれることが多く、ことにフィクション(テレビドラマ・漫画など)においてはキワ物な性質の職業として描かれることが多々ある。
[編集] その他
[編集] 苦労・残業
プログラミングには十分な計画性と入念な設計が必要とされる。しかし、プログラマがそれらを満たす作業を行っていても、状況次第で仕様変更が行われたり不具合が判明することにより、長時間作業をしなければいけない場合もある。
また、ソフトウェアに不具合が発見された場合、深夜残業や休日返上での修正作業をせざるを得ないこともある。
企業により様々ではあるが、日本ではプログラマは残業が多い職種の一つで、午前様になる事も珍しくない。近年では「デスマーチ」とも呼ばれる破滅的プロジェクトに巻き込まれてしまった技術者が心身を壊し、ときには自殺や過労死にも至るケースも報告されており問題視されている。
残業が多い職種であるが、労働基準法に違反して、サービス残業を強いられているケースも多い。場合によっては、時給換算した給料が、最低賃金法に基づく基準をクリアしないこともある。
[編集] 教育
品質や残業の発生など、プログラミングに関する問題について、多くのプログラマがオブジェクト指向、エクストリーム・プログラミング、アジャイルソフトウェア開発などのソフトウェア工学を熟知していないことが原因であるという見方がある。 しかし、日本では、このようなソフトウェア工学を修得する機会や研修期間、社内教育が用意されない企業も少なからずあり、企業のソフトウェア開発に対する認識が甘いのではないかという指摘もある。
また、大学など先端教育機関でのコンピュータサイエンスや情報工学、情報科学の研究成果が生かされていないことも指摘されている。採用の際に、「学歴・資格なんか関係ない」「大学は何も役に立たない」「ただ技術があるだけの理系は意味がない」「コミュニケーション能力が重要だ」「プログラミングは誰でも出来る」と言い切る採用担当者も少なからずおり、情報工学に関する専門教育を受けていたかどうかによる初任給の差も少ない。これは日本の大学が情報~学部と言う名称の学部であってもその多くがプログラミングに関する授業数や演習の数が他国の情報系のそれに比べて少ない傾向にあり、学ぶ内容もアカデミックなものに拘りすぎているからという批判がある。このような大学軽視の背景には、IT企業にはベンチャー企業が多く、学歴・資格や大卒に対する偏見や誤解を持っている者も多いからと主張する者もいる。
大学等の専門教育が必ずしもソフトウェア開発の銀の弾丸にはならないことが近年わかってきてはいるが、それらが全く無駄だとは言い切れないことも事実である。顧客や経営者、マネージャの判断や行動等により、プロジェクトによっていかせる技能・知識に幅が出ることも、プログラマに必要な技能や知識は何かという問いを難しいものにしている。
ことにフレームワーク、デザインパターン、アルゴリズム、イディオムの効果的な実装に関しては、発想の柔軟さというものが切に求められる分野の職業でもある。そのためプログラマの能力によっては、実質的な仕事量が人によって数倍以上の開きを持つことも決して珍しくない。
なお欧米では学歴に関しては状況が逆で、学歴と待遇が比例しているといわれている。例えばマイクロソフトやグーグルといったソフトウェア関係の大企業では名門校出身者や高学歴保持者を特に優先して採用するのが一般的であるほか、ジョエル・スポルスキなど、優秀な人材を確保したければ優秀な大学で採用活動をすべきと明言するベンチャー起業家も多い。
[編集] 請負形式
日本のソフトウェア業界では、どれだけの機能を提供するかではなく、予想される工数はどれだけかを元に費用を算出して、請負形式で仕事をすることが多い。 そのため、ソフトウェアに対する適正な価格が市場に定着していないような分野では、各種要因によりたまたまソフトウェアを予定よりも早く完成させた場合に、経営者や顧客から「何だ、そんなに早くできるんじゃないか。それだったら次回からは納期を短くしてコストを下げても良いだろう」といった、請負形式ならではの値下げ圧力がかかることがある。
また、契約上は請負でも、実際には派遣として作業を行っている場合があり、他業種同様に偽装請負を指摘されることがある。
[編集] フリープログラマ
個人事業主(フリーランス)のプログラマや、独立して起業しながらプログラマ作業を行うケースも増えている。直接仕事を顧客から引き受けるため、責任負担は増大するものの、作業量や時間を調節でき、経費を効率よく使えば、一般的な被雇用プログラマより年収も確保できる。ただし、相応のスキルと営業力がないと継続して仕事を獲得するのは難しい。また近年のセキュリティ重視傾向の影響で、大手企業を中心に「フリーランスお断り」の風潮が浸透してきており、このような場合は大手の下請けか孫請け(もしくはそれ以下の下請け)を経由して、フリーランスのプログラマが仕事を請けるケースも散見される。
[編集] 日本以外のプログラマ
アメリカでは多くの場合、広い机や部屋を用意されて、そこで開発ができるため、狭い部屋や机に囲まれている日本のプログラマよりもストレスが溜まりにくく、そのぶん開発効率も高く、給料も高い。また、職務定義書が明確にされていることが多いため、技術を知らない社内の人から余計な雑用を頼まれることも少ない。まず大半の日本人には無関係であるが、亡命もしくは移民する際、職業がプログラマであると(スキルにもよるが)優遇されるケースも存在する。非公式情報ではあるが、弁護士と同等の優遇措置を執り行う国家もあり、プログラマを経済成長に影響する高度技術者として重視している国家もある。反面、日本においては使い捨て労働者として扱うような風潮があった。これら社会的な取り扱いの差は、アメリカ初期プログラマ(1960年代~1970年代前半)は国防関係もしくは、研究機関におけるプロジェクトから始まっており、博士号を取得した後にプログラマになるという事例が多かった為である。1970年代前半までプログラマと言えば、「白衣を着ており、近寄りがたく、どこかの研究所に勤めている」がアメリカでのイメージだった。ビルゲイツがアメリカで最初に有名になったのは、研究者然とした白衣を脱ぎ捨てジーンズとTシャツの着たプログラマとしてであり、そのソフトではなく、スタイルからであった。それから見ても分かるとおり、日米でプログラマに対するイメージや社会的取り扱いは大きく差があるが、近年都道府県警察がハイテク犯罪捜査官を中途採用する場合、高度情報処理技術者は初任警部補扱いを行うなど徐々に変わりつつある。
[編集] プログラマ定年説
プログラミング技術は進歩が激しく、技術の陳腐化も著しいため、常に新しい技術に目を向け習得していくバイタリティや、場合によっては永年の努力によって培ってきた技術を捨て去る柔軟性が必要である。また、年功序列的賃金体系のもとでは、高年齢のプログラマはコストが高すぎると考える企業がある(特にプログラミングを単純作業と考える企業に多い)。俗にIT土方とも呼ばれデスマーチとなった場合は徹夜が続いたり体力が必要となってくる。そのため、プログラマとしての限界は30~35歳前後であるという説が存在した。これは「プログラマ35(30)歳定年説」と呼ばれる。コストの観点からは、定年に至ったプログラマに、より単価の高いシステムエンジニアや営業へ転向がすすめられることがある(参考:SEと記者,どちらが短命?、36歳になって思う「プログラマ35歳定年説」)。
なお、NT開発者で知られるマイクロソフトのデヴィッド・カトラーは60歳超えてもソースコードを自ら記述しており実例からもアメリカにおいては35歳定年説は否定されている。ただし、パソコン黎明期といわれた1980年代のアメリカにおいては、30歳までに巨万の富を稼ぎ、そのまま引退する事例も多い。(ハイパーカードの開発者ビル・アトキンソンなど)対して、日本では、長時間労働、下流工程での賃金の頭打ちなどにより35歳定年説がささやかれている。[1]
[編集] プログラマの三大美徳
ラリー・ウォールによれば、プログラマの三大美徳とは
- 無精(Laziness)
- 短気(Impatience)
- 傲慢(Hubris)
との事。これはプログラマに必要とされる、効率や再利用性の重視・処理速度の追求・品質に賭ける自尊心をいったものである。
[編集] プログラマに対する呼称
[編集] プログラマあるいはプログラマー
「ー」をつけるかどうかは、厳密な決まりはなく、人によりまちまちであるとされている。ただし、電子情報学会などの学会論文の命名規約では、「プログラマ」と書くとされている。
[編集] アマグラマあるいは日曜プログラマ
趣味でプログラミングをする人をアマグラマ、日曜プログラマ(サンデープログラマとも)等と呼ぶこともある。
[編集] コーダー
プログラミングのことを「コーディング」とも呼ぶことからプログラマを「コーダー」と呼ぶこともあるが、コーディングという言葉が「設計を含まない記述のみ」というニュアンスを含むため、プログラマの蔑称であると受け止められることもあるので注意が必要である。企業によっては、HTMLを弄るウェブデザイナのことをコーダーと呼ぶことがある。
[編集] プログラマとシステムエンジニア
日本のソフトウェア受託開発業においてシステムエンジニアは、プログラマより能力的に優れた人間の役割という建前があるが、これは残念ながら建前にしかなっていないことも多い。なぜなら、プログラムを作成する能力の無い人間でも、プログラムのコードを書かないシステムエンジニアの振りをする/させることはできるが、プログラムを作成する能力の無い人間に、プログラムのコードを書かなければならないプログラマの振りをする/させることはできないので、プログラムを作成する能力の無い人間をシステムエンジニアに偽装する事が多々あるからである。
プログラムの開発は、システムエンジニアの職域とされる顧客との折衝・初期の開発段階にて、成功か失敗かがほとんど決まるので、そうした偽装された無能なシステムエンジニアは悲劇を起こしやすい。