今日も6時半に起きて、会社に行った。次期ネットのキックオフミーティングがあった。さあ、これから所内の半分のスイッチを入れ替えるという大仕事の始まりだ。と言っても自分たちでやるわけではないが、ネットワーク業者と連携してスケジュール通りにこなしたい。オンスケで行くかなあ。「進捗管理表」という懐かしい物を久しぶりに見たよ。
そして今日も自分の定時を超えて残業だった。こちらからネットワーク業者に渡すものがあるのだが、それはあるソフトウェアのクライアントをPCにインストールして出力するもの。めったに使わない物で、私は使ったことがなかったので、インストールして使ってみようとした。しかしなぜかサーバに接続できない。あれやこれや設定を見直したり再インストールしたりサーバが落ちていないかサーバルームに見に行ったり。
そんな折りに、昨日私が作ったテストをSEさん達が終了したので、私が呼ばれた。SEさんは3人いたのだが、一人ずつプログラムの実行結果とソースを見せてもらい、問題文の仕様どおりの動作をするか、コーディングに欠陥はないか見ていき、解説する。
と言うのを「私がやる」とは全く聞いてなかったよ〜。けっこうな時間取られたではないか。いきなり先輩に呼ばれて「では先生解説をお願いします」と言われて、おいおいおいおい、と思ったが、私が作った問題なので、まあ当然と言えば当然なのだが。
しかしまあ、一番簡単な問題で
「引数で指定したファイルを、各行の先頭に行番号をつけて出力せよ。行番号の後ろには半角スペースが入るものとする」
という超楽勝な問題で、全員がリストにファイルを読み込んでから foreach で処理しているのにびっくりした。いったんファイルを全てメモリに貼り付けるわけ?数ギガあるようなファイアウォールのログだったらどうするの?いやまあ確かにPerlは1行でファイルの中身をリスト変数に放り込んでしまえるし、その方が後の処理が高速になるかもしれない。しかし、ファイルがばかでかい場合はどうなるのか。
普通は while を使って1行ずつ読み込んで処理をするんですけどねえ、と先輩と説明する。しかし、テストはググったり何を調べてもいい、という条件だったので、みんなググったらそういうコードが出てきた、と言う。なんだなんだ、そんな書き方が標準になっているのか?
C言語が長かった私はメモリの扱いに関しては非常に敏感なので、なんで?と思うのだが、スクリプト系の言語から入った人はメモリのアロケーションとか開放とか、そういうものを意識しないから、どういうプログラムを書けばコンピュータの中でどんなことが起こるか、ということがわからないのかもしれないなあ。
なんてやっているうちに余計な時間を食ってしまい、それが終わったら定時だった。でもまださっきの続きが残ってる。はあ、体調を崩さないように気をつけなければ。
コメント
perlはJava程ではないにしろガベージコレクションの仕組みはちゃんと持っているので、テキトーに確保してテキトーにうっちゃっておけばよろしくやってくれるのですが、ファイルをみんな読んじゃうというのはなかなか暴力的な技ですね。最近の若者にとってメモリは安い買い物なので、そういう発想になるのでしょうか。何かかえってめんどくさいような気もします。while使えば$.が使えるのに、foreachだとカウンタ自前で用意しなきゃならないし。
そうですねえ、現代っ子ですかねえ。
最近のスクリプト系言語はお手軽にプログラムが書けてしまい、安易にメモリをばか食いするプログラムができてしまったりするんですよね。私はまだ触ったことないのですが、Rubyもそんな感じだと先輩が言ってました。
まあ、プログラミングがメインの仕事で来てもらっているSEさんでなく、サーバ管理のために来てもらっていて、ログファイルの解析やら、何かを一括処理したいときのために、これくらいのプログラムは書けるスキルがあればいい、というレベルなので、メモリがどうのこうの、という意識は多分ないんだろうなあ。