書評 - エンジニアの知的生産術

最近アウトプットが減っていると感じており増やしたくて手に取った。インプット、考えをまとめる、アウトプットまで知的生産に必要な要素がたくさんの文献から集められている。

インプットで参考になったのは

  • 読みたいところから手をつける
  • 目次は情報が圧縮されていて有用
  • 読書は本によって目的が違う(娯楽、情報を見つける、理解を組み立てる)
  • 脳内で音読すると遅くなるのでしない

考えをまとめるで参考になったのは

  • 5分で知っていることを書き出してみる(書き出し法)
  • KJ法

アウトプットで参考になったのは

  • 時間を区切る(タイムボックス化)

書き出してみると特にどうやって情報を集めるか、インプットの部分で参考になる箇所が多かった(人によって変わると思う)。今まで何かを勉強するぞ、となるとつい体系的に学ぼうとしてスピードを意識していなかった気がする。後、せっかく本を買ったので全部読まないともったいないという気持ちとか。

これからは必要な情報をできるだけ最短距離で取得していくように、状況によっては書籍やWebページも辞書のように使っていくことを意識してみたい。

この本のおかげで、インプット、知識をまとめる、アウトプットのやりかたは以前よりも効率よく行うことができそうだ。

ただし、その後に湧いてきた問題としてどの問題に取り組むべきか?どうやって取り組むことを発見するのか、というのがまだはっきりしていない。ここについては書籍の最終章をもう一度読み直したり、ほかの書籍にもあたってさらに考えを深めていきたい。

「エンジニアの知的生産術」を読んでいる

まだまだ途中だが面白い。個人的に印象に残ったところを抜粋する。

  • 大まかに全体像を把握するのは大切、Pythonリファレンスは1000ページあるが目次は6ページしかない、賞見出しは34行しかない
  • プログラミングは、作って検証することにとても適した教材
  • 新しいことを学んだら「1日前の自分にどう説明するか?」を考えて解説するとよい
  • 悲観的な勘違いと楽観的な勘違いでは悲観的な勘違いのほうが影響が深刻、楽観的な勘違いは後から考えて修正できる
  • 時間を固定して実行する手法をタイムボックス化と言う(今やっている)
  • 読むことの目的。娯楽、情報を見つける、理解を組み立てる
  • 読む速度が遅い人の中には、無意識に声帯を動かして「静かな音読」をしている人がいる(気をつける)

全部読み終わったらまた感想書く。知的生産をしている全ての人におすすめ。気になる一章があればそこだけのために買ってもよいと思う。

書評 - 学びを結果に変えるアウトプット大全

歳をとって体力が落ち20代の頃に比べて無理がきかなくなったこともあり、昔に比べてソフトウェアを作って公開したりブログを書くことがなかなかできなくなっていた。アウトプット量を増やすキッカケになればと思い手に取った。

インプットは結構できるのにアウトプットはなかなかできないなぁと思っていたのだが、「アウトプットは運動である」という一節が心に残った。インプットとはエネルギーの使い方が違うので、アウトプットするにはそれなりの準備が必要とのこと。長時間アウトプットをするのは大変なので時間を区切って一気に書くとよい、などアウトプットのためのコツがたくさん書いてある。(この読書感想文も書籍内のテンプレートをベースに10分で書いている)

アウトプットを増やすには、毎日小さなアウトプットをするトレーニングを繰り返して、アウトプット体力を増やしていくしかないらしい。毎日5分で日記を書くのがよさそうだったので、しばらく続けてみることにする。

Goのコードリーディング、math.Abs()

math.Abs()のコードリーディング。

src/math/abs.go

関数本体。まずはFloat64bits()とFloat64frombits()を探す。

// Abs returns the absolute value of x.
//
// Special cases are:
// Abs(±Inf) = +Inf
// Abs(NaN) = NaN
func Abs(x float64) float64 {
    return Float64frombits(Float64bits(x) &^ (1 << 63))
}

src/math/unsafe.go

float値をIEEE754形式の符号なし64bit整数で返す。 複数個あったがmathパッケージなのでおそらくこれ。

// Float64bits returns the IEEE 754 binary representation of f.
func Float64bits(f float64) uint64 { return *(*uint64)(unsafe.Pointer(&f)) }

Float64frombitsはIEE754形式の符号なし64bit整数をfloat64に戻す。

// Float64frombits returns the floating point number corresponding
// the IEEE 754 binary representation b.
func Float64frombits(b uint64) float64 { return *(*float64)(unsafe.Pointer(&b)) }

src/math/abs.go

ここで再び元の関数に戻る。

  1. xをFloat64bits()で64bit整数に
  2. 1 << 63で一番左ビットのみ立った64bit整数
  3. &^golangbit clear演算子
  4. 1 &^ 2なので一番左のビットがクリアされることになる
  5. IEEE 754によると最上位ビットは符号なので符号ビットがクリアされることになる
  6. 最後にFloat64frombits()でfloat64に戻して終了
return Float64frombits(Float64bits(x) &^ (1 << 63))

毎日コードリーディング、List.csで使われている属性

List.csを引き続き読む。

標準ライブラリは型の先頭に大量のコメントや属性が付いているものが多い。1つずつ調べていくことにする。

TypeForwardFromだけ分からんが後はだいたいわかった。

型定義のdll置き場所を変えたときも、参照側のコードを変えずに済む仕組みというのは大量のユーザーを抱えるMSらしいよい仕組み。

毎日コードリーディング、List.cs (1)

最近日課で毎日5-10分ほど興味のあるソースコードを読むようにしている。毎日少しずつ知らない知識がたまっていってなかなかよい。毎日少しずつコードリーディングのよさを伝えるためにブログにも記録することにした。

今読んでいるのは.Netの List.cshttps://source.dot.net/ は関数をタップすれば実装にジャンプできるのでスマホでも読みやすい。

内部実装に T[] を使ったシンプルな動的配列として実装されている。versionという変数がちょっと変わっていて配列を書き換える度にインクリメントしている。前回アクセス時のversionの値を保存しておくことで、次回アクセス時に内容が書き換わったかをチェックすることができる。IEnumeratorなどで使われている。

IListなど色々なインターフェースに対応しているのは色々なニーズでも動くようにするためだろうか。

List自体の実装はシンプルで読みやすいのだが大量にある属性の意味がまだ分からない。次はその辺りを読んでみる予定。

音声日記 2018-02-25

Googleドキュメントによる音声入力のできが大変良いので、これを使って日記を書いてみる。

OpenSiv3Dの最新版に物理エンジンの機能がついて、30行程度で動物タワーバトルが書けるようになった。インパクトが強い引きの強い機能は必要だとつくづく感じる。0.2.4でスクリプト機能が入るらしいが、どれくらいのものが入るのか気になっている。やはりAngelScriptを使うの.だろうか。SketchWaltzもそろそろ再開したいがやることの多さと着地点(どこまでやるの?何も目標とするの?)がいまいち見つからずやる気がでない。VisualStudioの練習だと思えばアリなのだろうか。

自分が過去に作っていてそこそこ上手くいった思えるものは、1番のお客さんが自分というパターンが多かった(MilkodeもFireLinkもHonyomiも結局自分が欲しかった)。SketchWaltzにもドックフーディングする対象が必要なのだと思う(作りたいゲームがある、とか)。

他にやりたいこととしてはFirefox QuantumのためにFireLinkを移植したい。0から作ると大変そうなのでFormat Linkにコピー用のキーボードショートカット機能を付けて改造してみるのはどうだろうか?(受け入れてもらえたらPRも出す)

minttyからWSLを使う方法があるのを見つけた。そのうちやりたい。