study02.tumblr

RSS

辺境社会研究室: マシなインターネットを作る:malaさんインタビュー

youkoseki:

こんにちは。今回はmalaさんのインタビューをお届けします。

malaさんはNHN Japanのエンジニアとして多くのウェブサービスの設計に関わるだけでなく、セキュリティやプライバシの観点から見たアーキテクチャについて、ブログでさまざまな情報や問題提起を発信されています。

特に昨年末に公開されたブログ記事「はてな使ったら負けかなと思っている2011

- 自然言語処理を活用したwebサービスをつくるときに参考になる5冊の書籍 - EchizenBlog-Zwei

Pull Request #566: Update AUTHORS.rst by bitprophet · kennethreitz/requests

Pull Request #566: Update AUTHORS.rst by bitprophet · kennethreitz/requests

適切な抽象度を求めて

以前に思いついたジョークでこんなものがある。

初級プログラマへのアドバイス
コードを読みやすくするために、もっと抽象度を上げよう。

上級プログラマへのアドバイス
コードを読みやすくするために、もっと抽象度を下げよう。

これはジョークなんだけど、抽象度が低すぎても高すぎてもコードは読みにくくなる、というのはある程度当たっていると思う。

抽象化が低すぎるケースを考えてみよう。数百行もある長大な関数に何十もの変数があり、ループのネストはやたら深いし、しかも変数は途中で別の用途に再利用されちゃっている、なんていうとんでもないことになっているコードを見たことがはないだろうか?私はある。というのも私は長いこと、そんなコードばかり書いていたからだ。複数の関数に分割するなり、状態を構造体にまとめるなり、変数のスコープを制限するなり、抽象度をあげることでコードを読みやすくできる、ということを学んだのはだいぶ後になってからだ。

一方、抽象度が高すぎるケースとはなんだろうか?上級者となったプログラマは、関数やら構造体よりも抽象度の高い道具をたくさん持っている。リフレクションやら、コンティニュエーションやら、なんやらである。こういった技は適切な場所で使えば強力な武器となるが、乱用するとコードの見通しが悪くなるだけだ。これみよがしに乱用しているのでは上級者といえないのだろうが、適切な利用と乱用を区別するのは難しい。ある人にとって空気のように使える道具が、他の人にとってはそうとは限らないからだ。

ではどのくらいの抽象度が好ましいのかというと、それはプロジェクトによって異なると思う。ここでは仮に抽象度許容度なるものを考えてみよう。配列って一体なんなんですか!という人を1、C言語のポインタを普通に使いこなせる人を5、あらゆるプログラミングの奥義をマスターした、みたいな導師を10、としよう。

まず、抽象度許容度10のメンバーが集まったチームなら、やりたい放題だろう。この人たちのことは放っておこう。実際のところ、チームの中に許容度のばらつきがあるほうが普通である。この場合、一体、どのくらいの抽象度が好ましいのだろうか?直感的には、チーム全体でおおむね許容できるレベル、あるいはその少し上(慣れれば許容度は上がるから)、くらいでコードを書くのが好ましいように思える。しかし、Brian Kernighan の言葉によれば、少し下くらいの方がいいのかもしれない。

“Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” —Brian Kernighan

「デバッグは最初にコードを書くより2倍難しい。ゆえに、もし限界まで巧妙なコードを書いたなら、定義により、あなたはデバッグできるほど賢くないということだ」

- 0xcc - Google+ - 適切な抽象度を求めて 以前に思いついたジョークでこんなものがある。 初級プログラマへのアドバイス…

Instagram

Instagram

(出典: logiq)

passingloop: rbenv と RVM との違い

passingloop:

列挙してみる。

  • rbenv は RVM と違ってシェルにコマンドをロードしない → 代わりに $PATH を追加するだけで使える
  • rbenv は RVM と違ってシェルコマンドを上書きしない(RVM は cd などを RVM 独自のものに置き換える)
  • rbenv は RVM と違って設定ファイルが無い → どのバージョンを使うかの指定のみ
  • rbenv は RVM と違って Ruby をインストールしない(rvm install 相当の機能が無い) … 代わりに自分で好きに Ruby をインストールできるし、rvm install 相当の ruby-build を使うこともできる

(出典: github.com)

Instagram

Instagram

大人の趣味に、ミニ四駆を始めよう! | オモコロ特集

大人の趣味に、ミニ四駆を始めよう! | オモコロ特集