2012-04-22
@PG_sister_bot の発言に想いを馳せる
イベント |
プログラミングクラスタの皆さんは漏れ無く@PG_sister_bot をフォローしていることと思います。
このアカウントは、プログラムを勉強している人の毒舌な妹の発言をしまくるいわゆるネタ bot として有名です。僕もいつも楽しませてもらってるのですが、よくよく読むと彼女の発言はなかなか興味深く、マジレスしたい欲求に駆られてしまいました。
というわけで本稿はネタ記事です!あくまでネタ記事です!*1
1.
お兄ちゃん、いつも「GCは甘え」とか言ってJavaやRubyを馬鹿にしてC言語にこだわり続けるけど、新しい技術についていけなくて昔覚えた言語にしがみつくのって、どうかなあ? それにお兄ちゃんのプログラム、よくメモリリーク起こすよね?
GCの無い言語にこだわることと、メモリリーク起こすプログラムを書くことは別の問題ではないでしょうか。メモリリーク起こすプログラマが GC のある言語を使って速度が得られるのであれば話は別ですが。彼女は、C++ 等の言語の進化の意義をどう肯定/否定するというのでしょうか。
2.
"# include <stdio.h> /* おまじない */"なにこれ?まさか意味理解してないわけじゃないよね?
#include <stdio.h> の意味を理解しているプログラマがどれほどいるでしょうか。プリプロセッサという機能の理解、include 命令の仕様、そして stdio.h 及びその中で include されているすべてのヘッダに書かれているプログラムの意味を理解することがどれほど高度なことか...。これらを掌握しないと #include <stdio.h> を書くことが許されないのであれば、プログラムの勉強なんて誰も始められないと思います。
3.
お兄ちゃん、言っとくけど「大規模なプログラム」って、「ソースがやたら長いプログラム」のことじゃないからね?
確かに、ソースがやたら長いプログラムは良くないとされています。しかし、では何を以て「大規模なプログラム」と呼ぶのでしょうか。ソースの長さではないとしたら...ちょっと良い答えが思いつかないです。
4.
「CはわかるけどC++のクラスが理解できなかった」って当然だよね。お兄ちゃん大規模なプログラムを合理的に設計したことなんてないもんね。
また「大規模なプログラム」ですね。「大規模なプログラムを合理的に設計した」と言った以上、彼女の中で「大規模なプログラムを非合理的に設計した」という表現は別の意味になるのでしょう。非合理的に設計された大規模なプログラムは、"ソースがやたら長いプログラム" とはまた別なのでしょうか。このへん、非常に興味深いですね。
5.
お兄ちゃんって、新しいパラダイムの環境を使っても、発想が以前のパラダイムのままだよね。パラダイムの移行期に自分が知ってる範囲のノウハウだけで乗り切ろうとすると噴飯モノのコードになるってこと、覚えておいたほうがいいよ?
それはそうかもしれません。しかし... ではどうしたら良いのでしょうか。多くのプログラマは新しいパラダイムの環境を使ってみて、ようやくパラダイムシフトを得るのではないかと思います。パラダイムシフトを先に経験した後でコードを書くのであれば、昨今あちこちで賞賛されている「写経」という手法そのものが否定されてしまうのではないでしょうか。
6.
お兄ちゃん、オブジェクト指向言語を使っても、勝手にプログラムがオブジェクト指向になるわけじゃないんだよ? クラスは「構造体のすごいやつ」じゃないんだよ?
それはそうかも知れませんね。しかし、ではクラスとはいったい何でしょう?僕は、まだ答えが出せないでいます( 『クラスとは何か。』偏見プログラマの語り! )。誰か知ってたら教えてください。
7.
お兄ちゃん、またメモリリークさせてる! 使ったものを後始末しないとどうなるか、自分の部屋みれば一目瞭然だよね?
散らかっている(であろう)部屋を見たとして、いったい何が分かるというのでしょうか。使ったものを後始末しないと作業スペースは減るわけだから、そういう意味では一理あるように見えます。しかしそれは「後始末のための時間的コストがかからない」というメリットとトレードオフの関係にあることには留意すべきです。GC の実装だって、「あるメモリが不要になったとき、まずは何もしない」という戦略を採っています。それに、余っているスペースで十分に作業ができるのなら、メモリリーク自体は問題にならないでしょう。ゆえに、彼女の指摘は説教として不適切であるような気がします。
8.
お兄ちゃん、関数や変数の名前をローマ字でつけるのやめようよ。辞書引こうよ
何でもかんでも英語にするのは賛同できません。そもそもプログラムソースは、可読性が要求されるものです。もちろん多くのプログラムでは英語が使われているわけですから、全てを日本語で書くことが良いとは言いません。しかし、例えば日本の古楽器の管理をサポートするプログラムにおいて、太鼓を「Drum」琵琶を「Lute」、尺八を「Bamboo flute」に英訳して書くことにどういうメリットがあると言うのでしょう。「Taiko」「Biwa」「Shakuhati」と書くべきです。それと同様に、そのプログラムが書かれた文脈・背景を踏まえたうえでローマ字表記を使うことは、否定されるべきではないように思います。
9.
お兄ちゃん、何が「合理的な選択」であるかは、解決すべき問題によって変わるってことだけは覚えておいてね。様々な問題を前にして極端な解釈しかできないのは、それだけで「問題についての理解力」を欠いているってことだから、プログラマとしては致命的かな。
確かに「極端な解釈しかできない」のは、プログラマとして優秀とは言えないでしょう。しかし、問題を極端に解釈できるなら、妥当な対案を出せるプログラマになるまであと一歩でしょう。例えばプログラムのエラー対策において、極端で例外的なケースをイメージできないプログラマは目前の問題収束に走ってしまいがちです。そうやってプロジェクト終盤で設計のどんでん返しを誘発してしまうプログラマの方がよっぽど致命的です。下を見ればキリが無いとはいえ、極端ながらも問題を捉える能力を持つ人を "致命的" と罵る彼女に、プログラマの優劣を判断する能力はあるのでしょうか?
10.
お兄ちゃんのプログラムって下の毛みたいにスパゲッティで読む気も起きないよね。
アナタ、下の毛はスパゲッティなのですか!
以上、10 個チョイスしてみました。え、大人げない?あ、そうw
2012-03-09
「デベロッパーが知るべき291のこと」のディスカッション
イベント |
ニコニコ生放送で、こんな放送がありました。
『デベロッパーが知るべき291のこと 〜開発者の明日を繋ぐディスカッション〜』
ソフトウェアアーキテクトが知るべき97のこと
プロジェクト・マネジャーが知るべき97のこと
そして、我々が知るべき292番目のこと。
【出演】
鈴木雄介氏 (ソフトウェアアーキテクトが知るべき97のこと)
和田卓人氏 (プログラマが知るべき97のこと)
神庭弘年氏 (プロジェクト・マネジャーが知るべき97のこと)
ニコニコ生放送(アーカイブ)
2012/03/07(水)の放送ですので、まだ見ていない方は、2012/03/14(水)までは見れると思います*1。Twitter ハッシュタグは #devlove。
この番組で語られていた内容が、かなり濃くて良かったです。開発に関するお話を時間いっぱい聞くことができますので現場の開発者は是非、見て欲しいです。
さて、番組に出演している中に神庭さんという人がいます。僕は存じ上げなかったのですが、34 年間ずっと日本 IBM でプロジェクトマネジメントをメインにやってきた方だそうです。今年 65 歳でめでたく定年を迎えられたということで、プロジェクトマネジメントの一から十までを知っている人です。
神庭さんの発言の一つ一つが個人的にどぉんと響いたので、いくつかピックアップして紹介します。まぁでも時間がとれるなら本稿よりも動画を見ましょう。
・プログラマ、プロジェクトマネージャ、アーキテクトの役割分担について
神庭「最初はプログラマもプロジェクトマネージャもアーキテクトも無かった。全てがひとまとめになっていた。それが徐々に専門性が高まって分化してカタチ作られてきた。」
鈴木「今の若い世代は学ぶべきことが多すぎる。」
和田「合理性があったからそうなってきたのだろうけど、現代の開発者がセクト主義的になってはいけないと思う」
・今の開発者の行く末について
神庭「ゼロから全部作ってたのは良い時代。昔は内部設計、外部設計、テスト、リリースの全てを体験できた。しかしもう今はそういうのが無い。どこへ行っても既存システムがあるわけだし。例えばデータベース設計の経験が無いアーキテクトはアーキテクトと言って良いのか?と思うが、実際のところもうデータベースを一から設計することなんてほとんど無い。保守ばかり。こんな時代に次の時代の IT エンジニアをどう育てれば良いのか、ということを危機感として持っている。プロマネは比較的賞味期限が長いが、旬の技術に長けた人の賞味期限は長くない。」
和田「現役で居続けるということは、年下が増えるということ。年下から学べるようになることが価値。」
・チームについて
和田「神庭さんに聞きたい。これまで色んなチームを率いてこられたと思うが、チームを作る(チームビルディングする)際に心がけている事は?」
神庭「リーダーの立場に就いたときに注意がいる。役割としてリーダーというものはあるが、リーダーシップはリーダーとは関係がない。リーダーの言ったコトに従ってくれる人がいないとリーダーは機能しない。チームメンバーの成熟具合に合わせて、どういう風にしたら部下が動いてくれるかを考えないといけない。つまりリーダーが優秀かどうかはその人ひとりの努力・才能では決められない。例えば部下に "あれをやれ"、"これをやれ" と命令して動かそうとすると、チームはガラガラと崩れてゆく。チームの状態が悪くなったとき、メンバーは嫌いなリーダーのために働きたいとは思わないだろう。"何とかっていう優秀なリーダーが陣頭指揮を執って..." な〜んていう強い縦関係のチームは、現代において成功し得ない」
・経験談
和田「神庭さんは、プロマネとして長年やってきたわけだから、色んな曲者とも仕事してきたはず。」
神庭「毎回色んな人がいる。お客さんにもいろんな人がいる。もうこればっかりは諦めるしか無い。ただ一度、こちらの部下に手を出す客がいた。そのときはさすがにキレた。その客は強いこだわりと勤勉さを兼ね備えており、気に食わないところがあるとすぐ手を出す、非常に困った客だった。だから "俺の部下に手を出したらてめぇを会社に居れなくしてやるッ!" って凄んで黙らせた。しかし、注意深く聞いていると、その客の意見には正しいこともたくさんあった。そこで、みんなの前で、彼の正しさや勤勉さについて褒め称えてあげた。そしたらそのあとは徐々にうまく事が進むようになった。プロマネの仕事は、場合によってはケンカも辞さないというつもりで臨むことでようやく分かりあえる、というような事もあるってこと。たとえ相手が客であろうとも。」
・鈴木さんから話題のフリ
鈴木「アーキテクト・プログラマ・マネージャのうちどれが大事かを敢えて上げるとするならば、どれだと思うか?これはその意見が良い悪いという議論をしたいのではなくて、なぜそう思うに至ったかという話を聞きたい。」
和田「優等生的な答えを出すなら、どれが大事とかは無い。」
神庭「メンバーそれぞれが "俺が一番大事だ" とギャーギャー言い合うチームが良いチーム。」
・世界における日本について
神庭「実際問題、インフラに投資しようと考える企業はもうほぼ無くなってきている。企業はインフラの差で勝負しようと思っていない。つまり今後は仕事が減るってこと。さらに少子高齢化で 2010 年からの 10 年間に 25% の PM が退職する。これは、既に海外に心配されているレベル。日本は外国人労働者の割合も低く、労働鎖国状態。英語の語学力でも、日本は中国・台湾・韓国に負けて 55 位という状態。国際競争力に乏しい。このままでは、明るい未来を描きにくい。プログラミングで生き残る領域はどこにあるだろうか。」
和田「客の要望を早く正確にカタチにする能力での差別化は推し進めることができるはず。何がしたいのか、何を提供するのか、そういう意識をしっかり持った上で、開発者ひとりがちゃんと個として立たないと、替えが効いてしまう。」
神庭「最初から自律する気が無い人は流されるしかない。なるようにしかなれない。」
・最後らへん
↓笑ったw
神庭「リーダーシップっていうのは言いだーしっぺ、っていうのが大切なんですね。(会場沈黙)」
*1:プレミア会員じゃない人は見れないかも
2011-12-03
C++11 とオブジェクト指向
これは C++11 Advent Calendar 2011 の 3 日目の記事です。*1
C++03 から C++11 になったことで大小さまざまな言語仕様拡張・変更がありましたが、それらが C++ におけるオブジェクト指向プログラミングをどう変えてゆくのか、現段階で思うところを書こうと思います。
・プロローグ 「C++11 と魔法少女まどか☆マギカ」
C++11 の 11 は 2011年 のことです。そして魔法少女まどか☆マギカは 2011年 の日本を舞台にした大ヒットアニメです。偶然でしょうか?いいえ、これらが無関係なわけがありません。
さて、C++ に追加された機能で最も強力なのが右辺値参照だと思います。これについては gintenlabo(@SubaruG) さんや, alwei(@aizen76) さんが後日のアドベで詳細を書いてくれると思います。しかしそれら機能の多くはライブラリアンのために提供されており、末端のプログラマにはあまり関係がありません。僕のような下っ端のプログラマに最も強く影響するのは move() ではないでしょうか。
move() というと何やら難しそうですが、
move() は、簡単に言うと引数をマミる関数です。
そう、実は C++11 の言語仕様にはマミさんのソウルジェムが輝いているのです。(嘘です)
move のサンプルはもう散々目にしたかもしれませんが、コードにするとこうなります。
struct A { int data_ }; int main() { A a1 { 42 }; A a2 = move( a1 ); // ここでマミる。a1 はもう使えない。 }
では本題に入ります。
・第一話 「派生」
派生は、多くのオブジェクト指向プログラミング言語で取り入れられている概念です。
class Base {}; class Derived: public Base {};
Derived は Base を完全に含んでおり、コンストラクタが呼ばれると内部に Base オブジェクトを生成します。しかし思うに、Base 部分は外部から調達したって良いような気がします。コードを↓このように修正してみます。
class Base {}; class Derived: public Base { public: Derived( Base const & b ) : Base( b ) {} // コピー }; int main() { Base b; Derived d( b ); }
しかし、この方法を採りたく無い場合があります。
もし Base が外部リソースのハンドルを(例えばファイルを開いたまま)握っていたりしたなら話がややこしくなってしまいます。なぜなら↓図のように Base のコピーが生成されているからです。*2
そこで C++11 の move() を使います。↓図のように Base をまるごと Derived の Base 部分に差し込んでやることができます。
コードにすると↓こうですね。
class Base {}; class Derived : public Base { public: Derived( Base && b ) : Base( move( b ) ) {} // 差し込む。 }; int main() { Base b; Derived d( move( b ) ); // ここでマミる。b はもう使わない。 }
素晴らしい。Java でこういうクラスは定義できないですよね。
カプセル化を維持したまま、生成タイミングをユーザーの都合に合わせて段階的にずらせるようなクラスを表現できました。
キモいですか? いえ、大丈夫です。「基本クラス部分を右辺値参照で受け取って差し込む」という手続きが Derived の責任のもとで執り行われます。この考え方はオブジェクト指向の基本的な考え方に合致します。
・第二話 「豆腐分割問題」
アホみたいな話で恐縮なのですが、どうも僕には
「豆腐を切ったら豆腐 2 つになる」ということを、Java は表現できない
ように思うのです。ちょっと Java のコードを書いてみますね。
// 豆腐。 class Tofu { private int weight; public Tofu( int weight ) { setWeight( weight ); } public int getWeight() { return this.weight; } public void setWeight( int weight ) { if( weight <= 0 ) { throw new IllegalArgumentException( "重さの無い豆腐は豆腐では無いぃぃぃぃッ!" ); } this.weight = weight; } } class Main { public static void main( String[] args ) { Tofu t = new Tofu( 100 ); // 100g の豆腐がある。 Tofu[] sliced = Slicer.slice( t, 2 ); // 2つに切る。 System.out.println( sliced[ 0 ].getWeight() ); // 50g System.out.println( sliced[ 1 ].getWeight() ); // 50g System.out.println( t.getWeight() ); // いくつになるべき? } }
最後の文で、もし t が 100g なら「豆腐を切ったら豆腐の総量が増えた」ことになってしまいますし、t が 0g ならそれは既に豆腐ではありません。こんなの絶対おかしいよ!
オブジェクト指向プログラミングを紹介する文脈では、よく「現実のモノに名前をつけてモデル化するのがクラスで...」といいますが*4、その典型である Java のモデル表現能力は、この例が示すようにさほど高くないように思うのです。
しかし C++11 には move() があります。
int main() { Tofu t { 100 }; // 100g の豆腐がある。 vector< Tofu > sliced = Slicer::slice( move( t ), 2 ); // ここでマミる。 cout << sliced[ 0 ].getWeight() << endl; // 50g cout << sliced[ 1 ].getWeight() << endl; // 50g cout << t.getWeight() << endl; // そもそも t にはアクセスしてはならない。 }
素晴らしい。main 関数を書いたプログラマが「豆腐 t は、Slicer::slice に渡したら消えて無くなる」という旨をコード上で正しく表現できるわけです。
(当初、さやかの手足が切られる例を用意していたのですが、グロかったので豆腐にしました)
■第三話 「定数オブジェクト」
例えば double const や enum など、定数を定義することはよくありますが、組み込み型だけが定数ではありません。ユーザー定義型のオブジェクトを定数とみなすこともあるかと思います。
例えば↓こんなやつ。
// 色。 class color { public: int r_value, g_value, b_value; }; int main() { color const yellow { 255, 200, 30 }; // yellow.r_value は 255 である。 assert( yellow.r_value == 255 ); }
さて、本当に定数なら↓これが動いてナンボでしょう。
int main() { color const yellow { 255, 200, 30 }; int n = input(); switch( n ) { case yellow.r_value: cout << "r と同じ"; break; case yellow.g_value: cout << "g と同じ"; break; case yellow.b_value: cout << "b と同じ"; break; } }
残念ながらコンパイルエラーです。いくら定数といえど、構文上は const 修飾された変数と全く同じなので case 値にすることはできないんですね。C++03 まではこうした「定数のようなオブジェクト」をどう頑張っても本当の定数にすることはできませんでした。
そこで C++11 からは、新しく constexpr というキーワードが利用できるようになりました。constexpr の詳細は boleros(@bolero_MURAKAMI)さんや iorate(@iorate)さんが関連記事を書いてくれる予定ですが、
簡単に言うと constexpr は「これは定数だ」とコンパイラとの間で契約を結ぶものです。
そう、契約....
「僕と契約して、<censored>!」*5
そう、C++11 プログラマは皆、魔法少女なのです。(嘘です)
constexpr は、関数や変数に適用してコンパイル時に定数値を決定づけます。↓こんな感じ。
int main() { constexpr color const yellow { 255, 200, 30 }; int n = input(); switch( n ) { case yellow.r_value: cout << "r と同じ"; break; case yellow.g_value: cout << "g と同じ"; break; case yellow.b_value: cout << "b と同じ"; break; } }
素晴らしい。コンパイルが通りました。
また契約といえば assert ですが、C++11 では static_assert という静的な assert も使えるようになりました。
こうしてコンパイル時定数の表現能力が上がるということは、C++ の強力なテンプレートメタプログラミングの威力が増すということであり、最適化が増強されるということでもあります。これらを組み合わせることで定数オブジェクトの利用シーンは確実に増えるはずです。どんどん使っていきましょう。
■いじょ。
C++11 らしいところ、ということで 3 つほど出しましたけど、探せば何かもっと面白いネタは有りそうな気がします。(ところどころ Java を反面教師として出してますが、僕は Java は嫌いじゃないですよ。)
それでは、次のDigitalGhost(@decimalbloat)さんの記事を楽しみに待ちましょ。
2011-09-19
「函数プログラミングの集い 2011 in Tokyo」を速読みしたい人へ。#fpm2011
イベント |
先日「函数プログラミングの集い 2011 in Tokyo」というイベントがあったようです。
僕は行ってないし Ust 録画も見ていないのですが、TL の流れを見るにかなり面白い内容だったみたい。しかしこれ追いかけるにはややボリュームがありすぎるので、 Togetter(全 2,378 post!) *1から名言を pick up*2。ざっくり雰囲気掴みたい人はどうぞ。
初っ端のプレゼンの資料は、URL らしい。 #fpm2011
2011-09-17 09:55:17 via web
プレゼン資料遅延評価wwwwwww #fpm2011
休戦といいつつHaskellTシャツとOCamlTシャツが無言の圧力を掛けてくる怖い #fpm2011
関数型な人たちはマーケティングが下手という話。 #fpm2011
「関数型言語の定義とは何か」ではなく「関数型プログラミング手法とは何か」と思ったほうがいいのかな。 #fpm2011
Lispは関数型じゃないので,関数型を語る見地で言えばdisってても問題ないとは思う #fpm2011 \ホッビロ~ン/
「ErlangとかClojureとかはさておき(笑)、静的型付けはとてもよい」 #fpm2011
2011-09-17 10:36:06 via web
CPS 変換すればみんな末尾再帰にはい、黙ります。 #fpm2011
再帰がforより良い理由の一つ:「for だと、文と文の間では型が検査されません。一方で、再帰の場合は、構成要素がすべて式なので、式と式の間で型が検査されます。」と @kazu_yamamoto さんがいっていた。これは同意できる #fpm2011
2011-09-17 10:41:10 via web
再帰でも書けるしfoldrでも書ける。一番力が弱いものを使え!map < fold < recursion #fpm2011
簡約λカ娘が参考文献にwww 委託販売される予感なので少しだけお待ちください。今日は飛び起きて滑り込みセーフで来たので持ってきてないです #functional_ikamusume #fpm2011
「金融商品記述は関数型言語の独壇場! これでお金を稼いでる人、あれ、いない?」 #fpm2011
キャー ペロペロおじさんーー #fpm2011
2011-09-17 11:09:34 via web
やはりこれを引用しておかないと:「モナドは単なる自己関手の圏におけるモノイド対象だよ。何か問題でも?」 URL #fpm2011
2011-09-17 11:15:02 via web
モナドは「プログラム可能なセミコロン」。 C++ですらオーバーロードできないセミコロンを、Haskellならオーバーロードできる、とも以前誰かがいっていた。 #fpm2011
2011-09-17 11:16:51 via web
2011-09-17 11:17:01 via web
モナドと継続のざっくりした関係については URL の2節を見ると何となくわかったような気がしてくる #fpm2011
2011-09-17 11:23:57 via web
舌足らずだった。f : A -> Bとみなしたら上手く圏になるようなMのことがモナド。 #fpm2011
前半の、モナドとはプログラマブルセミコロンで逐次実行のセマンティクスを書き換えられる、とかいう話と、後半のHaskellでのモナドは型クラスでリストもモナドでモナド則を満たすといいね! という話の間に横たわる理解の深い溝を埋めたい #fpm2011
モナドはF# では computation expression (計算式), ScalaではflatMapを持ったクラスとして使われてるよね。 #fpm2011
もんだいにおうじて,なんにでもかえられる,どうぐ. #モナドであいうえお作文 #fpm2011
#fpm2011 「モナドはIOのためにあるのではありません。モナドはIOのためにあるのではありません。」
2011-09-17 11:37:58 via web
あまりに淡々と話すせいで、ネタへの反応に困る会場の図 #fpm2011
モナドとは、1)象、2)非メタファー、3)パラダイム、4)手続きの再定義、5)プログラマブルセミコロン、6)継続の一般化、7)計算コンテクストの抽象化、8)床下配線、9)関数レベルのメタプログラミング、10)>>=とreturnが定義されたもの、である。 #fpm2011
余談: 継続モナドで他のモナドを実装する話 #fpm2011
#Scala での Either モナドとか(´・ω・)っ URL URL #fpm2011
2011-09-17 12:13:46 via web
会場の空気がカレー化される恐れ。 #fpm2011
おお、やはりunfold #fpm2011
この一ヶ月 monad transformer とか MonadHogehoge とかで苦労してなんとなく根性で身に付きかけていたモナドプログラミング感が 「モナドの作り方」ですごく見通しがよくなって嬉しいです #fpm2011
2011-09-17 13:46:56 via web
名古屋大学いいね! #fpm2011
#fpm2011 「Rubyより静的型付けのScalaのほうがいいですよ!と主張して説得しました。」
2011-09-17 13:49:05 via web
GAE使いたい =>じゃあScalaですね #fpm2011
お客さん「GAEで動かしたいよ」ITPさん「じゃあScalaですね」 #fpm2011
「Javaができる」「ならScalaもいけますね」「環境はGAE」「じゃあScalaですね」 素敵すぎるw #fpm2011
2011-09-17 13:53:11 via web
ITPは今日まで「関数型言語を愛する会社」だと思っていたけど「静的型を愛する会社」だと認識を改めました #fpm2011
iZEさんはocaml-nagoyaとOSCで出会った理解者なのです。もともと彼らがhaXeを触っていたのもありますけど、コミュニティを活発にするといいことありました、という好例なのです #fpm2011
「Coq で証明した」の説明はここ。 URL #fpm2011
2011-09-17 13:58:13 via web
「お客さんの信頼を得る静的型付言語を使えるいいものができる信頼を得られる 関数型円環の理」 #fpm2011 #functional_tomoe_mami #functional_madoka_magica
yoshihiro503「函数的・円環の理!(ドヤァ」会場「」 #fpm2011
Haskell だと IO なら例外、それ以外は Maybe か Either で返してほしい。個人的には。 #fpm2011
2011-09-17 14:08:17 via web
#fpm2011 の開場でこそこそとD言語のライブラリ書いてる
Scala のは Lift の Box 型だったかな URL #fpm2011
2011-09-17 14:09:55 via web
「どの分野だろうとBugはだめでしょビジネスなんだから」#fpm2011
リバースエンジニアリングを始めたきっかけは、地元の大名がよわかったから #fpm2011
2011-09-17 14:14:24 via web
「信じられるのは現行システムのソースだけ」名言。 #fpm2011
バイナリからソースへの、かと思っていたら、ソースから仕様書へのリバースエンジニアリングであった #fpm2011
2011-09-17 14:19:47 via web
COBOLソースから設計書作るサービスやってるのか>NTT-D #fpm2011
2011-09-17 14:22:09 via web
プログラム設計書という疑似コードが何故必要なのか、というのは本当は謎だよな。。。確かにほとんどコードな疑似コードを設計書として作れば、プログラミングは単なる作業なんだが。 #fpm2011
2011-09-17 14:36:22 via web
インド人をカリー化してHaskellに... #fpm2011
インドにはHaskell書ける奴、いっぱいいる!つまり、そういう仕事が多いということ。Job SearchでHaskell引くと、案外多い。Mathematicaとは大違い。しかしなぜHaskell需要あるんだろう? #fpm2011
2011-09-17 14:40:07 via web
日本人に Haskell 教えるより Haskell できるインド人に日本語教えるほうを選んだ、ということか #fpm2011
2011-09-17 14:40:46 via web
「Haskellのエンジニアはインドには沢山いる。vimも基礎教養として知ってる。」「テスト戦略、生産性指標、工数見積もり、などJavaなどの開発手法が使えない」 #fpm2011
2011-09-17 14:41:12 via web
「インドの人なら Vim も基礎教養として身につけているので」 #fpm2011
NTT Data さん、 「COBOLをリバースエンジニアリングしてExcelを吐くのにHaskell つかう => 人がいない => インド人雇う」 とかカオスなことやってるんだなぁー #fpm2011
2011-09-17 14:41:39 via web
HaskellでNTTDataに就職出来るらしい #fpm2011
新卒君にHaskell教えるとか、正直ゾッとする。知的関心をレバレッジに生産性を出す技術を関心がない人に仕事として教えるのはまじで辛い #fpm2011
2011-09-17 15:03:53 via web
#Scala の PartialFunction についてはこちら #fpm2011 URL URL
2011-09-17 15:16:40 via web
clojureのコンパイルターゲットが、ClojureScriptの導入でJVMとブラウザJSとNode.jsに #fpm2011
2011-09-17 15:31:00 via web
URL 即興で #Scala の PartialFunction についての説明をかくなど URL #fpm2011
2011-09-17 15:33:31 via web
Clojureの導入事例 #fpm2011 URL 金融(citiグループ)、クオンツ、科学分析(マックス・プランク研究所)からソーシャル(twitter)まで
2011-09-17 15:34:23 via web
動的な型チェックを、「動的型づけ」というのは、日本語として誤りだろ。 #fpm2011
2011-09-17 15:45:01 via web
.@master_q Yi とかそうなっています。System.Plugin。Don が論文書いています。 #fpm2011
2011-09-17 15:46:45 via web to @master_q
関数型言語としてのClojureということでは、永続データ構造の使い方が特徴的だと思う。マップ、リスト、キュー等が永続データ構造として用意されている。一方、可変な参照オブジェクト的なものが用意されていて、STMのトランザクション内でそれを書き換える感じ。 #fpm2011
2011-09-17 15:46:48 via web
John Hughes も日本に来ますよ! QuickCheck Lounge。まだ空きがありますよ! URL #fpm2011
2011-09-17 15:51:24 via web
Iteratee とか #Scala にも(ry #fpm2011 URL URL
2011-09-17 16:01:21 via web
「attoparsec: スピード狂の人がParsecの遅さにブチ切れて作った8倍速い奴] #fpm2011
"Enumeraotorの何がいいのか" Enumerator Package Yet Another Iteratee Tutorial URL #fpm2011
2011-09-17 16:04:15 via web
F#!F#! #fpm2011
D言語でさえ演算子を減らしたというのにF#と来たら #fpm2011
「げんじつ - C, SQL<<<(これが無いと世界が成り立たない壁)<<<関数型言語 - 輝かしい関数型の世界、この壁の下にSML#は行きたい」 #fpm2011
その3を作った URL #fpm2011 の検索で 出たtweetのみです。できるもんなら編集してつかあさい
2011-09-17 16:31:23 via web
結局、今から関数型言語やるなら何が良いんだろ。 #fpm2011
「函数プログラミングの集い2011」URL URL 実は上野さん以外:-)の発表者は全員が企業(ないし大学だけど他分野)ユーザ? #fpm2011
2011-09-17 16:47:57 via web
@masahiro_sakai FAQっぽい(=私もいつも気になる:-))ので改めて聞いてみました。やはりC側で生きているMLヒープ上の値は、ML側でもゴミにならないように(少なくとも今のところは)プログラマが何とかしないといけないそうです #fpm2011
2011-09-17 17:00:06 via web to @masahiro_sakai
村主です。LTの発表スライドをParaisoプロジェクトページのトップに置いたから見てね! URL #fpm2011
2011-09-17 17:00:17 via web
SML# は、すごいなぁ。しかし、moveしないGCって、どうなってるんだろう? Cに渡したSMLのオブジェクト(配列)のポインタを、Cの世界で捕まえられたら、どうなるんだろう?? などと、疑問も沸いたが、基本姿勢から素晴らしい。 #fpm2011
2011-09-17 17:01:52 via web
Coqは関数型言語の中では同率3位のメジャー言語です。 URL #fpm2011
2011-09-17 17:06:44 via web
「テストは楽しくないけど、証明は楽しい」 #fpm2011
質問「証明楽しくない人はどうしたらいいんでしょうか」 #fpm2011
回答「それは深刻な問題ですね」 #fpm2011
「函数プログラミングの集い」での発表資料「昨日の今日で F# 3.0」をアップしました。 URL #fpm2011
2011-09-17 17:15:32 via web
#fpm2011 ボクもreverseの証明してるときは全然たのしくなかったです。 「ってライブラリを証明して作ろう」ってことをしだしたら、すごく楽しくなりました。
2011-09-17 17:15:59 via web
scalaが注目されている今、oopとfpが合わないとか(何も根拠なしに)言う人はそれほど多くないんじゃないかなーとか思う。根拠付きでoopとfpのしんどい話をする人はいると思いますが。 #fpm2011
OpenMPとCUDAのコード両方を生成できるVMをデザイン...すごすぎる。 #fpm2011
2011-09-17 17:46:02 via web
@esumii まったく同じソースコードからCPU版ではなくGPU(CUDA)版も生成、性能が1桁向上など #fpm2011
2011-09-17 17:46:23 via web to @esumii
2011-05-14
Boost. 勉強会 #5 に参加してきた。
まず最初に謝らねばなりません。
以前書いた Boost.勉強会 #3 の記事 ですが、
タイトルが「Boost 勉強会 #3 に参加してきた。」
になっていました。
正しくは「Boost. 勉強会 #3 に参加してきた。」
となっているべきであり、「.」の存在を軽視しておりました。大変失礼いたしました。
えぇさて今回は Boost. 勉強会 #5 に参加してきました。今回は初めての名古屋開催ということで関東より近いということもあり、足を伸ばしてきました。近いから現場で聞こうと思った、というレベルを超えて、今回は登壇してきました。「Boost.statechart / Boost.MSM」というタイトルで 20 分と短いスライドでしたが、外部でのセッションが初体験ということもあり楽しんで喋らせていただきました。
そもそも何で僕が喋る事になったかというとこれまた以前参加させていただいた NGK(名古屋合同懇親会) で @bleis センセに声をかけていただいたからです。あれに行ってなかったら喋ってなかったと思います*1。
全ての元凶は某ぐるぐるであり、ぐるぐるを育てた名古屋であり、従って名古屋まじ怖いです。
セッションの資料はここにアップしました。
Keynote 版 『boost_statechart_msm.key』
PDF 版*2『boost_statechart_msm.pdf』
あと、セッションでデモした「bleis 削除ゲーム」のソースはここにアップしてあります。(ビルドには Qt が必要です)
僕以外のセッションですが、一番印象的だったのはやはり @kumagi センセの『春のlock free祭り』でした。
そもそも、僕が lock free という言葉を聞いたは数ヶ月前でした。しかしそれがどういうものかを知った最初の感想は(えっ... 本気でそんなこと考えてる人がいるの...!?)だったのを覚えています。
今回のセッションでは lock free の実現のためのアルゴリズムについて丁寧に噛み砕いて解説されており、一般のプログラマにとっても価値あるセッションだったのではないかと思います。また、発表順も一番バッターでしたし 40 分という長時間の設定だったのでかなりハードルが高かったと思うのですが、 3 分に 1 回ぐらいは冗談を交えたりして聴衆を飽きさせない喋りをしてたんですげーなぁと思って見ていました。セッションの進め方という面でも僕にとって良い刺激になりました。
他の方のセッションも面白かったのですが、いかんせん自分の発表もあったので緊張で心臓がメルトダウンしそうな状態が続いており、集中して聞けなかった部分もあったのは反省点。後でスライドを確認させていただきます。
懇親会。
@cpp_akira センセからは魔導書第二弾について話を聞かせてもらいました*3。主に @otf センセとだべってました*4。@decimalbloat センセは相変わらず食欲旺盛そうでした。@Cryolite センセの野良セッション「非同期呼び出しにおける所有権の移動」が凄く興味深かったです。あと、会場の隅に居たとはいえ、あの空間で喫煙してサーセンしたっ!
以上、今回も楽しませていただきました。関係者の方々及び参加された方々、ありがとうございました。








http://d.hatena.ne.jp/kura-replace/20110220/1298223352
(青字ってもしや...!)