Huffman 符号、そういえば昔やったね

 はてなキーワードPerl で Huffman 符号のプログラムを作ったという記事が出てきたので懐かしく見てみた。新入社員研修を受けたのは27年も前のことだが、この頃はソフトウェアクライシスなんていう言葉もあって、このままだと日本国民が全員プログラマになっても足りないのではと真剣に心配していた時代である。つまりプログラマの求人は多く、同期入社の半数以上は文系出身の学生だった。今時は文系だろうがなんだろうがパソコンくらい使うし、タッチタイプくらい誰でも普通にできるが、当時は文系の大学でコンピュータの授業などないだろうし、情報科学を専攻していた僕でもキーボードに触れた機会はほんの少ししかなかった。

 そんなわけで新人研修というのは3ヶ月間まるまるみっちりやる。ド素人を3ヶ月で一人前とはいかずとも半人前、いや 1/4 人前くらいのプログラマに仕立てなければならないので大変だ。研修スタッフは半年近く前から現場を離れて研修の準備に入っていたらしい。研修が終わった後も後始末やフォローアップがあるので、結局1年近く新人研修にかかりっきりになっていたのではないだろうか。

 この3ヶ月の研修期間の終わりにプロジェクトでプログラムを作るというテーマがあって、我々のグループに与えられた課題がファイル圧縮プログラムを作ることだった。Huffman 符号について大学で習ったかどうかは忘れたが、習ったところでどうせ憶えているわけはない。今みたいにネットでアルゴリズムを検索できるはずもなく、文献をたよりになんとかプログラムを作った。といっても、僕はアルゴリズムを考えただけで、コーディングは他の人達任せだったかな。使った言語は ratfor という FORTRAN に構造化プログラミングの機能を付け加えたプリプロセッサ言語だ。Kernighan & Plauger の Software Tools (邦題ソフトウェア作法:木村泉訳) のサンプルは ratfor で記述されている。

ソフトウェア作法

ソフトウェア作法

 ところで先の記事のプログラムを読んでみると、これじゃちょっとまずいんじゃないのという印象。アルゴリズムを解説した記事を参考に改良してみると、こんな感じかなあ。毎回 sort している辺りが手抜きだが。しかし、何日もかけて苦労して作った研修プログラムが、こんなに簡単に書けちゃうとは驚きなのだ。最近使ってないので、Perl の文法も忘れちゃってるよ。変なところがあってもご容赦を。