2018年3月10日土曜日

プログラミングで何ができるのか?

今回はプログラミングの解説ではなく、プログラミングをこれから始めたい人向けの記事です。

プログラムを勉強したいという人の疑問で、勉強してみたいけどプログラミングを勉強したら何が作れるようになるのか?ということがわからないという人が多いようです。
今回は私なりの回答を考えてみました。

ここではプログラムを作ること=システムを作ることととして説明します。
厳密に言うと違うかと思いますが、プログラムの入門レベルやそれ以前の人向けですのでご容赦ください。

0.目次

  1. なんでも作れる
  2. ゲームは作れるのか?
  3. アプリ作成は作業の効率化!
  4. 現実世界のシミュレーション
  5. 言語よりアルゴリズムが大切

1.何が作れるようになるのか?

こちらの記事でも記載しましたが、極論を言えばプログラミングが出来れば、何でも作れます。

プログラムは何でも作れる

ただし、この記事を読んでいる人はプログラミングの入門レベルの方ではないかと思います。
ですので、もうちょっと具体的な作れるものについて解説します。

プログラムを始めたいという人は

  • ゲームを作ってみたい
  • 就職活動用にスキルを身につけたい
  • 学校や仕事で勉強することになった

という人が多いのではないでしょうか?
ここでは特に皆さんがイメージするゲームやアプリの作成について説明します。

2.ゲームは作れるのか?

ゲームを作りたいと言うのは若い人に多いんじゃないでしょうか?
私もこの動機でプログラムの道に入っていきました。
おそらく、ゲームを作りたい人は「こんなゲームを作りたい」というイメージがフンワリとあるのではないかと思います。

壮大なネットワークゲームだったり、格好良い3Dキャラが動きまわるアクションゲームだったり・・・

そんなゲームをすべて一人で作るとなると、相応の知識やスキルが必要です。
Webゲームを作るならJAVAやaspそしてサーバの構築
スマホで動くアプリならXaml(かな?)
それにイラストを書いたり。。。絵心がないと絶望的です orz

ですので狭義の意味でのプログラミングが出来ても、オシャレなゲームを作るのはとても難しいです。

個人的な観点では難易度別に以下のようになると思います。

【簡単なもの】
ジャンケンゲーム
マインスイーパー

難易度は低めです。
グラフィックまわりのプログラムさえ考えられれば、何とでもなると思います。

【頑張れば作れるもの】
シューティングゲーム
アクションゲーム
パズルゲーム

のような一人で遊べるゲームはプログラミングのなかで考える内容が少ないので、比較的初心者でも作成できるのではないかと思います。


【さらに知識が必要なもの】
五目並べ
マージャン
トランプなどのカードゲーム

先に紹介したゲームに比べると、対戦相手(CPU)が必要なゲームはCPUの思考を考えないといけないので難易度が高くなります。
じゃんけんゲームの難易度が低いのはCPUがバカでもOKだからです。

【一人で作ろうとするのは無謀なもの】
オシャレなグラフィックのもの
3Dゲーム
ネットワークゲーム

などなど、ユーザが増えれば何度があがるし、ネットワークを使うならサーバを作る必要が出てきたり・・・
格好良いイラストは絵心が必要だし、3DCGとなると、考えたくもないです。

ゲームのプログラムというのは複数の知識を集約したものです。
より広く、よりいろんなアルゴリズムを理解していて、必要に応じて正しく使い分けできなければ、いいものを作ることは難しいでしょう。

そんなわけで、難易度が高いゲームを作ろうとすれば一人で作るのは大変です。
もう、ほんと大変・・・

大掛かりなゲームを作りたい場合は、チームを作る必要があります。
ゲーム作成に興味あるひとは学生さんが多いのではないでしょうか?
大学であればサークルに入ればスキルアップにもなるし良いでしょう。
大学生でなくてもプログラムサークルはありますので、そういう場所を探せばいいでしょう。

ただし、チームに入っても足手まといにならないよう、最低限の知識は持ってからの方が良いでしょうね。
「今までどんなプログラム作ったことあるの?」と聞かれて「今から勉強します!」だと、チームによっては、、、

3.アプリ作成は作業の効率化!

ゲームよりも敷居が低いのがアプリケーションの作成です。

もちろんアプリケーションでも規模の大きなものや市販のものに並ぶものを作ろうとすると大変です。
ExcelやChrome、Photoshopの機能を完全に再現するとなると、非常に大変です。

でも、自分が使うためのアプリケーションなら、格好良いキャラクターもアニメーションも要りません。
つまり、必要な処理についての知識があれば作れます

ただ、初心者にとってはゲームよりも、どんなアプリが作れるのかはイメージがわかないと思います。

私のサイトでも
時速を分速度に変換するアプリ
ペイントツール
スクラッチアートツール
を作成しています。
でも、実際にはこのアプリに需要はないと思います。

例えばこんなものが作れます。
・たくさん撮った写真を、日付ごとのフォルダに分けたい
・ヤフオクでほしい商品を自動で探したい
・CDからデータをパソコンに取り込んで、曲名を自動でつける
・掲示板を巡回して、画像を収集する
・株の売り買い
・ゲームの経験値稼ぎ
・Lineで自動で返信するbot(ロボットプログラム)
などなど、、、

アプリケーションは、人間がしている単純作業を肩代わりしてくれます。
先にあげた例だけじゃなく、パソコンでする単純作業は、アプリケーションの得意分野です。

もっと本格的なアプリとなると、仕事で使用する専用のアプリケーションなどになるでしょうか。
データベースと連携して、商品一覧を作成したり、見積書を印刷する
などなど、、、
ただ、複雑なことをするのであれば、ゲームと同様に相応の知識が必要になりますね。

4.現実世界のシミュレーション

数学や物理はプログラムとの相性抜群です。
2匹のネコの速さの比較
リンゴの落下
のようなものは、このブログでも紹介しています。
面白みは全くありませんが・・・
大学の研究の分野などでは、この使い方が一番多いのでではないかと思います。

リンゴの落下は、物理の物体の自由落下についての公式を使っています。
学校の授業で習った公式の意味を理解するために、プログラムを利用すると理解が深まるのではないかと思います。

5.言語よりもアルゴリズムが大切

ここまでに作れるものについて説明してきましたが、前提条件があります。
大前提として「プログラムは貴方が理解できないものは作れません」
これは、アルゴリズムとかロジックとか言われているもののことです。

例えば、アクションゲームで

 敵に当たったときにライフを1減らす

という処理をプログラムで作る場合、
 「敵に当たる」とはどういうことか?
について説明できないといけません
(簡易的なものであればScratchでは省略できていますけど・・・)

市販されている参考書には、このような処理の書き方を書いてある本もあります。
もちろん、本を参考に作ってもいいのですが、まずは自分ならどう表現するかを考えてみてほしいです。

このようなロジックは正解は一つではありません
同じ結果になるにしても、効率が良いロジックや悪いロジックがあります。
効率の悪いロジックでも、一度プログラムを作ってから見直すと「こうすれば、もっと良くなるんじゃないか?」と気づけたりもします。
そうやって、日ごろからロジックを自力で考えることで、新しくやりたいことが出来たときに「こうすれば作れるんじゃないか?」を考えられるようになります。

よく「○○という言語を勉強したい」という人が居ますが、ここで学習すべきは言語の文法の書き方をマスターすることではなく、作りたいものをロジックで表現することです。

ですので「プログラムを勉強したいけど、どの言語を勉強すれば良い?」という方は言語は何でもいいからプログラムの数をこなすことを意識してもらいたいです。

ある程度、自分の作りたいものが明確になったら、作りたいものに向いている言語を選んでいけば良いのではないでしょうか。