メルマガバックナンバー 第4回
プログラミングの極意とは? 2
さて、前回プログラミングの極意は 技術の根っこを知る事 だとお話しました。
そしてその例として、OSやハードウェアなどを挙げました。
これらはもちろん重要なのですが、もう一つ大事なのを忘れていました…スミマセン
今回はそのラストピース?を埋めます。
そのもう一つとは…
アーキテクチャです。
アーキテクチャとは、バズワードみたく定義がバラバラな単語ですが、ここでは
1:基本構造
2:設計思想
のような意味です。
うーん、何のことだかサッパリ分かりませんね。。。
というわけで、それぞれ具体的な例を挙げてみます。
基本構造の例 .NET Framework
まずは「基本構造」の意味でのアーキテクチャです。
例えば、VisualBasic や C# でプログラミングしてコンパイルしたとします。
その結果、実行ファイル(exeファイル)が作られます。
しかし多くの場合、この実行ファイルは「Windowsの上」でいきなり動きはしません。
(昔のプログラムのように)機械語の命令がそのまま入っているワケではないのです。
実際には実行ファイルは .NET Framework の「仮想マシン」の上で動きます(共通言語ランタイムとも呼ぶ)。
そして実行ファイルには、この仮想マシン用の命令(中間言語と言います)が格納されています。
Wikipediaに分かりやすい図がありました。
こういった仕掛け(基本構造)をアーキテクチャと呼んでいます。
つまりこの場合、アーキテクチャを知るというのは .NET Framework の構造や設計を知るという事です。
このようにプログラミング言語の文法だけでなく
どんな仕組みで実行されるか?
を常に意識して欲しいです。
経験上、間違いなく沢山の恩恵が得られます。
例えば私のケースでは、パっと思いつくだけで次のような嬉しい事がありました。
・エラーメッセージを見て原因が分かる(マジで助かる)
・効率的にメモリを使用するソースを書ける
・プログラミングの実行速度向上
・リバースエンジニアリングが捗る
ちなみに、Javaも似たような仕組みで動いています。
あなたの環境でプログラムがどう動くか?を調べてみると色々な発見がありますよ。
設計思想の例 Unity
次は「設計思想」の意味でのアーキテクチャです。
ここではUnityを取り上げてみます。
Unityは無料でも使えるゲーム開発環境(ゲームエンジン)です。
C#やJavascriptを使って、マルチプラットフォームに対応したゲームを開発できます。
ちなみにドラクエ8のスマホ版は、Unityで開発されています。
ソース
このUnityでゲームを作る時、全ての根幹にあるのが「ゲームオブジェクト」です。
このゲームオブジェクト、そのままでは「無色透明な物体」で何も出来ません。
ではどうするか?
Unityでは、空のゲームオブジェクトに色々な部品(コンポーネント)を付ける事で、ゲームに使うモノを生み出します。
例えばゲームオブジェクトに「3Dモデル描画」の部品をくっつければ、キャラが画面に表示されます。
他にも、組み合わせ次第で色々なモノが作れます。
カメラ = ゲームオブジェクト + カメラ機能
ライト = ゲームオブジェクト + ライト機能
爆発エフェクト= ゲームオブジェクト + パーティクル機能
スコア文字列 = ゲームオブジェクト + テキスト描画機能 + C#のソースコード
敵キャラ = ゲームオブジェクト + 3Dモデル描画機能 + 当たり判定機能 + C#のソースコード
こんな風にUnityでは、ゲームオブジェクトに部品(コンポーネント)を追加して行くのが基本です。
つまり、Unityではあらゆるモノを、ゲームオブジェクトで表現するという「設計思想」があるのです。
こういった設計思想も、私はアーキテクチャと呼んでいます。
設計思想を知ると、開発環境をより深く理解できます。
例えばUnityには
GameObject.GetComponent( )
という命令がありますが、これは
ゲームオブジェクトにくっついている部品(コンポーネント)を取得する命令
だとイメージが湧きやすくなります。
開発環境やライブラリの作者は、どんな設計思想で作ったのか?
私は新しい技術を学ぶ時、いつもこの事を考えるようにしています。
おわりにクイズ
いかがでしたか?
今回は基本構造と設計思想という2種類のアーキテクチャを解説しました。
最近の開発環境は、多機能化して一見カオスですが、背景にあるアーキテクチャを知れば全体を見通しやすくなります。
表面的なプログラムの書き方だけでなく、ぜひアーキテクチャにも興味を持ってみてください。
さて突然ですが、メルマガ活性化のためにクイズコーナーです。
正解した方の中から1名様に、Amzonギフト券(500円分)を差し上げます。
答えが分かった方は、このメールに返信して下さい。
※応募は終了しました
ちなみにプログラミングとは、なんの関係もありません。
しかし論理的に考えると答えが見えてくるはず。
【問題】
私の旧サイトの名前に関してです。
トップページを見ると
プログラミング推薦図書館
ではなく
プログラミング推薦図書(館)
と書いてあります。
わざわざ 館 をカッコで括って(館)にしています。
これには理由があるのですが、さて何故でしょうか?
【ヒント】
開設当初は 館 だったのですが、ある事があって(館)に変更しました
今回はここまでです。読んでいただきありがとうございました。
プログラミング推薦図書館 江畑