【エピローグ1】学習と記録の進め方
(執筆+記事として投稿:20分くらい)
今日から、
『ゲームプログラマになる前に覚えておきたい技術』
という鈍器見たいな参考書の攻略を進めていこうと思う。
てなわけで、今回のテーマは、
学習の仕方と記録の仕方
つまりは今後の進め方をずらずらと書こうと思う。
【時間を区切る(とりあえず1時間/1回)】
【平日進める→週末まとめる+復習というサイクルを一定に繰り返す】
【進まなかった、詰まった、どこを参照したなども記録していく】
┗学び部分を体系的に書くよりも、日記的な役割を優先
【書き方、説明、参照元などの記載の粒度は、やる前の”自分”が記事+本を読めばすらすらできる状態を基準にする】
【各学習にかかった時間を記録し、記事を書く際に各項目横に実際にかかった時間を記載する】
┗参考書の「この章は目安40分!」とか、その通りにできたことの方が少ない気がする...
┗これがリアルだぞ!と自分を戒めつつ、久しぶりに見返したときに成長を感じるための糧とするのである
【質<<<<<<<継続】
┗こういう行動が続いたためしがないので、テーマが変わろうと「今日は出来なかった。」の一文だけだろうと、続けることこそを至上とする
【目的を見失わない】
┗前述と矛盾するようだが、無駄に時間を浪費したいわけでも、ブログで稼ぎたいわけでもない
┗世の中の矛と盾は、中々無くならないのだと思う
┗学習内容の定着率向上、向かうモチベーションの一つ、形を残す、これらの学習の先にあるものが何なのか
┗毎回これを確認してから作業に入る
┗それができれば、変に完璧主義になったり、変に読み飛ばしたりしないはずだろ、常考
【第10回】変数やメモリとはなんぞ?
(執筆+記事として投稿:63分くらい)
基礎的な知識をみにつける会
(書籍内:P42~51)
メモリとは何ぞやなどなど
「C++では2進数の数字をプログラムに書けない」
16進数は書ける
「変数とはメモリというchar型の配列に間借りをしておかれているに過ぎない」
classのprivate変数であったとしても、ポインタを指定して直接アクセスすれば改変も可能である。
┗この、起こりえるということが肝心。
「C++におけるポインタの*演算子とは、ポインタ変数を添え字にしてメモリという配列にアクセスすること」
実際、ポインタは単なる整数に過ぎない。
「ポインタは値が0の時には何も指さないものとするという決まりがある」
0ポインタと呼ばれ、メモリという配列において0番目は使ってはいけないというルールがあるため。
deleteした時などにポインタに0を入れるのは、この性質をデバグに使うためである。
deleteをしてもポインタには何かしらの値が入っているため、それを使えばどこかにアクセスできてしまうため危険。
「0は状況によって、ポインタとしても整数としても解釈される場合がある」
A(int)という整数を取るコンストラクタとA(B*)という別の型のポインタから作るコンストラクタがあったりすると、この仕様のために困ることになる。
A(0)とかくと、どっちか判断できずコンパイラがエラーをはく。
「型が違おうとも、全て中身はメモリという配列の添え字にしかすぎない。しかし、型によって次の要素までの距離が違う」
char型は1バイトだが、int型は4バイトなど。
「newにはメモリから空いている場所を探してきて添え字をポインタに入れる機能と、コンストラクタをその場所に対して呼ぶ機能の2機能がある」
逆にdeleteはデストラクタを読んだ後にメモリを開放する機能のことである。
newの際に空いている場所を探すのは、中で働いているメモリ管理プログラムである。
適当な添え字で無理やりアクセスすれば、newをしなくても動いてしまうということが起こりうる。
「C#やJavaには勝手にメモリを開放する機能があるがC++にはない」
これは、メモリの開放を自動でやってくれるかどうかの違いだが、意識しなくても勝手に開放してくれる分、その自動開放プログラムの影響で処理が止まってしまう事もある。(人間に認知できるような止まり方ではないが)
C++を使用するのは、だいたい処理速度を気にする時なので、アナログにメモリ開放していく必要があっても、処理速度に影響がでないことを優先するのである。
※自動でメモリ開放してくれる機能:ガベージコレクション
【第9回】サンプルコードの解説を読み進める(+今後の方針)
(執筆+記事として投稿:85分くらい)
サンプルの解説を読み進め、理解を深める回+今後の方針について
(書籍内:P20~42)
進め方への疑問に対する答え
前回、これやる意味あるのかな?と思った件についてだが、自分の中でこの学習の役割について一つの結論を出した。
読もう!
もうね、これは「学習や興味に対するフック」「実務などで、使えはしないけど、知っている程度の知識を増やす」みたいな教養的役割にしようと思う。
ひたすら読み進め(サンプルコードも適宜眺めながら)、気になったことがあればピックアップして、調べ
「興味深かったことを後々に見返せるようまとめる」
というスタンスで進めていこうと思う。
ますます、人に対して公開する内容ではなくなっていくが、あくまで日記なので、良いのかなと思っている。
てなわけで、れっつら読書(+サンプルコード)。
(書籍内:P20)
「ifstream」
#include <ifstream>
みたいな感じで使う。
C++でファイルを読み込む際に使用する。
Visual StudioからF5で実行するばあい、ファイルは.vcprojファイルがあるところが標準の検索パスとなるらしい。
つまり、.vcprojと同じ階層に置いたファイルを指定したい場合は、何もつけづにファイル名を書けばいいし、違う場所に置く場合は、.vcprojファイルがあるディレクトリを起点にパスを書いてやればいいわけだ。
(書籍内:P30)
「メンバ関数の後に const をつけると値が変わらないことを保証できる」
class A{
void func1() const;
void func2();
};
void foo (const A& a ) {
a.func1(); //OK
a.func2(); //コンパイルエラー
}
const なメンバ関数からはconstでないメンバ関数は呼べない
void A::func1() const {
func2(); //これはconstではないのでコンパイルエラー
}
constがつけられる関数は、必ずつけた方がいい(安全装置として)
(書籍内:P33)
「ゲームでよく使う、フラグ管理にはビット演算が便利」
大量のフラグをどのように管理するか。
2進数の数を、関数などを作成して、フラグに見立てたり、割り算をしたりなどでも出せる。
しかし、ビットごとに掛け算をする機能をもっているC++ではビット演算を使った方が便利
【第8回】サンプルコードの解説を読み進める
(執筆+記事として投稿:50分くらい)
サンプルの解説を読み進め、理解を深める回
(書籍内:P13~20)
進め方への疑問
とりあえず、区切った時間に従って読み進めたものの、実際にプログラムを改変するわけでもなく、
うんうん。
それで?
って感じであった。
これを読んだ後に、解説に出てきた知識や書き方について、
じゃあやってみて~
って言われてもおそらく毛ほどもできないだろう。
なんというか。
うん。
これやる意味あんのかな?
とはいえ、たぶん自分次第なのだろうと思うので
一旦は、読み進める→わからない知識などについては調べる。
という、知識習得のフック辞典という認識でも持っておこうと思う。
自分が初歩的すぎるのだろうが、書籍冒頭のターゲット層で話してた、
「学習欲がそこまで高くない」「最低限しか知らない初心者」
などの表記から自分が想像していたレベルとは乖離が激しい。
これは説明しなくてもいいだろう。
とか、前提としている知識が自分自身にとっては
は?
となることが多く、読み進めた内容が頭の中でする~っと右から左へ流れていく。
華麗なものである。
まあ、自分が初歩的すぎるだけだと思うので、
ITパスポートのように、専門用語を知ったり、何かを作ったり学習したりするときの知識としての選択肢を増やす目的で”読み進め”られたらと思う。
そして、これとは別に、”コードを書く”という方式でも自主学習を進めねばと感じた。
ブログにまとめるような学びが皆無な回だった。。。。