コンピュータ プログラミングというもの なぜできるようにならないのか | nkwhite417penpenのブログ

nkwhite417penpenのブログ

FF11とコンピュータ将棋について書いています

2014年12月27日記述開始


コンピュータのプログラミングをできるということは


コンピュータのプログラム

サンプルとしてHello Worldを表示するものがあり

それを試すところまでやったがその先に行けなかったという人も多いだろう。


なぜその先に行けないのか?


理由はいくつもあるだろうがコンピュータのプログラミングは

記憶したものを呼び起こしてそのまま使うというものではないと思う。


小中高校生で行う勉強は記憶してそれをそのまま使用するということが基本になっている。

漢字、歴史、英単語、公式などは覚えてしまえば、テストでは、多少問題の読解力は必要になるだろうが

記憶したものをそのまま書けば何とかなるものが多い


プログラミングは残念ながら記憶したものを書けばいいというものではない


C言語ではforは以下の定義がある


for (初期化式; 継続条件式; 再初期化式) {
 文;
}


これを始めてみた場合何を意味しているの分からないだろう。

理由はこれを覚えてどう使うか考えることが小中高で行う算数・数学の

公式を覚えて使うという考えでは扱うことができないからだと思う


例文として

int i;

for (i = 1; i < 10; i++) {

printf("%d\n", i);

i++;

}

のような簡単なものが例題として上げられていることがあるだろう

このプログラムは1~9を改行しながら9行で表示するものである。

この例題を見て九九を表示するプログラムを作るにはどうしたらよいか

考えてみよう。

すぐに思いつくのであれば、プログラグを作る才能があると思われる。

これがプログラムをできるようになるために必須となる応用力であり

感覚である。残念ながら日本の教育で行われている授業では

記憶して使うということが主でありこのような応用ができるようになっていない。

多くの人が思いつかないと思われる。

そしてそれがなかなか先へ進むことができない原因だと考えられる。


以下が九九を表示するプログラムの例となる

注 実際に動作確認していませんがたぶん動きます。

int i,j;

printf(" 1 2 3 4 5 6 7 8 9\n");

for (i = 1; i < 10; i++) {

printf("%2d ", i );

 for (j = 1; j < 10; j++) {

printf("%2d ", i * j);

j++;

}

printf("\n")

i++;

}

for文の中にfor文を入れて2重ループ処理をする

ここで大切になるのは、forの中にもう一つforを入れれば

2次元となり九九の表示ができそうという発想ができることである。

2重ループになれば9×9の2次元の表ができるという感覚が必須になる。

このプログラムを見ても2次元の表ができるということが理解できないのであれば

プログラミングの才能がないのかもしれない。

覚えなければならない場合、相当苦労することを覚悟する必要がある。


プログラムを作るということはこのような発想の塊であり、それができない

人にはとてつもなく敷居が高いものになる。

forだけを見てみても使い方は多種多様であり、すべて教えてもらい、

覚えることは不可能である。

作ろうとしているプログラムに対してどうやれば処理できるが常に発想しなければならない。


注 判定について

いろいろな考えがあるだろうが

for (i = 1; i < 10; i++) {

for (i = 1; i <= 9; i++) {

上記2個の書き方はほぼ同じ意味になる。

人によって好きな書き方は違うし、こっちにしろと強制する上司・リーダーもいるだろう。

私の考えはどっちでもいいので好きに書けばいいである。

ただし、考え方は統一したほうが良いので同じ開発の中で統一していないのは

あまりよくないかもしれない。


一度覚えた考えは、すぐに導き出せるということ

プログラムは発想力が必要であると記述したが、一度、書いたプログラムについては

次回、すぐに導き出せるという、記憶力が必要となる。

同じような処理をするのに毎回考えているプログラマーは開発が遅くて

使えないことになってしまう。


ただし、これは、英単語のような単純に1:1で変換で記憶するということでは

ないと思う

たとえば英単語では

リンゴの英単語はappleであるが、この変換は簡単である。

しかし、プログラムでは、似たような考えの場合での瞬時に変換する必要がある。

iを1~9まで変化させて9回処理するには以下である

for (i = 1; i < 10; i++) {

iを1~99まで変化させて99回処理するには以下のようにする。

for (i = 1; i < 100; i++) {

このような多少の違いであれば、一度書いたプログラムから変換してすぐにかける

必要がある。


英単語のように単純な1:1の記憶ではなく

理解したうえで変換できるような記憶が必要になると思う。


プログラミング言語でExcel VBAを最初に覚えるということ
私の感覚なのかもしれないが

Excel VBAは最初に覚える言語としてあまり適正ではないように思える。


言語仕様が大きすぎて同じような処理をするにしてもいろいろな方法がありすぎる。

おそらく、複数の人に聞くと、全く違うことを言われるだろう。


言語仕様が大きいものは最初に覚えるのにはあまり向いていない。


あとエラーが非常にわかりにくい

たとえばグラフを書く場合、サイズを設定で実行時エラーが出る時がある。

ネットを見ても適切な回答が出ていない。

表示しているエラーを見ても理解ができないものが表示される。


実行時エラーは修正が難しいため、わかりやすい表示が出る言語のほうが

覚えやすい。理解できないメッセージが出るとそこで悩んでいやになって

しまう