月別アーカイブ: 2008年2月

Kai-Fu Leeの講演

こちらでGoogle Chinaの社長であるKai-Fu Leeが彼の母校であるカーネギーメロン大学で先日行った講演が紹介されていた。かなり興味深い内容であったので、こちらでも紹介したい。紹介して下さったshimaさんは実際にカーネギーメロン大学に留学中のようであるが、日本にいる私たちでも同じ講演を簡単に観る事が出来るなんて本当にいい時代なんだろうな、と思う。

講演は一時間に及ぶものですが、普段あまり考えることのなかったことを色々と気づかせてくれる内容でした。特にアメリカ人と中国人ではインターネットに対する姿勢がまったく違うという内容は興味深い。姿勢が違えば市場も違う訳で、長期的な視点で中国については考えたいとEric Schmidtも言っていたようだが、中国市場である程度のプレゼンスを得る為にはまだまだ時間がかかりそうである。

才能がある奴ほど安い

リファクタリング本などの執筆で有名なMartin Fowlerが、CheaperTalentHypothesisという面白いタイトルでBlogエントリを書いている。なかなか興味深いのでご紹介。タイトルを意訳すれば「才能があるほど奴ほど安いという仮説」てなところだろうか。

Although the technorati generally agree that talented programmers are more productive than the average, the impossibility of measurement means they cannot come up with an actual figure. So let’s invent one for argument sake: 2. If you can find a factor-2 talented programmer for less than twice of the salary of an average programmer – then that programmer ends up being cheaper. To state this more generally: If the cost premium for a more productive developer is less than the higher productivity of that developer, then it’s cheaper to hire the more expensive developer. The cheaper talent hypothesis is that the cost premium is indeed less, and thus it’s cheaper to hire more productive developers even if they are more expensive.

CheaperTalentHypothesis

要するにあるプログラマの生産性(これを計ることは非常に難しいことだが)が平均より何倍かあるとして、そのプログラマに払う給料がその「何倍」よりも下だったら、結果的に安い買い物だということ。これは以前にLisp HackerのPaul Grahamも同じことを言っている。

経済的には、この事実は重要な意味を持つ。素晴らしいハッカーに、彼の価値相応のものを支払う必要が無いということだからだ。凄腕のプログラマは普通のプログラマの10倍から100倍生産的かもしれないが、普通のプログラマの3倍も給料をもらえばラッキーだと思ってくれるだろう。

Great Hackers

またMartin Fowlerが以下のように言っているように、生産性の高い少数精鋭のチームには、チーム内のコミュニケーションコストが大きなチームに比べて少なくて済むという大きなメリットもある。これは大規模なソフトウェアの開発に携わったことのある人間ならすぐに理解出来る話だ。Martinの感覚的な数字では、生産性はチーム人数に比して対数的に増加するとのこと。つまり人を4倍に増やすと2倍の生産性が得られるということだ。

The trouble is that that assumption assumes productivity scales linearly with team size, which again observation indicates isn’t the case. Software development depends very much on communication between team members. The biggest issue on software teams is making sure everyone understands what everyone else is doing. As a result productivity scales a good bit less than linearly with team size. As usual we have no clear measure, but I’m inclined to guess at it being closer to the square root. If we use my evidence-free guess as the basis then to get double the productivity we need to quadruple the team size. So our average talent team needs to have forty people to match our ten talented people – at which point it costs twice as much.

CheaperTalentHypothesis

アメリカのソフトウェア企業の給与体系がどのようなものになっているかは知らないが、彼らが生産性の高いプログラマを集めることができ、「その生産性に見合っているがその生産性ほどではない給料」を支払うことに成功しているとすれば、彼らがソフトウェアやインターネットの世界を席巻するのは当然とも言える。そして横並びで物事を扱うことに長けている日本が遅れをとってしまうのも、もしかすると当然の事なのかもしれない。
ちなみに以前開発チーム内で以下のリファクタリング本を輪読したのだが、かなり為になったのを覚えている。「そんなの当たり前だよね」という話も数多く載っているのだが、それが現実にはあまり守られていないのというのもこれまた事実であり、コード書きとして身を引き締める為にもいい読書でした。

リファクタリング―プログラムの体質改善テクニック (Object Technology Series)

リファクタリング―プログラムの体質改善テクニック (Object Technology Series)

  • 作者: マーチンファウラー,Martin Fowler,児玉公信,平澤章,友野晶夫,梅沢真史
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/05
  • メディア: 単行本
  • 購入: 94人 クリック: 3,091回
  • この商品を含むブログ (312件) を見る

追記

引用したエントリの日本語訳がアップされていましたので、追記します。

デザイン変更&初お絵描き

言わなくても見れば分かることですが、ブログのデザインを変更してみました。ついでに初めてのお絵描きにも挑戦してみました。絵を描く程に直感的な事もこの世には少ないと思います。実に近藤社長らしいアイデアですね。
ブログのデザインを変えるのは、どこか髪型を変えるのに似ているようで、新たな気持ちに身が引き締まります。

英語関連エントリまとめ

今までに書いた英語関連のエントリを纏めてみました。昔書いたものを読むと拙い文章だったり、やたら頑張った文章だったりするのが何とも気恥ずかしいが、自分の大切な思考の過程をここらで一度俯瞰しておくのは良いことだろう。

日本とソフトウェア技術者

語り尽くされた内容だけれど、最近はほんとに「なぜ日本から強いソフトウェア企業もといソフトウェアが生まれてこないのか」という疑問が頭を巡る。またこの日本でソフトウェア開発を生業にしていく機会の少なさにも真剣に悩む。もはや優秀な技術者は英語を学ぶ事が必須だと僕が考えるのは、その優秀な技術を活かす立場に自分をおくためには外資に入るか、または外国に飛び出さなければならないからなのだ。日本に良い機会がまったくないと言うつもりはない。ただ極端に少ないのだ。ましてや平均以上の収入を、他の職種より良い収入を得たいと思えば、さらに機会は限られる。
いつか日本にも大きな可能性を持ったソフトウェア企業やネット企業が生まれるのだろうか。どうなのだろう。家庭用ゲームはもともと日本が強いはずだし、もともと気遣いの細かいソフトウェア向きの人種だと僕は思っているし、何かのピースが日本にぴったりと嵌れば、きっと大きな機会が若い技術者達に開かれると思うのだが。これは希望的観測なのだろうか。

保江邦夫「数学版 これを英語で言えますか?」

こ、これは滅法面白い。

数学版 これを英語で言えますか?―Let's speak mathematics! (ブルーバックス)

数学版 これを英語で言えますか?―Let’s speak mathematics! (ブルーバックス)

読書禁止中なのに読んだのは、英語の文章の中に出てくる数式を発音するときだけ(勿論心の中で発音しているのだが)日本語になってしまうことに違和感を感じていたから。
本書はひたすら色々な数式を英語でどう読むか、を紹介していくだけの内容である。ただそれだけであるが、数式が英語で読めるようになって、次から次へと提示される数式を英語で発音していくのがものすごく楽しい。思わず電車の中でぶつぶつと発音して、回りの人から変な目で見られてしまうほどに楽しい。そんな内容である。理系の学生や理科系の専門職に就いている方には是非ご一読をお奨めする。おそらくこれに慣れてくると、数式は英語で発音するのが最も正しいことであるように思えてくるだろう。
\sum_{k=1}^n{k}
は例えば、
The sum from k equals one to n of k
と読む。

英語「で」勉強しなさい

ここここなんかが話題になっているのを見たり、就職活動中の大学生の英語への意識の高さを垣間見たり、やはり英語というものに対する興味の大きさはかなりのものであるなと改めて実感する今日この頃。そんな興味の高さに乗じて多くの利益を上げようと、大規模なマーケティングを繰り広げる英会話学校や出版社。中高での英語教育が役に立たないという声高な批判を掲げる人達の主張に、あまりきちんと勉強しなかった自分への言い訳を重ねる人々。どの国でもこういった事情は多かれ少なかれあるだろうけれど、日本の英語事情が複雑であることは間違いないであろう。
英語を本当に身につけたければ、まずは中高もしくは自分でしっかりと基礎、つまり文法は押さえるべし。これはまず確実。あとは実際に使う立場に自分をさらそう。英語で何かを勉強しよう。英語で何かを行おう。英語で何かを楽しもう。
Google Japanの村上社長が言っていたらしい以下の言葉が全て。

ひたすら英語をやりなさい.

英語「を」勉強したらだめ.
英語「で」勉強しなさい.

大学に入る前の若い人には「これからは英語ができないと何もできない」といつも話している.

Peace Pipe: Road to CEO – Google 村上憲郎 [seminar]

ちなみに聞いた話によると、パキスタンの大学ではほぼ全ての講義が英語で行われているらしい。必然的に彼らは英語を勉強せざるを得ないらしい。学校の教育のせいにせず、自分の生活の中に自分で英語を組み込んでいけばいい。例えばブログで日記を書いていたりするのなら、日記の中に一行でもいいから英語を入れてみるとか。それでもかなり変わってくる。
Just write an English line in your diary, that makes much diffrerence.

セルビア大統領選雑感

エントリを書く程の知識はないが、ちょっと気になったので。と、これだといつも豊富な知識に裏付けされたエントリを書いているような言い回しだが。

セルビア大統領選が新欧米派であるタディッチ氏の勝利に終わり、極右派のニコリッチ氏が敗北したことでコソボ自治州の独立容認に向けた土台ができたようだと報道されている。

政府は、G8議長国として各国の立場を調整する必要から米、EUとの同時承認には慎重だが、3日にセルビアで親欧米派のタディッチ大統領が再選されて事態の平和的解決の芽が出てきたとみて、早期承認の検討に入った。

http://www.asahi.com/politics/update/0205/TKY200802050402.html?ref=rss

各国の立場というのは簡単に言ってしまえばロシアの立場の事で、ロシアとしては他の国の独立活動家を刺激する可能性のある今回のコソボの件は慎重に対処したいだろう。
先月の第1回の投票では4ポイント以上の差を付けてニコリッチ氏が勝利していた模様であるし、2004年の大統領選では9ポイント差で勝利したタディック氏であったが、今回の差は3ポイント以下となっており、流れから判断するならばセルビア国民は以前より右傾化しているのではないかとも読み取れるのだがどうだろう。もしそうだとすると、この時期に安易にコソボ自治州の独立を容認すると、極右派の活動家等を強く刺激してしまうことにもなりかねない。

「初心者」をセグメンテーションせよ

「初心者」って言葉を使ったとたんに話が分散するから使わない方が良いと思うけど。

Brainf.ck – 初心者が最も実装しやすい言語
C – 最も言語実装初心者向け
JavaScript – 最も初心者に身近
Perl – 最も初心者に(も)優しいコミュニティ
Python – 最も自言語初心者に優しいユーザーたち?
Ruby – 最も初心者に優しい言語の父

404 Blog Not Found:初心者向け言語もいろいろ

上の弾さんのエントリは多少僕の言いたいことを書いているけれど、要は「初心者向け」とかいうんじゃなくて、
誰のどういう動機に対してどの言語が向いているのか
という話をしなければならいんじゃないだろうか。まだ駆け出しプログラマの動機としては例えば以下のようなものがあるだろう。

  • プログラミングの実行環境を整えるのが面倒
  • 「面白い」って友達に勧められたプログラミングだけど、面白さ分からない。分かりたい
  • 「抽象化」ってなんじゃらほい。「関数型」ってなんじゃらほい。「オブジェクト指向」って
  • 兎に角ちゃっちゃと動かして遊びたい

とかまあ色々あると思う。またプログラマを管理する立場にあるプログラマとしては、

  • セキュリティホール量産困る
  • バグたくさん、困る
  • 読めないコード困る
  • すぐに戦力になってもらわんと困る
  • 時間がかかってもいいからスーパーハッカーに育てたい

とかまあそういう事を考えているであろう。そういう風な動機に対してそれぞれ向いている言語を提示するべきで、セグメンテーションすることもなく「初心者向け」とか書いて議論していても、結局それぞれが頭の中に浮かべているシチュエーションが違う訳で、話が噛み合う訳もない。

「プログラミングの初心者」の定義

Matzさんがまた示唆に溢れる事を書いている。

ここから「初心者向け言語が避けていること」言い替えれば「初心者が苦手なこと」が何であるかだいたいわかる。彼らは「抽象化」が苦手なのだ。

Matzにっき(2008-02-04)

そうそう、そうなんですよね。分かっていても中々言語化できなかったけれど、抽象化を理解し、その重要性を理解し、実際の仕事の中でその理解を役立たせることが出来るようになって、自分がやっとプログラマとして次のステップに進めた事を思い出した。逆にそれが出来ていない人は、いつまで経っても初心者の域を出ないとも言える。そして悲しいことに、この壁を超えるに必要なのは経験年数ではない。どんどん勝手に学んでいく天才も世の中にはいるだろうけれど、平均的にはやはり抽象化を行い易い言語を身につけ、良い抽象化を行っているソースを読み、自分のプログラムの中にどのように抽象化が活かせるのか真剣に考えた上で何度も失敗し身に付いていくものだろう。
まだ勉強途中だけど、以下の本はこと「抽象化」ということに関しては世界一の名著だと勝手に信じ込んでいるのでここに宣伝しておきます。あまりにも有名な本なので余計な事は書きませんが、僕に「プログラミングの奥深さ、難しさ、面白さ、神聖さ」を教えてくれた神本です。

Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)

Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)