何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

2017年大反省会

2度目の転職、2度目のPyCon JP LT、4冊の査読

2016年大反省会 - 何かを書き留める何か

特に誰も楽しみにしていない年末恒例の振り返りを今年も実施する。 2017年は2回目の転職を行ったりLightning Talkをやったり本の査読をやったりと去年の活動を継続していた。 相変わらず財政や健康には褒められた生活はしていないが、思い出せる限り記述して来年に繋げたい。

2017/01/09 自分が行っている業務に限界を感じる

限界を感じるのが早すぎるのでは。 自分の日記から一部改変して引用する。

気分的には転職したい。もっと給与が欲しい。まともな休日制度のところで働きたい。体育会系の雰囲気が嫌だ。自社サービスが好きになれない。世間は自社のサービスではなくそのプラットフォームが好きなのだ。

1度目の転職活動で解決したかった事柄は解決できたものの、入社前にはわからなかったこと、調査が甘かったことが多くこのような不満を抱えてしまった。 恐らく、実際の社風や休日制度を事前に知っていれば入社をしていなかった可能性も相当高い。 また、前々職では常駐請負だったので自社サービスに憧れていたが、やはりドッグフーディング出来る内容でないとモチベーションを高く業務を行うのは難しい。

2017/01/10 『Effective Python』とPython 3.6の関連を発見する

何となくPython 3.6のリリースノートや関連するブログのエントリを眺めていたら、第4章のメタプログラミングに関する内容をかなり書き換られることに気づいた。 メタクラスに関する内容なので少し苦戦したが、経過は以下のようにまとまっている。

いずれも、特殊メソッド __new__ や組み込み函数 type の煩雑さを避けることができている。

2017/02/01 「Python 3.6 リリースパーティ」に参加する

Python 3.6 リリースパーティに参加しました - 何かを書き留める何か

最初は聴衆として参加する予定であったが、Python 3.6関係で上記の発見があったのでLTで発表を行った。 内容も基調講演の石本さんの発表の一部を補完する内容でちょうどよかった。 無理してスライドを英語で書いたので『Effective Python』の著者であるBrettさんにも反応して頂けてうれしかった。

2017/02/24 転職を決意する

不満が出てきたから転職しようかな、という軽くて薄い動機だったのがこの日を境に強い決意となる。 この日に上司と所謂「働き方改革」に関する内容で真っ向から対立することとなった。 ベンチャーマインドを殊更前面に出すところとは自分は合わないんだなと強く感じた。

2017/03/18 『初めてのPHP』発売

『初めてのPHP』の査読を担当しました - 何かを書き留める何か

査読の実作業は2月前半に行った。仕事で心が荒んでいた状況での査読は癒しであり救いであった。 PHPをよく知らない状況で初心者の立場で査読を行った。 よりどころは公式ドキュメントであり、公式ドキュメントと違う用語を原著が採用していたりと大変であった。

2017/03/下旬 転職活動開始

採用サイトから応募したり、某コーディングテストの結果からオファーが来るサイト、某ドラフトサイト、前回とは異なるエージェントを駆使する。 前々職では郊外(婉曲表現)で夜遅くまで働かされていたので転職活動は有給を駆使する総力戦であったが、前職は都内だったので仕事帰りに訪問出来たりと相当楽であった。 転職活動で感じたのは、客ごとに高度にカスタマイズして提供する形は辛い、という事実である。

2017/03/26 多少、存在が認知されたような気がする

特に技術力に秀でているわけでもなく、社交性があるわけでもないが、PyCon JP 2016で意味不明のLTをしたり、リリースパーティで普通のLTをやったり、技術書を複数冊査読するという怪しげな経験、自称スウガクチョットデキルということが少しだけPythonのコミュニティで認知されたような気がする。顔がでかいから覚えやすいというのもあると思う。

なお、数学は学部2年から恩師と線型代数の自主セミナーを行い、卒論・修論グラフ理論整数論なので理学部数学科のゴリゴリの専門教育は受けていないが、似たようなことはやっている。 自分の弱点として多様体などの幾何方面が全く分からないこと、解析方面も怪しいこと、代数も加群を(van der Waerdenを読んだので)ほとんど知らないこと、がある。

2017/04/13 転職活動は進む

日記から怪文章を引用する。

フンザからは定員充足のためというお祈りメール。本当に充足した故なのかは神のみぞ知る。チケキャンも業界と仲良くならないと一気にヤバくなるので将来性はどうなんでしょう?

前々職から前職への転職の時も、お祈りメールを送ってきた企業がインサイダー取引の疑いで元会長が逮捕されたりと、こういうところで謎の強運を発揮するのが自分である。

2017/04/15 エンジニアの退職を知る

前々から愚痴めいた話はしていたが、とうとう5月末で退職するという話を聞いた。前職で不自然に感じたのは退職する事実を直前まで公表しないことである。 他部署ならともかく、自部署なら引き継ぎもあるし送別会もやらないと、となるので相当辛い。2月の決意がさらに強くなった。

2017/04/20 謎の眩暈が発生

PCに向かいながらクリーム玄米ブランを食べていたら突然世界が右回転した。耳鼻科を受診したが異常は見られず。以降、体調が悪い状態が続く。 ストレスだろうか?ずっと「プロダクトオーナーがチームを守らない」「スクラムマスターが過度に疲弊する」オレオレスクラムで開発が進み、エンジニア全員がストレス過多の状態になっていた。

2017/04/30 ぎっくり腰発生。救急車を自分で呼んで自分が搬送される。

突然、歩行困難になるほどのぎっくり腰が発生。相談ダイアルに電話したのちに救急車を呼ぶことに。 見知らぬ総合病院に運ばれて「座薬が効くんだよね~」という若い医師の指示のもと、いきなり座薬を投入される。 あまり効果はなかった。 有給とゴールデンウイークを駆使して9連休を作り出して安静にしていた。 何とか動けるようになったのがみどりの日あたり。

2017/05/28 敗者復活、現場は大荒れ。

今の会社から内定をもらう。 一度は落ちたものの、敗者復活戦が行われて復活した。 退職日は6月末となり、2ヶ月連続エンジニアが退職するのかと思っていたら来月も退職者が、という話になった。 ITを駆使して云々、をスローガンに掲げていたがその要となるエンジニアが相次いで退職するという状況はやはり異常であり悲しいことである。

2017/06/24 『Effective Debugging』発売

『Effective Debugging』の査読を担当しました - 何かを書き留める何か

査読自体は3月下旬から6月頭まで。ギリシャ語由来(?)の拡張高い英文を黒川さんが翻訳し、Linuxスペシャリストの大岩さんが監修でゴリゴリ補う現場をGithub上で見てしまい、ほとんど出る幕がなかった。Pythonに関する小姑めいた指摘ぐらいか。理論と実践に基づくいい本なのでぜひ買ってほしい。

2017/06/28 耳鳴り

日記から。

17:00ごろ左耳で耳なり。頭も痛い。職場環境のせいか?

この頃、午後あたりから耳鳴りや頭痛が起こるようになった。 職場環境(atmosphere) のせいか、職場環境(relationship)のせいか。両方だと思っている。

2017/07 無職の7月

去年も7月下旬は無職であった。まさか2年連続で誕生日を無職で迎えるとは思っていなかった。 お金がないのでダラダラ心を休めていた。 前職から退職時に渡すはずの書類が届かず手続きが遅れてしまった。困ってしまう。 住民税の金額が下がる程度に給与が減っていた。査定期間半年のうち1ヶ月いなかったのでボーナス0円とか、辞めるタイミングと業績がアレなのでボーナス0円という憂き目のせいである。 後者は仕方ないにしても、前者は許しがたいのでことあるごとに言いふらしていきたい。

日記を見ると、『Real World HTTP』や『プロフェッショナル SSL/TLS』、『詳説 正規表現 第3版』、本の査読2冊をやっていたことがわかった。 意外と暇じゃなかったんですね。 また『人工知能の核心』『失敗の本質』『GE 巨人の復活』も読んでいた。

2017/08 就職

PythonエンジニアとしてDjangoに本格的に使い始める。 今までDjangoはすごく苦手、と思っていたが苦手だったのはHTMLとCSSJavaScriptのフロント側だったことがわかった。 今でも苦手なのが辛いところである。

会社ではGitlabのCI機能をフル活用して前々職や前職で夢見た継続的インテグレーションや継続的デプロイに触れている。 まだ完璧ではないものの、いい感じになっている。

2017/08/17 『スラスラわかるPython』発売

『スラスラわかるPython』の査読を担当しました - 何かを書き留める何か

これはPython Mini Hack-a-thonでレビュワーを募集していたので条件反射で手を挙げてレビュワーになった。 今までは翻訳本だったので文章の構成に殊更指摘することはなく、翻訳の間違いや訳注の追加、原著の間違いを指摘するだけのレビューであったが、 この本の場合は文章の構成という未経験かつ難しい内容であった。 しかも、今まではすべてオライリーの本であり初心者向けといえどもレベルは高めであったが、この本はターミナルの使い方から始めるので専門用語で簡潔にまとめるといったことができず、 どうしたらわかりやすくなるかということも考える必要があり、今までの経験がそれほど役に立たないレビューであった。 幸い、たくさんのレビュワーの方の指摘や筆者や監修の頑張りによって内容がどんどん磨かれていったのでよかった。

2017/08/25 『PythonJavaScriptではじめるデータビジュアライゼーション』発売

『PythonとJavaScriptではじめるデータビジュアライゼーション』の査読を担当しました - 何かを書き留める何か

査読は7月に行った。恐らく原著者はPythonの専門家ではないので、それに由来する微妙な記述が大量にあったこと、JavaScriptの知識が怪しいので苦労したこと、地図と竜の関係を調べるのに半日かかったことなど思い出深い本である。地図と竜の関係なんて調べても知ってもプログラミング能力とは全く結びつかないが、こういうのを調べるのはとても楽しいことである。 この本での経験が今年後半の発表の下地になっている。

2017/09/07 PyCon JP Reject Conference 2017に登壇

PyCon JP Reject Conference 2017に登壇しました - 何かを書き留める何か

Python機械学習のツールとして注目されているがツール自体にも関心を持ってほしいな、とか今までの査読経験でポイントを抜粋して発表すれば万人に役に立つよね、とふわっとした動機で CfPを書くとモチベーションを維持することができない。 結局、15分程度の短い内容で充分であった。 『リーダブルコード』のダイレクトマーケティングめいた内容になったが、反応が良かったのはPythonの名前の上書きする事例だったので、 その話を膨らませてPyCon JPのLTにしようと思い立った。

2017/09/09 PyCon JP 2017 でLTをする

Pycon JP 2017 1日目に参加しました。 - 何かを書き留める何か

Pycon JP 2017 2日目に参加しました。 - 何かを書き留める何か

チケットを買ったのは入社前だったので自費で参加する代わりに自社ブースの業務を免除された。 講演よりも参加者と話すことが多かった。機械学習関連の発表が多かったのと、どうも心の琴線に触れる発表が少なかったから講演よりも会話に重きを置いた。 LTでは口から勝手に出てきた「idにだって人権がある」が相当反響があった。 2日目のLTでアンサーLTという前代未聞の出来事もあった。 内容を補完するいい内容でよかった。

去年のLTを覚えていた方も結構いて「去年も話されていましたよね」と話しかけてくださった。 どうせLTをやるならば思い出に残りたいものである。

2日目はいつもお世話になっているオライリーの方と世間話をしていた。 え?この本も担当していたのですか?という驚きが多かった。

2017/11/24 BPStudy #123に参加

BPStudy #123に参加しました - 何かを書き留める何か

PyCon JP 2017のメディア会議から続く技術書関連イベントの1つ。LT枠が公募で空いていたので参加した。 最初は「何に気を付けて査読をしているのか」という話にしようかと思ったが、5分なので思い切って内容を変更してクイズ形式に変更した。 ほとんどの題材は『PythonJavaScriptではじめるデータビジュアライゼーション』から採用した。 Tim Berners-Lee氏に関する問題は相当難しかったようである。

2017/12/16 Python Boot Camp in 埼玉に参加 & ぎっくり腰再発

Python Boot Camp in 埼玉 - connpass

会場の大宮に向かう直前の道中で再発した。 勇気をもってその場で参加を辞退して病院に行く選択肢もあったはずである。 TAは大学院生の基礎プログラミング演習以来であるが、内容は大学の講義よりも親切であったと思う。 大宮から家までは命がけで帰宅した。大宮駅のタクシーターミナルまでの道のりが一番つらかった。

全体的な反省

昨年から始まった技術書の査読から広がりを感じたイベントが多かった。 僕は他の人よりも誤植を見つけるのが早いらしく、前職でも現職でも言われる。 技術書査読というか、テクニカルレビュワーとして生活できたらそれはそれで素敵であるが、そんな人材を雇う出版社は存在するのだろうか。

技術的な話では継続してPythonがメインであるがソロソロ別の言語に挑戦して幅を広げたいと思っている。

プログラマ初心者向けの記事やエントリを読むと作りたいものを作ってナンボでしょ、という話が多いことに気づいた。 僕は何かを作りたいのではなく、Pythonという言語で書きたくて書いていることが多い。 手段と目的が逆なのである。 書類上の出身は工学部であるが、気持ちとしては数学出身であり、理論的なことが一番やりたいのである。 数学も工学の道具ではなく、それ単体で楽しい(そして簡単には理解できない)ものであり、言語もまたそれ単体で楽しいものである。

事象が起こるまで試行を繰り返した場合の試行回数の期待値

成功するまで何度でも繰り返す

先日、Twitterで以下のツイートを見かけた。

直感的にはそんな気がするが、せっかくなので自分でも計算して徒労感を味わってみよう。

期待値の計算

 0 \lt p \lt 1とする。確率0ならば何度試行を行っても事象は生じず、確率1ならば試行回数の期待値は明らかに1回である。 事象が生じる確率を pとすると、事象が生じない確率は 1-pとなる。

1回で事象が生じる確率は p、2回で事象が生じる確率は (1-p)p、3回で事象が生じる確率は (1-p)^{2}pである。 この論法から、確率 pの事象が起こるまで試行を繰り返した場合の試行回数の期待値は  \displaystyle \lim_{n \to \infty} \sum^{n}_{k=1}k(1-p)^{k-1}p となる。

この無限級数を計算すればよい。 なお、  \displaystyle \lim_{n \to \infty} \left | \frac{(n+1)(1-p)^{n}}{n(1-p)^{n-1}} \right | = \lim_{n \to \infty} \left | (1-p) (1 + \frac{1}{n}) \right | \lt 1 より 級数は絶対収束する。

級数の計算

  \displaystyle S = \sum^{n}_{k=1}k(1-p)^{k-1}とする。  \displaystyle S - (1-p)S = \sum^{n}_{k=1}(1-p)^{k-1} - n(1-p)^{n}より、

  \displaystyle pS = \frac{1}{p} -\frac{1}{p}(1-p)^{n} -n(1-p)^{n}.

以上より、

 \displaystyle \lim_{n \to \infty} \sum^{n}_{k=1}k(1-p)^{k-1}p = \lim_{n \to \infty} \left( \frac{1}{p} -\frac{1}{p}(1-p)^{n} -n(1-p)^{n} \right ) = \frac{1}{p}.

よって、確率 pの事象が起こるまで試行を繰り返した場合の試行回数の期待値は \displaystyle \frac{1}{p}となる。

考察

これは幾何分布と呼ばれる確率分布の期待値計算である。 計算したのちに幾何分布であることに気づいたのが恥ずかしい限りである。

BPStudy #123に参加しました

Tim Berners-Lee氏は物理学者...?

2017年11月24日に代々木にてBPStudy #123「技術書籍執筆の実際、ノウハウ」が行われた。

bpstudy.connpass.com

内容に関しては清水川さんのエントリがよくまとまっているのでリンクを張る。

www.freia.jp

今回、公募LT枠が存在したので、査読や校正に関するテーマで発表することにした。 タイトルは「技術書査読・校正の現場から」とした。 最初は何に気を付けて読んでいるのかを発表しようとしたが、LTなので実際に遭遇した例を一緒に考えてもらう形式を採用した。

speakerdeck.com

結局、何に気を付ければよいのか、という結論が落ちていた。 そこで、このエントリで出題した例に従って整理してみる。

シンタックスに関する着目点

固有名詞・人名は確実に

例えばプログラミング言語を説明する場合はPythonと書く。 また、インタプリタを起動するコマンドは大抵pythonであろう。 JavaScriptとJとSを大文字にするのが正しい表記であるが、文脈に応じてECMAScriptと書くべきかもしれない。 Pythonの作者名Guido van Rossumvanは小文字であり、van Rossumが苗字に当たる。

国文法は正確に

古典文法をまともに理解していない人間が偉そうに国文法を語るなど全く持ってい酷い話である。 まずは弖爾乎波をしっかり書く。卒論や修士論文で徹底的に指摘されるはずなので自分でも直せるはずである。 接続詞の関係。順接か逆接かを意識するだけでも効果があると思われる。

固有名詞、人名、単語、文法は言わばシンタックス(構文)に関する事柄である。 シンタックスに関するエラーは機械的にチェック可能であることが多い(と思う)。 例えば、綴りの間違いは(造語を持ち出していなければ)機械的に判定できる。 本当に難しいのはセマンティック(意味)に関するエラーである。

セマンティックに関する着目点

言語仕様を把握する

Pythonには3つの数値型がある。」という文章があった場合、まずPythonのバージョンによって真偽が分かれる。 Python 2の場合はint, long, float, complex の4つ、Python 3の場合はint, float, complex の3つである。 さらに、標準モジュールをインポートすればDecimal型やFraction型も利用可能である。

裏を取る

「物理学者であるTim Berners-Leeは…」という記述があった場合、すぐに「物理学者という記述は誤りであり、計算機科学者が正しい」と直すになどうしたらよいのか。 僕は「裏を取る」という行動がよいのでは、と考えている。 ここで「裏」とは論理学の裏ではなく、別の方法で正しさを示すことである。 1点を通る直線は無数に存在するが、互いに異なる2点を通る直線は一意に決まるように、裏を取るようにすれば正しい記述なのかがわかる。

最初に「物理学者であるTim Berners-Leeは…」を読んだとき、Webで有名なTim Berners-Leeは物理出身なのか、と思いまずWikipediaを調べた。 そしたら計算機科学者とある。Wikipediaはとっかかりには最適であるが信頼性は落ちるので公式の情報源であるW3Cを調べて、 CERNにはconsultant software engineerとして仕事をしていたことを確認した。 その後のキャリアは計算機科学者そのものである。 確かに、オックスフォード大学のクイーンズ・カレッジの物理学科を卒業してCERNへ行って…となると「物理学者であるTim Berners-Leeは…」という記述は自然であるが、裏を取ることでわかるのである。

Typoを見つけるのが大好きなワタクシ

今の職場でも前の職場でも、Typoを発見するのが非常に早いと言われる。 先天性のものであろうか?運動神経はひどく悪いのでこの説は捨てたい。 僕が理由として挙げているのは、学部・院生時代に数学書を丹念に読んだからでは、と考えている。 学部・院生で読んだのは佐武一郎『線型代数学』とvan der Waerden『Algebra』の2冊であるが、名著と呼ばれるこの2つも意外と細かい誤植が存在するのである。 いい加減な理解ではセミナーは進まないので、1行ずつ読み進めていくのである。 この経験が査読や校正に生きているのでは、と考えている。

文章のシンタックスな間違いは機械的に処理できたとしても、文章のセマンティックを理解するために、査読は1行1行読み進めていくほかないのである。