個人事業主になったので真面目にアウトプットしてみるブログ

フリーで顧客の会社に潜り込んでAndroidアプリつくって、とりあえず食っていけるようにアウトプットを増やしていくブログです。

フリーランスのエンジニアが2017年に読んでためになった本5冊

@okuzawats さんのツイートを見て、マイナー?な本の紹介もされていて刺激をもらったので、たいしたことないAndroiderな僕の去年勉強になったと思う本を5冊ほど紹介していきます。

逆説のスタートアップ思考

逆説のスタートアップ思考 (中公新書ラクレ 578)

別に、ハッキリしたホームランを狙うプロダクトがあるわけでもなくスタートアップを興そうとかは考えていないのですが、ここに書いてある事がSF界隈での当たり前なのだという事をしるためには良い本です。

この書籍に書いてある大まかなことは下のスライドをみるとわかります。

www.slideshare.net

これだけでもかなり面白い内容ですが、書籍の方には(情報が多少古かったりするのかもしれませんが)米国のスタートアップ界隈どのようなことが起きているのかを垣間見る事ができ、日本でフリーランスとして活動したり、就職が必要になったときにどういう企業を選ぶかの参考にもなります。日本のプログラマ等のエンジニアがSO狙いの糞しか集まらないような筋の悪いスタートアップに遭遇する確率を減らすためにもどうでしょうか?

関数型リアクティブプログラミング(Programmer's SELECTION)

関数型リアクティブプログラミング (Programmer's SELECTION)

プログラミングが本業なので、自分のプログラミング観を一つ崩した本としてこの「関数型リアクティブプログラミング(書籍)」を紹介したいです。

RxJavaが日本のAndroider界隈で話題になったとき、RxJavaが何なのかを知るには情報がほとんどなくて全然理解できないで、しばらく使い方や利用例だけで何とか知識を増やしていったのですが、この本の序盤のラザニアの例やリアクティブプログラミングと関数型リアクティブプログラミングの違いの解説で腹落ちしたので、僕のように他人の説明ではまったく腹落ちできない僕のような人は序盤の部分を読むだけでもリアクティブプログラミングについて理解したい人には充分に価値があると思います。

僕のプログラミング観がどう崩れたのかって話をすると、やはり本書のラザニアの例が中心になります。FPRでのコードは「手順の説明(操作的定義)的なコードであるより概要的(概念的定義)であるように宣言的プログラミングを利用する」という感じの説明が序盤にあるんですが。まさに僕が日ごろからOOPで書いても「コードがぐちゃぐちゃになる人は、処理の粒度が混ざって見通しが悪いコードを書く、逆に粒度が整理されていて見通しが良いコードはぐちゃぐちゃになりにくい」ってところと、厳密的には違うのですが、リンクしたというかそれにさらに、昇華されたもののような知識を手に入れられたのが大きいです。

具体的にはこんな感じです。

ラザニアの作成を手順の説明(操作的定義)的な書き方で表した時の例
1. 大き目の鍋に油を熱する。
2. 玉ねぎをきつね色になるまで炒める。
3. 牛ひき肉とトマトを加える
4. …

ラザニアを概念的定義で表した例
* ラザニアとは、チーズソースの上に平打ちのパスタ、ボロネーゼ、チーズソース、平手打ちのパスタ、ボロネーゼを順番に重ねていき、その上にする下したチーズをかけてオーブンで45分焼いたものである。
* ボロネーゼとは・・・
* チーズソースとは・・・

とこんな感じです。これをコードで表す感じです。あまり厳密的ではないですがRxでいうならそれぞれボロネーゼ、チーズソースといった名前のついたObservableをつなげて合成していくとラザニアができあがって行くイメージでしょうか? 細かい点は購入するなりして本書にあるコードを見てくださればわかると思います。

FRPではそれがストリーム(シグナル?)の関数の合成として表現できるという事がわかったので、現在の自分が個人開発で書くViewとロジックをつなぐコードはRxBindingなどを使ってストリームの合成で書くようになってしまっていて、それ以外の書き方はなるべくしないようにしています。ちょっとしたハシカです。(この手法がプログラミングにおける書き方のベストというわけではなくあくまでも個人の趣向に依存していますが、対話的で複雑なリアクティブなコードが書きやすくなっていて非常に有益性を感じています)

RxJavaの記事を見ているとFRPについてネガティブに書かれている記事が見られたりするんですけど、まだ何がどう悪いのかについては彼らが言う事を理解するには至っていません。状態が隠れて見にくい。一度作りこんでしまうと変更しづらいという話を聞きますが、それは書き方の問題をFRPの問題と転嫁しているのか、FPR自身の問題なのかを確かめられFRPに未来がないと感じるまでは少なくとも続けるかもしれません。(賢者は歴史に学ぶという話がありますが、それが可能なのは限定的で、当人や伝達者の改竄、バイアスが発生している可能性が小さくない以上、学べることはそうは多くないと考えています。選択と集中はこういうところで発揮したらいいかと。)

本書で紹介されるのは主にSodiumというライブラリなのですがRxJSでFRPのやり方やRxの問題点なども開設されているので、RxJavaについて知見を得たい方にもおススメです。(それがRxであるはず)

github.com

本書はさらに実践的なFRPを段階的に学べる内容になっています。僕もここの3章までの内容などを実際にRxJava(Kotlin)で書き起こしてみました。

github.com

プログラミングClojure 第2版

プログラミングClojure 第2版

去年は、僕にとっての関数型プログラミング事始めでした。

関数型プログラミング自体は以前から気にはなっていましたが、Kotlin、ScalaやRxJavaを少し触る程度でおわっていたので、改めて本格的に関数型プログラミングを学んでみたいという事で、SchemeOCamlHaskellScala、Rustなどを選定しているうちに一番興味を持ったのがClojureでした。

まずなぜClojureを選んだかというポイントで言うなら、言語的にシンプルであるというポイントです。実は始めたときにはそのシンプルが何を指すのかわかっていなかったのですが、いろいろな関数型プログラミングが利用できる言語について知っていく上で他の言語は単純な関数型プログラミングを知る以上に多くの知識があふれており面倒に感じました。情報が多いことは良いのですが、関数型プログラミング初心者が選ぶにはたやすい言語ではない言語が多すぎ、少々辟易していたところにClojureという言語を知ることができたのが大きかったかもしれません。さらにRxやKotlinなどで勉強している関数型プログラミングが表現している延長に近いもの(厳密的ではないが並行処理としてのデータ不変やロック回りの話や関数ファーストみたいなところで、モナドがどうとかという部分ではない部分)を勉強したかったというのもあります。

本書ではClojureを知るという意味で全体像、文法の基礎を学ぶのに適しています。

書籍の話ではなくClojureの勉強の話全般になってしまうのですが、日本語書籍は限られていますがClojureのコミュニティは非常に活発的で多くの人が積極的に参加している感じで、Clojure言語の設計者であるRich Hickey氏のカンファレンスでの発言はとても本質的で、非常に刺激されるものがあり。ぜひ継続して学んでいきたい動機が多い言語です。

Clojureのサブ勉強本として仕えたのが「七つの言語 七つの世界」という書籍です。全部は読んでませんがいろいろな言語を知ることができます。この本の著者はモナド推しHaskell推しのようですがw

7つの言語 7つの世界

Clojureでリアクティブプログラミングやりたいと思ったので下記の書籍もKindle版を買ってみました。

手順の説明は非常にわかりやすい英語になっているので、英語が苦手でもそう怖くはない気がしています。

Clojure Reactive Programming - How to Develop Concurrent and Asynchronous Applications with Clojure

真面目な話はそろそろやめて、怪しい本系を紹介していきたいと思いますw

残酷すぎる成功法則

残酷すぎる成功法則  9割まちがえる「その常識」を科学する

これはAmazonで結構上位にあった本なので、有名どころすぎてアレかもしれませんが。

最近話題になったグリッドについても、それだけではだめだとかいろいろ気づかせてくれる内容が多かったし、エビデンス込みで解説してくれるので自己啓発に余念のない人は、一読しても損はないかなーという気がします。

2100年の科学ライフ

2100年の科学ライフ

この本は怪しい本ではないですがw

今後のテクノロジーが発展していっても、ハイテクはハイタッチ(他人との共感を示せる場)がないと決して成功しないという話があり。全部読んではいませんがとても興味深い内容になっています。

去年はKindleOasisを買ったので、積極的に利用して通期でぶっとい本2冊、MBAスマホ3台みたいな重装備をするケースを減らしていこうと思います。