ぺーぱーふぇいす

雑記と備忘録。私はプログラマ。

入社3年目くらいの私ときめんどうしとの思い出

こんなニュースがあったので、ふととある派遣さんとの思い出話でも。

「3年働けば正社員」9月からの義務化前に派遣切りが横行してしまう:ハムスター速報

ちなみに、あんまり良い思い出ではありません👼
今となってはよくある(?)感じの笑い話ですが。

あれは、入社3年目か4年目くらいの間で、運用部門から開発部門に移動したときの話。
はじめて参加した開発のプロジェクトが中盤くらいになったくらいの話。

登場人物

ぺーぺー。

Nさん 派遣のできる人。同じチームで私にいろいろ教えてくれた。

Hさん きめんどうし。

私は専門学校でC++を通してオブジェクト指向がなんたるかをほどほどに理解していましたし、Nさんという先輩のおかげでそれを業務でどのように実践的に活かすかを理解できたので、それなりにコードは書けていたと思います。
ですが、まあプログラマとしてはぺーぺーだろうということは分かっていたので、きっと周りの人間はそれなりに場数を踏んでいて、私が学ぶべき対象なのだと思っていました。

少し話は変わりますが、先輩Nさんは当時の世間的にやや冷ややかなイメージのある派遣社員だったわけですが、技術的にも人格的にも尊敬できる人だったわけです。
私はそうした優秀な派遣社員さんと混じって仕事をする上で、「当然ながら自分以外のプログラマと呼ばれる人たちは私より経験を積んでいるのだから、技術的には自分が一番下なのだろう。きっと自分は学ぶ側の立場に居るに違いない」と思って仕事に望んだのですが、その予想は外れることになりました。

派遣のHさん……いや、さん付けするのもアレなので、Hと呼びましょう。
ちなみに派遣先輩Nさんとは別の会社から来ている人でした。Hはかなり年配の(当時の私から見た)オッサンなのですが、なんかマジで仕事ができない。

当時、私たちはとあるサービス業を営むユーザのチケットの販売管理をするシステムを開発していて、月次繰越をするためのバッチプログラムをテストするのに大量のテストデータが必要となりました。
テストデータは旧システムから引っこ抜いてきたCSVデータを加工することにし、その加工はHに任せることになりました。
加工内容としては、旧システムのテーブル構造のままになっているCSVデータを私達が作っている新システムのテーブル構造に一致するようにしてあげるだけです。CSVをパースして、桁数が溢れていないか等のフォーマットを確認して「正しい」データにして新システムのテーブルに投入するという非常によくあるミッションです。また、データ自体はそれほど難しい規則はありません。データ自体はチケットの売上データなので、大人料金と子供料金からチケットの種別を判定したりといった処理があるくらいでしょうか。
まあ、でも一通り説明はし、HのPCにはVisual Studioが入っているので.NET Frameworkで変換アプリを作ったりとかでもしてくださいとしました。まあ、私でも1日あれば十分作れるだろうなって程度です。テストの予定は2週間後くらいでした。
しかしいくら待ってもHは成果物を挙げてきません。具体的には1週間くらい音沙汰が無かった感じでしょうか。でも、本人はサボっている感じではなく、Visual Studioでコーディングしているようではありました。

ですが、そんなに難易度の高い作業では無いので、「出来上がったデータにエラーが無いか見ておきたいんで早く変換後のデータでも変換アプリでもいいんでください」と催促しました。
ですが、「そんなにすぐ出来るわけないじゃないですか(●`ε´●)」的なことを言われ、個人的に「えぇ……(困惑」となりました。
結果的にHから変換アプリがあがってきたのは2週間のデットラインを軽く過ぎてからでした。
私……というか、私達の想像(期待値)は下記のような成果物でした。というか、そもそも「こう作ってくれ」と指示していました。

  1. .NET Frameworkで作られたWindows Form ApplicationのEXEファイル形式
  2. 変換元となる旧システムのCSVデータを固定フォルダに置く or パス指定をするインターフェースがある
  3. ボタンを押して実行すれば変換後のCSVデータが吐かれる or 新システムのDBへのINSERTクエリが発行される

では、答え合わせです。

まず、提出されたのはソリューションファイルが入ったフォルダまるごとでした。
ええ、ソリューションです。いや、別にソリューションまるごとでも良いんです。別に渡してくれる時に「Releaseフォルダに入っているEXEを実行してください」とかでも良いです。どうせ身内で限定的な範囲、限定的な期間で使うアプリなのでそういう大雑把なやり方でもいいです。むしろ、ソースが見れるという点においては、ソリューションフォルダまるごと渡すというのは親切かもしれません。しかし、Hがソリューションフォルダまるごと渡してきたのはそういうプログラマにおける親切心とかそういうものではなかったのです。
そもそもHにはビルド(コンパイル)された実行ファイルを使ってもらうという発想がありませんでした。たぶん何言っているかわからないと思います。私も書いていてちょっと混乱しそうですが…… Hは変換アプリの使い方をレクチャーしてくれました。
「ソリューションファイルをVisualStudioで開いて、デバッグを実行してくれ」というのです

「んn?」

Hは確か次のように表現したと思います。

「VisualStudioでデバッグすればプログラムが動くので」

……いや、確かに動くんだけどさ、なんでVisualStudioから開いてデバッグを走らせながら実行しなきゃならないんだよ。
もう正直イヤな予感しかしません。この時点でHは社会人プログラマ歴半年未満の私よりも劣る存在なのではないかと思えました。これは私が優秀であるという自分語りではありません。むしろ私は優秀じゃない方です。そんな私が「なんで『プログラマ』としてこの男が派遣されてきているんだ?」という疑問に、何かとにかくとてつもなく嫌な予感がついてきます。
そのあとの「DebugフォルダとかReleaseフォルダに吐かれてるEXEを実行するんじゃだめなんですか?」という私の質問はシカトされたか、よくわからない理由付けで返ってきたと思います。正直もう覚えてないです。この時点で自分はかなりの衝撃を受けていたので。

ちなみに外観ですが、どでかいウインドウになんかボタンが3つ(4つだったかな?)くらい並んでました。
なんか、ボタンには①、②、③と番号が振られています。「どれか間違ったボタンを押すと頭上からタライでも降ってくるのだろうか?」的なワクワク感があります。そうだったらバラエティー番組で使えるかもしれません。
Hのクソレクチャーは続きます。

「デスクトップに変換元のCSVファイルを置いて、①、②、③の順番にボタンを押してください」

私はてっきり①ボタンを押すとファイル選択ダイアログが開くものかと思っていましたが、これも予想が外れました。

「変換元のCSVデータはデスクトップに置く」

いや、別に変じゃないか……?
変……じゃないのか……?

もう何が正しくて何が正しくないのかわかりません。この状況なら重力の存在も、地球が球体であることすら疑ってしまいそうです。
また、ボタンも3つに分かれている理由がわかりません。なんで1つのボタンで完了しないのでしょう?
ここまで来ると、むしろ自分の方が間違っているのではないかという気分になってきます。ドラクエで言うとメダパニとかマヌーサとかくらっているような気分です。まあ、H自身もなんかメダパニを使うモンスター「きめんどうし」みたいな顔してましたし、その類の種族だったのかもしれません
私が幻術にかかっている中、一緒に説明を聴いてくれていた派遣先輩Nさんも「なんだか楽しいことになってきたぞ」と楽しそうだったので、たぶん一緒に幻術にかかっていたんだと思います。

では、いざドキドキの「①ボタン」を押すとFile Not Foundみたいなエラーで落ちました
もちろんデスクトップには指示された通り、ちゃんと変換元のCSVファイルを置いています。

ちなみに、この2週間の間なんでちんたらHのクソ変換アプリの完成を親切に待ってやったのかというと、Hが自身満々だったからです。 「テストが遅れると大変です。事前に変換後のデータを確認したいので早く変換アプリを完成してください」という私の催促に対し、「エラーとかバグとか起きませんから大丈夫です👿」的なことを言ったのです。もうこの時点で、私はHに対して「この場から排除したい」という敵意を持っていました。
「じゃあ待ってやろうじゃねぇか、そのご自慢のアプリとやらをよぉ」って感じで待つことにしたのです。
それがいきなりエラー吐いて落ちたのだから笑えます。いや、笑えないです。このきめんどうしをモンスター闘技場に放り込んでギガンテスとかキラーマシンと戦わせたい気持ちになりました。その暁にはキラーマシンにベッドしたいと思います。

その場でソリューションファイルを開き、ソースを読みます。
ちなみにVisualBasicで書かれていたんですが、

Dim a001 As String '仮

みたいなクソコードが普通に乱立していました。
クソコードの畑です。もう「クソコード畑でつかまえて」っていうアンニュイな感じの小説が書けそうです

変数に対するネーミングもクソならコメントも意味不明です。「仮」と言われていながらもれなくグローバル変数で最後の方まで生き残っていた記憶があります。何に対しての「仮」なのかは検討も付きません。パブリックベータ的な思いみたいなのが込められていたのでしょうか。

なんでクソコード書く人ってこんなにテンプレなクソコードを書くんですかね?
私が知らないだけでクソコードを専門に教える教育機関みたいなのが東京とかのどっかに存在していて、みんなそこの卒業生とかなんでしょうか?

ま、FileNotFoundについての理由はすぐにわかりました。
デスクトップまでのパスがソースに直書きされているのはこの時点で想定していましたが、普通に

Dim path As String = "C:\Users\<ウンコプログラマHのユーザ名>\Desktop\変換元データ.csv"

みたいな感じとなっていました。こんなパス、他人のPCに持ってきて動くわけねーだろ!

なんかこの時点でかなり嫌になってきましたが、パスを修正してボタンを①、②、③と押していきました。
変換の過程が大きく分けて3つに分かれるようで、それぞれの過程に合わせてボタンを分けたようです。よかったね。いっぱいボタンがあって、ぼく、いっぱいボタンがおせてたのしいや。

こうした間もくだらないエラーで何度となく変換アプリは落ちましたが、エラーで落ちるたびにきめんどうしが焦って、なんかよくわからない頓珍漢な言い訳をするのが楽しかったです。アンチウイルスソフトを一時的に止めてみては?」と提案された時は、「なんだ? この変換アプリはウイルスなのか? いや、ウイルスか、うん」と納得してしまいました。
使用者の精神を侵し、時間を奪うタイプのウイルスとは、コンピュータウイルスも日々進化しているのだと関心します。
横で見ている派遣先輩Nさんは終始楽しそうでした。クソB級映画を観てると逆に笑えてくるじゃないですか、あれと同じ現象だと思います。

ちなみに、①~③のボタンは押して、内部で走っている各処理が終わっても「処理①が終了しました」的なメッセージを吐いてくれるダイアログとかは準備されていません。仏頂面のウインドウが表示され続けるだけです。
私がそんなウインドウに対して、 「これ、処理が終わったかわかんないですね」 と嫌味を入れた時、きめんどうしは 「そろそろいいんじゃないですかね?」 と言いました。なんだよ、「そろそろいい」って。私はステーキでも焼いて、「そろそろいいかな? 焼けたかな?(^q^)」なんて肉の焼き加減に思いを馳せてるわけじゃねーんだぞ。

そうして出来上がったCSVファイルをDBのインポート機能で取り込むわけですが、もちろんうまくいきませんでした💀。
なんかもうダルいので、ちゃっちゃと書きますが、原因としてはなんか知らないけど変換元データよりレコード数が肥大化してプライマリキー違反を起こしていること。そもそも歯抜けになっているデータがいっぱいあってカラムがズレているとか、もうとにかくダメダメです。
中核となるソースは無駄に長いし、先程のようにクソみたいなネーミングの変数が乱立しているのでデータの流れが読みにくい。奇妙な分岐処理やループが多く、不思議なメソッドに値を渡しに行ったりするのでなんかごちゃごちゃしています。こういうのをスパゲッティコードなんて呼んだりしますが、スパゲッティはパスタソースが絡まっていて美味しく素晴らしい食べ物であって、こういう醜悪なクソコードをスパゲッティに例えるのはスパゲッティに対して失礼だと私は思っています。どうでも良いか。

こんなクソアプリの完成を待つという茶番に付き合って2週間という時間を無駄にした私は半分キレていました。
この害悪なきめんどうしを倒すべく、プログラマからモンスターハンタージョブチェンジするところでしたが、派遣先輩Nさんは私をなだめてくれて物理的衝突は回避されました。結果的に私はその場で3時間くらいかけて変換アプリを作り、テストデータを作成でき、無事(?)にテストを開始できました。
それからほどなくして、きめんどうしは契約打ち切りという名のバシルーラをくらいました。
結果的にHが残した他の成果物も同じような散々たるクオリティで、すべて誰かしらの手によって作り変えられており、Hが居た痕跡はプロジェクトの成果物上に残らなかったと記憶しています。

派遣先輩Nさんは「たまに居るんだよ、ああいう人って」と言っていましたが、私にとっては「なにそれこわい」です。
まあ、派遣先輩Nさんの言う通り、度々「ああいう人」に出会うことはありましたが、基本的にヤバイと思っていたらすぐに契約を切られて消滅していたので名前も覚えていない人がほとんどです。
専門学校で定型的にプログラミングを学習した私は、「勉強すれば誰でもプログラマにはなれる」と思っていました。しかし、Hとの出会いにより私は「ただし、誰でもプログラマになっていいわけじゃないな」ということも思うようになりました。

Hはあの歳にしてあのスキルだったので、別の業種から転職してきたばかり人だったのかなぁ……とか考えることもあります。
例えば前職では年功序列でそこそこの役についていたのに、派遣先で仕事となった今では歳が二回りくらい違う若造にピーピー言わてプライドが傷つきながらも慣れないプログラミングを2週間かけてがんばった……とか同情できるようなエピソードも妄想してみましたが、あんまり憎しみは薄まりませんでした。

人手不足と騒がれる今日のこの業界で、Hのような人が簡単に流入してこなければいいなぁと思っています。

この思い出話はもちろん派遣技術者のスキルがどうこうという話じゃなりません。
どちらかというと、プログラマ全体というか日本のSIer全体のスキル的な話です。

まあ、私もたいしたプログラマではないことは重々承知していますが、業務で使うごくごく簡単なアプリでああしたクオリティのものは作ろうと思っても逆に作れないですし、根本的なプログラムの理念に背きます。
「根本的なプログラムの理念って何よ?」 といえば、プログラムを利用して複雑な計算や処理を効率的に、世の中を便利にすることです。
率先して不便かつ不可解なものを作る人間はプログラマになるべきではないと思っています。
たまに、複雑な文法やマイナーなメソッドを使えるほど自分が書くコードは高度なプログラムであると勘違いするダークサイドなプログラマ(笑)も居ますが、基本的にプログラムはシンプルかつ協調性を持っている方がすぐれたプログラムです。したがって、プログラマにもとめられるのは物事をシンプルに捉え、構成する能力と協調性を持っているということです。この協調性というのは飲み会で周りに合わせてウェーイできるというわけではなく、自分の意図をコードやドキュメント、あるいは会話を通してわかりやすく伝えることができるor他人の言うことも理解できるということであり、人格に多少の難癖があってもコードさえ書ければ良いというものではありません。そういうのが許されるプログラマは俗に言うハッカーレベルのスキルがある人間で、それ未満のマイナー文法博士くん(笑)とかあえてコメント書かないマン(笑)とかは、中二病に似た承認欲求を持つただの寒いヤツなだけです。
100回くらい「プリンシパル オブ プログラミング」を読み、なぜPythonやKotlinといった言語仕様がナウいとウケているのかを考え、GitHubでたくさんスターがついているOSSのソースを自分のソースと見比べてみるべきです。
まあ、プログラマである以前にロジカルな人格者であれという話です。どの職業にも言えることですが。

なので、私も誰かからドラクエのモンスターに例えられてディスられないように、精進していきたいと思います。

今は何してるんだろうなぁ……きめんどうし。