2005年07月一覧

追いたくなくとも追わねばなるまい

今回はソースコードを記述しているので、プログラミングと関係の無い方にはわからないと思いますが、ご容赦を。

追っ手から逃れるシステム(きしだのはてな)を見て。過去に、それらの逃げ手の手口にことごとくハマったsugarballですが、今回はsugarが遭遇した逃げ手の手口を紹介します。

■参考リンク
http://d.hatena.ne.jp/nowokay/20050702#1120324360
http://d.hatena.ne.jp/nowokay/20050706#1120597321
http://arton.no-ip.info/diary/20050703.html#p01

インデックスiとjで二重ループをまわし、要素jについて0~8まで別々の処理をしているだけなのだが…

for (int i = 0; i < dataNum; i++) {
if(i == 0) continue;
for(int j = 0;j < 8; j++){
try{
(絶対catch句に行くような
データが入ることがある処理)
}catch(NumberFormatException nfe){
if(j == 0){
(j == 0  の場合の処理)
}
if(j == 6 || j == 7){
if(条件A?){
if(j == 6){
(j == 6  の場合の処理)
}else if(j == 7){
(j == 7  の場合の処理)
}
}else if(条件B?){
if(j == 6){
(j == 6  の場合の処理)
}else if(j == 7){
(j == 7  の場合の処理)
}
}
}
continue;
}catch(Exception ee){
System.out.println("例外です!!:" +
オブジェクトをtoString);
continue;
}
if(i > 7) continue;
if(j == 2 || j == 3){
if(条件A?){
if(j == 2){
(j == 2  の場合の処理)
}else if(j == 3){
(j == 3  の場合の処理)
}
}else if(条件B?){
if(j == 2){
(j == 2  の場合の処理)
}else if(j == 3){
(j == 3  の場合の処理)
}
}
}else if(j == 4 || j == 5){
if(条件A?){
if(j == 4){
(j == 4  の場合の処理)
}else if(j == 5){
(j == 5  の場合の処理)
}
}else if(条件B?){
if(j == 4){
(j == 4  の場合の処理)
}else if(j == 5){
(j == 5  の場合の処理)
}
}
}else if(j == 6 || j == 7){
if(条件A?){
if(j == 6){
(j == 6  の場合の処理)
}else if(j == 7){
(j == 7  の場合の処理)
}
}else if(条件B?){
if(j == 6){
(j == 6  の場合の処理)
}else if(j == 7){
(j == 7  の場合の処理)
}
}
}
}
}

見にくすぎる。ツッコミ所を挙げるとすると
①条件Aと条件Bの判定を何回やってんのよ?
②catch句の中で普通に処理すんなよ
③とゆーか、catch句に入るのが前提ってソレは…
④なんか似たような判定ばっかだ。まとめなさい。
⑤とにかく見にくい。というより醜い。

その後日、このロジック内で不具合が発生したので、偶然(というか必然)、sugarがこのコードを修正することになりました。まぁ、仕事でなければこんなコードはドブにでも捨てた方が世のためになるし、見るのも触るのも本気で嫌だったのですが、仕事だから直すしかないわけで。あぁ、サラリーマンはツライね。というわけで、修正したコードが下のやつ。

if(条件A?){
processA();
}else if(条件B?){
processB();
}


…
…

////////////////////////////////////////
// 条件Aのメソッド
private void processA(){
for (int i = 0; i < dataNum; i++) {
int j = 0;
///////////////////////////////////
// j = 0 の場合
(j = 0 の場合の処理);j++;
///////////////////////////////////
// j = 1 の場合
(j = 1 の場合の処理);j++;
///////////////////////////////////
// j = 2 の場合
(j = 2 の場合の処理);j++;
・・・  j = 3~7 も同様  ・・・
///////////////////////////////////
// j = 8 の場合
(j = 8 の場合の処理);
}
}
////////////////////////////////////////
// 条件Bのメソッドも同様に…
private void processB(){
…
}

まず条件Aと条件Bで関数分けして、if…else…で分岐していた処理をインデックスのインクリメントで対応しました。わー、面白いほどスッキリ。

やはりこの前者のコードを書いたのもこのときの彼だったりします。で、sugarが後者のコードに修正すると彼は

「sugarさん、凝ったことしてますねぇ」

いや、シンプルにしただけなんで。

sugarが勤める外勤先ではその彼はJavaのスペシャリストとして他の会社に出向したことがあるらしく…この職場、大丈夫か?と思うsugarでした。いや、むしろ辞めたい。

とにかく、キレイなソースコードを書くことは大事なのです。そんでもって、ソースコードを整理するための指標としても使えるのがこの本。オススメです。ちょっと高いけど、値段に見合った価値はあります。


漁師と旅行者の話

何のために働くのか。トラバ先のmarsさんの記事より。

メキシコの田舎町。海岸に小さなボートが停泊していた。

メキシコ人の漁師が小さな網に魚をとってきた。その魚はなんとも生きがいい。

それを見たアメリカ人旅行者は、

「すばらしい魚だね。どれくらいの時間、漁をしていたの」

と尋ねた。 すると漁師は

「そんなに長い時間じゃないよ」

と答えた。旅行者が

「もっと漁をしていたら、もっと魚が獲れたんだろうね。おしいなあ」

と言うと、漁師は、自分と自分の家族が食べるにはこれで十分だと言った。

「それじゃあ、あまった時間でいったい何をするの」

と旅行者が聞くと、漁師は、

「日が高くなるまでゆっくり寝て、それから漁に出る。戻ってきたら子どもと遊んで、女房とシエスタして。

夜になったら友達と一杯やって、ギターを弾いて、歌をうたって…ああ、これでもう一日終わりだね」

すると旅行者はまじめな顔で漁師に向かってこう言った。

「ハーバード・ビジネス・スクールでMBAを取得した人間として、きみにアドバイスしよう。

いいかい、きみは毎日、もっと長い時間、漁をするべきだ。それであまった魚は売る。お金が貯まったら大きな漁船を買う。

そうすると漁獲高は上がり、儲けも増える。その儲けで漁船を2隻、3隻と増やしていくんだ。やがて大漁船団ができるまでね。

そうしたら仲介人に魚を売るのはやめだ。自前の水産品加工工場を建てて、そこに魚を入れる。その頃にはきみはこのちっぽけな村を出てメキソコシティに引っ越し、ロサンゼルス、ニューヨークへと進出していくだろう。きみはマンハッタンのオフィスビルから企業の指揮をとるんだ」

漁師は尋ねた。

「そうなるまでにどれくらいかかるのかね」

「二〇年、いやおそらく二五年でそこまでいくね」

「それからどうなるの」

「それから? そのときは本当にすごいことになるよ」

と旅行者はにんまりと笑い、

「今度は株を売却して、きみは億万長者になるのさ」

「それで?」

「そうしたら引退して、海岸近くの小さな村に住んで、日が高くなるまでゆっくり寝て、日中は釣りをしたり、子どもと遊んだり、奥さんとシエスタして過ごして、夜になったら友達と一杯やって、ギターを弾いて、歌をうたって過ごすんだ。どうだい。すばらしいだろう」

sugarも旅行者的な考えをしていたことがあって、happy retireしたいとか思った事もありました。ただ、このPG、SEなんて業種で…がむしゃらに働いてもhappy retireなんてできっこないです(※1)。

sugarの現状は上記の話の漁師がメチャクチャ働いてギリギリ家族が食べる分の魚を獲っているような状態です。これ以上働きようもないですし、ゆとりの時間もありません。

職種を変えて漁師のような生活をすることにあこがれますが…それは選択肢に入れません。まだ夢見て生きてたいんですよ。

でも引退後は、話の漁師のような生活がいいなー、とも思っています。

※1 別に「幸せになれない」なんて言ってるわけじゃないですよ、念のため。


そんなわけで

こちらのエントリにもあるように、sugarはこれからの進展に向けて、行動を始めます。

順調に行けば、システム開発を習得する→退職→次のステージへ、という具合になるはず。で、これからはその軌跡をblogに書いていこうと思います。

この職業(プログラマ)やってて、「見返り少ないなぁ」と思ったことが方向転換の大きな要因です。

過度の残業による体調を崩す危険性、家族に費やせる時間の減少、自分の時間を持てないこと…これらの、またこれ以外のリスクに見合ったリターンが得られているとは到底思えないのです。

とまぁ、マイナスな理由ばかり挙げましたが、一番の大きな理由はこれらの「欠乏」からくる理由ではないんです。

とにかく夢が無いなぁ、と最近ずっと感じていて…やっぱり「自己実現」したいわけなんですよ。そのためには、今の会社、今の業種ではsugarの願望を叶えることができないと判断したわけで。

sugar自身、並、もしくは並以下の能力しか無いかもなー、という懸念はありますが、これから目標のために行動して、自己実現しようと思います。

「『プロマネ残酷物語』を終わらせるために」(IT Proへ登録しないと読めないかも)みたいな類の記事にそそのかされた感も無いわけではありませんが。

「夢が無い」と思ったのは、現状のsugarのポジションから見て、たとえこの業種で上に登りつめても、その先はhappyではないのかな、と感じたからです。もしかすると「超一流」のSI企業やベンダー企業なんかはそうではないかもしれませんが…

会社を辞める前提ではありますが、ひとまず行けるところまで登ってみるつもりです。


長期計画

sugarballの計画。
突拍子もないけど、宣言します。追加・修正が後で入るかもしれませんが、そのへんはご愛嬌。。ある意味引退宣言。遅れながら七夕の願い。

>>28歳までの目標
・システムの開発プロセスを一通り具現化できるようになる
  (言い換えると、PL、PMをこなせるようになる)

>>目標達成の後は?
・他の分野に進む。(実現できれば)今の会社は辞めると思う。

>>目標の理由は?
・本当は今すぐ他の分野に進みたいが、せっかくこの業界をある程度知ることができたのに、中途半端なスキルのままで他に進みたくない。つまり、この業界、職種で身に付けられるスキルを身に付けてこそ、他の分野に進む準備ができたと言える。

>>その「他の分野」とは?
・ITと何かしら関連のある分野。一般的な「システム開発」には絶対行かない。

>>今の業界(システム開発系)が嫌?
・嫌というか、報われないというか、業界構造がオカシイというか…短い文章では表現できないので、後日のエントリで。

※あまりいい表現が思いつかないので、今のところ「分野」と書いています。


Fujiharaさんの所で紹介されてたを買ってみました。

はコミックビームで連載中で鈴木みそ氏が執筆してる漫画です。

内容はタイトル通り、銭…お金に関する話で、ゲームセンター作ろうとしたらxx円かかるだとか、同人誌のページ単価がxx円(予想を超えまくり)だとか、カフェ経営にはxx円必要だとか…。日常の裏側で動いている金額がバンバン出てきます。

というか…コミックマーケットで…xx円(家が建つくらい)売り上げるグループもあるって…普通に「脱サラしてぇ」と思ってしまいました。

久々に鈴木みそ氏の漫画が読みたくなった(※1)sugarは購入したわけで。
sugarは1巻を一番見たかったんですが、5件ほど回った本屋すべて1巻が売り切れでした。ジュンク堂で在庫を店員に聞いてみたところ、池袋店に在庫がある、とのこと。取り寄せが3日程度(※2)らしいので、取り寄せを依頼して2巻と3巻を購入しました。

最初は全巻まとめてamazonで買おうかなー、と思ったけど、1巻がマーケットプレイスで1800円というトチ狂った価格で売られていたのでリアルで購入に方針変更。。1巻を買う場合は取り寄せるか、増刷を待った方がいいですね。

※1 ファミ通が「ファミコン通信」時代に、鈴木みそ氏の漫画がファミコン通信に連載されていました。当時sugarは毎週買っていたのは内緒の話です。

※2 7月7日 追記
 てゆうか、もう届いていたYo!池袋から関西まで、1日で届くなんて…恐るべし、ジュンク堂。。


スポンサーリンク
本文中広告




本文中広告