作成日 2009/3/21
最終更新日 2009/12/20

どんな人がプログラマに向いているか?を考えてみた

 なんとなく、どんな人がプログラマに向いているか?を考えてみた。
 ほら、今後だるまが人を選ぶ(?)ような仕事に就くかもしれないし。
※ここではプログラマについて考えています。システムエンジニアについては考えていません。

1.そもそも・・・
2.技術力
3.コミュニケーション能力
4.理系と文系
5.性格
6.その他
7.まとめ
8.関連URLなど

1.そもそも・・・

 そもそも、プログラマの定義が良くわからない…。

 ということで、ここでは以下のことを行う人と定義します。

・言語は何でもいいけど、プログラミングを行う
・単体テストの仕様書作成、テスト実施を行う
・基本設計書を元に詳細設計書を作成する
・基本設計書は作成しないけど、基本設計書の間違いを指摘したりはする
このページのトップへ

2.技術力

 少なくとも、プログラマでは絶対に必要です。
 C言語Javaなど何らかのプログラミング言語とある程度のアルゴリズムなどコアな部分は絶対必要。

 今まで知らなかった言語やライブラリを使用することになる場合が多々ある。
 なので、「技術をものにするスピード」と、「技術的な勉強」がかなり重要で、この2つがないとやっていけません。

このページのトップへ

3.コミュニケーション能力

 1人ではなく、チームでシステムを作ることの方が圧倒的に多いです。いや、職業プログラマの場合、お客さんに納品するためにプログラムを作るので、他の人が関係しないなんてことは絶対にありえません。
 なので、「コミュニケーション能力」が必要となってくるわけです。

■おしゃべりや雑談とは違う
 しかし、おしゃべりや雑談とは違うんです。TVドラマとかの話をしても意味がない。
 仕事をする上で大事なのは、仕様を正しく伝えたり、ちゃんと理解したり、相談や報告をしたり…といったことです。
 趣味の話や雑談は、プログラマに限って言えばどうでもいいです。

■報告・連絡・相談について
 プログラマに限った話ではありませんが、「ホウレンソウ」は大事ですね。
 完璧な仕様、完璧な指示というのは存在しないんです。
 指示する方も人間なので間違えることはある。
 だから、「そのつど確認」するということは結構、大事なんです。
 それから、状況に応じて指示内容を変更しないといけないときもあります。マメに報告・連絡・相談をしていないと、「え、何で?」ということになりかねませんよ〜。

■文書の作成も大事
 コミュニケーションと言うのは、話すだけではなく文書の作成も含みます(※1)。内容にもよるのですが、文書の場合、特に仕様書の場合は、細かい内容までしっかり考えて書く粘り強さ(?)が大事だと思います。
 細かい内容まで書く理由は、あいまいな仕様だとそれがバグにつながる可能性が高いためです。

-----
※1:PMBOKのコミュニケーション・マネジメントより。以下、書籍から。
コミュニケーション・スキルにはさまざまなものがあるが、これらは次のような多様な側面から考えることができる。
・文書/口頭、聞くこと/話すこと
・内部/外部
・公式/非公式
・縦方向/横方向
PMP試験合格虎の巻―重要ポイント解説+演習問題・模擬試験」 ISBN 978-4872685282 より
このページのトップへ

4.理系と文系

 どっかの掲示板をみているとよく質問している人がいるので、考えてみた。
 理系と文系のどちらがプログラマに向いているのか?

■結論を先に述べると理系の方が有利だと思う
 少なくとも、「プログラマ」だけで考えた場合、圧倒的に理系の方が有利です。これは大学などでプログラムを作成した経験がある・ないは関係ありません。もちろん、プログラムの作成経験があれば、さらに有利であることは言うまでもありませんが。
 理由ですが、技術力のところで書いた「技術をものにするスピード」と「技術的な勉強」がぜんぜん違うのですよ…。
さらに、コミュニケーション能力と性格の「細かいところまで考えるしつこさ(緻密さ)」も理系の方が上ですので、理系の方が圧倒的にプログラマに向いると思います。

■プログラミング言語をあつかうから文系の方が有利っていうけど。
 そうそう、どっかの「プログラマはプログラミング言語を扱うから文系の方が有利」という書き込みを見るのですが、違うと思います。
 理由ですが、いや、実は数学(というか数式)も言語なんですよ。数式には日本語や英語よりはるかに厳密な文法が存在します(でなければ関数電卓(※1)など存在しない)。ということは、数学も文系の方が得意と言うことになってしまいます。でも、実際には違いますよね?
 繰り返しになりますが、「プログラマはプログラミング言語 を扱うから文系の方が有利」は間違いです。

■お客さんと(エンドユーザ)の打ち合わせなどがあって、コミュニケーション能力のありそうな文系の方が有利では?
 それをするのはSE(システムエンジニア)であって、少なくともプログラマが行うことはあまり無いと思う(※2)。
 で、この場合は、文系の方が有利そうに思える。しかし、このようなコミュニケーションは技術力があってこそのコミュニケーション(要するに技術がぼろぼろの状態だと話が通じなくなる)であることを忘れないで欲しい。

■数学の問題ってさー、前の問題の答えを使って次の問題に答える問題が多いよね。こういうのは嫌い…
という人は残念ながらプログラマには向いてない気がします。
 というのは、プログラムの設計においてはある工程のoutputがその次の工程のinputとなることなどいくらでもあるわけで、これが嫌いだと、さすがに厳しいのですが…。
(最も、だるまも設計バグとか仕様バグは普通に作ってしまっていますが…)

■そういえば、高校の数学の教科書を見るとプログラミングが載っている…
 多分ですが、少なくとも高校までの数学の教科書(より正確には学習指導要領)は教育の効果や教育心理学や発達心理学の研究結果や考えなどを踏まえてると思います。「数学が苦手」はその範囲であるプログラミングも苦手だと考えて良いと思います。
 個人的な意見では、プログラムの設計(アルゴリズムを考える)のが数学の問題を解くのに近い(教育心理学か発達心理学上)のではないかという気がします。だから数学で教えるのではないかと。もちろん他にも理由はあるとは思いますが。

-----
※1:数式に厳密な文法が存在するからこそ、数式を構文解析し、計算することが出来るわけです。
※2:おそらく、国(正確には情報処理推進機構)ではシステムアーキテクト(旧アプリケーションエンジニア)試験の合格者相当の人が行う業務であると考えているのではないかと思います。この試験は文系SEが有利とはいいますが、技術的なところも出題されます。
このページのトップへ

5.性格

■責任感が一番重要かなぁ
 「与えられた仕事をきっちりこなす」ために努力しているかは大事だ。
 与えられた仕事をきっちりこなせなかった場合、他の人の仕事が増えるのです。それを繰り返す人は、正直、どっかに行って欲しい(新人とかは仕事がきっちり出来なくても仕方ないけど、出来るように努力はして欲しい(※1、※2))。

■マメさ
 「ホウレンソウ」の頻度が高いほど、「間違えて、別のものを作ってしまいました」という事態が減らせます。

■やたらと細かいところまで考えるしつこさ(緻密さ)
 あいまいな仕様はバグにつながりますので、重要です。
テスト(例えば単体テスト)において境界値チェックもしっかり行いますので、はじめから境界値など細かいところまで考える癖があるほうが有利です。
 細かいところを考えず、安易に妥協する性格の人はほとんどプログラマには向いていないと考えても良いと思います。

■他のメンバに対する思いやりがある
 自分のことしか考えられない人は、チームの和を乱すので、正直、どっかに行って欲しい。
ただし、必ずしも他の人のことを考えろという意味ではありません。自分の進捗や品質が悪いと他の人がサポートしなくてはならなくなるので、まずはそうならないようにする努力の方が非常に重要です。他のメンバのことを考えるのはその後で十分です。

■明るく元気な人は?
 どこの業界でも、「明るく元気な性格」みたいなのが良いというけど、個人的には関係ないと思っています(少なくともプログラマに限っては)。それよりかは、「責任感がある」、と「仕事ができる」が重要です。仕事が出来ないと、周りからいやな目で見られることになるので、だんだん暗くなっていきます(無理に明るく振舞うことは出来ますが…)。責任感については説明するまでも無いと思うけど、無責任な人に仕事を任せられると思う?無理だよ。

■危険を察知できる性格、神経質な性格
 「危険」といっても、爆発事故が起こったりと意味じゃないです。
 プロジェクトマネジメント上の危険、つまり、品質不良、コスト増、納期遅延などになりそうなことを察知できるといいですね。
 例えば、主婦で、さあこれから出かけよう、玄関の鍵をかけようと思ったときに、「あ、そういえば、ガスコンロの火を止めたっけ」と確認しに行くような神経質な性格の人はプログラマに向いている性格だと思います。
 なぜかというと、ミスや漏れ、間違いを訂正するのが遅くなればなるほど、それの訂正にかかるコストが増えていくからなんです。
 具体的には、設計段階で設計ミスに気がついたときは、それを修正すれば良いだけですが、これが納品後だったら大変です。場合によってはプログラムが入った製品をすべて回収なんてことにもなりかねませんからね。そしたら、企業の信用は傷つくし、回収コストは馬鹿にならないしで、大変です。

■顧客満足度を少しでも上げようとする姿勢
 プログラマに限らないけど、重要。逆にお金(特にフリーでやっている人は注意)ばかり気にしていると危ないです。
 これはホームページの更新と共通するところがあるんだけど、お金などの評価は顧客満足度を高めた結果だと考えた方が良いと思う。
 それから、口だけの人なのですが、お客さんと接する時間が長いので、ばれちゃいます

■破滅型人間でない
 「破滅型人間」については「もう、足を引っ張られない! “破滅型人間”の見分け方 - [離婚]All About」を見てください。
 別に結婚するわけではないです。しかし、他のメンバーと一緒に居られるか(一緒に仕事ができるか)という点では同じだと思います。
 以下はページからとってきたものです。ちなみに、以下の20項目のうち、3項目以上当てはまる人とは恋人や結婚相手にはしない方が良いみたいです。
    ●平気で嘘をつく、誠実でない
    ●約束を破る・できない
    ●善悪の判断力に欠けている
    ●優柔不断、流されやすい
    ●自己否定発言が多い
    ●社会のルールを守らない
    ●計画性がない
    ●無気力、怠け者、働くのが嫌い
    ●異性にだらしがない・浮気者
    ●将来の希望・目標がない
    ●夢を語るが努力しない
    ●問題解決能力がない
    ●依存症
    ●アルコール・ドラッグ中毒
    ●他者への甘えが強い
    ●(無茶な)借金をする
    ●暴力を振るう
    ●破滅的生き方を昇華させるタイプの芸術家
    ●同性の友人が殆どいない
    ●自殺が最終手段だと思っている


    もう、足を引っ張られない! “破滅型人間”の見分け方 - [離婚]All About」より


 だるまも、いくつか当てはまっている(一応、3個未満(注:ただし、セルフチェックは一般的に甘い))ので、偉そうなことは言えませんが…。
 しかし、これ…。
 当てはまっているのが多い場合、プログラマーとか言う以前に、社会人、いや、大人として失格だと思うが…(付き合いきれないが…)。
 中には仕事とは直接関係ないもの(例:(無茶な)借金をする)もあるけど、これって、他のもの(例:計画性がない)に関係すると思うんですよ。だから、仕事に関しても、全項目に対してチェックした方がいいと思います。

-----
※1:努力しなかった場合、なかなか仕事が出来るようになりません。
出来るようになった頃には、もうシステムの開発が終わって、次のシステムの開発をしていたりして…。
ともかく、使う技術や仕様はシステムごとに異なるから、努力しない人は技術的についていけないです。
※2:ミスったときに、今まで努力していなかった場合(別の言い方をすると怠けていた場合)、お客さんへの言い訳が難しくなります。勘弁してください。
このページのトップへ

6.その他

■論理的な思考ができる
 性格の「やたらと細かいところまで考えるしつこさ(緻密さ)」と似ている部分がありますが、あいまいな仕様はバグのものですので重要です。

■作ろうとしているシステムについての理解(業務知識)
 作ろうとするシステムについて理解しているかどうかも重要です。金融関連のシステムを開発するなら金融について知っていたほうが強いし、在庫管理・流通・販売のシステムを作るなら在庫管理・流通・販売について知っていると、仕様を早く理解できると思います。
 でも、実際には開発しているプロジェクトに配属してから勉強することになると思うから、勉強していかないときついかなぁ(※1、※2)。

■数学が出来る
 数学については、ある特定の分野(工学的なシミュレーション、金融系など)では必須になる。けど、そんなのは少ないです。ただ、数学が出来ない人は論理的な思考もできなければ、緻密さもないし、技術をものにするスピードも低くいような気がしますので、個人的にはプログラマには向いていないと考えています。
 今の高校の教科書を見ると、プログラミングは数学の範囲に入っています。詳しいことはわかりませんが、数学とかかわりが深いと思っています(※3)。
 あ、そういえば数学(算数も含む)に、「文章問題」と言うのがありますよね。プログラムの設計をするのは、文章問題を解くのと似ている(問題となっている対象を抽象化 するところ)気がします。

■英語が出来ると多少有利
 だるまは英語は全く出来ないのですが、仕様書が英語のものしかない場合もあるので、英語が出来ると多少有利です。ただし、勘違いして欲しくないのですが、英語より技術力や責任感の方が圧倒的に重要です。英語は出来なくても何とかなりますが、技術力と責任感は無いと仕事になりません。

■センスがある
 何のだよというつっこみがきそうだ。
 数学だと、センスがある・ないが重要(?)みたいなことが言われるているかもしれない。
 で、個人的に、大事だと思っています。
 具体的に言うと、センスがある人は書いたプログラムがきれいだと思います(※4)。数学も出来る人が解いた数式は美しいのと同じです。また、設計でも同じことが言えるんじゃないかなぁと個人的には思っています。

■集中力がある
 複雑なロジックを考える必要があるとき、スレッドの排他、例外処理の設計など、結構頭を使う場合があります。
 なんか数学みたいなことを言っていますが…。

■健康
 IT業界に限らないのですが、非常に重要です。
 例えば、1日に8時間の労働をすると考えると、1日休むと2時間の残業を4日しなければなりません(時間だけを考えた場合)。ただ、それだけでなく、他の人の作業効率が悪くなったりすることも考慮に入れると1日休むと取り戻すのに1週間強もかかると考えた方が良いと思います。
 健康でないと、他のことも(例えば技術的な勉強)出来なくなってくるので、健康は非常に重要です。
 体の調子が悪く、眠かったりすると集中力が持たなくなってくるので、そう言う意味でも重要です。

-----
※1:本当に勘弁して欲しいです。
※2:このため、継続的に勉強していく必要があります。これは重要です。
※3:プログラムと数学で、同じような言葉があることはあります。例えば、「演算子」という言葉はプログラミングでも出てきますが、数学の演算子と同じような意味だと思います。また、いろいろ数学的な定義(?)があるものがある(ER図における正規化 )場合があるし…。
※4:きれいに書こうとしているかどうかというのが大事かもしれません。「動けばいいや」と考えている人と、「どうすれば可読性が良くなるか」を考えている人とでは、プログラムの品質 (JIS X 0129-1等)がかなり違ってきます。
このページのトップへ

7.まとめ

 いままで上がってきたものに順番をつけると、こんな感じになります。(※もちろん、だるまの一方的な考えです)

1.健康、顧客満足度を少しでも上げようとする姿勢、破壊型人間でない
2.論理的思考が出来る、技術をものにするスピードが早い、技術的なことや業務的なことの勉強を継続している、責任感がある、ホウレンソウがしっかりしている、マメな性格、やたらと細かいところまで考えるしつこさ、集中力、神経質な性格
3.業務知識がある
4.理系である、数学ができる、英語ができる

1は必須です。どこの業界でも同じだと思いますが健康でないと仕事になりません。
2は1つでも欠けると、結構やばいかなと思ったものをあげました。
3はあったほうが良い的なものです。
4にはどうでもいいものをあげました。ただし、数学が出来ないと2であげた論理的な思考や技術的なところも駄目になってくる可能性が高いと思っています。

8.関連URLなど

 このページに関連したURLや書籍を紹介します。

番号

リンク先の名称

リンク先の説明

リンクした日

1

プログラマーを採用する際に重視すべき10の資質 - IT業界を生き抜く秘密10箇条 - ZDNet Japan 内容はタイトルの通りです。これがすべてであり、正しいかどうかはわかりませんが、このような意見もあるということで。
(個人的には結構正しいことを述べていると思います)
2009/5/24


 
Prev Up Next  Top
このページのトップへ

このページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。
このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方はメールをお願いします。

Microsoft 、Windows 、Visual Basic 、および Excel は米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
ここではExcel® をエクセル、Visual Basic® for Applications をVBA と表記する場合があります。
Mac 、Mac OS 、Mac OS X は米国Apple Computer,Inc.の登録商標または商標です。
Java およびすべてのJava関連の商標およびロゴは、米国およびその他の国における米国 Sun Microsystems, Inc.の商標または登録商標です。
PMBOK、PMPは米国プロジェクトマネジメント協会(PMI)の登録商標です。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。

このホームページの作成者はこれらの会社とはいっさい関係がありません。