60%の人間はプログラミングの素質がない…
個人的には、なかなか、的を得た数字のように思うな…
「ふたこぶラクダ」という名前の有名な論文に書かれているんだってさ。
引用:プログラミングの素質は、構築したメンタルモデルを、 ブレずに一貫して適用できるかどうかにかかっているようだ。
それぞれのプログラミング言語の都合に合わせて、動くようにプログラムを書くのだから、 わけのわからない言語のルールに、ブレずにしたがって頭の中で動く様をシミュレートできるか…って感じかな。
引用:一貫したグループにプログラミングを教育するのは、はるかに簡単である。 このグループは、観測的に、さらにふたつに分かれるようだ。 ひとつは、プログラミングを非常に簡単に感じ、プログラミングを楽しみ、 その後も成長してソフトウェアを書く良いプログラマーになるグループ。 もうひとつのグループは、プログラミングはできるものの、 それ自体には楽しみを見出さず、管理職になってUML図に溺れるグループ(やれやれ)。
爆笑….
ヒープメモリの演習
先週のmalloc+freeの説明後ということで、今日は演習の時間とした。
ヒープメモリ演習テーマ
大きさの解らないデータを入力し、何らかの処理を加えて出力する。 例えば、きわめて長い名前の人がいるかもしれないクラスの名簿を読み込む。 名簿の人数は、プログラム作成時は解らないものとする。 もしくは、成績表の集計を行うプログラムを作る。ただし、科目数や対象人数は変更できること。 演習の自信の無い人は、プログラムを実行し処理を始める前に、 データ件数を入力などを入力するという方法でもよい。
途中で配列サイズを変えるテクニック
最初にデータ件数などを入力するのは、現実の処理ではあまりない。 プログラミングでよく使われるテクニックは、 あらかじめ適当な大きさで配列を作り、その中にデータを保存していく。 途中で配列サイズからあふれる場合は、新しく2倍の大きさの配列を確保し、 新しい配列に、元の配列の中身をすべてコピーする。 そのあと、配列を指すポインタを、2倍の配列側に切り替え、元々の配列はfreeで廃棄する。
C++でのnewとdelete
前回の授業では、malloc+freeを用いたけど、最近はオブジェクト指向のC++を使うことが多い。 簡単に、new-deleteの使い方を説明する。
// C言語であれば int size = 適当な大きさ ; int *p ; if ( (p = (int*)malloc( sizeof( int ) * size )) != NULL ) { pを配列として使った処理... ; free( p ) ; } // C++であれば、 p = new int[ size ] ; // C++ではメモリ確保失敗は例外処理で対応 pを使った処理... ; delete [] p ; // [] は配列をdeleteする場合のみ
deleteの[]をつける意味が分かりにくいので、普通の使い方の例を、おまけで書いておく。
struct A { なんらかの要素 ; } *p ; // C言語の場合 if ( (p = (struct A*)malloc( sizeof(struct A) )) != NULL ) { pの構造体を使った処理 ; free( p ) ; } // C++の場合 p = new A ; pの構造体を使った処理 ; delete p ;