システムエンジニアのQちゃんです。
今回はプログラマーのお仕事についてお話しします。
プログラマーについて皆さんはどんなイメージをお持ちですか?
デカくて高性能っぽいパソコンのまわりにはコーラとお菓子が所狭しと散らばり、ポテチとドーナツを交互に食べながらキーボードを油だらけにして恐ろしいスピードでタイピングしている太った人?
そう、映画ジュラシックパークで園内のシステムをコントロールしていたプログラマーの人みたいな…
ホントにそんな感じなの? はたしてその実態は? そしてそのお仕事内容とは?

プログラマーとは

NotePC

お菓子食べながらって人はいません(一部例外アリ)
意外とスリムな人が多く、健康に気を使っている人が多いようにです(個人の感想です)
さて、その仕事内容ですが、コードと呼ばれるコンピューター言語を打ち込み、コンピューターに思った通りの仕事をさせます。対象はゲーム、アプリ、ロボット制御、人工知能(AI)、家電、業務システム等々、非常に多岐にわたります。
その昔、プログラマーはコーディング用紙にコードを書いてキーパンチャーに打ち込みを依頼していました。年配のIT技術者はタイピングが苦手な人が多いです。(いつの時代の話)
テレビで見るように黒い画面にひたすらコードを打ち込んでいくということはありません。
統合開発環境(IDE)やフレームワークを使ってプログラミングするので、最初の何文字か打ち込むと候補が出てくるし、ビルドやデバッグもできる便利なツールで開発しています。
現在では明確な形で「プログラマー」という業種は存在せず、設計からコーディング、テストまでオールマイティに活躍しています。

プログラマーの種類

Webサービスから自動車まで、様々なタイプのプログラムがあり、それぞれに専門性を持ったプログラマーがいます。
また、プログラミング言語も非常に多く存在し、対象に合った言語を利用します。
例えばホームページを作る際は HTML、JavaScript、PHPだったり、C、C++、C#、Ruby、COBOL、PL/I、FORTRAN等々いっぱいあります。
プログラマーは複数の言語を使いこなせる人がほとんどで、携わっている業務によって使える言語に偏りがありますね。

プログラム言語には得意不得意があります。
例えば銀行の基幹システムのようなものだとCOBOLを主に使います。
C言語やJavaを利用しても開発できなくはないのですが、数値計算に特に強いCOBOLで構築することが一番効率的だからです。
このようにWebサービス、スマホアプリ、AI、業務システム、組み込み、制御と、それぞれの対象ごとに得意な言語があり、それぞれに携わるプログラマーがいます。
プログラマーの種類と銘打ったので無理やり種類分けすると、携わっている業務によってWebプログラマー、組み込み系プログラマー、スマホアプリプログラマーだったりとなります。
でも、最近ではエンジニアって呼ぶ方が多いので、プログラマーは死語になりつつありますね。

プログラマーに必要なスキル

プログラミング

利用する言語のプログラミングスキルは当然必要。
そのスキルにしても初歩的だったり高度だったりのレベルが存在します。
財務会計のWebサービスを例に挙げてレベルを説明すると、動きや計算結果は設計通りに構築するから全く同じになります。
しかしスキルレベルが高いと表には見えないコードの組み方に違いが表れ、計算やスピードの違いが出たりしますね。
コードの書き方によってメンテナンス性が大きく異なります。
サービスの変更があった場合、初心者が書いたコードを他の人が読むと、あまりのひどさにメンテナンスが嫌になることもありますし、それがダイレクトに作業代金にも反映されて、お客様に余計な出費を強いることになります。
言語特性の理解を深め、コンピューターへの負荷を出来るだけ抑える必要があります。
同じ結果を得るにしても利用するアルゴリズムにも注意が必要で、最適解とされるアルゴリズムを理解しなければなりません。
プログラミングは誰でもできると言い切れますが、奥義を窮めるにはたゆまぬ努力が必要なのは職業の種類に寄らず同じなんですね。

アルゴリズム(英: algorithm[1])とは、「計算可能」なことを計算する、形式的な(formalな)手続きのこと、あるいはそれを形式的に表現したもの。コンピュータにアルゴリズムをソフトウェア的に実装するものがコンピュータプログラムである。人間より速く大量に計算ができるのがコンピュータの強みであるが、その計算が正しく効率的であるためには、正しく効率的なアルゴリズムに基づいたものでなければならない。

引用元:フリー百科事典『ウィキペディア(Wikipedia)』

デバッグ

作成したプログラムに潜むバグ(欠陥)を見つけ出すことをデバッグと言います。
異なる変数を定義してしまうような明らかなバグもあれば、どう見ても正しく見えるが数万回に1回だけエラーを吐くようなレアなバグもあります。
バグつぶしに必要なのは言語に関する知識だけでなく、ハードも含めたプログラムの実行環境、業務に対する深い知識も必要になります。
これらの知識を総動員して解決しなければなりません。

知識だけでは限界がある

ただ黙々とコーディングしてるだけではスーパースペシャルなプログラマーにはなれません。
システムの設計者はもちろんのこと、時にはエンドユーザーとも話をする必要があります。
構築するプログラムに関することだけでなく、業務のこと、使う人のこと、果ては世間話までと、話せば話すほど円滑に仕事が進みます。
話をしている間に思わぬ設計ミスや、使う人に沿った変更にまで気がつくことがあります。
どんな仕事でも大切だと言われているコミュニケーション能力はプログラマーにも必要なのです。

まとめ

プログラマーだからってタイピングがめちゃくちゃ速いわけではなく、PC(OS)のことに精通しているわけでもありません。
ましてや使ったこともないアプリケーションの操作方法なんか知るわけもないのです。
それでもお客様は「コンピューターに詳しい人」として聞いてきたりするので、仕事以外のことも広く知識として持っていたいものです。
現在はプログラマー、システムエンジニア、システムアナリスト等の職務範囲が曖昧になってきておりますが、自分がどのようなエンジニアになりたいのかを見据えながら着実にスキルアップしていきましょう。
とりあえず私はポテチを食べながらキーボード触るのはやめますね(おまえか~いっ!)

こちらで「プログラミングでコメントを入れるのは面倒だけど意外と大切」を紹介しています。