VisroFreeMind

Flashで何か作ろうと思って、visorFreeMindソースコードを読んでみた。
FlashってAdboeの出しているオーサーリングツールとしてのFlashでこねくり回しながらちょこちょこASを書きつつ作るものだと思っていたけど、これは全部ソースだけで表現してあった。そもそもの開発環境が違っていて、VisroFreeMindではMTASCというフリーのコンパイラを使ってswfファイルを生成している。

本当はActionScript3.0の大きめなシステムのソースコードが読みたかったのだけど、visorFreeMindはActionScript2.0っぽい。正直、違いが良く分かっていないんですが。

あと分かったのが、ノードの位置決めが面倒くさいということでした。兄弟ノードが子ノードを開いているかどうかで位置制御する分けですが、足したり引いたりしてて面倒くさそうでした。これが無いと、アイコンがセット出来てちょっとビジュアルなツリーでしかないので、ここが肝要なのかなあ。

いとこに聞く!SICPの良い所、悪い所

いとこに聞いたSICPの良い所。

  1. 抽象化について学べる
  2. たった2章でインタープリターとコンパイラを学べる
  3. Schemeのコードが短い
  4. メンテナンスの勉強になる

抽象化について学べる

前のエントリーに書きました。

たった2章でインタープリターとコンパイラを学べる

SICPでは4章がインタープリターで5章がコンパイラになっています。インタープリターやコンパイラはプログラミングの原理であるので、これがどのように動いているかをちゃんと分かっているのは、コーディングする上で重要なこと。たった1章で動作可能なインタープリターやコンパイラを作れるって、凄く低コストなことです。これを実現可能にするのは次の項目。

Schemeのコードが短い

重量級な概念を伝えるにはたくさんコードを書かないといけない。Schemeでは書くことが少ないし、抽象化もやりやすいのでコードが全般的に短いです。そのため、重量級なものも「1ページ内で」見通せる量で書けます。じゃないと確かにかったるいよね。

メンテナンスの勉強になる


SICPの問題の多くに含まれるパターン:

「こういう概念があって、これはこのような記述が出来る、これをこのようなケースにも対応出来るようにするにはどうすれば良いか」
このパターンの問題を解くときには、前に書いてあるコードを書き移して、変更していくことになります。すでにあるコードに処理を挟み込んで行くことでメンテナンスの練習になるらしいです。ちなみに僕は今1章が終わって2章の勉強中なのですが、あんまりそういう印象をもっていなかったのだけど、4章5章は結構そんな感じらしい。

悪い所

とっつきにくい。勉強会とかないとやれないよ。

いとこの参加した勉強会

いとこが参加したSICP勉強会は、毎月ある土曜に毎回8時間もかけてやっていたそうです。ひたすらSICPを音読し、問題にさしかかったらせーので問題を解いていたそう。僕が会社でやっている勉強会は、問題を解いてきて担当者が説明するというもので、毎回30分〜1時間で終わります。大分あっさりしているな。

いとこに聞く!優秀なプログラマーの勉強法

超久々にいとこがうちに来た。家に来るのは20年ぶり?くらいかも。会ったのは15年ぶりくらいかも。ちなみに同い年です。

いとこはZopeのコミッターで僕よりもずっと優秀なプログラマーなので、優秀なプログラマーの勉強法についてひたすら聞いてみました。(あ、思い出話は一つもしなかった笑)

抽象化を学ぶ

業務アプリを書く上で最も重要なのは抽象化とのことです。抽象化によって汎用性やメンテナンス性の高いコードをじっくり書くのが自分の仕事だと言っていました。その勉強方法としていとこがやったこと2点。

  1. SICPをじっくりやる
  2. オープンソース(Zope)のコードを読む
SICPをじっくりやる

計算機プログラムの構造と解釈

計算機プログラムの構造と解釈

SICPの1章は手続きの抽象化について、2章ではデータの抽象化について書かれています。それが普通に勉強になったそうです。たしかに、Schemeでやっている抽象化って、Javaなんかと比べて「一段自由」な感じがしますから、学習材料として適切なのかもしれません。100Kgのベンチプレスを上げるトレーニングとして、120Kgのベンチプレスを途中まで上げるのが適切であるように、抽象化を学ぶのに一番高い抽象化の出来る言語で学ぶのは適切かと。

オープンソース(Zope)のコードを読む

抽象化を行うためには、その言語での抽象化のベストプラクティスを学ぶのが早い。となったときに、その言語で書かれた大きめのソフトウェアのコードを読むことでそれが分かるのではないか、ということです。彼の場合はそれはZopeでした。興味があったから読んだというよりは、業務上で使っていたのでその中身のコードを読んでいく内に自然と学んでいったそうです。抽象化といっても優れたものと駄目なものとあるので、優れたものに目を通すのが重要。

花火はなぜ美しいのか

東京湾花火大会に行ってきて、あらためて「美」について考えたのでちょっと書きます。

花火の美しさのポイントって

  1. コントラストが強い
  2. 光の減衰
  3. 光のスピードの減衰
  4. 対称性

だと思っています。この話は、より美しい花火とはどういうものか、という話ではなく花火というものは一般になぜ美しいのかという話です。

潜在意識的な「理解」の最大化

これは思いっきり持論なんですが、美しさとは無意識化のニューロンの興奮量の最大化だと思っています。これを別の言葉で言えば、潜在意識的な「理解」の最大化。潜在意識的な理解というのは、自分の「意識」に到達する前の外部世界の認識の処理の事です。目の前にコップがあったとして、「ああ、コップがあるなあ」とはあまり思わなくて、目の前にあればコップがあることは分かっている。じゃあ、なぜ分かっているかというと勝手に処理されているからであった、その処理のことを無意識化の処理と私は呼んでいます。勝手に。

2種類の理解

その処理における「理解」って2つあると思っています。

  1. 存在の理解
  2. 法則の理解

いずれも、理解というよりは認識といった方が正しいかもしれません。

花火における存在の理解

1点目の存在の理解を向上させる戦略は、

  1. コントラストをはっきりさせる
  2. 動かす

の2点だと思っています。この意味では花火って本当にベストプラクティス。闇夜に光らす、そして、動かすわけですから。

花火における法則の理解

2点目の法則の理解というのは何かと言うと、「等間隔であるという理解」「グラデーションがなだらかであるという理解」「対称性の理解」など、何らかの法則があってそれが認識出来ることです。この観点いうと、花火って法則にリッチ。花火は(多くが)対称性を持ち、スピードは摩擦によってなだらかに減衰し、光はなだらかに減衰します。

以上はどうでも良い話でした

まあそんな説明はどうでも良く、とてもきれいな花火でした。

日米資格4冠王の超スピード学習法

日米資格4冠王の超スピード学習法

日米資格4冠王の超スピード学習法

釣りっぽいタイトル(笑)。本とはそういうものだ。
知識集約産業で働く人がどのような勉強法を取っているのかが知りたくて読みました。

目次

  1. 片田舎からの成り上がり人生
  2. 内海式「フレキシブル」学習法とは何か
  3. 実践!内海式「超スピード」攻略法
  4. 米国公認会計士&米国弁護士「ダブル」取得法
  5. 「超スピード合格」をサポートする26のヒント

筆者は日米の弁護士と日米の会計士の資格を持つ人で、その資格を取得するに当たっての勉強法について書かれた本。最近読んだ記憶の本で書いてあるようなことが実践されているなあと感じました。

へえと思ったこと

特にそれを思ったのは、日本の司法試験の勉強について書かれている所、具体的にはカードに解法を身につけたい問題を書いておいてそれをひたすら色々な視点で見るという所です。

問題集はそれぞれ3冊買っていて、普通の勉強用の1冊と、このカードを切り取る用で2冊(本は両面刷りなので、必要なも問題を全てカードにするには2冊必要)

覚えたい問題を見つけてはカードを作って、色々な観点でちゃんと説明出来るようになったら捨てていく。

ポイントになるのは

  1. 繰り返し見る効率を上げる
  2. 色々な観点で説明する

ということだと思います。

記憶するには、(適切なタイミングで)繰り返し見るしかないです。じゃあ、そのコストをいかに下げるか、ということがとても重要。ただ、それだけだと丸暗記になってしまって、色々な状況における判断で使えるような知識にはならないので、色々な観点で見直す。正しい工夫だなあと思いました。

テストファースト

あと感じたのは、高レベルな資格試験におけるテストって、「人材が満たすべき仕様」を的確に表しているのではないかということ。(その仕様はあくまで能力面に限る)。プログラミングにおけるテストコードがそのコードの仕様を最も的確に表すものであるように、資格試験(の傾向?)自体が人材の能力の仕様になっているんじゃないかと。その点、IPAがやっているソフ開の試験とかって、全然仕様を表現できていない気がしました。ソフトウェア開発者の本質って設計をすることとコードを書くことです。しかし、ソフトウェア開発技術者の試験はプログラミングの周辺的な知識の量を見ているだけ。その点、弁護士の仕事の本質は、存在する法律と照らし合わせて論理展開することであり、その力をちゃんと問えているテストなんじゃないかと思います。

感じた示唆

ここから自分が感じる示唆は2点で、

  1. テストファーストの教育というのがありうる
  2. プログラミングにおいて設計やコードの意図を説明させる試験が良いのでは?

ということ。

教育をテストファーストで行う

1点目は、教育を検討するにあたってまず最初に「こういうテストをパスする人材を育成する」ということを明確にしてからカリキュラムを考えると良いのではないかということです。従来の教育では、作りたい人材像を抽象的に書いて、なんとなく網羅性のありそうな教材をそろえて、説明して、説明した内容に関する知識をテストして、というものだったと思います。こうなったときにテストのやり方も変えないといけないと思う。ペーパーではかれないのであれば、それを測れるテストも検討しないといけないし。

設計やコードの意図を問う試験

2点目は、司法試験からのアナロジーなんですが、プログラミング系の試験でも「意図を問う」ような試験が有効なのではないか、ということです。司法試験は、過去判例の「意図」と照らし合わせて正しく論理展開する力があるかどうかを問う試験。それと同様に、設計やコードの意図を説明させる試験が有効であるのではないかと思いました。論理展開という意味では、法律もプログラミングも変わりませんし。

もっと知りたかったこと

この本を読んでもっと知りたかったなあと思ったのは、資格勉強以外の勉強方法についてです。知識集約産業に属する人であれば、日常的にも知識をインプットしているはずで、それをどのようにやっているのかは知りたかった。

いずれにせよ、読みやすくわかりやすくためになる良書でした。

FutureWorks(やらないという意味ではない)

次は優秀なプログラマーの勉強方法について調べていきたいと思います。

情報処理心理学

目次

  1. 認知心理学」とは
    1. 近年の認知心理学に見られる特徴
    2. 認知心理学成立の歴史
    3. 認知心理学の台頭
    4. 情報処理心理学とコンピュータ
    5. 認知心理学認知科学
  2. メタ認知
    1. 若葉さんともう一人の若葉さん
    2. 若葉さんの「若葉さん」の『若葉さん』
  3. 処理資源
    1. エンジンとガソリン
    2. 「処理資源」と「注意」
    3. 「処理資源」と概念を整理してみると
    4. 資源は1つ?それとも複数?
    5. 多重資源理論
    6. ウィッケンズの多重資源モデルの原型
    7. 航空母艦メタファー
    8. 資源の種類はいくつある?
    9. 配分方針の決定は誰がする?
    10. ウィッケンズの多重資源モデルの改良型
    11. 多重資源理論が「循環論」に陥る可能性
  4. ワーキングメモリ
    1. 記憶の種類
    2. 記憶研究の始まり
    3. 短期記憶と長期記憶
    4. ワーキングメモリと短期記憶
    5. バッドレー・モデルにおけるワーキングメモリのサブシステム
    6. 「ワーキングメモリ人」?
    7. サブシステムの数
    8. サブシステム探しは錬金術と同じ?
    9. 知能構造との共通性
    10. 「中央実行系」の解明は知能の解釈と同じ?

記憶の分類や知識処理のプロセスについて、専門家が考えてきた概要が知りたくて読みました。そういう目的についてはかなりジャストでした。
個人的にもこういう分野についてつぎはぎの知識で考えたりもしてたんですが、結構考えていたことは正しかったなと思うのと同時に、先にはそういう懸念もあるのか、という学びもあってかなり良かったですね。

早稲田の人間科学科の学部の教科書らしく、表現も平易で読みやすかったです。会社に一冊は置いておきたい本。別に使わないけど。