プログラマーの適性

このページは、プログラマーの適性 (プログラマーに向いていそうな人) について考える予定のページです。

目次

注意

  • このページを作った人がシステム開発や指導に関わったうえで感じたことをまとめています。
  • 特に職業プログラマーを想定しています。(趣味であれば誰でも可能性はあるため)
  • 後に出てくる内容のうち、顧客に関する内容はプログラム作成・テスト業務だけするプログラマーの場合は当てはまらないかもしれません。
  • 内容は増えたり減ったりするかもしれません。

プログラマーに向いていそうな人

下記のような人はもしかしたらプログラマーに向いているかもしれません。

  • IT 技術やガジェットが好きで、ずっと PC などを使っていられる人
    • IT 技術に対する適性
  • コンピューターゲーム (コンシューマーゲーム、スマホゲーム等) が得意な人
    • 規則性に対する適性 (システム (ゲームシステム) に対する理解力が高い)
    • IT 技術に対する適性 (コンピューターゲームも広義の IT とした場合)
  • 数学が得意な人
    • 規則性に対に対する適性
  • ペンシルパズル (特にナンバープレース (数独) や、お絵かきロジック (ピクロス) 等) が得意な人
    • 推理・仮説思考に対する適性
    • 規則性に対する適性
  • 自閉傾向 (自閉スペクトラムの傾向) がある人
    • 規則性に対に対する適性
    • 説明能力等が難しい場合があるので、職業としては向いていない場合がある

プログラマーの適性につながる要素

下記のような能力や思考を持っている人はプログラマーに向いているかもしれません。
(一部の内容はプログラマーというより、もっと土台の「社会人に必要な適性」かもしれません)

IT 技術やプログラムに対する適性・執着心 (こだわり、愛着)

意味

  • コンピューター、スマートフォン、サーバー、プログラミング言語、技術に対して、使うことや知識への適性の高さや欲
    • 仕事以外でも自分の欲のためにプログラミングできたり、技術資料、技術系ニュースを追いかけたりできる

必要な理由

  • 仕事のモチベーションが高い状態で維持しやすいため
  • IT 技術全般に慣れていたほうが仕事が早いため
  • 新しい仕事を任されたときにそこで使う技術を既に知っている場合があり、アドバンテージになるため
    (顧客やプロジェクトメンバーとの話がスムーズになる、すぐに仕事に取りかかれる等)

この能力を持っていない場合

  • 単純に仕事が遅くなる (PC の操作自体がおぼつかない、タイピングが遅いなど)

規則性に対する適性・執着心 (こだわり、愛着)

意味

  • 統一化されたシステム (IT 以外のシステム、IT システム両方) や論理体系に対する適性の高さや欲

必要な理由

  • プログラミングは規則によって成り立っているため、規則に対する執着があるとプログラミング習得に繋がりやすい (理解が早い。興味を持続しやすい)

この能力を持っていない場合

  • プログラミングが習得できない、整ったプログラムを早く作ることができない

推理・仮説思考

意味

  • 推理: 起こった問題・起こりそうな問題に対して、どういう原因でその問題が起きたのか (起きるのか) を周囲の状況や前提条件をもとに論理的に推測し、絞り込むこと
  • 仮説: 推理によって絞り込んだ原因の候補や、原因を解決するための解決方法の候補

必要な理由

  • システム開発はその時点での原因不明な問題が起きやすく、「何故その問題が起こったのか?」などの原因特定をする仕事が必要になりやすいため
  • 原因特定を行った後、妥当な (その状況においてベターな) 解決方法を見つけ出して解決していく仕事が必要になりやすいため

この能力を持っていない場合

  • 自分の頭で考えて主体的に仕事を進めることができない (他人にレールを敷いてもらう仕事 = 単純作業に近い作業しかこなせない)

実験的思考

意味

  • 失敗をいとわず、むしろ意図的に失敗を起こすチャレンジ (実験) をして、新しい発見や知見を得ようとする考え方

必要な理由

  • 新しい概念 (プロジェクト、言語、ライブラリ、フレームワーク、サービス、機材) を使用・理解する仕事が必要になりやすいため
  • 想定通りにプログラムが動くまでソースコードを変更 (書く → 実行 → 消す、など。トライアル・アンド・エラー) していく必要があるため

この能力を持っていない場合

  • 新しい概念への理解や使用ができなかったり、遅くなる。人に教えてもらわないと仕事が進められない
  • プログラムを完成させるまでの時間が遅くなる

抽象化・共通化・標準化

意味

  • 抽象化: いくつかの事柄に共通する重要な部分を適切に抽出して扱うこと
  • 共通化: いくつかの事柄や作業を整理して、同じように扱えるようにまとめること
  • 標準化: いくつかの事柄や作業を整理して、ルール (全社ルール、チームルール) として決めること

※ 抽象化 (いくつかの作業から重要な点を抜き出す) → 共通化 (1 つにまとめる) → 標準化 (作業のルールを決める) のようなイメージ

必要な理由

  • 少ない時間で仕事の成果を上げていくために、プログラムや仕事の重要な部分・不要な部分を切り分ける (不要な仕事はしない) 必要があるため
  • 誰が作業しても効率的で結果が同じような品質になるようにする (属人化を防ぐ) 仕事が必要になりやすいため (作業の手順資料などをまとめ、標準化する等)
  • 顧客のシステム導入の動機が「仕事の自動化」であることが多く、「自動化」の前には必ず顧客の仕事の洗い出し、標準化・共通化が必要になるため
  • 過去の仕事から、新しい仕事に活用できる知識やプログラムを抽出して流用することで効率化を図ることがよくあるため

この能力を持っていない場合

  • 新しい仕事が増えても効率化することができない (かかる時間を抑えながら同じ品質を出す工夫ができない)

説明能力 (アカウンタビリティ)

意味

  • 自分がしている作業の進捗、作成した設計書やソースコードの意味などを他人に合理的に説明する能力

必要な理由

  • 特に職業プログラマーの場合、顧客への説明 (プロジェクト進捗状況、設計、システムの操作方法、不具合の説明)、プロジェクトメンバーへの説明 (設計、実装の説明) が必要になりやすいため

この能力を持っていない場合

  • 関係者と連携して仕事を進めることが難しくなる。無駄な仕事が増える場合がある (顧客への説明を怠ったせいで進捗報告の頻度や要求が厳しくなるなど)

根気

意味

  • 必要な仕事を諦めずに最後までやり遂げる気力
    • 不必要な仕事に対して根気は使わない (プログラマー三大美徳「怠惰」)

必要な理由

  • 難しいプログラム完成や理解できない知識の理解、顧客との折衝を最後までやり切ることが必要になりやすいため

この能力を持っていない場合

  • 難しい仕事 (技術的に難しい、納期が厳しいなど環境が悪くて難しい) だと、メンタル不調になりやすい