長尾高弘のレビュー一覧
-
Posted by ブクログ
AI、人工知能。最近、よく目にするようになったキーワードについて理解が深まるかと思ったが、「心」とは何か、「心」をプログラムによって再現できるか、という内容が印象的だった。(タイトルで気づくべき)
科学技術としての側面だけではなく、哲学や脳科学の見地から考察と解説がされており、ぼんやりしたAIや人工知能のイメージがより具体化される。
AIはビックデータの解析やアナリストのような機能的役割と映画に出てくるようなアンドロイドのような人間的役割の二つに分かれるが、本著は後者における考察がメイン。
技術的な転用に対する考察について学ぶには、関連書籍を併読する必要がありそう。 -
Posted by ブクログ
サブタイトルにもあるとおり、Googleではテストファーストによりエンジニアリング生産性を向上させているというもの。正直、今の自分の知識では、本書の1/3も理解できなかったと思う。しかしながら、今携わっているシステム開発で、ちょうど受け入れテストを実施していて、想像以上に骨の折れる作業であることを痛感している最中に読んだため、Googleが進んでいることが際立って感じた。少なくとも、システム開発においてテストがいかに重要かという点は充分に学ぶことができた気がする。Chrome、Gmail、Youtube等に実際に携わっている人々のインタビューが収録されているから、その説得力は半端ない。
「テストは、イノベーションと開発のペースを遅らせるような摩擦を作るものであってはならない。」
「グーグルテストは、大軍ではなく、優れた戦術と高度な武器で百戦百勝を実現する少数精鋭の特殊部隊なのだ。軍の特殊部隊と同様に、グーグルテストの特徴はこの人材の少なさにある。ラリー・ペイジが『希少性は明確性をもたらす』と言っているように、人数が少ない分、私たちは必然的に優先順位をうまく付けなければならなくなる。」
「グーグルでは、形態よりも規模を強調するために、コード、統合、システムテストという区別をせず、Sテスト、Mテスト、Lテストという表現を使う。」
「グーグルのSWE(ソフトウェアエンジニア)は、顧客のもとに届けられるコンポーネントの開発に責任を負う機能デベロッパーだ。彼らは機能コードとその機能コードのための単体テストコードを書く。
グーグルのSET(ソフトウェアエンジニアインテスト)は、単体テストに関してSWEを助け、SWEがSテストより広範な品質問題を評価するMテストを書くときに使う大規模なテストフレームワークも各テストデベロッパーだ。
グーグルのTE(テストエンジニア)は、品質に関係するあらゆる問題でユーザーの立場で動くユーザーデベロッパーだ。」
「グーグルはコードレビューを開発プロセスの中心に置いている。コードを書くことよりもレビューすることの方がずっと大切なこととして大々的に取り扱われる。」
「ACC(アトリビュートコンポーネントケーパビリティ)は、製品の3つの側面を通じて立案者を導いていく。すなわち、?製品の目的と目標を説明する形容詞と副詞、?製品のさまざまな部分や機能を表す名詞、?製品が実際に何をするのかを示す動詞の3つだ。そして、これらの機能が働いていること、書いたコンポーネントがアプリケーションの目的、目標を満たすことをテストで確かめていく。」
「グーグルはイノベーティブな会社として知られるが、テストチームは確かにその評価にふさわしい。グーグルの社内で生み出され、使われているテスト実践やツールの数(そしてその多くは社外にも公開されている)は、このイノベーティブな精神がテストチーム同士を固く結びつけていることをよく示している。」
「私は自動化には懐疑的になってきているんですよ。テスターは自動化の大きなビジョンに情熱を傾け、自動化の作成に何カ月もかけますが、結局製品かプラットフォームが変わって、してきたすべてのことが否定されてしまいます。時間の試練に耐えられない自動化を書くこと以上にひどい資源の無駄遣いはありません。私の考えでは、自動化はすぐに書けてすぐに実行でき、非常に限定的な問題を解決するものでなければなりません。自動化されたテストの目的がすぐに理解できないようであれば、それは複雑すぎます。単純にして、範囲を限定し、何よりもまず、価値を追加するものにしなければなりません。」
「(グーグルに入ったころと比べてテストでもっとも大きく変わったことは?)
まず第1に、平均的なデベロッパーが以前よりもテストプロセスに関わり、自動化を書くようになったことです。彼らは単体、API、統合、フルシステムテストの知識を持っています。…第2に、テスト専門の職務に数百もの最高のエンジニアたちを引きつけられるようになりました。私は、この2つは関係があると思っています。これはテストを尊重する文化であり、テストを行うことは、そのために評価を受けることになったのです。」
しかし、一方、テストファーストも行き過ぎると問題となることも認識している点が追う立場の我々も考えなくてはならない点である。
「グーグルのように開発とテストを分離していると、職務によるつながりが強くなり、テスターが製品に一体化しにくくなってしまう。」
-
Posted by ブクログ
読みにくい本だ…。それほど目からウロコでもないような話題をタラタラタラタラ、翻訳書独特のの長ったらしい文章で説明し、「章タイトルは【最初に手をつけるバリューストリームの選択方法】なんだけど、バリューストリームのカテゴリの話ばかりして選択方法の話が出てこないぞ…」こんなのばっかりで、「これ何の話だったっけ?」と戻り読みすることが多くなかなか先へ進まない。
理想はそうなんだけどさー、どうやって実現にこぎつけりゃいいのよ?ケーススタディとやらも「日常業務の一部として問題を見つけ、修正していくことで、技術的に負債をマネジメントしていった」みたいな抽象的記述ばっかりで、いやいやクソ忙してくてそれどころじゃない職場で具体的にどうやってそれ進めたのか知りたいんだけど、という気持ちになりイライラして読むのが止まる。全然先に進まない。
p. 167 【第9章 デプロイパイプラインの基礎の構築】ほとんどすべての場合において、コードよりも環境のほうが帰られる設定が何桁分も多いからである。そのため、もっともバージョン管理システムが必要なのは環境なのだ。
→「修理するよりも再構築するほうが簡単なインフラストラクチャを作る」につながる。
“イミュータブルインフラストラクチャ”=本番環境に対する手作業の変更はもはや認められない。本番環境に変更を加えるときは、変更をバージョン管理システムに格納し、ゼロからコードと環境を作り直す以外の方法は許されない。そうすれば、本番環境に差異が紛れ込むことは絶対になくなる。
p.181 【第9章 デプロイパイプラインの基礎の構築】継続的インテグレーションの実践に必要な3つ
・デプロイできる状態になっていることをチェックする包括的で信頼性の高い自動テストセット
・チェックのためのテストが失敗したときには「生産ラインを全面ストップする」文化(=アンドン)
・寿命の長い機能ブランチではなく、トランクに小規模な変更を加えていくデベロッパー
p.185 【第10章 高速で信頼性の高い自動テストの実現】理想的な自動テストピラミッドは、大半のエラーをユニットテストで見つけられることである。インテグレーションテストや受入テストでエラーを見つけた場合、デベロッパーに返すフィードバックは桁違いに遅くなる。そして、インテグレーションテストは希少で複雑なインテグレーションテスト環境を使うため、この環境を同時に使えるチームは1つだけに限られたりして、フィードバックはさらに遅くなってしまう。
しかし、多くのテストプログラムは、マニュアルテストやインテグレーションテストに重点を置いており、これとは逆になっている。
p.237 【第12章 自動化とローリスクリリースの実現】「継続的インテグレーション ⊃ 継続的デリバリー ⊃ 継続的デプロイメント」
・継続的インテグレーション: ビルドが成功したら自動的にインテグレーションテストが実行される状態
・継続的デリバリー: トランクがいつでもオンデマンドでデプロイ可能な状態
・継続的デプロイメント: 以上に加え、最後のステップ(本番環境へのデプロイ)まで定期的に行っている状態
p.309 【第16章 フィードバックループおw実現して開発と運用が安全にコードをデプロイできるようにする】最初の段階では本番サービスをデベロッパーに管理させる。運用エンジニアに移管後、本番サービスが十分脆弱になってきたら、運用は本番サポートの職務を開発に返上(サービスハンドバック)できるようにする。
こうしたフィードバックループを作ると、本番環境へのデプロイが安全になり、開発が作るコードが本番環境により適したものになる。そして、共通の目標や責任を強化し、共感を強めるように仕向けていけば、開発と運用の間により協力的な関係を築くことができる。
p.336 【第18章 レビューと調整プロセスによって現在の仕事の品質を上げる】テストが失敗すると、私たちはとかくもっとテストをしようとする。しかし、プロジェクトの終わりの時期にただテストを増やすようなことをすると、かえって結果が悪くなることがある。特に、増やしたのがマニュアルテストだと弊害が起きやすい。デプロイのバッチサイズが大きくなり、変更の成功率が下がり、インシデントの数が増え、MTTRが長くなる。つまり望んでいるのと逆の結果になるということは、理論からも実践からもわかっていることである。
変更凍結期間を設定してバッチサイズの大きい変更をじっくりテストするよりも、スムースで継続出来な本番デプロイのフローの一部としてテストを日常業務に完全に組み込み、デプロイの頻度を上げるようにしよう。そうすれば、作業に品質を組み込み、もっとバッチサイズの小さい変更をテスト、デプロイ、リリースできる。
p.333 【第18章 レビューと調整プロセスによって現在の仕事の品質を上げる】ピアレビューでもバッチサイズは小さく保つ。変更のサイズが大きくなると、変更に対して意味のある批評を加える能力は下がっていく。「プログラマーに10行のコードのレビューを頼むと10個の問題点を見つけてきますが、500行のコードのレビューを頼むと、まあいいんじゃないと言われるでしょう」
p.342 【第18章 レビューと調整プロセスによって現在の仕事の品質を上げる】官僚主義的なプロセスを大胆に取り除く。終わるまで何ヶ月もかかる承認プロセス=ウォーターフォールのこと。
p.355 【第19章 日常業務での学習の実現と日常業務への学習の注入】 避難なしのポストモーテムイーティングにおいて「もっと注意する」「もっと愚かでないようにする」という対応策は認められない。この種のエラーが再び起きるのを妨げる本物の対応策を生み出さなければならないのである。
そのような対応策として考えられるのは、デプロイパイプラインの危険な条件を検出する新しい自動テストの導入、遠隔測定の追加、ピアレビューを追加しなければならない変更タイプの確定、定期的に設定されたGame Dayに実施される同じタイプのエラーのリハーサルなどがある。 -
Posted by ブクログ
公開鍵暗号法。
鍵が公開されているのに、なんで暗号化できているんだっけ?
何回読んでも忘れる。
今回もそうだろう。
でも、これまでで一番やさしく、かつ、数学的でした。
(以下抜粋。○:完全抜粋、●:簡略抜粋)
●公開鍵暗号法(P.75-78)
ステップ1:A、Bが秘密色を選ぶ
ステップ2:公開色を確認する
ステップ3:A、Bは自分の秘密色と公開色をまぜた混合色を作り、公開する
ステップ4:AがBの混合色を持ってくる
ステップ5:Aは秘密色とBの混合色を混ぜ合わせて、共有用の混合色をBに渡す
ステップ6:Bは受け取った共有用の混合色から、
公開色、Bの秘密色を取り除くと、Aの秘密色がわかる
○混合処理は「離散べき乗」、分散処理は「離散対数」と呼ばれる。
そして、コンピュータが離散対数を効率よく計算する方法は見つかっていないので、
離散べき乗は私たちが探している一方通行操作の一種と考えることができる。(P.85) -
Posted by ブクログ
ネタバレサブタイトルにある「あなたのRubyをより輝かせる48の特別な方法」のとおり、48個のTipsが詳細な解説と考えとともに記されている。数から見るともっとたくさんのTipsが欲しいところではあるが、解説や考えがしっかりと書かれているので、本書を読むのはそこだろう。
対象読者は、Rubyの文法や実行の方法をある程度把握していて、Ruby(含むRails)のプログラムを書いたことがある人のように思う。それまで書いたRubyプログラムの量にしたがって、それぞれ納得する部分が異なるだろう。その面では、繰り返し読むといいかもしれない。
それぞれの項目(Tips)が有用であるかは人それぞれであるが、個人的には、
・項目10 構造化データの表現にはHashではなくStructを遣おう
・項目44から48からなる第8章 メモリ管理とパフォーマンス
が勉強になった。特に第8章は書籍として記されることがあまり無いように思える。
若干解説が分かりにくいところがあるのと、値段が思いの外高いのが気になったので星は3つ。