プログラマの考え方がおもしろいほど身につく本、で自分でコードを書く方法を学ぼう

どんな本?

自分でコードを書く方法を学びたい人向けの本です。

入門書は構文や文法の説明を通じて、プログラムの読み方を教えてくれますが、プログラムの書き方は教えてくれません。

また、プログラムの書き方に特化した本は「クックブック」的なものになってしまいます。ある状況で使える「レシピ」を教えてくれるものです。自分でレシピを作る方法は教えてくれません。

プログラミング言語は?

本書の前提には、C++の基本的な構文や文法を理解していて、プログラムを書いた経験がある人、とあります。

本書のC++サンプルプルグラムは難しいものではありませんが、C++のハードルが高いと感じる人は多いでしょう。個人的には、第2章のパズルのJavascript版があるといいと思いました。

ハッシュ記号で直角三角形を表示するには?

第2章のパズルは、ターミナル(コマンドプロンプト)にアスタリスク「*」を使って、図形を表示します。

最初の問題は、cout << "#" と cout << "\n" の2つの出力文だけを使って、次のような形を作るプログラムを書いてみよう、というものです。(この記事の最後に解答例)

#####
####
###
##
#Code language: PHP (php)

章末には次のような図形もでてきます。(この記事の最後に解答例)

#            #
 ##        ##
  ###    ###
   ########
   ########
  ###    ###
 ##        ##
#            #Code language: PHP (php)

ぼくは、最近のプログラミング入門書で、このような問題を見たことがありません。ほとんどの読者は、ターミナルベースの例題に興味がないのかもしれません。

将来、職業的にプログラミングしたいと考えているなら、この本の例題をいくつか解いてみる価値があります。

アプリケーションのアイデアがあって、それを作りたいのなら、例題のような練習はあとまわしにして、作り始めたほうがいいと思います。

何の役に立つの?

どの本で読んだか忘れてしまいましたが、好きな話があります。

生徒が教師に聞きました。

「数学の公式を覚えて何の役に立つのか?」

教師は答えたそうです。

「陸上選手がバーベルを持ち上げるのは、暴漢に襲われたときに、暴漢を持ち上げるためではない。速く走るために筋トレをしている。」

「君たちが社会にでて数学の公式を使うことはない。数学の公式は、社会にでて仕事をこなすために必要な筋トレなのだ。」

この本は、プログラミング入門者の筋トレです。C++のハードルが高いなら、学習中のプログラミング言語で例題にチャレンジするといいですよ!

nodejsの解答例

最初の例題

#####
####
###
##
#Code language: PHP (php)
for (var y = 1; y <= 5; y += 1) {
    for (var x = 1; x <= (6 - y); x += 1) {
        process.stdout.write("#");
    }
    process.stdout.write("\n");
}Code language: JavaScript (javascript)

章末の問題

#            #
 ##        ##
  ###    ###
   ########
   ########
  ###    ###
 ##        ##
#            #Code language: PHP (php)
const ROWS = 8;
for (var y = 1; y <= ROWS; y += 1) {
    var y2 = ROWS + 1 - y;

    var hash_len = Math.min(y, y2);
    var head_len = hash_len - 1;
    var mid_len = ((ROWS / 2 - 1) - head_len) * 4;

    for (var x = 0; x < head_len; x += 1) {
        process.stdout.write(" ");  
    }
    for (var x = 0; x < hash_len; x += 1) {
        process.stdout.write("#");  
    }
    for (var x = 0; x < mid_len; x += 1) {
        process.stdout.write(" ");  
    }
    for (var x = 0; x < hash_len; x += 1) {
        process.stdout.write("#");  
    }
    process.stdout.write("\n");  
}Code language: JavaScript (javascript)
V.Anton Spraul アスキー 2013-05
タイトルとURLをコピーしました