さすがにもうラボのメンバーで出展するゲームの企画を決めてしまわないとマズいということで、
先生に「ゲームの企画」について相談をしに言ったのですが、
そこでのお話は脱線に脱線を重ねて、
最終的にNVIDIAへの就職目指したらどう?って結論を持って終了いたしました。
私の中で理想とするプログラミングの方向性は「独立とブラックボックス化」です。
ゲームの中に登場するものを大雑把に切り分けて、それぞれを管理するクラスを作ってそれを走らせます。
そのそれぞれのクラスの中に登場するものも、これまた大雑把に切り分けて、それぞれを管理するクラスを作ってメンバとして持たせるなりなんなりして走らせます。
このように細分化してゆき、これ以上細分化不能になった段階でコーディング完了になります。
何と説明すればよいのかわかりませんが、プログラムが一行ずつ実行されてゆくイメージではなく、個々の「登場するもの」に対して定義付けを行い、あとはそれぞれが勝手に動いてくれるというイメージです。
このとき、それぞれのクラスが走ると何がどうなるのかがすぐにわかるような切り分け方にすることがポイントです。
こうすることによって、各アルゴリズムの仕組みを意識しなくてもプログラムの保守改修が可能になります。
アルゴリズム自体の改善が必要になったとしても、その関数の内部だけに集中することができ、非常に気が楽です。
しかし、プログラム同士の外見だけを見て内部構造を見ようとしない場合、非常に効率が悪いものになるでしょう。
その効率の悪さを何とかして最適化するのがコンパイラの役目だと私は考えています。
C++11の右辺値参照のようにプログラマ側から最適化可能部分を明示することは、機械的に見つけることが困難な最適化も可能にします。
このような技を使いこなして、最適化を全てコンパイラに任せてしまうのがプログラミングの理想形だと私は考えています。
また、メジャーな処理については、専用プロセッサ・専用回路・専用メモリをつくって処理してしまっても良いのではないかと思いました。
GPUは行列計算に特化していますが、例えばリスト構造の処理に特化したプロセッサ(もっと言えばその専用回路や専用メモリも)等を作ればパフォーマンス向上にこの上なく貢献できるのでは?と思います。
もういっそのこともっとゲームのプログラム処理に特化したハードウェア一式を作って次世代ゲーム機として世に出したいです。
などということをベラベラと喋った結果、
「よし、君はハードウェア設計をする会社に行くべきだ」ということになり、
「NVIDIAとかは?ほらホームページかっけえぞ"Join the Force"だって。ForceだぞForce」とかなんとかそんなようなことを言われまして。
でも本社がテキサス州にあるとかなんとか…いやでも私アメリカとか英語とか好きですしプログラミング言語とは言え他言語を習得した経験があるわけですし今更言葉の壁なんてアメリカの企業に就職してみたいです!!
なんかかっけえ。
ロマンを感じる。
モチベーション上がる。
よし決めた。
NVIDIA本社に入って「僕の考えた最強のGPU」作る。
とりあえず今は英語の勉強する。もともとやってたし。
あとハードウェアの構造や仕組みにも元々興味があったからこれを機会に深く研究しよう。
…一旦冷静になりましょう。
そもそも私は最速のゲーム機を作るのが目的です。
そのためにはまずゲーム制作において効率よく、バグが出にくく、デバッグし易く、保守改修がし易いソースコードの書き方を研究する必要があります。
道のりは長そうですね。
しかし、人生のほとんどを費やすような大きな目標ができて安心しています。
今までは、ただぼんやりとゲームを作りたいなと思っていただけでしたから。
目標が決まると力がみなぎってきますね。
それでは、良いプログラミングライフを!
オフトピック
それにしても、VISAデビットカードが未だに届きません。
カード申し込み受付完了通知は届いてるから、あとは郵送を待つだけのはずなのですが…。
郵送事故?
あ、もしかして土日挟んだからまだ発送すらされてないとか?有り得る…。
カード申し込み受付完了通知は届いてるから、あとは郵送を待つだけのはずなのですが…。
郵送事故?
あ、もしかして土日挟んだからまだ発送すらされてないとか?有り得る…。