Write Code or Die

RubyやRailsまたはバスケットボールや筋トレについて書きます。

直撃本田圭佑 を読んだ

直撃 本田圭佑

尊敬する人は?と聞かれていつも答えるのが本田圭佑

小学校の頃にサッカーをやっていたのもあり、日本代表戦は欠かさずみるようにしている

特にW杯南アフリカ大会からは個々の選手にも注目して記事を読んだりYouTubeでプレーを見るようになったのだが、そのなかでもやっぱり本田圭佑に自分は惹きつけられた

理由は色々あるが、この本を読んでその理由に納得させられた

個人的にはビジネスよりもサッカーでの成功をもっと期待したいところだが、それは次のロシア大会まで楽しみにしようかなと思う

試合に出て活躍して欲しい

以下、心に残ったセリフ集

  • 都合のいいのが嫌いで。かっこいい感じやなと思ったら俺はしゃべるし、ダサいなと思う時はしゃべらんし

  • 人のやらへんことを、やりたいからね。それをやったら、誰もたどり着けへんやろって思っている

  • 1年後の成功を想像すると、日々の地味な作業に取り組むことができる

  • 要は自分の信念から逃げるか逃げないか。逃げれば楽やし、その瞬間は楽しいけど。逃げへんかったらその瞬間は辛くて厳しいけど、そのぶん未来に楽しい時が来るかもしれない

  • 人生は白黒で、グレーにするかどうかっていうのはそれぞれの身勝手な考え方であって。そっちの方が楽だから。日本人はグレーを好む

  • 1割のいい時のためにどんな辛いことも頑張れる。その喜びのためにサッカーをやっているし、これからもやり続ける

  • 下に落ちるっていうことが進化していないということではないんですよ。下に落ちるのも、次に上がるための変化かもしれない。上がるために落ちることが必要なこともある

  • 一般の父にとって衝突に見えたとしても、自分にとっては衝突でもなんでもないってこと。むしろ俺にとって衝突を避けるのは相手に媚びていることにしか思えない。本音を言ったことで何かが起こると恐れているというようにしか見えへんから。むしろ相手のためになるのに本当のことを言ってあげない。俺から見たらそんなものはなんの改善もされへんコミュニケーションでしかないよね

  • 人間関係を大事にするなら本音を言わないとあかん。むしろ俺は、本音を言わない人は逆に人間関係を大事にしていないように思える

  • やっぱ、格ってしらんまに身についているものやと思うんですよ。人が判断するもの。自分がどの程度の格かって、自分ではあんまりわからんかったりするから。絶対に負けたくないという気持ちがオーラになり、試合での存在感につながる。そこに差があると、どうしてもビビってしまう。ビビっているつもりはなくてもね

上に立つ人間は普通の人とうまく物事を進めるためのコミュニケーション能力が必要なのだろうか?

本音でぶつかれる仲間をどれだけ作れるかが人生において大事なことだと思う

直撃 本田圭佑

オペレーティングシステムの仕組み を読んだ

文系プログラマの自分はいつまでたっても基礎的なComputer Scienceの部分が弱いので悩みである。 今回はOSのことが知りたくて、オペレーティングシステムの仕組みを読んだ。

オペレーティングシステムの仕組み

OSのおすすめ本を探すととにかくこの本が出てくるのだが、Amazonで3500円もするのでちょっと躊躇していたが、カウルで500円で入手。 カウルにやられているな〜と思いつつ素直に買った。

感想なんだが、読んでよかった。(毎回これだが)

1~6章に関しては、まさに自分が欲しかった情報が書いてあった。 広く浅く感は否めないが、あまり深いところまで行くと理解が難しいのでちょうどよかった。

  • プロセスとスレッド
  • スケジューリング
  • メモリ管理と仮想記憶

この辺りの基礎的な部分が知れてよかった

業務でよく聞くけど、何言ってんだろうみたいなのいつまでも思いたくないんだなあ

一旦これでわかったつもりになってみる

Working with Unix Process というRubyで書かれたプロセスの本を昔読んだが、これを読んだ今また読んだら勉強になりそう

カウルでバンバン本を買ってしまっているので消化しないと

あ、ついでにこれも買ったらかなり捗ってます

Amazon.co.jp: actto BST-02BK ブックスタンド(OEM品番:EDH-004): パソコン・周辺機器

面と向かって言うのが何よりも大事だと言うこと

結局組織とか人との関係で問題になってしまうのは、「面と向かって言わないから」に尽きると思う。

こう思ったのは別に特定の組織のことを考えてと言うわけではなくこれまでの組織とか人間関係を振り返ってみるとそう思う。

とはいえ

「みんながみんな思ったことを言うと好き勝手な意見や言葉が飛び交ってしまいまとまらない」

と思われがちだが、果たしてそうだろうか?

「意見を言う」と言うことに「責任」を持てば自ずと「話をきく」と言うことになると思う。

そして「意見を言う」ことは「結論を出す」と言うことを全員が責任を持つべきであると思う。

よく、アメリカ人は思ったことを素直に言うと言うが、単純にそう言う文化なんだと思う。

何だか口うるさいルームメイトがいて、黙って話を聞いて少しストレスが溜まっていた時もあったが、最初の段階でちゃんと話していればよかったんだなあと今になって思う。

もちろん信頼を築く前に本音で話すのは少し難しいけれども、後になって出す方が難しいし、トラブルの原因になりがちである。

加わって年齢とか先輩後輩とか言う先天的な上下関係があったりする。

それでは自分はどうすればいいか?と言うことだけれども

立場が上の人には引けないところだけしっかりと意見を言って、同じ立場や下の人とはちゃんと本音で話すことが大事なのかなと

対面している人はやはり人であり、その人に対しては誠意を持ってリスペクトを伝えながら接して話すことが一番の信頼を築く方法だと思う。

正直そうやって接していると、リスペクトを感じない人も出てくる

その人はその人で放っておいて、リスペクトを持てる人としっかりと向き合って行くのが重要である

そう言った意味で悪気がなくてもリスペクトを失うような言葉を発してしまうことがあるから、それは注意しないと

抽象的ですが、そんなことを考えました

ポストプレイのディフェンスについて

今回は技術とは全然関係ないバスケットボールのお話。

GW中に都民大会とやらが開催され、自分の所属しているチームは多摩代表として出場することができた。 結果は悔しくも6点差で港区に1回戦負けという結果であったのだが、その敗因の一つとしては自分のポストプレイのディフェンスにある。

もともとシューターやフォワードのポジションでプレイしていた自分だが、今はチームの事情によりセンター寄りのプレイをしている。オフェンスはまあなんとか少しずつできるようになってきたのだが、自分より大きな相手に対峙するとどうしても守れない。またはファールになってしまう。 元来背の高い選手が有利なスポーツなのである程度仕方ない部分はあるが、もう30%くらいは守れないだろうか。そう考え少し研究してみることにした。

ビデオから要点を洗い出す

www.youtube.com

  • 小さいプレイヤーは相手がドリブルをしている時にチャンスがある
  • ペイントエリアに押し込まれる際に低い姿勢で耐えて距離を一定に保つことでターンアラウンドショットを打たせる

www.youtube.com

  • 45度以上の角度の場合は内側から、0度の場合は外側から半身でボールを入れないように守る

www.youtube.com

  • topからは必ずボールが入らないようにする
  • ポストにボールが入るまでは半身で守り、入ったら後ろに回る

www.youtube.com

  • 半身を保つことでなるべく外側でボールをもらわせるようにする
  • ボールの角度が変わっても体の距離を変えずにパスを入れさせない

www.youtube.com

(見た感想)

  • ポジションを取られる前にポジションをとる
  • とにかくゴールの近くでボールが入らないようにする

まとめ

どれもよく聞くようなことだけど改めて頭に入れるといいことであった。少しずつ実践してよくしていきたい。

あとは試合中に相手の癖をいかに掴むか。ここは頭を使って守りたい

Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る を読んだ

Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る

業務でgolangを使用する機会が出てきたので、勉強がてら読んでみた。

結果として、すごくよかったと思う。

もちろん万人ウケする本ではないと思うのだが。例えばgolangの仕様自体に関しての説明があるわけではなく、どちらかというとwebサービスの作り方の説明として、golangを使うとしたらこうやるよっていう入門書という感じ。

HTTPの基礎とかをすごくしっかり解説してあって、個人的にはとてもありがたかった。

というのも、Railsしかこれまでやったことがなかったので、色々とブラックボックスになっている部分が自分には多くあったからである。

「なんか知らないけどwebサーバーが動いている」状態から「webサーバーの仕組みがなんとなくわかる」状態にはなれたと思う。

初心者にはとっつきにくい印象だが、標準ライブラリが充実してるし、ちょっとしたサービスを作るにはgolangは意外と適してるのかもしれない。早いし。

フレームワーク使ったりしたらどうなるのだろうか?

とりあえず今まで業務で書いたgolangのコードをリファクタしたい気持ちにすごく襲われている、、、、

webサービスを作る上での考え方が上がった気がする

Amazon.co.jp: Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る impress top gearシリーズ eBook: Sau Sheong Chang, 武舎 広幸, 阿部 和也, 上西 昌弘: Kindleストア

Confident Rubyを読んだ

Confident Rubyを呼んだ。

正直に言うと呼んだと言うより眺めたと言う方が近いかもしれない。 引数に関して222ページもあるのには正直驚いた。gemを作るときなどは参考になりそうなことは多かったが、自分が直接使えるところは全てではなかったので、メソッドの書き方に困った時に辞書的に使うのがいいかもしれない。

基本的にメソッドは以下の4つの働きをしていて、それについて深く解説してある本だった。

Collecting input
Performing work
Delivering output
Handling failures

最近業務でgolangを使っていてRubyの柔軟性が恋しくなる時が多々あるが、そう言う意味でもCollecting inputについては気をつけることが多くあると言うことかな。

本の中によく出てきたので、これを機にyieldの使い方を再確認できたのがよかった。

色々読みたい本はあるけど、ちょっとgolangのことをもっとキャッチアップしなければまずいので、Goの本に一度浮気しようと思う

99bottles of OOP を読んだ

オブジェクト指向実践ガイドを書いたSandi Metzの新刊を読んだ。

実は年末くらいには買っていたのだけれども、積ん読してしまっていた。

しかし先週アップデート版が出たというお知らせを受けて(pdf版なのでアップデート版ももらえる)これは読むしかないと思い週末を利用して一気に読み終えた。

内容

OOPを実践する際の指南書。 オブジェクト指向実践ガイドももちろん表題の通りオブジェクト指向について解説していたが、それよりも実践寄りの内容。そして多くのページがリファクタリングについて書かれている。

It turns out that everything you need to know about Object-Oriented Design (OOD) can be learned from the “99 Bottles of Beer” song.

という一文から始まる通り、99 bottles of Beer という曲を作るクラスを書くところから始まる。

気になる人はここにサンプルコードがあるので参考になるかもしれない。

章ごとの概要(個人的なメモ) 

1 Rediscovering Simplicity

  • 自分で99 bottles of beer エクササイズをやって見て、例文と比較
  • 極端に具体的なコード、極端に抽象化されたコード、適度に抽象化されたコード、そしてShameless Green なコードの例
  • 品質の良いコードの判断材料
  • SOLC, Cyclomatic complexity, ABC
  • “good enough” なコードを書くこと

2 Test Driving Shameless Green

  • TDDの基礎的なところの解説
  • 99 bottles例文を使ってコードの品質を測定しながらTDD
  • コスパの良いテストを書く

3 Unearthing Concepts

4 Practicinng Horizontal Refactoring

5 Separating Responsibilities

6 Achieving Openness

  • the Data Clump code smell
  • Polymorphism
  • サブクラス
  • オブジェクトを「製造する」
  • 新機能を安全に追加

感想

まずは正直に読んでよかったと感じた。オブジェクト指向実践ガイドもそうだけれども、Sandi Metzの本は本当にオブジェクト指向に関して深い洞察を与えてくれると思う。何が一番良いかというと、本全体を通じて一つのコードを深く掘り下げていること。他の本では章ごと、いや話題ごとに異なるコードを用いて解説しているのであまり実感がわかないというかいざ自分が使うタイミングがイメージしづらいのだが、この本では99 bottles のコードを共に完成させていくような言わばチュートリアル的な感覚で解説してくれるので非常に自分はわかりやすいと感じた。そういえばオブジェクト指向実践ガイドでもBycycle クラスをずっと話していたのでわかりやすかった。

また、最初から最後までコードを変更した際に一貫して以下の質問をして考えている。

How difficult was it to write?
How hard is it to understand?
How expensive will it be to change?

--- 以下99bottles のケース--- 

How many verse variants are there?
Which verse are most alike? In what way?
Which verses are most different, and in what way?
What is the rule to determine which verse comes next?

個人的な新たな発見はこの本の至る所にあったのだけど、クラスの分割の部分が全く新しい概念だったと思う。普段Railsを使うにあたって、どうしても膨らみすぎてしまうクラスが出てくるのだが、迷った時にはこの本を参考にしながら書いていきたいと思う。

他にもコードの品質を測る方法や理論が多く出てきたので、また見返しながら調べようと思う。

3, 4, 5, 6章は全てRefactoringを参考にして書いてあるらしいので、読んでみるか。

しかし次はConfident Rubyと決めているので購入した。

その次はRefactoring

関連

www.sandimetz.com

オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方 | Sandi Metz, 髙山 泰基 |本 | 通販 | Amazon

Amazon.co.jp: Confident Ruby: 32 Patterns for Joyful Coding (English Edition) 電子書籍: Avdi Grimm, Sandi Metz: Kindleストア

Refactoring Ruby Edition