G学院を運営する株式会社GimoGimoのオウンドメディア「G-MEDIA」

プログラミング

2019.08.04 Sun.
プログラマーっていっても、いろいろいるんだよなぁ

プログラマーっていっても、いろいろいるんだよなぁ

ゲーム好きの方で、将来はプログラマーを目指している人はいませんか?

 

ゲームをヒットさせて、大金を手にしたという話も聞きますので、プログラマーを目指す方も多くいると思います。

ただ実際のプログラマーには様々な種類があって、それぞれ求められているスキルも変わります。プログラマーのジャンルには、どういったものがあるのか、その種類やスキルなどを見てみましょう。

 

プログラマーには様々な種類がある?

「プログラマー」と一口に言っても、実際には様々な職種があって、それぞれの業種によって求められるスキルなどは変わります。

本気でプログラマーを目指しているのであれば、どのような分野で活躍したいのか、興味のある分野についてしっかり知っておくと、やりたい方向が見えてくるのではないかと思います。

実際に、プログラマーにはどのような種類があるのでしょうか?公式に認定されたものではありませんが、私としては大雑把に以下のように考えています。

1. ゲーム系

みなさん、いちばん身近に感じるかもしれません。ゲームを作成します

2. IT系 

主に、サーバーとパソコンのブラウザ間でデータをやりとりする各種サービスを作成します。仕事形態としては大別して、大きな資金が投入され、大人数で階層的(親会社と元請け、下請け、孫請・・・)な開発を行うSIer系と、自社サービスを自社の開発するWeb系に分けられます。

3. パッケージアプリケーション系

PCで使用するアプリケーションなどをパッケージ(DVDなど)で販売します

4. 組み込み、制御系

電子レンジや炊飯器などの家電製品のほか、テレビ、スマートフォンなどの機械を制御するプログラムなど

5. 社内システム系

自社システムの構築や運用など、会社内で使用する

6. 設備制御系

交通機関、工場、研究室といった、設備に関する制御など。

とは言うものの、上記の分類も人によって変わったり、ゲームでもブラウザーゲームはIT系とスキルで作られていたりと、仕事内容が重複したりしていますが、ゲームを作りたいと思っていたのに、気づいたらカーナビのプログラムをやっているなどというのは、ちょっと不幸ですので、希望を決めるための理解を深めましょう。

 

1.ゲーム系のプログラマー

ゲーム系のプログラマーは、デザイナーの指定した内容を、指定した機器で実現するためのプログラマーです。
おそらく他のジャンルとの最も大きな違いは、表面上は同じに見える処理を極限まですばやく処理させる必要がある、
ということです。これは特に画像処理に必要なのですが、なぜかというと、ゲームは画面に表示されている要素が非常に多く、また高速で移動していることも多いためです。

 

業務系の処理では「現在処理中です」という表示をして、数秒の間、画面になんの変化なくてもあまり問題ありませんが、
ゲームプレイ中に、これをやったら間違いなくお客さんに見放されてしまいます。
したがって同じ処理をさせるときも、できるだけプログラムは簡潔に、かつ機器内部の実行速度も少なくなるようにプログラムしなくてはなりません。

 

このため、ゲーム内部では非常に多くのテクニックを使って、処理速度をあげています。

 

なお、プログラム言語では、処理が一番速いのは機械語ですが、これは人間は、そのままでは理解できないので、
機械語とほぼ一対一対応で記述するアセンブラ言語ということになります。

 

しかし、現在の複雑なゲームをアセンブラ言語で書くのは全く現実的ではありません。
そこで人間が理解しやすい高級言語(高級は価値が高いということでなく人間に近いということです)を使用しますが、
高級言語でもっとも速いのは、「C」という言語だと言われています。C言語はかなり昔から使われている言語なのですが、当時の多くのプログラム言語がすでに時代遅れになってしまっている現在でも、現役バリバリで使われています。

 

C言語から派生した言語はいくつもあり、「C++」「C#」「Objective-C」などが有名です。

 

これら派生した言語は、C言語にはなかった機能(classの概念など)を追加したもので、プログラムがとても書きやすくなったりするのですが、速度的には若干ですが遅くなるので、少しでも処理速度がほしいときは、あえてC言語で書くということもあります。

 

以上結論として、ゲーム系のプログラマーを目指すには、C言語の系列、「C系」の言語を勉強すると良いでしょう。

 

2.IT系のプログラマー

ITというのは、「Information Technology」で「情報技術」という意味です。
このため、情報をコンピューター処理する分野は、すべてIT系と言えるのですが、現状、IT系プログラマーといえば、サーバーとブラウザーを利用するWabサービス(Web系、ネット系)を提供する会社でプログラミングやシステム開発を行うエンジニア(かならずしも社員ではない)という状況です。

 

なお、先にも書きましたが、IT系には、大人数で階層的な開発を行うSIer系と、自社サービスを自社の開発するWeb系に大別されます。SIer系は銀行のオンライ、Web系はネットショッピングをイメージするとわかりやすいと思います。

 

職種については、だいたい以下のように分類されます。

 

1)インフラエンジニア

ネットワーク全体の構築・運用・監視などの業務を行を行います。

サービスを実現するプログラミングよりは、よりハードウェアに近いミドルウェアを扱ったりして、全体的に円滑なシステム運営を実現するための仕事が多いので、言語よりネットワークシステム全体の理解が重要です。

 

2)バックエンドエンジニア

ネットワークやサーバーなどユーザーには直接見えない部分の開発を行います。
多種多彩な処理を行うサーバーでは、使われている技術も非常に多く、使用目的よって使用される技術も変わります。
言語としては、「PHP」「Ruby」「Python」が良く使われますが、より高度な開発を行う場合は、「Go(Golang)」「Node.js」「JAVA」を使用することもあります。使われる技術の更新頻度がもっとも高いと言えます。

言語についてもそれぞれ特徴があって、各言語については以下を参照してください。

 

PHP

学習コストが低く日本語情報が多い、使える人も非常に多い。現状ではWordPressに使われているのが強み。初学者向け。

 

Ruby

「Ruby on Rails」というフレームワーク(主要な部分があらかじめ準備されているもの)がとても便利。

ライブラリ(よく使われるプログラムの集まり)も充実している。日本人が開発してので日本語情報も多い。

実現したいサービスで使われるプログラムの部品を、すでに誰かが作ってくれている場合が多く、短期間、低コストでの実現が可能といえる。

 

Python

サーバーサイドの言語としても使える。

また、話題を集めているAI分野の「機械学習」の業界標準としても使われているので共用して使える。現在の普及はまだまだ。AI分野に進みたい人向けです。

 

Go(Golang)

上記3つの言語と異なり、コンパイルして動作させるので処理速度が非常に速く、メモリーの使用量も少なく済む。

また、並行処理や並列処理がシステムレベルでなく、言語レベルで備わっているので、プログラマーが意図的に並行処理をさせることで、さらなる処理速度の向上を行うことができます。

 

Node.js

サーバーサイドでの高速で高度な処理を行う言語として、現在でも非常に活発に開発が行われていますが、Go(Golang)の出現後、やや押され気味です。

ただ、JavaScriptで記述できるという大きなメリットがあるので、一定の需要が間違いなく存在します。

 

JAVA

長い歴史を持ち、広く使われてきた言語。

かつては、コンパイルして動作させるサーバーサイドの言語としては唯一の存在で、動作速度を重視する場合には、ほぼ一択の状態でしたが、内部的には全く同じ動作をする「Scala」や「Kotlin」という言語が開発されたり、Go(Golang)のような新しい言語が登場したため、完全な新規案件でJAVAを使う場面はほとんどなくなっていると思われます。

 

3)フロントエンドエンジニア

ユーザーが直接的に触れる部分、パソコン等ブラウザー側で実行されるプログラムの開発を行います。

言語としては、HTMLやCSS、JavaScriptが主に使われています。JavaScriptは、ほぼすべてのブラウザで動く唯一の言語で、ブラウザ上だけでなく、デスクトップアプリやスマホアプリの開発にも使われており、さらにサーバーサイド言語のNode.jsにも使えるので非常に応用分野が広いのですが、逆にどの分野の専門家になるかを見失ってしまう可能性もあります。求人も非常に多い言語です。

 

4)iOS/Androidエンジニア

iOSまたはAndroidのアプリを開発するエンジニア。

ゲーム開発と同じくらいなじみ深い存在となっています。現在では、iOSとAndroid両方で共用できるツールもあり、それを使っての開発もできますが、実行速度や細かい機能が使えないなどの弱点もあるので、いまのところ主流とは言えません。

使用言語として、iOSでは、以前はObjective-Cという、ちょっと年代ものの(C++登場以前に存在した)C系言語を使っていましたが、あまりに他のC系言語と異なっているのが原因でしょうか、現在ではSwiftという言語が採用されることが多くなっています。

また、Androidでは、やはり以前は歴史のあるJAVAが使われていましたが、現在ではJavaよりも簡潔に書ける「Kotlin」が公式の開発言語になっています。

 

3.パッケージアプリケーション系プログラマー

DVDなどにプログラムを記録して、パッケージとして販売するパソコンソフトを開発するプログラマーです。

ただ、最近では、パッケージとして販売するといってもダウンロード販売が主流になってきていますので、パッケージアプリケーション系というよりは、デスクトップアプリ系と言った方が良いかもしれません。

デスクトップアプリは、一般的に、WindowsかMAC用のソフトということになりますので、開発にはそれぞれの提供するツールキットを使用することが大半です。

Windowsのツールキットのなかには、Visual C++やVisual Basicなど、画面上のパーツと言語とが融合された開発環境が提供され、開発が容易にできるようになっています。

 

4. 組み込み、制御系プログラマー

一般的にあまり意識されていませんが、液晶テレビやコードレス電話機などでもプログラムが動いており、製品として動作させ、発売するにはプログラミングが必要です。

プログラムを動かすCPUやメモリーは部品としては非常に高価なものなので、製品には最小限のものしか使えません。

このため使用する言語は、できるだけ少ない量で、できるだけいろいろな動作をしなくてはなりません。

これはゲーム開発の考え方に似ています。したがって使用する言語もC言語が多く、C言語が生き残っている大きな要因になっています。

 

5. 社内システム系プログラマー

大きな会社など使われている社内のみで使われるシステムを開発、運用するプログラマーも存在します。

会社の一部門であることが多いため、普段は普通のサラリーマンと同じような存在ですが、システムと全く違う業態の会社では、丸ごと外注することもあります。

システム障害などが発生すれば、極端な場合、全社内の仕事が止まる可能性もあるので責任は重大です。

システムは動作速度や先進性よりも安定性がなにより重要なので、実績のある言語であるJAVAが使われることが多いようですが、デスクトップアプリ系と同様のMicrosoftなど実績のある会社のものを組み合わせ自社独特な部分だけを新規開発することも多いようです。

 

6. 設備制御系プログラマー

組み込み系と似ていますが、動作できる状態を作るのが組み込み系。

実際の動作を制御するプログラムを書くのが制御系のプログラマーです。

機器によっていろいろな言語が使われますが、C言語、C++、Java、アセンブリ言語が多く使われ、機器独自の言語の場合もあります。

 

以上おおまかに、プログラマーと開発言語についてお話しましたが、これ以外にもプログラミングに関するお仕事は多く存在していて、それぞれ必要なスキルも変わってきます。プログラマーを目指す人は、自分が希望する仕事内容をしっかり把握して、将来のキャリアプランを考えてみてください。

この記事を友だちにシェアする

  • line
  • twitter
  • facebook
一覧へ戻る

次の記事へ