作者: ねこ丸
日時: 2007/9/18(12:29)
  ねこ丸です。

# 連休は家にいませんでした

Bruce. writes:

> あ、いや。わたしの云わんとするところはですね。
> 本来Cで書くべきではないレベルの入門書にまでCを使ってはいないだろうか。
> ということです。「行き着く」のニュアンスがわたしにはちと違うものの
> ように感じられます。

  そうですね。たぶん違います。というか強引に自分の感想を言っただけになっ
てます(^^;
  自分の感覚はですね、そもそもプログラミング入門の類いって最近出てるん
だろうか?ってことですね。そういうのは C の本がドカーンと出た時代で終わっ
てしまったんじゃなかろうか?終わってしまったような気がするな、ってこと
です。だからきちんと勉強しようと思ったら C 華やかかりし時代に遡らなけれ
ばいけないような気がするってことです。

# 単に自分が入門書探してないだけでもあるんですが。

  最近、C を使わずに書かれたプログラミングの入門書って出てるんですかね?
雑誌の企画なんかではあるんでしょうけど、書籍としてまとまってるものって
あるのかなぁ。こんな地味なテーマ、そんなに新しいものが出るようにも思え
ないのですが…。
  情報処理技術者試験の教科書なんかには試験の範囲内では恐らくそういう情
報は載ってると思いますけど、ああいうのって広い範囲の中の一つになっちゃっ
てるから、実際にアルゴリズムの動作を詳細に追いかける余裕ないですよね。

# そんなこともあって「アルゴリズムとデータ構造」とか、今になってまた買
# おうかと悩んでいる次第。前に持ってたはずなんだけど、どっか行ってしまっ
# たので。


> 「趣味」でいくつかの質問掲示板(おしえてgooとかYahoo知恵袋とかそんなの)を
> 見ていますが、デバッグのやり方なんて教わってないんだろうなあというのが
> たくさんありますし、独学でやってる場合なんかはまずそういうのを知ることは
> できないですよね(皆無ではないけどそういうことが書いてある本がない)。

  print デバッグとかそういうことではなくて、ですか?
  そう言われると自分もデバッグの方法って自信ないです。コードをとにかく
短くぶった切ってユニットテストを書くようにしたら、以前よりはデバッグは
確実に楽になりましたけど。


> あと、差し支えなければ「うまく説明できなかったことがら」の実例を
> 一つ二つあげてもらえませんでしょうか? ちと興味がありますので。

  うまく説明できなかったと自分で書きました。
  はい書きました。

  でも改めて考え直してみると、なんかそうじゃないような気がしてきました。
そのーなんというか、もうちょっとメモリ効率とか cpu time に sensitive に
なってもいいんじゃないかと思うことがある、ということなんですよね。結果
として目的の動作はしてるんですが、どうも無駄なことをしている、なのに書
いた当人は言われるまでそれに気づいていない。(気づいていてもあえて書く
スピードの方を採ったとかではない。)現実には一回の実行において何倍も差
が出るわけではないが、Web アプリなのでレスポンスは少しでも改善できた方
がいいですし、同時アクセスが増えたときの挙動になると徐々に怪しくなって
くる、といった具合でしょうか。

  例えばこのデータしか読み取らないならこっからここまでのすべての設定用
のデータを丸ごと読み込む必要ねんじゃね?とかそういうところに意識がいっ
てない、そうなるとこの設定用のデータそのものの構造がこれだと効率悪いん
じゃね?(一部だけ取り出せた方がいんじゃね?)というところに意識がいっ
てない。一応説明すれば分かるわけですが、なんてゆーかこの、書きながらピ
ンとくることってあるじゃないですか。「あ、これ無駄だ」って。あぁいうの
がないんだろうなぁということなんですよね。で、この感覚ばかりは説明でき
んわけです。(やっと戻ってきた。)

  ただ、何度となくコードの叩き直しをやってるうちに、「このコードは気持
ちよくない」あるいは「怒られる」と書きながら思うようになってくるようで
す(^^;  まだそれを具体的にどう直すか、というところまでは自力で辿りつか
ないようですけど、傾向としてよくなってきている印象は持ってます。

  あれですね。どうも自分の中でも経験として学ばなければいけないことと、
知識から学べることの区別がついていないようです。例えばこの調子で深く考
えもせず C やアセンブラを勉強してもらっても、恐らくその「知識」がコード
に反映されることはないような気がしてきました。

  前回のメールを出す前に自分で日記に書いていたのですが、まず大事なのは
ちゃんとプロファイルを採るってことなのかなぁと最近考えています。(メモ
リについては確認できないですけど。)Ruby は標準でそれができるので、開発
プロセスに組み込みやすくていいですよね。Python については分かってないで
すけど、これが PHP だとプロファイラを自分で調達してセットアップするとこ
ろから始めなきゃいけないんで、そこがネックになります。(そして PHP のバー
ジョンも絡んでくる。)

  最後に、なんとか無理矢理にでもまとめてみると、

* 効率に対して勘が働くようになってほしいなとは思う
* そのために C、アセンブラレベルまで落として考えるのが得意な人はそうす
  ればいいけど、たいていのケースにおいてそれは必要ない(だいたい、最新
  の CPU、コンパイラのレベルについていける人って本職でない限りそんなに
  いないような?)
* ボトルネックの洗い出し方法が分かって、それを日常的に使えるレベルにな
  るとよいのでは?

  て辺りでしょうか。

  件の人も、結局自分がコンピュータをいちばんモノにできたと感じていた時
代がマシン語を操っていた時代だったというだけのようで。しかも昔話を押し
付けられてもなぁと思っていたらよく読むともしかして年下?みたいな展開で
恐れおののいている次第。自分は全然若手のつもりなんだけど、最近のアルファ
なんちゃら、みたいな人たちには全然ついていけないし、なんにしても都会の
人たちはまぶしいなぁ、てな感じになってきてしまうのでありました。むぅ。
これはいかん。

--
    ねこ丸