2015年も1/6が過ぎた

年の初めに目標みたいなのを決めた気がする

2014年のふりかえり&2015年にやること - ふゆみけ〜おかわり〜

いちいち達成できてるかチェックするような意識の高いことはしないが、放置しておくのも気持ち悪い。 基本的な方向性は変わってないが、最近やりたいことが多すぎて発散してきたのでまとめる

  • 統計/機械学習
    • 統プギャ四天王の一角として、統計検定【準】一級に合格する
    • 一級は無理ゲーの予感がプンプンする
      • (試験形式変わったので、統計基礎合格に)切り替えていく
    • 計算力の低さを感じるので、学部レベルの微積線形代数を解きまくる
  • プログラミング
    • 設計の練られた美しいコードを書きたい熱の高まりを感じる
    • 名著を読みたい
    • SICPしかあるまい
      • 今はPythonで教えられてるらしく、テキストも公開されている(もちろん英語だが)
      • でもPythonでやっても自分にとっては旨味がない
      • なのでLISPでよし
      • 読書会やるか
    • いきなりSICPはキツイので、まずはこれを読むのがいいらしい
  • データベース

こんなところでいかがでしょうか


3/1追記

プログラミングの基礎をざっと見たところ、以前読んだプログラミングHaskellとかぶってる内容が多そうだった。 だからもうSICP読み始めちゃってよさそう

『Java言語で学ぶデザインパターン入門』を読んだ&Pythonで書いてみた

リアクティブプログラミングが流行ってるみたいだからちょっとやってみるか、と調べてみたら、Observerパターンとかいうのが出てきた。でもデザインパターンとかわからん\(^o^)/

というわけで読んでみた。ただ読むだけだとつまらないので、JavaのサンプルコードをPythonで書いてみた。

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

PythonのコードはGitHubに上げてあるので、興味のある方はどうぞ。

who-you-me/design_pattern · GitHub

読んでみて、Pythonで書いてみて感じたこと

外から叩けるメソッドはできるだけ少なくして、意図しない操作をされるのを防ぐべきだよ! みたいなことが何度も書かれていたけど、Pythonだとそこを意識することはあまりない。というか、メソッドや変数のアクセス権についてあまり気を配っていない(少なくとも入門書のレベルでは)ように感じる。

そこはまあ、Pythonに限ったことじゃなくて動的言語全般にある程度共通していることで、「大規模でメンバーの技量がバラバラなプロジェクト/プロダクトは静的言語がよい」「少数精鋭でスピードが重要な場合は動的言語がよい」みたいなことが言われる背景でもあるんだろう。

「コードの一部への変更が他の部分に意図しない影響を及ぼす」のに対処する必要があるけど、静的言語の場合は型に守られてるから安全、一方で動的言語の場合はテスト書いてカバーする必要がある、という区別にも繋がってくる。

なんて、いろいろ思うことはあるけど、名著だけあって身になることが多かった。軽く列挙。

  • 当たり前だけど、クラスの設計って超大事
    • 普段フレークワークを使ってWeb開発してるばかりだと、実はあまり気付かない
  • パターンがたくさんあって、複雑なものもあり覚えるのは難しいけど、こんなのがあるって知るだけでも役立ちそう
    • 何か設計上の問題にぶち当たったとき「あれ、そういえばこんなデザインパターンがあったような…」と気付いて調べられるかどうかでものすごい違い
  • Pythonでちゃんとオブジェクト指向やるためのもろもろがわかった
    • これは本のおかげというよりは、自分で書いてみたからだけどw
    • Python2.6からabcモジュールが追加されて抽象クラスが作れるようになった

技術的負債が溜まりに溜まったコードとお付き合いすることが多いこともあって、最近は最先端技術を追っかけるよりも、「ちゃんとした設計でものを作る」ことに興味が移りつつある。

特にデータモデリングの重要性なんかは痛感しつつあるので、次はこれとかを読みたい。

久し振りにDjangoを触ってみたらやっぱり便利そうだった件

某緑のところの承認欲求ゲームには関わりたくないので、こういう感想めいたものは誰も見てないはてなブログの方に書きます。


一応周りにはPythonの人として認知されてるのに、最近Pythonに関わることを何もしてないことに危機感を抱き、Djangoチュートリアルを久し振りにやってみました。

https://docs.djangoproject.com/en/1.7/intro/tutorial01/

学生の頃バイトでちょっとしたWebアプリを作った以来で、確か2011年ぐらいのことなので当時はまだバージョン1.2か1.3だったと思います。

それが今では1.7までバージョン進んだということで、いろいろ進化してますね。

相変わらずadminページが素晴らしい

「ユーザーに何も価値を産まない管理ページにコストかけるのもったいないから、フレームワークの機能で用意してるよ」って精神が素晴らしすぎる。

もちろん管理ページから操作できるモデル、フィールドは指定できるし、表示形式なんかもほとんどコードを書かずに変更できるのは、実運用を考えると大きなメリット。

Migrationができた

以前はsyncdbコマンドでモデルとDBを同期してたけど、Rails式のMigrationが1.7からついに導入された模様。

「すべてをコードで管理する」のは今の時代に欠かせないですよね。

チュートリアルにテストの章がある

これ重要。上で挙げたチュートリアルページにわざわざ1章設けてテストの項目がある。

しかも前半がテストの書き方とかじゃなくて「何でテストの項目があるんだよいらねーよとか思ってるだろけど、まともな規模の開発しようと思ってたら必須だろ」みたいな説明が延々となされてる辺りがPythonista的で実にいい。

それどころか「テスト書かれてないアプリに対して徐々にテスト書いてくにはどうすればいいか」とかにまで言及されてて、もはやWebアプリケーションフレームワークチュートリアルではないw

便利機能が増えてる

チュートリアルで目に付いたのはget_object_or_404。その名の通り指定した条件のオブジェクトが見つかればそのオブジェクトを返して、見つからなければ404エラーを吐いてくれる。

これって実はtry - exceptをいちいち書かなくていいだけじゃなくて、詳細ページを作るときに「URLからid取ってobjectをgetしてtemplateに渡す」だけでよくなる。

「んなわけないだろ。いろいろデータ操作してからtemplateに渡す必要あるだろ」というのは間違いで、そんなややこしい操作はモデルのメソッドとして実装すべきという規則をある意味強制してくれるのがすごくいい。

最後に

うーん、やっぱりお仕事で使ってるCakeちゃんが相当ダメな子な気がしてきた。

いや別に管理ページないのは普通だしMigrationやテストもある(デフォルトで入ってなくてライブラリ入れる必要あるのはご愛嬌)けど、やっぱりモデルが糞すぎる。モデルでfindするとオブジェクトじゃなくて配列で返ってくるとか、こんなの絶対おかしいよ。

2014年のふりかえり&2015年にやること

見事にスベったのでやっぱりやります。

2014年にやったこと、起こったこと

転職した

1年前は新人ネットワークエンジニアでしたが、あまり向いてなかったようでちょっとアレな感じになっていたので転職しました。

大手ISPのネットワークエンジニアから小規模ベンチャーのWebエンジニア(という名のなんでも屋)へのジョブチェンジです。 こっそり記事になってたりするのは内緒です。

今の会社に入ってからはコードをガリガリ書いたり、スクラムっぽいやり方を導入したりと割と好き放題できてるので、転職してよかったですね。

かいた

Qiitaにいろいろ書いてる http://qiita.com/who_you_me

あと会社の技術ブログも書いてる http://blog.howtelevision.co.jp/

2014年はQiitaに9つ、会社のブログに4つの合計13個上げたらしい。 そのうちQiitaで100ストック超えたのと、ブログで100ブクマ超えたのが1つずつあるので個人的には悪くない感じ。

発表した

一番上のPythonの開発環境のやつは何故かバズって180ブクマぐらいついた。 ハイライトはPHPカンファレンスでしゃべったことかな。懇親会で「あの発表面白かったですね」と話しかけられるのはうれしい。

あとは小規模な読書会で担当したりもしてる。

使えるようになった

Docker以外は業務でバリバリ扱ってるので「使えます!」と言っていいレベルにはなってるはず。

Webに必要なDevOps系ツールはだいたい網羅したか。ただAnsibleとかFabricとかのPythonツールにはほとんど触れてないのが残念なところ。

会社で使ってるCakePHPにはだいぶ詳しくなってきた(てか、ドキュメントが不十分でライブラリのコード直接読んでばっか)けども、あまり嬉しいことではないかなw Djangoに詳しくなりたいです。

あと一応ElasticsearchとかBigQueryとかも導入したけど、全然使いこなせてないのでこれは2015年の課題。

ほか

統計検定の2級に合格した。

2015年にやりたいこと

アウトプット

2014年のペースで問題ないかな。 月一ぐらいでなんか書いて、2〜3ヶ月に一回どっかで話すぐらいのペース。 PyConあたりで話せるといいけど、なんかネタないですかね。

勉強会とかで自分の属してるコミュニティはどこかっていうと、間違いなくデータ分析系なんだけど、2015年はWeb系にも足を伸ばしたいところ。

「お前らDevOpsとかはしゃいでるけど、素晴らしい基盤の上に糞みたいなコード載せたら残念すぎるだろ」ってことで、Effective Java的な重厚長大な本をちゃんと読む会とかやりたい。

技術

Webの最新動向についてくのは必須。 Dockerは今の会社だと直近で使うような感じでもないので、しばらくは様子見とくだけでもいいかな(正直動向が早すぎるから全部ついてくのがキツい)。 Reactiveの時代になるらしいのでとりあえずこれとか触ってみましょうかね。

Web全般の技術を網羅するのは当然だけど、フルスタックという名の器用貧乏になりたくもないので何か専門を持ちたいところ。 グラフDBがついに流行る気配を見せつつある(と勝手に思ってる)ので、Neo4jをもう一回ちゃんとやってみようかな。

あと言語。毎年1言語習得するというのはプログラマ共通の目標だけど、2014年は結果的にPHPだったという何とも残念な結果に。 ゆるふわスクリプト言語しかちゃんと書けないのを脱するためには、やはりScalaですかね。Play Frameworkで何か作ってみましょうか。

ほか

統計検定1級に合格しないとプギャーされるのでがんばる。

メジャー球団の日本人選手へのオファーは、やはり失礼だと思う

名指しはしないんだけど、みんなが盛り上がってる時に敢えて水を差したがる逆張り糞野郎はどこにでもいるようで、曰く「16億貰ってる人間に4億のオファーを出すのは失礼だ」とのたまう。

それではここで、以下の一流選手たちが移籍した際の年俸推移をご覧頂きましょう。

  • 新庄剛志: 2000年 7800万円 → 2001年 2200万円
  • 小宮山悟: 2000年 1億1000万円 → 2001年 5000万円
  • 青木宣親: 2011年 3億3000万円 → 2012年 1億円
  • 川崎宗則: 2011年 2億4000万円 → 2011年 6250万円

これはひどい!! いずれも前年の年俸を大きく下回っています。成績を大きく落として追われるように球団を去ったならこれも仕方ないですが、いずれも前年はバリバリのレギュラーやローテーション投手であったのにこの仕打ちです。

こんなひどいオファーを出した球団は失礼極まりないですね! 徹底的に糾弾してやりましょう!!!

なぜならこれは「貯金を取り崩して、自腹を切ってメジャーに来てくれ」というのと同然であり、人一倍「憧れの舞台でプレイしたい」という思いが強い彼らの篤実な性格につけこんで、失礼なオファーをしてきたと言うことなのですから。


これに反論するということは「自分のプレーする環境、球団を選ぶのには年収以外の価値観が存在する」というのを認めたことになりますね。

『ずる 嘘とごまかしの行動経済学』を読んだ

ずる―嘘とごまかしの行動経済学

ずる―嘘とごまかしの行動経済学

前著『予想どおりに不合理』で一躍行動経済学の存在を知らしめたダン・アリエリーの著。

Kindleで安かったから買ったのをしばらく積んであるうちに、オボちゃんのアレとかがあって急にテーマがタイムリーになった感がある。

内容はタイトルの通り、人はなぜ不正行為に走るのかを行動経済学(というかほぼ心理学的な実験)の観点から明らかにするもの。

不正行為を「行為から得られる利益」と「行為が発覚する確率と、発覚した場合のペナルティ」の大小という古典的な費用便益計算の枠組みで捉えるのが支配的だったのが、著者の主張によれば実際はそうではなく、「自分は立派な、正直な人間でありたい」という願望と、「不正行為から利益を得たい」という欲望のせめぎあいによって人は不正を働いたり、働かなったりするんだよ、というのが主題。

ちょっと偉そうなことを言うと、古典的経済学の合理的判断の枠組みではなく、心理学的な「理性と欲望の葛藤」という観点で不正行為を捉え直すだ試みすね。

正直、前著と比べると項目の羅列っぽくてあまり面白みがなかったんだけど、いくつか参考になりそうなことがったので挙げとく。

  • 精神的、肉体的に消耗していると不正しやすくなる
    • 不正行為から利益を得たいという欲望を抑える理性の力は、使えば使うほど消耗してしまうらしい
  • 一度ちょっとした不正を働くと「どうにでもなれ」と雪崩式に不正を働いてしまう傾向がある
  • 「どうにでもなれ」効果を防ぐためにはリセットの仕組みが大事

特に最後の論点が面白かった(本書では「いま研究中だよ」ってなっててあまり触れられなかったが)。

罪悪感を背負い続けていると精神的にも消耗するし、「どうにでもなれ」と更なる不正を続けてしまう。 それならいっそ、罪をリセットする機会を作ることで、むしろ以後罪を犯しにくくなる、という発想。

そもそも宗教は人間の欲望を抑えて社会的秩序を保つことが大きな役割だから、宗教的儀式にはいろんなヒントが隠されてるんだろうなあ。