Archives | Tumblr | Contact | bullet-feed.pngRSS 

ウェディングケーキに記述するソースコードは何が良い?


このエントリーをはてなブックマークに追加

my_wedding_cake.jpg

 この画像は、とある技術者の結婚式で作成されたウェディングケーキの画像です。日本でこれをやると、単なる「マニアック」か「おたく」と言うワードで片付けられがち。

 プログラミングコードのこういう使い方は良いですね。技術者である事に誇りを持ちつつも、飾らないスタイルにあこがれます。

 画像は下記のサイトにありました。

 過去、何度か紹介している、技術者の為のQA掲示板、Stack Overflowからです。

 ウェディングケーキに書かれているコード。

do {
  have_and_hold();
  love_and_cherish();
}until(death==true);

 "have and hold"って言うのが実は良く分からないのですが、持って、保つだから、「末永く(お幸せに)」って事かなぁ。"love and cherish"は、「愛して、大事にして」で、で、締めは「死ぬまで」のdo untilループになってます。

 このスレッドには、その他にもウェディングケーキに記述するためのコードがいくつか投稿されています。

for( ; ; );

 これは、「末永く」ですかね。なるほど。

if (wife.allowsCodeOnCake)
{
    this(nerd).hasFoundTrueLove = true;
}

 妻がケーキにコードを書くことを許してくれたら、(コンピュータおたく)は本当の愛を見つけるでしょう。

/*
* No need anymore, but plz do NOT erase
*
* class Singleton {...}
*/

 何も言う必要は無いよ・・。

# DO NOT EDIT THIS FILE - until death
# (/marriage/crontab.XXX installed on Sat Apr  4 11:26:10 2009)
# (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $)
0 21 * * * unzip; strip; touch; grep; finger; mount; fsck; more; yes; umount; sleep

 cron的記述。訳しませんが、ちょっとアダルトですね。

while( true ) love++;

 僕的には、これがシンプルで一番好きだなぁ。

 他にもありますので、興味のある方はリンク先からどうぞ。

プログラマーはソフトウェアに何を感じているか?を画像にするとこうなる


このエントリーをはてなブックマークに追加

tomcat-4.1.37.png

 「プログラマーがソフトウェアに何を感じているか?」を画像にするとこうなるようです。上の画像は、Tomcat バージョン4系を画像にしたものです。

 » Mistaeks I Hav Made: What do Programmers Feel About their Software?

 この画像を生成する方法は、記事によると、こう書かれています。
 
 ソフトウェアのコメントだけを、ソースコードから引き抜いて、それをSynesketchと言う、原文から感情認知が出来る視覚化エンジンに突っ込んでみたそうです。

 こうすることによって、出来上がった製品からは、うかがい知ることが出来ない、プログラマーの感情を視覚的に知ることが出来ます。記事を書いた方は、チームメンバーの間の個人的なコミュニケーションのために使われるコメントに興味があるらしいです。

 Tomcat4は見て分かるとおり、なんとなく複雑で、不満足なコミュニケーションが見て取れます。

Tomcat5
tomcat-5.5.27.png

Tomcat6
tomcat-6.0.18.png

 しかし、バージョンが上がるごとに満足度が上がり、複雑さが解消されていくのが画像からなんとなく分かります。

 そして、下の2つは、とある有名なエンタープライズ系のアプリケーションを画像にした物です。あえて匿名にしてあります。

enterprise-app-s.png

 なんて複雑なんでしょうか。"enterprise-app-s"となってますが、Sが頭文字のアプリって何だろう。

enterprise-app-m.png

 悲しすぎる画像。"enterprise-app-m"となってます。Mが頭文字のアプリのようですね。


 この画像の生成は、Synesketchをダウンロードして仕込みさえすれば作れるようです。まぁ、英語限定でしょうけども。

会社の事務所にある食器洗い機をみんなでより良く使うための関数


このエントリーをはてなブックマークに追加

kitchen_maintenance.jpg
Original update by Eira M.

 ノルウェーの会社の事務所にある、台所での話。

 食器洗い機が有効に使われておらず、汚れたままになっているカップをみて、心を痛めた従業員が、みんなでより良く使えるように、小さな関数を書いたそうです。

 そして従業員に提案するため、そのコードを台所に貼り付けました。その後の写真がこれです。下記が元画像へのリンク。

 » The annotated original on Flickr - Photo Sharing!

 これは面白い!

 ちなみにこのコードのコメントには、こう書いてあります。

Please follow these simple procedures to help keep the kitchen tidy and enjoyable for everyone to use.
 (皆が使うキッチンをきちんと、そして、楽しく利用できるように、この簡単な手順に従ってください。)

 この紙の下のほうに、ごにょごにょと書いてありますが、他の従業員からの意見や指摘が書かれているようです。紙上で、議論が行われています。

 「食器洗い機が一杯じゃなかったらどうするの?」とか。この行為は、まんまコードレビューですね。なかなか素晴らしい職場だと思います。

 で、この画像の元となった記事は下記ですが、どうもノルウェーの方のようです。

 » Hvordan få din nerd til å ta oppvasken: En ufullendt studie « elektroniske pistler fra kjøkkenet

 その後の顛末は文書が理解できないのでさっぱり分かりませんが、どうも他の従業員からもいくつか提案が出たようですね。"kitchen_maintenance"関数が、パスカルやアセンブラなど、複数のプログラミング言語が書かれています。

 プログラミング言語は世界共通言語かもしれないなぁ、と思わせる画像でした。

The Evolution of a Programmer(あるプログラマーの進化)


このエントリーをはてなブックマークに追加

 "Hello World"出力のコードを通して、プログラマーの進化が見れるというネタです。

 » The Evolution of a Programmer

 ものすごく長いコードもありますが、どれも"Hello world."を出力するコードですね。

 それぞれのコードが何のプログラミング言語で書かれてるか分かるでしょうか?

 BASIC,Visual BASIC,C,C++,perlですかね。

 後半になるほどネタ度が高くなります。例えばこれ。

Middle Manager

mail -s "Hello, world." bob@b12
Bob, could you please write me a program that prints "Hello, world."?
I need it by tomorrow.
^D
 (件名:Hello, world
 「ボブ、君に"Hello,world."を出力するプログラムを書いて欲しいんだが。明日までに必要なんだ。」)

 とか。

 話は逸れますけど、いまどきコマンドラインでメールを打つってのは、なかなかのものだと思いますが、あちらでは、一般的なんでしょうか。

 そして、最後のコード(?)が素晴らしいオチ。

Chief Executive

% letter
letter: Command not found.
% mail
To: ^X ^F ^C
% help mail
help: Command not found.
% damn!
!: Event unrecognized
% logout

心に響く、プログラム、コンピューターに関する優れた格言、名言


このエントリーをはてなブックマークに追加

 何度か紹介している下記の"Stack Overflow"は、エンジニアのためのQ&Aサイトです。

 » Stack Overflow

 このサイトの、人気があるQAの中で、"great programming quotes(凄いプログラミングの格言)"と言うのがありましたので、その中から、特に心に響いたものを抜粋して和訳します。

 » Great programming quotes - Stack Overflow

 <余談>記事を投稿しようとしたら、このQAに掲載されている格言とオーバーラップしている全く別の記事を見つけてしまいました。しかも、すでに和訳されている文章がかなりあります。まぁ、ここまで作って、途中でやめるわけにも行かなかったので、このまま投稿しようと思います。今回掲載する訳文については、一応、自ら訳したオリジナルです。</余談>

Hofstadter's Law:
It always takes longer than you expect, even when you take into account Hofstadter's Law.
 ( ホフスタッターの法則:作業は、いつだって予測以上に時間がかかるものだ。ホフスタッターの法則を計算に入れても。)

 格言が再帰してます。

Walking on water and developing software from a specification are easy if both are frozen.
-- Edward V Berard
 (水の上を歩くのと、仕様からのソフトウエア開発は、簡単だ。・・・両方とも凍っているならの話だが。)

 「凍っちゃってる仕様は、作ってもあまり意味が無い。」って話もあるけども。

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
 (デバッグ作業は、最初にコードを書くときよりも倍難しい。したがって、自らの知恵を出来る限り振り絞って書いたコードは、その定義上、自分自身でデバック出来ない。)

 何にでも余力は必要。

Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.
-- Rick Osborne
 (コーディングは常にこう、心がけるのだ。出来上がったコードを最後にメンテナンスするのが暴力的な精神病者で、そして、君の住所を知っていると。)

 コードやコメントに、証拠や個性を残すべからず。

The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time.
--Tom Cargill
 (初めの90%のコードは、開発時間の90%を占める。残りの10%のコードは、他の90%の開発時間を占める。)

 足したら180%。

 これは、下記の格言からの変形。

The first 90% of the code accounts for the first 10% of the development time. The remaining 10% of the code accounts for the other 90% of the development time."
-- Jon Bentley
 (初めの90%のコードは、開発時間の10%を占める。残りの10%のコードは、他の90%の開発時間を占める。)

 これでも十分、心に響く。

Java is to JavaScript what Car is to Carpet.
 (JavaScriptにとってのJavaは、「カーペット」にとっての「カー」。)

 格言と言うか、ジョークの類かも。

 追加で、下記のサイトからの格言を、いくつか抜粋して訳します。

 » 101 Great Computer Programming Quotes

There are only two kinds of programming languages: those people always bitch
about and those nobody uses.
-- Bjarne Stroustrup)
 (この世には、2種類のプログラミング言語しかない。皆が常に不平を言う言語と、誰も使わない言語。)

 言語に限らず何にでも当てはまる。

The trouble with programmers is that you can never tell what a programmer is doing until it's too late.
-- Seymour Cray
 (プログラマーの困った点は、手遅れになるまで、何をしているか、けして分からないことだ。)


 ぐさり。

Don't worry if it doesn't work right. If everything did, you'd be out of a job.
-- Mosher's Law of Software Engineering
 (うまく行かなくても気にするな。全部うまく言ったら、君の仕事はなくなるのだから。)

 自分(もしくは、誰か)が掘った穴を自ら埋める。これがすなわち仕事。

First, solve the problem. Then, write the code.
-- John Johnson
 (まずトラブルを解決し、それからコードを書け。)

 理想:コードとは、仕様を書き落とした物。

To iterate is human, to recurse divine.
-- L. Peter Deutsch
 (繰り返し処理は人の技。再帰的呼び出しは神の業。)

 再帰は、時に人智を超える。

There is no programming language--no matter how structured--that will prevent programmers from making bad programs.
-- Larry Flon
 (下手なプログラムの作成を防げるプログラミング言語は存在しない。たとえどんなに構造化されていても。)

 そして、構造化されすぎた言語は、誰も使いこなせない。

Writing in C or C++ is like running a chain saw with all the safety guards removed.
-- Bob Gray
 (C言語やC++で書くと言う事は、まるで、全ての安全装置が取り外されたチェーンソーで作り上げるようなものだ。)

 斧とも言う。サーバーを真っ二つに割るくらい酷くなる事も。

Good code is its own best documentation.
-- Steve McConnell
 (優れたコードは、コード自身が最良のドキュメントとなっている。)

 優れすぎたコードは、凡人には理解できない、という話もある。

You can't have great software without a great team, and most software teams behave like dysfunctional families.
-- Jim McCarthy
 (素晴らしいチームなしに、素晴らしいソフトウェアは生み出せない。そして、大部分の開発チームは機能不全の家族のように振舞う。)

 確かに。酷いと家出とか引きこもりなど、発生するね。

If debugging is the process of removing bugs, then programming must be the process of putting them in.
-- Edsger W. Dijkstra
 (デバッグ作業が、バグを取り除く過程であるならば、プログラミングとは、バグを入れ込む過程でないとおかしい。)

 リリースとは、「バグ」を「仕様」に変化させる工程である。

But what is it good for?
-- Engineer at the Advanced Computing Systems Division of IBM, commenting on the microchip, 1968
 (で、それは何に使えるの?)

 苦労すればするほど、元のコンセプトから外れていく。

2009.5.23追記
 コメントでアドバイスいただいた点を一部直しました。ありがとうございます。

あなたが今までに読んだソースコードの中で、最高のコメントは何ですか?


このエントリーをはてなブックマークに追加

What is the best comment in source code you have ever encountered?
 (あなたが今までに読んだソースコードの中で、最高のコメントは何ですか?)

 と言う、質問に対する答えが載っているサイトを見つけました。

 » What is the best comment in source code you have ever encountered? - Stack Overflow

 なかなか面白いものがありますので、いくつか引用します。

1. Hammertime!

stop(); // Hammertime!

 全然、説明になってないし。(笑)

 そういえば、M.C.Hammerと言うラッパーが居ました。そこからから取ってきたフレーズですね。懐かしい。最近、自己破産したってニュースを聞いたような。微妙に死後っぽいところが良い。

 » M.C.ハマー - Wikipedia


2. sometimes

// sometimes I believe compiler ignores all my comments
 (時々、コンパイラーは、僕のコメントを無視してるんじゃないかと思う。)

 ときには、コメントを理解してくれる、そんなコンパイラーが欲しい。


3. drunk 

// drunk, fix later
 (酔ってる。また後で修正します。)

 で、まだ書き直してないと。


4. Magic 

// Magic. Do not touch.
 (魔法。触らないで。)

 絶妙なバランスで成り立っている魔法のようなソースコードが、世の中には多々存在します。そんなときは、こう書かざるを得ない。


5. I'm sorry 

// I'm sorry.

 謝られても困る。なにをやらかしたんだ?


6. God only knows 

//When I wrote this, only God and I understood what I was doing
//Now, God only knows
 (私がこれを書いた時、神と私だけが、内容を理解した。)
 (今は、神のみぞ知る。)

 自分の手から離れてしばらく経つと、部分修正されて、初めに作った本人も理解できない神のみぞ知るプログラムが出来上がる事もあります。


7. should never happen 

try {

} finally {
// should never happen
 (決して起こってはならない)
}

 「例外処理など起こるはずが無いのだ!」と言う気持ち、よく分かります。

 まだまだ面白いのがあります。すぐ使えそうな物もありますね。僕もこれを見習って、人を唸らせるコメントを書いてみたいと思いました。