プログラマーとは、システムやソフトウェアが仕様書通りに作動するように、プログラミング言語を使ってソースコードを書き上げる職種です。
一般的にはシステムエンジニアが仕様書を作成し、プログラマーが正確に作動するプログラムを作成します。優秀なプログラマーは、「プログラムを作るのが早い」「あとで修正しやすい美しいソースコードを書く」といわれています。
コロナ禍でテレワークが急速に進む中、IT系の職種が改めて注目されています。
本記事では、プログラマーの種類、仕事内容、年収、キャリアコースなど、プログラマーに関する全体層を解説します。
Contents
1. プログラマーとは
世の中のシステムやソフトウェアは、それぞれに合ったプログラムによって動いています。そのコンピュータを動かす指示を順序立てたプログラムを記述するのが、プログラマーです。プログラミング言語の仕様に沿って書かれたテキストのことを、ソースコード(source code)といいます。このソースコードによって、システムやソフトウェアは動作します。
通常の開発プロジェクトではシステムエンジニアがシステムの仕様書を作成し、そのコーディング規約に基づいてプログラマーがプログラミングを行います。コーディング規約とは、ソースコードを書くルールをまとめたドキュメントです。
プログラマーにはどんな種類があるのか、その仕事内容と求められるスキル、作るものを、一覧にまとめました。是非、参考にして下さい。
◆YouTube解決アドバイス/『【アニメ】プログラマーになるとどうなるのか?】』
・AIの発展で今後更に需要は高まる
・2030年には数十万人規模で人材が不足?
・作り始めた部分に限って仕様変更
・PCに向かって話す/「待ってろ!今動かしてやるからな」
・ソースコードのコメントとは、コードを分かりやすく説明し、注釈を書き込んでくれるもの
・物騒な言葉が飛び交う/「ここはkillのコマンドを使って動作中のプログラムを強制終了しておく」
2. プログラマーの仕事内容
プログラマーは、SE(システムエンジニア)が作成した仕様書に従って、プログラミング作業を行います。
プログラムとは、“人間がコンピュータにさせたいことを伝える”ために作成するものです。プログラミング言語には、“まず最初に〇〇をして、次に〇〇をする”といったコンピュータがすべき仕事の手順が書かれています。その手順は、大きく4つの段階があります。
<プログラミング作業の4つの段階>
①分析…コンピューターに何をさせたいのかを設定する
②設計…コンピューターにどんな手順でどんな仕事をさせたいのかを作成する
③実装…設定を現実にプログラムに装備する
④評価…出来上がったプログラムが「何をさせたいのか=要求」を満たしているかどうかチェックする
どんな小規模のプログラムでも、この4つの基本ポイントを踏まえて作成することがプログラミング上達の近道です。
3. プログラマーに求められるスキル
プログラマーには、どんなスキルが求められるのでしょうか。以下、紹介します。
3‐1. プログラミング能力
プログラマーに求められる一番重要なスキルは、プログラミング能力です。理想は、正確でシンプルで美しく、後から他のプログラマーが修正しやすいソースコードを書く力です。
採用の現場においては、プログラマーのプログラミング能力を評価する手法として、「過去にどんなプログラムをどのように作成してきたか」というものがあります。
そのため、実務で通用するプログラミングスキルを磨くためには、まずは実際に何かのプログラミングを作りながら学んでいくことがおススメです。プログラミング関係の書籍を買って学ぶよりも、実際のプログラミングをしながらポイントを押さえる方が、効率的にマスターできます。
3-2. ハードウェアと2進数に関する知識
プログラマーは、コンピューターのハードウェアを理解することで、その守備範囲を広げることができます。
プログラムは、コンピューターの上で動きます。そのコンピューターは、電気信号で動きます。電子回路において、電気の波に情報を乗せて回路を動かすわけですが、その際データを段階化して読み取ります。この段階の差が大きければ大きいほどミスは発生しにくく、その差が最も大きいのが2段階です。そのため、コンピュータでは2進数なのです。
JavascriptやPHPなどのスクリプト言語を使いこなすだけであれば大丈夫ですが、新しい技術を開発したり、サイバーセキュリティを強化する場合、この2進数の知識が必要になります。
3-3. 数学的知識
あらゆるレベルのプログラマーに数学的知識が必須とはいえませんが、高度なプログラミングの習得を目指す場合、数学的知識は重要になってきます。
数学の知識がプログラミングに貢献する大きなポイントは、“アルゴリズムを理解しやすくなる”ということです。特によく利用される「ソート」というアルゴリズムは、複数のデータをあるルールに従って並べ替えるもので、かかる時間やメモリ消費量を調べる時に「指数関数」や「対数」といった数学的知識が必要になってくるのです。
特にプログラミングをする上で避けては通れない「論理」や「数学的帰納法」、「指数爆発」「計算効率」「データ構造」などの数学的知識も重要です。
3-4. コミュニケーションスキル
どんな仕事でも人と連携して仕事をする以上、コミュニケーションスキルは重要です。プログラマーの場合、以下のようなコミュニケーションスキルが求められます。
・どのような成果物をつくればよいのかを正しく理解するできる
・SE(システムエンジニア)の作成した仕様書に対して、不明な点があれば明確にできる
・同僚や後輩と連携する場合、使用メソッドやパラメーターなど密に連携して進めることができる
・操作画面と連携する場合、フロントエンドエンジニアと相談しながら進められる
・コーディング作業時に気づいた異変や不具合を、早い段階でまわりに正確に伝えられる
・締め切りに間に合わない予測が立った時、直前ではなく調整がきくタイミングで報告する
・小さな会社の場合はSEも兼ねることが多く、顧客の要望把握、工数見積もりができる
【プログラマーに求められるスキル】
◇論理的思考能力…成果を出すために最も安全で効率的な方法を考える力
◇プログラミング能力…正確性が高くシンプルでバグの出ないソースコードを書く力
◇ハードウェア&ネットワークの知識…何らかの問題が生じた時に素早い対応が可能になる
◇業務を円滑にするコミュニケーション能力…関わる人間とスムーズに連携して仕事できる力
◇新しい技術を学び続ける力…新しいプログラミング言語をキャッチアップする向上心
◇バグの原因を見つける力…自分でバグの原因を突き止め、処理できる力
◇最後までやり切る力…納期前の繁忙期でも仕事を投げ出さずに最後までやり切る力
4. プログラマーの年収
プログラマーの年収は、一体どれぐらいなのでしょうか。ポイントを、以下にまとめました。
<プログラマーの年収>
・プログラマーの平均年収/430万円
→初任給は21万円前後
→例えばGo言語ができるプログラマーに提示された平均年収は600万円であり、スキルで大きく変動する
→開発の上流を担当するSEになれば、平均年収は550万円にアップする
・未経験で転職した場合の初年度平均年収は、平均302万円
・プログラマーの年収はスキルによって決まるので、学歴は関係ない
→大卒と高卒で給与平均に差はなし
・自己研鑽によるスキルアップに比例して給料が上がっていく
→複数のプログラミング言語を身に付ける
→関連業務のデザインスキルもマスターする
→AIやビックデータ関連など、人気分野に関連するプログラミング言語を身に付ける
→プライベートで成果物を作成し、転職志望企業にプレゼンする
→プログラミング経験を全体設計力に応用していく
以下は、HRog編集部が発表したプログラミング言語にフォーカスした給与ランキング・2020年版です。昨年に引き続き給与ランキング1位はR言語で、2位はGo言語でした。
順位 | プログラミング言語名 | 求人件数 | 求人年俸下限平均額 |
1位 | R言語 | 1,056件 | 475万円~ |
2位 | GO言語 | 932件 | 463万円~ |
3位 | Type Script | 710件 | 461万円~ |
4位 | Scala | 562件 | 460万円~ |
5位 | Kotlin | 918件 | 452万円~ |
6位 | Python | 4,501件 | 435万円~ |
7位 | Swift | 1,660件 | 425万円~ |
8位 | JavaScript | 7,472件 | 411万円~ |
9位 | Ruby | 3,340件 | 410万円~ |
10位 | Objective-C | 1,154件 | 396万円~ |
11位 | Perl | 1,101件 | 395万円~ |
12位 | Java | 11,526件 | 393万円~ |
13位 | C++ | 5,931件 | 390万円~ |
14位 | C言語 | 5,264件 | 388万円~ |
15位 | C# | 6,067件 | 385万円~ |
◆YouTube解決アドバイス/『【Web/IT業界あるある】締め切り、プログラミング中、エンジニア面接』
・締め切り日あるある「このタスク今週中に」
・プログラミングあるある「思考の海」
・フロントエンジニア面接「2013年」
・フロントエンジニア面接「2019年」
・Rubyエンジニアへの採用面接
5. プログラマーにおススメ資格
プログラマーという仕事をするのに資格や学歴や関係ありませんが、転職やプレゼンの時に、自身のプログラミングスキルを客観的に証明できます。またプログラミング知識を体系的に習得できるというメリットもあります。ここでは、プログラマーにおススメの資格を紹介します。
5‐1. 基本情報技術者試験
ITエンジニアの基礎的な教養が網羅されているのが、基本情報技術者試験です。
プログラミングだけでなく、Web、メディア表現、コンピューター、OS、データベース、ネットワーク、セキュリティ、開発手法、プロジェクトマネジメント、経営戦略、数学、アルゴリズムとデータ構造など、各分野の基礎事項がおさえられています。
5‐2. ITパスポート
ITパスポートとは、ITの基本的な知識が身につく国家資格です。以下の分野の知識が取得できるメリットがあります。
・情報システム、ネットワーク、データベースなどのITの基礎知識
・「SWOT分析」「BSC」など経営全般に関する知識や、「財務諸表」「損益分岐点分析」などの会計財務知識
・インターネットや電子メールを利用する際の情報漏洩やウィルス感染などのリスクを把握
・知的財産権や著作権侵害・商標権侵害などの法令違反、企業コンプライアンスに関する知識
5‐3. PHP技術者認定初級試験
PHP技術者認定試験とは、HTMLに埋め込むことができる汎用性の高いコードであるPHPの技術スキルを証明できる資格です。ポイントを、以下に記します。
・「PHP7技術者認定初級試験」「PHP5技術者認定準上級試験」「PHP5技術者認定上級・準上級試験」「PHP5技術者認定ウィザード」の4つの段階がある
・中身が実務よりの試験内容のため、PHPの実践的なスキルを習得できる
・資格を持っていない他のエンジニアとの差別化ができる
→上級・準上級レベルだと合格率は10%以下の難関資格であり、技術信頼性を証明できる
・PHPは世界的に幅広く使用されており、求人数もJavaに次いで2位と豊富で、年収700万円以上の求人も5.9%ある
(※PHP技術者認定機構調べ)
5‐4. Ruby技術者認定試験
Ruby技術者認定試験とは、Rubyをベースにしたシステムの設計や開発、運用するエンジニアを対象にした認定試験です。ポイントを、以下に記します。
・合格者は、「Ruby Association Certified Ruby Programmer Silver/Gold version 2.1」として認定される
・Silverとは?
→「文法知識」「クラス」「オブジェクト」「標準ライブラリ」の知識について基本的技術の所有を認定
・Goldとは?
→Silverを更に掘り下げた知識+プログラム設計技術を持つことを認定
・出題範囲は以下
→文法/「コメント」「リテラル(数値、真偽値、文字列、文字、配列、ハッシュ他)」「変数/定数とスコープ」「演算子」「条件分岐」「ループ」「例外処理」「メソッド呼び出し」「ブロック」「メソッド定義」「クラス定義」「モジュール定義」「多言語対応」
→組み込みライブラリ/「使用頻度の高いクラス」「モジュール(Object、数値クラス、String、Array、Hash、Kernel、Enumerable、Comparable等」
→オブジェクト指向/「ポリモルフィズム」「継承」「mix-in」
5‐5. C言語プログラミング能力認定試験
C言語プログラミング能力認定試験とは、C言語のプロフェッショナルとしてどのようなスキルを持っているのか証明できる資格です。ポイントを、以下に記します。
・3級、2級、1級(最高難易度)の3段階がある
・運営は様々な資格を認定している団体のサーティファイ
・3級出題範囲(テストはマークシート方式)
→「C言語の歴史」「定数」「演算子」「型指定子」「変数」「基本制御文」「プリプロセッサ機能」「ライブラリ関数」他
・2級の出題範囲(マークシート方式)は、3級を更に深堀りしたもの/定数は「浮動小数点定数」演算子は「ポインタ/アドレス演算子」
・1級はパソコンを使用した実技試験
→公開されている1,700行程度のプログラムに対する「仕様変更」「仕様追加」
→コーディングからコンパイル・デバッグ、変更仕様書の完成まで
・勉強方法として、参考書や問題集、学習サイトなどがある
6. プログラマーのキャリア形成
プログラマーには、キャリアごとに担当する業務と求められるスキルが異なります。ポイントを、以下に記します。
キャリア | 職種名 | 業務内容 |
① | 新人(メンバー) | 検証テスト、スキルアップ |
② | プログラマー | プログラミング、単体テスト |
③ | 上級プログラマー | 詳細設計、プログラミング、連結テスト |
④ | SE | 予算管理、概要設計、進捗管理 |
⑤ | プロジェクトマネージャー | 予算管理、メンバーマネジメント、品質管理 |
⑥ | 技術スペシャリスト | 技術マネジメント、新技術導入他 |
6‐1. 新人(メンバー)
未経験からスタートしたエンジニアが担当することが多いのが、テスト業務と運用保守です。マニュアルに沿った実務をこなしながら、個人でスキルアップするチャンスです。
【テスト業務】
・テストを実施する目的
・テスト実施期間
・人員配置などのテストの設計業務
・テストの実施結果の文書作成
【運用業務】
・システムが最適なパフォーマンスを維持するための処理を行う
【保守業務】
・故障やトラブルが発生した時に、その問題解決を行う
6‐2. プログラマー(PG)
SEが作成したシステム仕様書に沿って、プログラムを書いてシステムを構築していきます。他のプログラマーでも修正しやすく、かつ運用保守がしやすいシンプルで正確なソースコードを書くことが求められます。
6‐3. 上級プログラマー
【詳細設計】
・SEが作成したシステム仕様書をもとに、プログラム単位の設計書を作成する
【プログラミング】
・精度の高いプログラミング作業を行う
【結合テスト】
・テスト終了した機能同士を結合し、同時稼働させ、動作確認及びインターフェースの視覚確認を行う
6‐4. SE(チームリーダー)
【システム仕様書作成】
・クライアントのニーズをヒアリングする
・目的を達成するために、どのようなシステムをどうやって作成するのかを考え、文書に落とし込む
【マネジメント】
・納期に遅れないように、タイムマネジメントを行う
・開発チームの士気を維持するチームマネジメントを行う
6‐5. PM(プロジェクトマネージャー)
【プロジェクトの全体管理】
・プロジェクトが無事完了するように、クライアントとの交渉、予算や人員(チーム編成)、品質を管理・監督する
【プロジェクト完了後の報告書作成】
・プロジェクト自体の評価を行う
・今後の課題や改善点を盛り込む
6‐6. 技術スペシャリスト
【設計・開発業務】
・非機能要件を実現できるように設計する
【チームマネジメント】
・エンジニアチームのリーダーとして、開発業務を円滑に進める
【新技術への取り組み】
・日々進化するIT技術にアンテナを張り、クライアントの課題解決に適応できるかどうかを考察しておく
7. プログラマーに関するQ&A
プログラマーに関する代表的なQ&Aを、以下紹介します。
◇質問
「未経験OK!」「経験不問」「プログラマーになろう!」といった求人広告をよく見かけます。私は高卒で就職したのですが、現在プログラマーになりたいと考えています。
「まだ若いなら専門学校に通って、プログラミングの基礎的なスキルを身に付けてから求職活動した方がいい」というアドバイスも頂きました。未経験者のプログラマーへの転職アドバイスをお願いします。
◇答え
求人広告の「未経験OK!」の意味は、「実務経験がなくても、実務が可能なレベルであれば採用します」です。その理由は、世の中にギリギリ実務可能なレベルのエンジニアが多数いるからです。
「知識なし、技術なし」の状態で就職をする場合、以下の2パターンがあります。
①経営者がエンジニア出身で、自社でゼロベースからエンジニアを育てる教育プログラムを用意している。またそういった人材のマネタイズの現場(派遣or自社開発他)も持っており、“教育研修→現場での実践→人間的スキル的成長”のメカニズムがある。
②経営者が利益優先で、“未経験者=単なる人的リソース”とみなしている。まずはテスターやサーバー監視など、忍耐力さえあれば誰でもできる仕事をさせられる。そこで我慢し自己研鑽でプログラミングスキルを向上させ上手にアピールする一部の人材だけ、プログラミング現場に配置転換してもらえる。
結論としては、まずは独学で求人ニーズの高いプログラミング言語(Java等)を習得し、広範囲の業務とSEやPMと連動できる小さなシステム会社に入って3~5年ほど実績を積むことです。
開発実績は、本人のプログラミングスキルだけでなく、対人コミュニケーション能力とこの仕事に重要なストレス耐性能力の証明になります。その実績レベルに比例して、準大手、大手とステージを上げていくことがプログラマーのキャリアアップのパターンです。高卒でも出来る人材は、給与水準の高い企業に転職した仲間からすぐお誘いが来ます。
◇質問
未経験ですが、将来プログラマーに転職したいと考えています。
プログラマーの仕事には、どんなストレスがありますか?
あと一番苦労したエピソード等ありましたら、教えて下さい。
◇答え
以下、代表的なものを記します。
◇「動作確認に必要なモジュールが全て消えた…」
あるシステムのテスト環境の整備を後輩に任せていた時、テスト環境で動作確認しようとすると「モジュールが見つかりません」のメッセージが…。プロジェクト内は大騒ぎになり、テスト環境の再構築と原因究明で全員が奔走するはめに。
その原因は、新人プログラマーの一言で解決しました。「要らないと思って、消しちゃいました。エラーが出るモジュールを消したつもりだったんですが、全部消えてしまってました?」
プログラマーにとって、一番恐ろしい話は「ファイル誤削除」です。集中力が切れた時、ミスは突然やってきます。その後には、とてつもない長時間のリカバリー業務が待っています。その日は全員徹夜、今回の事態が納品前に起こっていたらと思うと、ゾッとします。
8. まとめ
いかがだったでしょうか。
プログラマーはシステム構築における一番シェアを大きいリソースであり、またITエンジニアとしてキャリアをスタートする一丁目一番地でもあります。
新しいプログラミング言語の登場、AIの進化などITの重要性がますます高まる中、その存在理由と発展形態を把握しておくことは、非常に重要だと思われます。