PPPUC++#4

Hello World

"Programming is learned by writing programs." Karnighanの言葉だったのかー。
ともかくour best eternaly friend -- hello worldの登場です。

  1. プログラミング環境を触ってみる
  2. コンピュータが指示どおりに動く、というのを体感してもらう
2.1 Programs
  • コンピュータは常識の通用しない、KY装置
  • すべてを的確に、詳細に、完全に与える必要がある。
2.2 The classic first program

でたよ Hello World

// This program outputs the message "Hello, World!" to the monitor

#include "std_lib_facilities.h"

int main() // C++ programs start by executing the function main
{
    cout << "Hello, World!\n";    // output "Hello, World!"
    return 0;
}

どうやらstd_lib_facilities.hにゴミゴミをすべて突っ込んで、初心者に水面下のバタ足は見せない方針らしい。ので、「とりあえずWebからとってくるか、インストラクターに貰ってね」と書いてある。で、net無いとかインストラクターもいない、ってときにだけ、、、と注釈して呪文が・・・(いみねーじゃん)。むしろこのままの構成だと、思わず先走って書いてあるコードを入力してしまってハマる独学者がいそうな悪寒。更に魔法をなるべく見せない方針なら\nはいかんのでは?
まあ基本は解説の必要もなさそうなんだけど、初心者向けの本なので懇切丁寧に説明が続く。読み取ったことなど・・・

  • プログラムの世界では略語がよく出てくる。cout = character output stream とか。変に見えるだろうけど慣れると便利だよ、と
  • コメントは人間向け、、、それも一番利益を被るのは、あなた。そう、コード書いているあなたです。
  • プログラムというのは2つの観客に向けて書くものだ。
    1. もちろん、コンピュータ。実行してくれる。
    2. プログラマ。分かりやすければ分り易いほど、修正の可能性は増える。ある意味プログラミングとは人間対人間のCommunicationだ!(かっこいい)
  • まあしかし、コメントは完全に人間向けで(普通は)コンピュータは全く読まない。
  • 第一行目のコメントは、結構重要。プログラム本体は「なにをするか」は書いてあるけど「どういう意味があるのか」は書いていない。

2.3 Compilation

コンパイラの話。

  • コード、とsource とかobjectとかいろいろあるけれど、この本ではコード、と単純に言った場合は ソースのことを差します
    • 更に言うと、この場合コメントを含みません。コメントは(普通は)コンパイラから見えません。
  • 特に重要でもないんだけど " The compiler has absolutely zero tolerance for spelling mistakes." と、そのあと1ページ半程度使って、ちょっとしたTYPO入 Hello, Worldがどかどか入っているのに、つい吹いてしまった。コンパイラは「もしかして・・・?」とも言わず、いちいちpickyに文句を言ってくる。と。
  • コンパイラはそのくらい「アホか」と言いたくなる程にマヌケで、しかも我々がやってしまう間違いも同様に「アホか」と言いたくなる程にマヌケなのです
  • しかし、ここでもし、コンパイラがKYして変にguessしてしまったらどうなるか
    • 当たったときはうれしいけど、外れたら大変。プログラマも当然コードはあっているものとして考えるから、問題が起こったときに何が原因かさっぱりわからない。結局全部疑ってかかるハメになる。
      • というかみんなもiphoneのワードコレクトとかに殺意を覚えたことあるよね?
  • 一番大事なことは、プログラミングにおいて、一字一句間違いにいちいち過敏に反応する一見うっとーしーこのコンパイラは、あなたを助けてくれる最高の友人である、ということ

案外重要な話だなー。

2.4 Linking

まあここも基礎ですからね。ダッシュですよね。

  • オブジェクトまで行ってしまうと大抵はシステム間の互換性はないよーとか。考えて見れば変な話ではあるんだけど。
  • コンパイル時→リンク時→実行時 。それぞれにエラーが有るんだけど、右に行くほど(下流ほど)把握も修正も難しいよーとか。
2.5 Porgramming environment
  • プログラムってのは 大きく見ると プログラマ(の頭の中) → 実行ファイル
  • 間がいろいろ変化してそれぞれツールを使う。ソース→オブジェクト はコンパイラ。 オブジェクト→実行ファイル はリンカ
  • あれ、プログラマ→ソース が抜けてるYO! => プログラミング環境
  • 汎用エディタつかってコマンドラインも使ってもいいけど、プロでもIDEとか当然使うよ
    • キーワードハイライトとか、デバッグ支援とか便利ー
Drill

はすべきなんだろうか・・・・サボる。

Exercises

もサボりたい。まだ何も必殺技を覚えてない状態だからしかたないけれども、これはつまんない。1章の課題のほうが面白かった。