もっとプログラミングの極意とは?

メルマガバックナンバー 2017/09/27発行

プログラミングの極意とは? 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円分)を差し上げます。
答えが分かった方は、このメールに返信して下さい。
※応募は終了しました

ちなみにプログラミングとは、なんの関係もありません。
しかし論理的に考えると答えが見えてくるはず。

【問題】

私の旧サイトの名前に関してです。
http://www.pg-naruniha.jpn.org

トップページを見ると
 プログラミング推薦図書館
ではなく
 プログラミング推薦図書(館)
と書いてあります。

わざわざ 館 をカッコで括って(館)にしています。
これには理由があるのですが、さて何故でしょうか?

【ヒント】
開設当初は 館 だったのですが、ある事があって(館)に変更しました

 

今回はここまでです。読んでいただきありがとうございました。

プログラミング推薦図書館 江畑


プログラマの名言・格言・心

もっと知りたい?
C言語_初級 | C言語_中上級 | C++_初級 | C++_中上級 | C#_初級 | C#_中上級 | Java_初級 | Java_中上級 | コンピュータ_サイエンス | アルゴリズム_ | ゲーム_プログラミング | DirectX_ | Unity_ | ゲーム_デザイン | ゲームのしくみ_ | 数学_ | プログラミング_テクニック | 歴史_偉人 | ソフトウェア工学_ | 読み物_エッセー | 人生_生き方 | 創造_発想 | 雑誌_ | 漫画_小説_映画 | メルマガのバックナンバー_

Kuniaki Ebata 登録者

プログラマーで現役のスキー国体選手です。
頭脳と体を動かすのが大好きなフレンズなんだね。専門学校で先生もやってます。

教え子をゲーム会社にどんどん送り込み、世界を面白くする野望を実現中。

プログラミングが上達するメルマガやってます。

ここを見たゲーム業界の卒業生へ
新作が出たら、連絡するか現物を送ってくれると嬉しいです。
ただし18禁・CERO-Dの場合は、厳重に梱包の上、品名をパソコン部品にて送る事(だいじ)。