30歳からのプログラミング

30歳無職から独学でプログラミングを開始した人間の記録。

『アルゴリズム図鑑 絵で見てわかる26のアルゴリズム』を読んだ

プログラマとしての基礎体力をつける、が今の関心事なので、アルゴリズムとデータ構造についても勉強しようと思っている。
その第一歩として、評判のよかった本書を読んだ。評判通りの良書だった。

www.shoeisha.co.jp

Apple の「Best of 2016」の一つにも選ばれたアプリの、書籍版。

とにかく感動するほど分かりやすい。
書籍なのでアニメーションはないが、処理の流れを省略することなく、1ステップ毎に大きくてカラフルなイラストで説明しているから、アニメーションを見ているのと変わらない。説明も、とにかく丁寧で、それでいて無駄を削ぎ落としたシンプルなものになっている。

あくまでもアルゴリズムやデータ構造そのものの説明に徹しているため、実装やプログラミング言語は一切出てこない。
そのため、プログラミング未経験者でも読めると思う。本書を読むのに必要なのは、アルゴリズムとデータ構造に対する関心のみだと思う。
逆にプログラミング経験者は、自分の好きな言語で実装してみると勉強になるはず。ものによっては本書の内容だけでは実装に落とし込めないけれども。
自分も JavaScript でいくつか書いてみた。

github.com

セキュリティを成り立たせている技術のアルゴリズムにも触れていて、よかった。
今まで読んだ公開鍵暗号方式の説明のなかで、一番分かりやすかった。あくまでも仕組みの説明に留めており、現実の実装には触れていないからだと思う。
構成も秀逸で、まず共通鍵暗号方式について解説し、それが抱える鍵配送問題に触れる。そのうえで、鍵配送問題を克服できる公開鍵暗号方式について解説している。次に、公開鍵暗号方式の問題点を紹介し、その対策として TLS のようなハイブリッド暗号方式やデジタル署名を紹介する。
「現実的な説明」をしようとすると、これらの要素を一気に伝えることになり、理解するための難易度が上がってしまう。

知識がなくても読めると書いたが、計算量オーダーの部分だけは数式やlogが出てくる。が、本書の主題ではないし、問題ないと思う。自分も読み飛ばした。

本書で学ぶような内容を実務で使ったことはないし、必要になったこともない。
だがそれは、その程度の仕事しかしてこなかった、ということだ。そして、実力のない自分は、その程度の仕事しか出来ない。
人気のライブラリを使って機能要件を何となく満たすだけ。

以下の記事に出てくる「完全に仕様を満たさないものや過多な機能を提供するライブラリであっても、作るアプリの仕様をそのライブラリに合わせて変えるなど工夫して使うようにしていました。仕様がライブラリに依存してしまっていたのです」という状態であり、ただライブラリを使うだけのプログラマ。

kawasin73.hatenablog.com kawasin73.hatenablog.com

このブログの方は東大に通っていて来春からは Google で働くらしいので自分とは全然違うのだが、問題意識や危機感は似ている。
このままでは大成できないし、作る側のプログラマになりたい。自前主義というわけではなく、トレードオフを考慮して、必要に応じて自分で作ることも出来るプログラマでいたい。ライブラリが上手く動作しないときに、コードを読んで調べられるプログラマでいたい。
「このままでいいわけがない」という思いが募り、勉強を始めた。あまり時間がないからあれもこれもは出来ないが、とにかくやるしかない。