よく初心者向けのアルゴリズムの解説で例え話が使われる。 しかしどうもピンと来ない説明が多い。 そこでもっと生々しいのを思い付いた。
queue (FIFO) とは先入れ先出しの構造で、 stack (LIFO) とは後入れ先出しの構造である。 これらは排便と嘔吐と(ほぼ)同じである。 要するに、先に食った物が先に出てくる、 後に食った物が先に出てくる、ということである。
「ほぼ」と書いたのは液状化している状態においてはぐるぐる混ざってしまうからである。
しかしはっきり言って汚い。 書かなきゃ良かったか。
そう言えば、しばらく前にJavaしか習わないエンジニアリング・スクールがあると聞いた。 最初ちょっとした冗談かと思ったけれど、 そうではないらしい。 Cはやらないのかと訊くと、全然やらないと言う。 じゃあC++はいきなり勉強するのかと、今考えれば間抜けな質問をしてしまったが、 C++も当然やらないと言う。 それでもアセンブリでもやれば別に構わないと思うのだけれど、 もちろんそんなことはやらない。
つまり低レベルな言語は一切触らないということらしい。 正直に言って、それがどういう結果を招くのかは私にはよく分からない。 でも、それでコンピュータの専門家面をされるとしたら、 何だかなーという気がしないでもない。
それはともかくとして、 試してみよう の方が気になってしまった。 簡単過ぎると思うのだが。
もっとも今の私がこんなので苦しんでいるなんて言ったら、 きっと笑いものになるだろうし、 学部一回生の時点でこれを目にしていたら、 一体どうだったかは想像しにくい。 多分適当にやっつけただろうとは思うけれど、 過去の状態に遡ることはできないので、 断言はできない。
しかしプログラミングを生業としている人がこれを難しいと感じるとしたら、 それは相当やばいんでないかとは思う。 もっともそういうやばい人達を今まで何人も実際に見てきたことがあるし、 本当にやばかったのだけれど...
僕は次のような説明をしたことがあります。<br>(1)hashの説明に人の鼻毛の本数を適当な数字で割った余りを<br> hashに使うという例えをして、hash collisionの説明をする。<br>(2)lock変数をトイレのドアに例えて、race conditionでは悲惨な<br> ことになることを説明する。<br><br>こんなのも含めて、知識はいっぱい持ってるんですが、自分が<br>Javaスクール系技術者より良い仕事ができてるかというと疑問な<br>今日この頃です。<br>根性と労働時間による問題解決が多すぎ...
このネタで書籍化しよう。タイトルは「嫌でも分からざるを得ないアルゴリズム入門」で。
期待しております
お題は「現実問題とアルゴリズム」でもいいかと存じます。
いや、究極的に冗談でしかあり得ないので、書籍化はないですよ。