【読書メモ】エクストリームプログラミング

近く転職する予定なのだが、転職先で上司になる予定の人から勧められたので『エクストリームプログラミング』を読んだ。 冒頭の「推薦の言葉」のセクションが実にうさんくさい。次のような言葉が並ぶ。 ソフトウェア開発は本来とても楽しいものだ。新しい価値が世の中に提供されることに、自分自身も仲間も、時には競合相手でさえも興奮を隠せずワクワクしてしまう。しかしやり方を間違うと、関係者が次々と不幸になっていってしまうこともある。XP はこうした不幸を避け、人間関係を良好に保ち、それぞれが仕事を楽しみながら求められる成果を出していくための方法論だ。(略)。 小野和俊 株式会社アプレッソ 代表取締役社長、株式会社セゾン情報システムズ CTO 他にも: XP は私の人生を変えた。(略)。本書は「XP とは何か」だけでなく「よりよい仕事・よりよい人生を送るための道」を示している。(略)。 懸田剛 Agile459 代表、日本 XP ユーザーグループ創立スタッフ 『エクストリームプログラミング』は技術書ではないのか? 「不幸を避ける」? 「人間関係を良好に保つ」? 「よりよい人生を送る」? これは自己啓発本なのか? 本書を読み進めることで、この「推薦の言葉」の意味が理解できた。僕のような XP に慣れていない人間には、XP は「ペアプログラミング」や「テスト駆動開発」のようなプラクティスを指す言葉のように思える。しかし XP は単なるプラクティスではなく、それがもたらす「価値」や「原則」にも重きを置いている。本書では XP が大事にする原則のひとつとして「人間性」が挙げられている。 「人間性」の章は次のようにはじまる。 人間がソフトウェアを開発する。このシンプルで逃れようのない事実によって、利用可能な方法論の多くがその効果を失っている。ほとんどの場合、ソフトウェア開発は人間の欲求を満たしていない。人間の弱さを認めていない。人間の強さを活用していない。ソフトウェアを人間が開発していないかのように振る舞えば、関係者にかかるコストが高くなり、人間の欲求を認めない非人道的な行為によって、人間性が失われてしまう。こうしたことは、高い離職率に伴うコストや組織の崩壊、クリエイティブな行動の機会損失など、ビジネスにとっても好ましいことではない。 これも含め、本書はソフトウェア開発に関わる人間的な側面を丁寧に記述している。たとえば「よいチームとは?」「よい見積もり (スケジュール)とは?」など。そういう問を深堀りして得られたプラクティスが、ペアプログラミングでありテスト駆動開発である、という感じだ。 ところで XP を採用していないチームに XP を導入するのは大変そうだと思っていた。本書を読んでも「大変そうだ」という感想は変わらない。本書の第 16 章は XP を組織に導入したブラッド・ジェンセン氏 (Senior Vice President of Sabre Airline Solutions) へのインタビューである。ひとつ面白い Q & A がある。 Q: XP の導入は簡単ではなかったと思います。 A: そうですね。最初は 3 分の 1 の人が懐疑的です。その他の 3 分の 1 はすぐに取り入れてくれて、残りの 3 分の 1 は様子を見ています。最終的には、80~90 % が取り入れてくれます。10~20 % は、嫌々 XP を使います。3~5 % は、絶対に取り入れてくれません。ペアを組もうとしなかったり、コードの所有権を主張したりするプログラマーがいたら、解雇する勇気を持つべきです。残ったチームがあなたを助けてくれるはずですから。 [Read More]

【読書メモ】第2版 ゼロからはじめるデータベース操作

ソフトウェア技術者としての自分の弱点のひとつに「SQL の読み書きが遅い」というものがある。僕は長らく「RDBMS の ACID 特性には価値があるけど、SQL はいまいち表現力が低くて書き心地の悪いものである」と考えていた。さらに言えば「ACID なデータストアを扱うための何らかの DSL が、将来的に SQL を置き換えるだろう」とすら考えていた。

この予想は大外れであった。現代では RDBMS ではないデータストアさえ SQL (もしくは SQL ライクな) インタフェースを備えるようになり、SQL を自在に使いこなせないと日々の仕事に差し障るようになった。つまり、SQL を自在に扱うことのできない僕は、仕事に支障が出るようになってしまったのだ。これはまずい…。

そこで SQL を読み書きする訓練のため、参考書を探すことにした。SQL 関連書籍のレビューを読み漁ると、ミックさんの本の評判がとても良い。最初の一歩として、彼の書籍の中でも「初級」とラベリングされている『SQL 第2版 ゼロからはじめるデータベース操作』を読むことにした。

これは実際のところ、かなり易しく書かれた本である。それでも僕程度の SQL 力だと学べることも多くあった。具体的には CASE 式やウィンドウ関数の読み書きは不得意であったが、それらの機能についても馴染むようになった。「馴染む」と言えば、この本は各章に練習問題がついている点が素晴らしく、読んだ内容を手に馴染ませられるような作りになっている。

また、MySQL, Oracle, SQL Server, DB2, PostgreSQL を対象として書かれている一方で、それらが標準 SQL に準拠していない場合はその旨の記述がある点も素晴らしい。おかげで MySQL での練習もスムーズに行うことができた。ちなみに、この本では「ウィンドウ関数は MySQL では使えない」という記述があるが、MySQL 8.0 以降ではサポートが追加されている。これは余談になるけど、前回の「使い捨て可能な MySQL の実験環境」という記事は、この本の練習問題をこなすための環境構築時に書いたものである。

ところで、練習問題の想定解は書籍のサポートページに掲載されている。 しかし、このページで提供されているファイルは SJIS でエンコードされており、UTF-8 環境では文字化けに悩まされることになる。僕は次のシェルスクリプトで UTF-8 に変換した上で、もろもろの操作を行った。

#!/bin/bash

find . -type f -name '*.sql' | while read -r file
do
    echo "$file"
    iconv -c -f sjis -t utf-8 "$file" | tr -d '\r' > tmpfile
    mv tmpfile "$file"
done
exit

【読書メモ】デザインされたギャンブル依存症

デザインされたギャンブル依存症」を読んだ。

とあるブログ記事で本書が紹介されていて、興味を持った。そこでは「ギャンブル中毒者は (大金を得るためではなく) “ゾーン” に居続けるためにスロットマシーンをプレイする」と書かれていた。

プログラマーの生産性はいかに効率よくゾーンに入るかにかかっている。ギャンブルにハマりたくはないが、プログラミングにハマるのは健全だ (たぶん)。そう考えて、カジノ業界がいかにプレイヤーをゾーンに導くのか、その手口を知りたくなったのだ。

しかし、本書の主眼はそこではない。

プログラマーがゾーンに入って丸一日仕事をすると、心地よい疲労感と充実感が得られる。しかし、ギャンブル中毒者はそうではないらしい。「なぜ自分はギャンブルをやめられないのか」「なぜ排泄感があっても台から離れられないのか」と考えてしまうらしい。僕はゾーンに入る体験は幸せなものだと思っていたが、必ずしもそうではないようだ。

本書を読んで良かったのは、心理学者のミハイ・チクセントミハイ氏が唱える「フローに入るための4つの必要条件」を学べたことだ。

  1. 行動のそれぞれの瞬間には小さな目標がなければならない
  2. そのゴールを達成するためのルールが明確でなければならない
  3. その行動が、その人の立場で、瞬間ごとに確信が得られるように、即座のフィードバックを与えるものでなければならない
  4. その行動の作業が操作上のスキルと合致していて、制御と挑戦が同時に起こっているという感覚を与えるものでなければならない

最近 LeetCode で少しずつランダムに問題を解いていて、楽しいと感じている。おおむね 30分~数時間程度で問題を解く (もしくは理解できずに解説を読む) ということをしており、この「問題を解く」ときに自分はフローに入っているように感じる。かなり高い集中力で、問題のことだけを考えているのである。

これは僕にとって LeetCode がミハイ氏の4つの条件を満たしているからだと思う。目標は「問題を解くこと (= 自動テストを通すこと)」であり、そのルールは明確である。またテストを通せたかどうかは数秒でわかるし、プログラマとしてのスキルセットで問題を解くときには制御と挑戦が同時に起こっているようにも思う。

もっと自分を意識的にフローに持っていけるように訓練していきたい。

【読書メモ】ユニコーン企業の秘密

ユニコーン企業の秘密」を読んだ。著者の Spotify での経験をまとめた内容になっている。序盤で Google, Amazon, Facebook を「スタートアップみたいに運営されている 企業」として「ユニコーン企業」と同一視している。僕の感覚ではそれらの企業はだいぶ風土が違うので、違和感があった。

Spotify は Spotify モデルを使っていない」という話がある。これについては「訳者あとがき」にも書かれている。本書を読んだ者としては、単に「Spotify モデルは変わり続けている」ので、ある時点のスナップショットと比較すると「Spotify は過去と同じモデルで運営されていない」という表現が正しいと思う。一方で Spotify カルチャーの原則は時代を通して安定しているように感じる。

「自身の勤務先に Spotify 風の文化を取り入れるのは難しそうだ」と思った。本書で繰り返し言われている「権限を与えて」「信頼する」ことを実践できるのは自分なのか? そもそも権限を与える権限が自分にはないぞ…というようなことを考えてしまった。

【読書メモ】Learn or Die

Learn or Die」を読んだ。副題は「死ぬ気で学べ プリファードネットワークスの挑戦」である。だいぶ主張の強いタイトルだ。

本書はプリファードネットワークス (以下 PFN と書く) の共同創業者二人が書いた本である。Startup DB の記事によれば PFN は日本のユニコーンの中でも最も時価総額が高く、かつ二位とはダブルスコア以上の差をつけている。広く業界からリスペクトを集めている企業だ。僕も PFN には注目している。

実は過去の職場で PFN の前進である PFI 出身の方と一緒に働いた経験があり、PFN も順風満帆であったわけではないという話は聞いていた。本書では「創業者同士で借金をしながら従業員の給与を払った」という過去のエピソードも紹介されている。輝かしい企業の生々しい苦労話を読むのは楽しい。こういう読書経験を通してこそ、自分自信の苦労も肥やしにする力がつくように思う。

著者らの Nerd な一面 (“一面” というより、こちらの方が本質なのかもしれない) を垣間見えるのもよい。著者の西川徹さんが中高生の頃に教室にパソコンを持ち込み、プログラミングをしながら授業を聞いていた話などは、率直に「羨ましい」と思った。西川さんは筑波大学附属駒場の中高一貫校のご出身らしく、その環境を「自由な校風」と表現している。僕が卒業した小・中学校にはそのような自由はなかった。せめて自分の子どもにはなるべく自由な世界で過ごしてもらいたいと思った。

ところで、つっこみたくなったのは Epilogue の次の一節である。

これからの5年、10年くらいで人間はコードを書かなくなるだろう。本編でも書いたとおり、私たちは、人間がコードを書かなくてもプログラムを組めるようなシステムを作っているということになる。

もしかしたら、そういう日が来るかもしれない。本書の出版は 2020 年なので、著者らは 2025~2030 年くらいに「人間がコードを書かなくなる」時代が来ると考えているのだ。しかし PFN は「小学生から始めるプログラミング教材」を作っている会社でもある。彼らの予想が的中すれば、今の小学生が大人になる頃がまさに「人間がコードを書かなくなる」時代ということになる。本当に 10 年後に人間がコードを書かなくなると思っているなら、このプログラミング教材は何のためのものなのか。ちなみに、僕は 2030 年でも人間はばりばりコードを書いているのではないかと予想している。

そのようなことを思いながら、本書を読んだ。

【読書メモ】リモートワークの達人

リモートワークの達人」を読んだ。「NO HARD WORK!」と同じく BasecampJason FriedDHH が書いた本である。

なぜ僕は Basecamp の創業者の本を読んでしまうのか…。だいぶ前に「小さなチーム、大きな仕事」を読んで、それに感銘を受けたからだろうな。過去にはそれに触発されて「僕も制約を受け入れ、副産物を売るぞ」という具合の記事を書いたりもした。

「NO HARD WORK!」についての記事を書いたときと同じく、Basecamp の主張をずっと読んできた身としては特に新しい話はなかった。自分は Basecamp のファンではあるけど、頷きづらいところもあった。たとえば「本当に集中したいときにオフィスに行こうという者はほとんどいない」という主張には「そうでもないんじゃないか」と思った。僕が「小さなチーム、大きな仕事」を読んでいた頃は独身で、こういう主張には頷かされたけど、家庭で乳幼児を育てている身としては、家よりオフィスの方がだいぶ集中できる。リモートワークの恩恵を受けられるのは、そういう家庭環境にある者だけだ。

今の職場では、東京都の緊急事態宣言に応じて「消極的にリモートワークを導入している」という感じだ。みな「一時的に」リモートワークをしているという認識なので、さまざまなほころびが出ている。具体的に言えばマイクの音質のせいでミーティングの音声が聞きづらかったり、オフィス側とリモート側で情報格差が出たりという具合だ。本書ではリモートワーカーの割合が低いとリモートワーカーは「少数派」になるので意識的にケアしようという主張がある。まったくだ。しかし、こういう意見は会社全体としてのコンセンサスがなければ通らない。消極的なリモートワーク導入では改善も難しかろう。「本を読んで翌日から実践」というわけには中々いかない。

現職の消極的なリモートワーク導入を経験て思うのは「オフィスには行きたくないが自宅で働くのも難しい」ということだ。この本では「リモートワークは必ずしも自宅で働くことではない。コワーキングスペースやカフェなどで働いてもいいのだ」と主張している。僕も数年後にはそういう働き方をしていそうな気がする。ただし、その場合はリモートワークという働き方に積極的に投資をしている会社に移っているという前提がありそうだ。

【読書メモ】NO HARD WORK!

NO HARD WORK!」を読んだ。日本語版には「無駄ゼロで結果を出すぼくらの働き方」というサブタイトルがついている。BasecampJason FriedDHH が書いた本である。

僕は彼らの書く本が好きで、数年前まではよく読んでいた。しかし「NO HARD WORK!」は二年も前の本である。僕の「追っかけ」熱も冷めてしまったものだ…。

本書の感想を端的に言うと「いつもの Jason と DHH だな…」だ。率直なところ、これまでの Basecamp の本を読んでいれば、目新しい情報や主張は多くないと思う。

その中で少しだけ、かつての Basecamp と「主張が変わったなあ」と思うところを紹介しよう。Basecamp の昔の本である「小さなチーム、大きな仕事」には「けんかを売れ」と言う節があった。これは業界のトップブランドに対して「違いを打ち出して顧客を奪え」という主張であった。一方で、本書の「ハッピーな不戦主義者」では、「競合を意識してもしょうがない」というようなことを言っている。Basecamp も変わったものだ。僕は本書の主張の方が好みだ。

他に面白かったのは「Basecamp では、ユーザー数で課金しない」という話だ。「失う勇気」という章で書かれている。「ユーザー数で課金すると、大企業がクライアントになったときに大金を手にしてしまう。そのため、その企業の意向を無視できなくなってしまう」とのことである。この考え方はすごい。売上を (ある程度) あきらめることで、自由を手にしているわけだ。こういうポリシーで会社を運営できるのは強い。

「NO HARD WORK!」は楽しく読めたものの、やはり昔ほど Basecamp の本に入れ込めなくなってしまったように思う。ソフトウェア技術者として経験を積む中で、ある程度の諦観を持ったからかもしれない。ここで紹介されている素晴らしいノウハウを自社に持ち込むためには、他のメンバーにも同じ理解をしてもらう必要がある。これは容易ではない。たとえば「リアルタイムチャットは害悪である」という主張が本書にある。僕だけがこの主張に同意してもうまくいかない。他のメンバーにも同じように理解してもらえない限り「返事の遅い嫌なやつ」になってしまうだろう。しかし、Basecamp の主張は癖が強いので、僕の友だちの中にも「受け入れられない」と言う人もいる。なかなか実世界に Basecamp の考えをインストールするのは難しい。

現実的には、本書のエッセンスを汲んだ上で、役立つところだけを少しずつ組織に導入していくしかないのだろう (もしくは転職する)。

NO HARD WORK!

【読書メモ】子どもをインターナショナルスクールに入れたいと思ったときに読む本

子どもをインターナショナルスクールに入れたいと思ったときに読む本』を読んだ。

発達の遅れている息子の進学先としてインターナショナルスクールも候補に入れようと思い、この本を手にとった。「発達の遅れ」と「インターナショナルスクール」のどこに関係があるのかというと、いわゆる留年の扱いである。日本の義務教育ではよほどのことがないかぎり、留年することはない。一方で、インターナショナルスクールでは発育状況に応じてカジュアルに留年させられると聞いて、それは息子にとってはむしろ素晴らしいのではないかと思い、本書を手に取った。

本を読んでみて、その点はやはりインターナショナルスクールは魅力的だと思った。本書では「一学年下げての入学」というセクションでこの仕組みに触れている。著者の子どもも「一年下げての入学」を経験しているとのことだ。

「人は人、自分は自分」といった姿勢のインターナショナルスクール社会では、一年歳が上だからといって色眼鏡で見られることはなく、いじめが起こることもまずあり得ません。そのおかげで親も子も安心して決断ができます。年齢のずれは自発的に起こるケースばかりではありません。小学校の中ほどになれば、海外からの転校生が転入時に一年学年を下げられることはざらです。中高レベルでは更にそうです。

実に素晴らしい。

しかし「息子をインターナショナルスクールに入れたいのか?」と問われると、まだ自信をもって「はい」とは言えない。やはり出費は相当かさむようだし (学費だけで年あたり220万円くらい、こまごました出費を含めて約250万円、初年度は更に100万円くらいの入学費、ESLプログラムを受けるとさらに年間30万円前後、長期のサマースクールも100万円前後…)、インターナショナルスクールがウリにしている「自分の頭で考えさせる教育」というのも、個人的にはそれほど魅力に思っていない。

日本の教育は北米にくらべて保守的かつ横並びであり、教科書を暗記するものだと批判されがちだと感じる。この本も似たような主張をしている。しかし、わたしはそれは必ずしも正しくないと思う。

少なくとも、わたしは教科書を暗記するような勉強をしたことはない。また、日本の受験である程度以上の点数を取るためには、暗記ではなく理解しなければならない。さらに言えば、高校から先の進路はまったくもって自由だし、自分も高専に進学してからは教育指導要領から外れた内容を学ぶことができた。

このことを踏まえて、暫定的には「インターナショナルスクールは魅力的ではあるものの、あくまで二番目の選択肢。公立小学校の普通学級を目指せる水準の発育にもっていきたい」と思った。

子どもをインターナショナルスクールに入れたいと思ったときに読む本

人生の楽しみ

ご冗談でしょう,ファインマンさん』を読んだ。

ご冗談でしょう,ファインマンさん

実はこの本を通して読むのは初めてである。名著と名高い本なので、過去にも手に取ったことがあるけど、途中で挫折していた。当時は著者のファインマン先生の実験内容が文章から想像しづらく、内容に没頭できなかったからである。

今回も、彼が行った実験を「よく分からない」と思うことはあったけど、目をつぶって読み進めた。そのような雑な読み方であっても、影響を多く受ける内容であった。

とりわけ感銘を受けたのは「社会的に役に立つ仕事」を追求することでスランプになった彼のエピソードである。

前にはあんなに物理をやるのが楽しかったというのに、今はいささか食傷気味だ。なぜ昔は楽しめたのだろう? そうだ、以前は僕は物理で遊んだのだった。いつもやりたいと思ったことをやったまでで、それが核物理の発展のために重要であろうがなかろうが、そんなことは知ったことではなかった。ただ僕が面白く遊べるかどうかが決めてだったのだ。

この気づきから、悟りを開くことができたという旨の記述がある。

また、このエピソードの続きには、大学のカフェテリアでふざけて皿投げをして遊んでいる様子を観察しながら、皿の運動について計算し、それが結果としてノーベル賞に結びついたという話がある。

結局のところ「意義があるかどうか」などとしみったれたことを考えず、自分の興味を追い続けることこそがブレイクスルーにつながるのだと思わせられる、良い話であった。

【読書メモ】つま先立ちのサンちゃん

つま先立ちのサンちゃん』というマンガ本を読んだ。

つま先立ちのサンちゃん

記憶が正しければ、これは SmartNews を読んでいるときに出会ったマンガで、自閉症っ子の子育てを描いているものなので興味を持った。主人公のサンちゃんは息子よりも少し年上なので、これから起こりかねないことについて心の準備をしようと思った。

身も蓋もないことを言えば、この本を読むことで何か新しい知識を得ることはなかった。ただし、気持ちの面で少し楽になることはあった。たとえば、サンちゃんも我が子と同じく言葉の習得が遅いが、それでも言葉を少しずつ覚えているらしいこと。また、友だちを意識することも少しずつできるようになるらしいこと。これらの事実は「息子がそんなことをできるようになる日が来るのだろうか…」と心配している身からすると、福音である。

また、サンちゃんと我が子の共通点はとても多く、そういう意味でも近しい子どもの行動を知ることができて、よかった。

自閉症っ子の子育てについて知りたい人、もしくは知る必要がある人には読みやすくてとっつきやすいマンガ本だと思う。