プログラミングとはなにか?
おはようございます。またはこんにちは。もしくはこんばんわ。マゲっちSCと申します。早いもので1月ももう中旬が終わろうとしていますね。先日は今年最初の満月であるウルフムーンを見られた方もいらっしゃるかともいます。きれいな満月でしたね。そして2022年1月18日は大寒でした。1年の中で1番寒い日に当たるわけですが、大寒と節分がすぎれば春が近づいてきます。とはいえ、まだまだ寒い日が続きますので皆さんもお風など召さぬようお過ごしください。
さて、前回のブログですが、私が使用しているPC周辺機器ということでお話をさせていただきました。入力機器からモニターやヘッドセットなどの出力機器までご紹介させていただきました。その後ゲーム用途のアーケードコントローラーを購入したので、私のデスクトップはモニターの他にキーボード、トラックボール、ゲームパッド。そしてアーケードコントローラーが並んでいます。アーケードコントローラーというのはその名の通り、ゲームセンターのビデオゲーム筐体についているレバーとボタンがついたコントローラーのことです。今はゲームセンターにあるビデオゲームコーナーで稼働しているゲームも、ゲームセンターが市民権を得るまでは、「アーケード」の名の通り商店街にあるおもちゃ屋さんに設置されていたり、駄菓子屋さんの屋内や屋外に設置されていました。そのためアーケードでゲームをするときに使うレバーとボタンのついたコントローラーのことをアーケードコントローラーと呼びます。通称アケコンですね。
プログラミングとは?
では、今回の本題であるプログラミングについて概要をお話させていただきます。各プログラム言語によって得意不得意がありますし、私自身たくさんプログラム言語をブログ上で披露できるほどたくさん知っているわけではありません。しかしプログラム言語が違っても大元の基礎知識や考え方はだいたい同じです。最近では小学校でも4年生以降はプログラミングの授業があります。我々大人も子どもたちに負けず・・・とはいかなくてもある程度の知識を持っておかなければならないでしょう。とはいってもほとんどの方がプログラミングに対してあまり馴染みがないのも事実です。プログラミングの前にそもそもプログラムとはなにか?というところからお話していきます。
プログラムというのは簡単に言うとコンピュータに計算・実行してもらうための指令書のことをいいます。ビジネスソフト・ユーティリティソフト・ゲームソフト・動画編集ソフトなど様々なソフトがありますが、もとを正せばすべてプログラムです。プログラムで何ができるのか?ということですが、コンピュータ上で動くものを作成できます。コンピュータは電子計算機です。家庭用ゲーム機でもPCでもそれは同じです。家庭用ゲーム機はゲームに特化したコンピュータで、PCはビジネスから遊び、様々なものを作り出すことまでできます。PCに関してはインストールしているソフトや接続している周辺機器によってどんどん拡張されていきます。最近の家庭用ゲーム機もPCもそうですが、最初は付属のコントローラーやキーボード、マウス、スピーカーにモニターという最低限必要な周辺機器しかなく、インストールされているものもシステムソフト(OS)しかありません。そこに必要なソフトをインストールしたり、追加で周辺機器を接続していくと実に様々なことが可能になります。例えばPCには最初キーボードとマウス、モニターとスピーカーがつながっています。電源を入れるとすでにインストールされているOSが起動します。OS側ではすでにキーボードとマウスの情報を取得しているので、特に問題なく入力を受け付けている状態になります。なので例えばメモ帳を立ち上げる(マウスを使ってショートカットアイコンをダブルクリックするなど)と、コンピュータが応答してメモ帳を立ち上げてくれます。あとは画面に表示されているソフトに対してキーボードから文字を入力してきます。
このようにマウスでショートカットアイコンをダブルクリックするとソフトが起動したり、そもそもつながっているキーボードやマウスを認識したりできるのもすべてプログラムに記述されていることをコンピュータが忠実に計算し実行した結果、画面にメモ帳が表示され、キーボードからの入力を受け付けて文字記号を次々に画面に表示していくわけです。この画面に文字を表示することもプログラムで司令を出しています。仮にプログラム側に入力された内容を表示する司令が欠けていた場合はいくらキーボードを打っても画面に文字は表示されません。
ハードウェアの制御や認識もプログラムで行う
先ほどお話したとおり、プログラム側で認識できたものだけを認識して動作させることができます。またCPUのコア数に関してもプログラム側で認識できていなければ複数コアのCPUを使用していても認識することができません。つまり存在していないのと同等になります。
皆さんもUSBで接続する様々な機器をお持ちでいらっしゃると思います。例えば今ご利用中のマウスが何らかの原因で壊れてしまったとします。その場合は家電量販店やPCショップなどで新しいマウスを購入して現在使用されていらっしゃるPCのUSB端子に接続されると思います。その際にPC側では何が起きているかというと、まずUSB端子に差し込まれた機器の情報を取得します。これが取得できないと何が接続されたのかがわからないためPC側で使用することができません。OS内部に存在している様々なドライバと接続されたマウスの情報が適合するまで検索を繰り返します。検索できたらOS自身に新しいマウスのドライバをインストールします。だいたい時間にして60秒以内で終わる処理ですが、検索するドライバ数はおそらく1,000個をゆうに超えるでしょう。ただ、コンピュータは計算が人間より圧倒的に早く、計算間違いも起こさないため検索は一瞬で終わります。ドライバソフトもそこまで規模の大きいものはないためインストール自体も一瞬です。最近のPCのOSには実に莫大な数のドライバが標準で入っていますが、それらはデバイスを接続した際に初めてインストールされPCで使用可能になります。これらはすべてプログラムで記述されています。
また、元々コンピュータを構成しているハードウェアの認識もプログラムで行います。例えば先ほどお話したCPUの複数のコアの認識と使用に関してもソフト側で認識してタスクを振り分けられるようにプログラムする必要があります。もしCPUコア数を正確に認識できない場合は0番目のコアのみを使用します。そのためマルチコアCPUを搭載していても使用するのはシングルコアのみとなるわけです。
プログラムをすることで得られる恩恵とはなにか?
ではプログラムを作成するとどんないいことがあるのでしょうか?それは処理の自動化です。例えばゲームで「やくそう」を複数個NPCの商人に対して売却するとします。そのとき、「やくそう」を1つずつ選択して売却コマンドを1回実行すると1つ売却できるシステムだったとします。あなたはアイテム欄から「やくそう」を1つずつ選択して必要な回数「売却」コマンドを実行しなければなりません。1つだけ持っている場合ならまだいいのですが、それが100個あった場合同じ作業を100回繰り返すことになります。とても非効率ですし疲れますよね。ですが、プログラム側に機能を少し追加して売却数を選べるようにしたとします。操作手順としてはアイテム欄から「やくそう」を選択後、売却個数を指定し売却コマンドを1回実行します。例えば売却個数を100と指定するとコンピュータ側で自動的に売却コマンドを100回繰り返してくれます。売却コマンドを入力する回数は1回ですみますしコンピュータの処理速度は早いので「やくそう」100個は一瞬で商人に売却され売上が皆さんの手元に入ってきます。
また、繰り返しの他に条件をつけて条件を満たしている場合にのみ処理を実行するということも自動で行うことができます。例えば、会員制のウェブサイトを閲覧したい場合、そのウェブサイトの会員であるかどうかを判別するためにアカウント(ユーザIDとパスワードの組み合わせ)を使用しますが、そのアカウントがその会員制ウェブサイトのアカウントかどうかを入力されたユーザIDとパスワードから判別することができます。規定の文字数と入力内容がそれぞれ一致した場合はその会員制ウェブサイトの会員と認証されてウェブサイトを閲覧することができます。ユーザIDの規定文字数より文字数が少ないか多すぎた場合や、ユーザIDとパスワードのどちらかが一致しなかった場合は認証で弾かれてしまうためウェブサイトを閲覧することはできません。これを人の手で行うと時間がかかってしまいますが、コンピュータ上で自動化してしまうと認証作業は一瞬で終わります。
ゲームでも条件を満たしている場合はストーリーを先にすすめることができたり、必殺技を発動させたりすることができます。繰り返しや条件分岐を行うことで処理内容を切り替えることができるためです。ですが、作られるものは違っていても基本的な仕組みはすべて一緒です。使用用途がビジネスなのかエンターテイメントなのか、クリエイティブな作業なのかによってプログラムの役割が違っているだけなのです。そしてその処理内容を司令として1つの書物にまとめたものがプログラムです。
コンパイラとインタプリタ
しかしプログラムはあくまで理解できるのは人間だけです。もちろん人がプログラム言語を理解するために勉強する必要がありますが、仮に知識がなくても「ここでこういう処理をしています」と説明されてプログラムを見るとだいたい把握できます。プログラム言語に使用されている記号は英数字と計算に使用する四則演算の記号、それからキーボードのキートップに記述されている特殊記号の組み合わせでできています。しかしこれをコンピュータが理解することは不可能です。コンピュータはマシン語という「0」または「1」しか理解できないからです。ということはいくら皆さんが苦労して記述したプログラムがあったとしても、コンピュータはそれを理解できません。そこで登場するのがコンパイラまたはインタプリタとです。これらはどちらかがプログラム言語の開発環境内に入っています。また言語によってコンパイラを使用するのかインタプリタを使用するのかがすでに決まっています。
コンパイラもインタプリタもどちらも人間にわかるプログラムをマシン語に翻訳するためのものです。コンパイラを使用することを「コンパイルする」といいます。コンパイラはプログラム言語すべてを一気にマシン語に変換して実行します。そのため動作が早いという利点があります。しかし、プログラム言語の記述様式的にプログラムが完全に終了していなければエラーが出ます。わかりやすく日本語で表現すると「僕はブログを書いた。」という文章があった場合、きちんと文末まで書かれている必要があります。つまり「。」までがきちんと記述されていない場合コンパイルするとエラーになります。
一方インタプリタは1行ずつマシン語に変換しながら実行していきます。動作は遅いですがプログラムの記述が途中までだったとしてもきちんと動作します。先ほどの例えで行くと「僕はブログを」までの文章だったとしてもマシン語に変換して実行してくれます。最近はコンピュータそのものの処理速度が非常に高いため、コンパイラを使ってもインタプリタを使っても動作スピードを体感することはかなり難しいはずです。それなりに規模の大きいプログラムであれば体感できる程度のものです。
若い世代の方がPCを使えるように
このようにPCを使用してプログラムを学習すると趣味から業務としてまで幅広く生産性の高いものを作り出すことができます。スマホやタブレットPCでは2022年1月現在ではこのようなクリエイティブな作業を行うことはできません。いずれプログラムや文書作成がタブレットPCでできる時代も来るかとは思いますが、フリック入力で文字を長時間入力することは非常に疲れますし速度も遅くなり非効率的ですね。
ですが最近の若い世代の方はスマホやタブレットPCが普及した反面、キーボードやマウスを使用することが難しくなっている方も多くいらっしゃるようです。特にタッチタイピングができる若い世代はかなり減っていると聞いたことがあります。また、動画編集や音楽作成となると確実にPCレベルの処理能力がないと作成することすらできません。いい発想ができたとしても実現できないわけです。またスマホやタブレットPCと比べるとPCは非常に処理能力が高いためシステムが不安定になりづらいです。処理能力が低いと無限ループをするプログラムを実行してしまった場合にシステムが不安定になってしまい、手動で再起動を行う必要が出てくるからです。
また、サーバ機器も基本的には操作方法がPCとほぼ同じです。ネットワーク機器やサーバ機器の管理ができる方は社会でも重宝されます。スマホやタブレットPCはあくまでクライアント側の機器ですので何かを作り出したり管理することは難しいです。PCはインストールされているソフトによってクライアントにもサーバにもなれるため非常に有用です。例えばかんたんなウェブシステムを作成して納品するだけでもだいたい安くて20万円から30万円程度の価格で卸すことができます(サーバ機器やネットワーク機器、データベース機器の価格は入っていません)。
まとめ
このようにプログラムを勉強することで、何かを作り出すことができるようになります。また仮にその作り出したシステムを使用したい人がいた場合には高額な価格で売り出すことができます。仮にプログラミングが身につかなかったとしてもコンピュータの起こす不具合などを見てだいたいの仕組みを把握することができます。コンピュータのエラーの解決ができる場合もあるでしょう。その場合はサーバやネットワーク管理者になれたり、会社のPCの管理を任されたりという武器にすることができます。プログラムにご興味のある方は一度コンピュータに開発環境をインストールしてみてはいかがでしょうか?では次回のブログネタですが、アルゴリズムのお話をさせていただこうかと思います。アルゴリズムって聞いたことがあるけど一体どういうものだろう?と思われた方もいらっしゃるかも知れません。ご興味がありましたらまたお立ち寄りください。それでは失礼いたします。