Archives | Tumblr | Contact | bullet-feed.pngRSS 

各プログラマーが見ているそれぞれのプログラミング言語のイメージ


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

programming_fan.jpg

 数日前に、「linux,windows,macの各フリークが見ているそれぞれのイメージ」と言う画像の事を紹介しましたが、これはそのプログラミング言語編です。

 過去の記事はこちら。

 上に貼り付けた画像の拡大版はこちらです。

 なんというか・・・、単に自分が好きな言語はほめたたえて、他の言語はけなしてるだけと言う風にみえます。多分そんな感じ。

 上の画像に至るまでに、作成の元となった、いくつかの別バージョンがあります。

programming_fan_origin.jpg

 これがオリジナルっぽい。


programming_fan_before.jpg

 こっちが、Haskellの足されたバージョン。軽く手抜き。

色んなプログラミング言語で組んだ「Hello world!」のプログラム集


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

 今まで使った事が無いプログラミング言語のことを色々と調べていたら、Wikipediaの日本版に、いわゆる「Hello world!」のプログラム一覧が掲載されているページを見つけました。

 かなりの充実っぷり。色々な言語を眺めてるだけでも十分面白いです。これだけ集まっていればもう十分かも、と思ったのですが、ついでに関連する他のサイトも調べてみました。

 本家WikipediaにもHello worldプログラムの一覧があります。プログラム一覧は、Wikipediaの方ではなく、Wikibooksと言うサイトに納められているようです。

 このサイトにリストアップされている収録プログラミング言語数は、219種類です。日本語版Wikipediaの収録数は、概算で120種類くらいですので、こちらの方が掲載数が多いです。さらにディープな言語を見たい方は上記のサイトからどうぞ。

 それから、下記のサイトにもHello world一覧があります。これもなかなか面白いです。

 このサイトの解説によると、こちらのサイトでは、今までよりもさらに多く、428プログラムが掲載されているらしいです。

 まぁ、もっとも、Humanと言うかなりキワモノな言語(?)も掲載されているので、その分いくらか多いのかもしれません。このサイトにある言語「Human」は必見です。下記からどうぞ。

 他にもジョーク的なものがいくつか隠されているようです。

 その他、探してきた"Hello world"プログラム集サイトを下記に掲載します。

 おまけ。過去に掲載した記事。こちらは、"Hello world"ではなく、もう少し複雑なプログラミングが要求されています。

 ・・・で、この記事を書いていたおかげで、もともとの目的を果たす時間がなくなってしまいました。

どう発音すれば良いか迷った時に見るアスキー表


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

ascii_table.png

 「アスキー表」と言っても、これは、ASCIIコードを見つけるためのアスキーコード表ではありません。それぞれのアスキー文字について、どのように発音したらよいのかがまとめられている一覧表です。発音に迷った時便利です。

 参照元はこちら。

 良く使っているのに、実は読み方をよく知らないアスキー文字と言うのは結構あるものです。それぞれの記号には、「! (ビックリマーク)」など、一般化された日本語なりの読み方と言うのは一応ありますが、何かの正式な場で発言する時などの為に、きちんとした読み方を覚えておきたいものです。

 僕は、このサイトで、「# (Crosshatch)」や、「@ (At Sign)」、「^ (Circumflex)」、「` (Grave)」など の正式な読み方を始めて知りました。

 それから、「"」をダブルクォーテーション、「'」をシングルクォーテーションと呼ぶ事が多いですが、正式な言い方で言うと、「" (Quotation mark )」がクォーテーションマーク、「' (Apostrophe)」がアポストロフィーなんですね。ここら辺、知識として抑えたいところです。

 その他、正式名称の右側に書かれている通称も興味深いです。それにしても数多くの読み方あるものです。

あなたがプログラミングギークであるかを見分ける100の質問


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

 本当に100の質問があるかは、数えてませんが・・・。

 下記の記事で、あなたがプログラムにまつわることやプログラミング言語に対して、本当にギーク(おたく)であるかを見分けるための短い質問集があります。

 僕も読んでみましたが、かなりの数、該当する答えがありました。これらの質問は、単にコンピューターおたくを、おもしろおかしく皮肉ってるだけじゃなくて、かなり納得できる、良く考えられた質問が数多くあります。

 とても面白かったので、例によって、いくつか抜粋します。

I am a programmer geek if:
 (もし、下記に該当したら、僕は、プログラマーギーク:)

I consider 256 to be a nice, round number.
 (256が素晴らしく、切りのいい数だと考えています。)

I become annoyed when 10K means 10,000.
 (10Kが10,000を意味するとき、困惑します。)

I start counting from 0 and end up with one less than everyone else.
 (0から数え始めて、ほかのみんなより1つ少なく数え終わります。)

I end my sentences with a semi-colon.
 (セミコロンで文を終えます。)

I write equals as == and not equals as !=.
 (等しいを『==』と書き、等しくないを『!=』と書きます。)

I know where to find the {braces} keys without looking.
 (なにも見なくても、ブレースキー(『{』、『}』)がどこにあるか分かっています。)

I call text phrases "strings."
 (文字列をを「ストリングス」と言います。)

When someone asks me what languages I speak, I reply: "C#, Java, PHP and Python.
 (どんな言語を話すの?と聞かれたとき、こう答えます。「C#、Java、PHP、Python」)

I hear the word "Scuzzy" and don't think it's a bad thing.
 (スカジーと聞いても、それが悪いものであると思いません。(訳注:Scuzzy=汚らしい))

My favorite f-word is fdisk.
 (Fで始まる好きな言葉は、fdiskです。)

<rant>I include XML in regular correspondence.</rant>
 (XMLを常用的にメールの中へ入れます。)

I use camelCase for names.
 (名前をつける時に、思わずキャメルケースを使います。(訳注:キャメルケースの例「camelCase」))

I take things too literally. For example, my wife gets upset when she asks "Do you want to take out the garbage?" (no) instead of "Will you take out the garbage?" (yes).
 (文字通りに意味を取り過ぎます。例えば、こうやって聞いた妻を困惑させます。「(直訳)ゴミ出しをしたいですか?」(いいえ)、「ゴミ出ししてもらえる?」(はい)。)

I respond to questions too logically. For example, when a waitress asks me, "Would you like coffee or tea?" I respond, "Yes."
 (あまりにも論理的に質問に答えます。 例えば、 ウェイトレスが私に「(直訳)コーヒーかお茶は好きですか?(コーヒーとお茶どっちが良いですか?)」と聞いたとき、「はい。」と答えます。)

I answer negative questions in the technically-correct but awkward way. When my mom asks me, "Wouldn't you like a glass of milk?" I respond, "Yes, I wouldn't like a glass of milk."
 (技術的には正しいが、おかしな答え方で、否定的な質問に答えます。母が私に「1杯のミルクが好きでありませんか?」聞くとき、「はい、私は1杯のミルクが好きでありません。」と答えます。)

When I make a mistake or say something I shouldn't have, I wish I could press Ctrl+Z.
 (間違えた時や、何か言ってはならない事を言ってしまったとき、Ctrl+Zを押せたら良いのになぁと願ってしまいます。)

When searching a paper book, I get frustrated that I cannot simply press Ctrl+F to find the text I'm looking for.
 (紙の本で探し物をするとき、単にCtrl+Fを押すだけで探してるテキストを見つけられないと言う事に欲求不満を感じます。)

When a store cashier asks me for my zip code, I demand to see the store's privacy policy.
 (支払いで郵便番号を聞かれたとき、その店のプライバシーポリシーを知らせて欲しいと要求します。)

I get sudden attacks of bittersweet nostalgia when thinking about my long-lost Commodore 64, Sinclair ZX-81, TRS-80, or Amiga 1000.
 (長い間所在不明だったCommodore 64, Sinclair ZX-81, TRS-80やAmiga 1000について考えると、突然、ほろ苦い思い出があふれ出します。)

I hold a mouse more than my wife's hand.
 (妻の手より、マウスを持つ機会が多いです。)

I assume that most people love their jobs like I do.
 (自分がしてるように、大部分の人々は自分自身の仕事が好きであると推測します。)

Nighttime and sleep are no longer irrevocably linked.
 (夜間と睡眠は、取り返しのつかないほど、結びつきません。)

I understand (0×2b||!0×2b) and find it funny.
 ((0×2b||!0×2b)を理解し、これがおかしいとわかります。(訳注:僕には良く分からない。))

I think these programming jokes are hilarious.
 (これらのプログラミングに関する冗談が面白いと思います。)

I think xkcd is the funniest webcomic ever.
 (xkcdがこれまでで最もおかしいウェブコミックであると思います。(訳注:これは激しく同意))

I think the three primary colors are red, green and blue.
 (3原色は、赤、緑、青だと思います。)

I have more than one monitor.
 (2つ以上のモニターを持ってます。)

I have more email addresses than pairs of shoes.
 (持ってる靴よりも多くの電子メールアドレスを持ってます。)

The number of computers in my house exceeds the number of romantic relationships I've had in my lifetime.
 (家のコンピュータの数は、生涯の恋愛関係の数を上回ります。)

I run a Web server at home.
 (自宅でウェブサーバを動かしてます。)

Instead of playing games on my Xbox, I install Linux and use it as a server.
 (Xboxを使ってゲームをせず、代わりにLinuxをインストールして、サーバーとして使います。)

I carry a USB flash drive in my pocket wherever I go.
 (どこへ行っても、私はUSBメモリをポケットの中に入れて持ち運びます。)

I know what a router is, and I know what a bit is, but I don't know what's a router bit.
 (ルータとは何であるかについて知ってます。そして、ビットが何であるかについて知っています。しかし、ルータービットが何であるかは、わかりません。(訳注:ルータービットってなんだろう?))

I helped my grandma create her own blog.
 (自分のおばあちゃんがブログを作成する時、手伝いました。)

Whenever I use another person's computer, I complain that they are not using Firefox and attempt to switch them.
 (他の人のコンピュータを使うときはいつも、他の人達がFirefoxを使っていないと不平を言い、ブラウザを変えさせようと試みます。(訳注:やるやる!))

I email myself to remind me to do something.
 (何かしなくちゃいけない事を思い出させるために、自分自身に電子メールを送ります。)

I rig up elaborate mechanisms to perform basic tasks.
 (基本的な仕事を果たすために、精巧なメカニズムを間に合わせで作ります。)

I've written a useless program "just for the fun of it."
 (「ちょっと面白いだけ」の大して役に立たないプログラムを書きました。)

 いくつか訳しきれないものがありましたので、それ以外の質問はリンク元の記事を読んでください。

力作!Perl6プログラマーの為の元素周期表風なチートシート


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

perl_periodic_table.jpg

 元素周期表風にアレンジしたPerl6プログラマーの為のチートシートです。

 とりあえず、ポスターに出来るよう意識して作られてるので、会社などに貼るのが良いと思います。社内などに貼ってもあまり違和感の無い、とてもよく出たデザインになっています。これは、かなりの力作です。

 配布しているサイトは下記です。

 A4で印刷できる解像度の画像は下記です。

 ライセンス表示は、Creative Commons 表示-非営利-継承 3.0となってますので、非営利で、原著作者のクレジットさえ消さなければ比較的自由に使えます。

 一つ一つの要素の解説文は英語ですが、実際プログラミングに携わってる人にとってはそんなに大きな障害にならないと思います。英語も覚えられて逆に良いかも?

 僕自身は、Perl自体人が作ったコードのちょっとした手直し等、お遊び程度しか触っていないのですが、その理由の一つとして、このシートにあるような複雑な処理記号がどうにも覚えきれず、ググってる間に途方にくれてしまうと言うことがあります。

 このような見やすい参照表さえあれば、なんだかプログラミングできる気になってきました。

続・初めてのPerl 改訂版
Randal L. Schwartz brian d foy Tom Phoenix 吉川 英興 伊藤 直也 田中 慎司 株式会社ロングテール/長尾 高弘
オライリー・ジャパン
売り上げランキング: 117314

ブラックホール交差点


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

Black_Hole_Crossroads.jpg

 すごすぎる・・・。見事に空間が捻じ曲がっています。下記の記事より。

 このサイトは、主にゲームからの面白いバグをひたすら投稿していくサイトです。TOPページはこちらから。

 このサイトには、画像だけじゃなくて、プログラムのコードも掲載されています。これなんか秀逸。面白い。

LRUCacheModel::~LRUCacheModel()
{
   for( LRUCacheEntry* entry; entry != NULL; )
   {
      LRUCacheEntry* next = entry->next;
      delete entry;
      entry = next;
   }
}

 デストラクタに与えられた新しい意味。破滅と再生の真理がここに。

 バグの中でも一番多いのは、3Dグラフィックのレンダリング関係ですね。最近は、特に細部までリアルな3Dモデリングをしているだけに、少しでも計算を間違えると、内臓が見えたり、人間がぐにゃと曲がったり、色んなことになります。

 この先、心臓の弱い方は見ないほうが良いかも。ゾッとする画像やギョッとする画像が多数掲載されています。若干グロいです。

The_Power_of_Geometry_Shaders.jpg

Reaching_Out.jpg

The_Long_Neck_Syndrome.jpg

All-Seeing_Eye.jpg

z-buffering.jpg

 その他の画像、ソースは、上のリンクからどうぞ。

バグがないプログラムのつくり方 JavaとEclipseで学ぶTDDテスト駆動開発 (Be agile!)
川端 光義 倉貫 義人 兒玉 督司
翔泳社
売り上げランキング: 44500

もしもプログラミング言語がボートだったらこうなる


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

 「もしも、プログラミング言語がボートだったら・・・」、と言う記事です。なかなか面白い。こういうプログラミング言語を喩える系は大好きです。少し前に、宗教に喩えるってのもありましたね。

 この記事では下記の様に喩えられています。意訳します。

Turing:カヤック
 とても小さく、人間の動力で動く。初心者用としてしばしば使われる。そしてカナディアンである。

Java:貨物船
 非常に大きく、まさにエンタープライズ(空母)的。とても重いものを運べるけど、プロジェクトは遂行できるが、使っててあまり楽しくない。

Perl:タグボート
 80文字以下で使える、Javaを周りで引っ張るのに十分な強さを持つボート。

Ruby:レジャーボート
 なめらかで色っぽい。そして、運転する事がまさに楽しい。

PHP:竹のいかだ
 一連の技術(ハック)同士が、紐で互いに結ばれている。それでも、まだ浮かび続けている。

C言語:原子力潜水艦
 説明書はたぶん、それぞれの国の言語で書かれている。でも、そのハードウェアに関わる全ては、パフォーマンスのために最適化されている。

HTML:ボートじゃない
 HTMLは、本当はプログラミング言語ボートに属さない。

 PHPが一番良い喩えだと思いました。統一性はないけど、紐で繋がれて何とか浮いてる感じ。

 パイソンなんかは一体何になるんだろうなぁ。Rubyがレジャーボートなら、Pythonは、ジェットスキーかもしれない。感覚的に操作できて、運転が楽しい。

Songs in Code Database - プログラムソースコードで、曲名を表現する


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

Q.1

final--;

 このソースコードは、ある曲名を表しています。一体、なんと言う曲名でしょうか?(若い人には世代的にちょっと厳しいかも。多分、アラフォー世代にはちょうど良いと思います。)

答えThe Final Countdown - EUROPE(白で表示)

 このように、曲名を表現するためのソースコードを集めたサイトが下記です。

 Twitterのハッシュコードを使って、Twitter上でつぶやいたソースコードを集約し、サイトとして公開しています。感銘を受けたソースコードに閲覧者が投票をすることも出来るため、一目で、今ホットなソースコードが分かります。

 Twitterの発言に、"#songsincode"と入力するだけで、あなたもすぐ参加できますよ。ソースコードは世界共通言語!思いついたらすぐ投稿。

 それでは、難読ソースコードをいくつかおさらいしましょう。

Q.2

substring("the tiger",6,1)

 最も人気があるこのソースコード、しばらく答えが分からず、僕自身かなり悩みました。"the tiger"の6文字目を一文字切り取る。これは"i"ですので、答えは多分下記でしょうか。

答えEye Of The Tiger - survivor(白で表示)

 なんでこのソースが難解かというと、javascript的に言うと、substring("文字列",開始位置,終了位置)なので、上記の記述だと、上手く文字列を抜き出せません。これはVBなのかなぁ。

 javascript的には下記になりますね。

substring("the tiger",5,5)

Q.3

map(' '.join, zip(['Work it',
'Make it',
'Do it',
'Makes us',],['Harder',
'Better',
'Faster',
'Stronger']))

 僕はこの曲知らない。歌詞の各パーツを抽出して、単語を合成してます。

答えHarder, Better, Faster, Stronger - Daft Punk(白で表示)

Q.4

foreach(person in AllPersons){person.setDomicile(yellowSubmarine);}

 さー、みんなで声高らかに歌いましょう!

答え: Yellow Submarine - The BEATLES(白で表示)

Q.5

<!-- u2 classic in xpath -->
//city[not(street/@name)]]

 最後に。僕が、一番グッと来たコードはこれ。xpathとはやりますな。プログラミング欲が刺激されます。なんか書いてみようかな。

答えWhere the Streets Have No Name - U2(白で表示)

ソフトウェア開発の格言


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

topdown.jpg

 なるほど!これは、色々な示唆を含んでますね。

 その下にある格言もなかなかクールです。

A clever person solves a problem.
 (利口な人は問題を解決する。)
A wise person avoids it.
 (賢明な人は問題を避ける。)

-- アインシュタイン

 「問題」を「デスマーチ」に置き換えてみると・・・。

No matter what the problem is,
 (どんな問題だろうと、
it's always a people problem.
 それは、常に人の問題だ。)

-- Jerry Weinberg

 逆に言うと、人で解決できない問題はない。

Wexelblat's Scheduling Algorithm:
 (Wexelblatのスケジュール選択法:)

Choose two:
 (2を選んでください:)

Good
 (品質良く)
Fast
 (迅速に)
Cheap
 (安く)

 指示する人がいつでも見れるよう、額にこれを書いておきたい。


 まだまだありますが、今日はこの辺で。

 また時間が出来たら、もう少し訳してみます。

名内泰藏 PM格言カルタ
名内泰藏
翔泳社
売り上げランキング: 480139

オブジェクト指向設計の原則がよく分かるかも知れない画像


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

solid.jpg

 下記のサイトで、オブジェクト志向開発における原則、いわゆる「SOLID原則」について、皮肉たっぷりの画像と文章を用いて解り易く解説しています。

 大変良く出来ている画像だと思いましたので、勉強の為にそれぞれの原則をネットで検索しつつ、日本語化してみました。

 これは、オブジェクト指向設計の原則だけじゃなくて、ソフトウェア開発全般に適用できる原則だと思います。

The Single Responsibility Principle(SRP)

SRP.jpg

The Open Closed Principle(OCP)

OCP.jpg

The Liskov Substitution Principle(LSP)

LSP.jpg

The Interface Segregation Principle(ISP)

ISP.jpg

The Dependency Inversion Principle(DIP)

DIP.jpg

参照したサイト