megamouthの葬列

長い旅路の終わり

底辺IT企業は『書けない』プログラマとどう向き合ってきたか

新年から夢のない話で申し訳ないのだが、表題のとおりのテーマである。

note.mu

という記事があって、むやみに長いので飛ばし飛ばし読んだ。
大意としては、世の中には「書けない」プログラマというのがいて(元エントリでは学生さんのようである。さもありなん)そういう人はどうやったって書けるようにならないんだから、諦めろ、という話のようである。

で、じっと手を見て、下請け底辺のIT企業にいる私たちは、このような人々をどうしてきたろうか、と考えると、「放ったらかし」にしたなあ、と思うのである。

最初のほうは優しく教えていたと思う。話したりハンズオンしている時に、あっこの子、変数のことわかってないな、と感じたら、ホワイトボードを持ち出してきて、例の"x"と書いた箱の絵に矢印を引いて、値が入っている図を書いて、「わかった?」「あ、はい」みたいなやり取りをして終わり、という程度の「教育」である。
だが、そんな程度の教育も最初の年の10月ぐらいまでで終わる。
年末が近くなってくると大量の案件が入ってきて、そんなこともやってられなくなる。
ベテランプログラマでも困るような雑な投げ方で案件を振って、出来たらヨシヨシ、出来なかったら、ハイハイとばかりに全部書き直して納品。という具合に「放ったらかし」にしてしまう。

で、そうするとどうなるか、という話であるが、たいてい辞めてしまう。一身上の都合で、年度末をもって退職いたします、という話になる。
正直言って、何の意外性も感じない。そりゃそうだろうな、って思うもん。

当人からすれば、右も左もわからない中、パソコンをあてがわれて、入門書を読んで、そりゃこの通り書けば動くけど、なんで動いているのかはわからない。という状態で放置されて、初対面で忙しそうにしている先輩にも声をかけづらくて。そもそも何を聞けばいいかもわからないのだし。
それでもなんとかヨチヨチ歩きでプログラムを書こうとする。振られた要件を聞いてもどうすれば実現するのかさっぱりわからない。苦し紛れにググったら、コードが出てきたのでコピペする。そのままだと使えないので、ちょっと変えてみる、ああ良かったまだ動くぞ。という具合に書いていると、今度はもっと難しい仕事がやってくる。

日が短く、吐く息が白くなる頃。ようやくたどりついたオフィスで、死にそうになりながらググり&コピペで書いても、全然思ったように動かない。そもそもペーストしたコード片の意味がわからない。調べようにも時間が足りない。春先のんびりしたのが悪かったのかな、それとも、自分は深刻に頭が悪いのかもしれない。と罪の意識が強くなっていく。先輩は殺気だっていて、何も聞ける雰囲気ではない。それでも一人で、徹夜して奮闘して、何か一つぐらいは掴めて、ようやく光明が見えてきたと思ったら、「納期だよ~」と先輩がやってきて、仕事をかっさらっていく。
呆然としていると、苦労して書いたif文とforループをみるみるうちに消されて、$.Deferredとかuse Symfony\なんとか、よくわからない単語の入り混じったプログラムに変えられる。

俺って、居る意味あんのかな?

って思う。思うよね?

そういう事を私たちはしてきました。すいませんね。本当。いや、こんな軽い感じで謝られても困るとは思うよ?でも、おじさんたちにも事情があってね……という言い訳も長くなるし、何の慰めにもならないと思うからしない。

実際、若者を潰すことにかけては散々なことをしてきた自覚はあります。おじさんたちは地獄に落ちるだろうから、それで勘弁して欲しい。

で、ここまで読んだみんなに、こんなことやってて何になるんですか?という疑問が湧き上がっていると思う。次から次へと若者をとって、新人研修もしないで、OJTとか言っていきなり最前線に送って、はい死にました。残念です。また募集かけなきゃ、みたいな。こういう負のループを繰り返して、何になるんですか?って。

何にもなりません。そうやって、限りある人的資源を少子高齢化の我が日本から次々と収奪しては潰しているのが底辺IT企業でございます。としか言いようがない。すごく遠い視点でこの光景を見れば、若者からあらゆる可能性を奪って、何とは言わないが、本人がやりたがらない仕事につかせて、貧困層に叩き落とす大きなメカニズムが見えたり見えなかったりするかもしれない。自覚的にしろ、そうでないにしろ、私たちは皆同じような業を背負っている。そりゃ地獄にも落ちるわな。

一応言っておくと、この蠱毒みたいな地獄で生き残る奴もいる。そういう人間が、プログラムに関するすごい知見を有した向上心の塊みたいな俊英かというと、そんなわけはない。
この術式から得られる人材というのは、どんな要件に対しても、ググり&コピペで向かい撃つ、素手で熊を殴り続ける、よくわからないグラップラーのような存在でしかない。

で、これが重要な話なんだけども、底辺IT企業が欲しいのはそういう人なのだ。案件があって、ふむ、これはサーバーレスでいきましょう。とりあえず、PythonAmazon Lambdaの経験のある、派遣さんの2人ほど見繕っていただけましょうか。みたいな事を言いそうなテックリード人材なんて全然いらないのである。だって、そんな派遣いねえもん。いたって高いもん。PHP経験3年以上。ぐらいじゃないと誰も来ないし、取れないから、そもそもテックリード自体が必要なくて、我が社は常に人海戦術、どんどん戦車の上に乗ってください、たまに轢き潰されてもキャベツ畑から引っこ抜いて来ますので、と平然と言える人間以外必要ない、というのが底辺IT企業のあり方なのである。

そういう意味では、タフネスとグラップリング能力の有無だけを選別する、この蠱毒にもそれなりの必然性があるということがわかると思う。スマートなソリューションの提案能力とか、技術的向上心とか、そういうの全然いらない。ただ、上から降りてきた仕事を、理不尽な変更を、安い単価で短い納期でやります。絶対無理とは言いません。という人材以外必要ないので、こういうふうになっているし、こうなってしまった。

だから、私もスタバに行く度に思うわけだ。あのコーヒー豆に貼ってあるフェア・トレードのシール。あれ、IT業界にもいるんじゃないかな、って。
このシステムの構築中に退職者も精神病罹患者もいませんでしたシール。それが貼ってあるべきだと思うんだ。ネタだと思うかもしれないけど、それぐらいのことをしないとこの業界も改まらないし、自分で、改める気なんて一切ないから。

とはいえ、最近の就職の売り手市場も極まってきて、というか底辺IT企業の実態がよく知られるようになってきて、こういうやり方をしている底辺IT企業はどこも人手不足になっている。人が足りない、というレベルじゃなくて、人がいないから物理的に出来ないよね?というレベル。
それでもアホな会社が受注するから、今度はベテラン・プログラマが駆り出されて、もう戦線が崩壊して、事業撤退するしかない。というのが実は去年の話で、今はそれでも生き残ったゾンビー(巽幸太郎風に)が何とかやりくりしている状況で、もうそれも3月末には成仏するんじゃないかな、と思っている。

なので、プログラムが書ける書けないに関わらず、底辺IT企業のプログラマになるのはオススメしないが、学歴もなくて、プログラムも書けないけど、なんか内定もらったから来春から聞いたことのないIT企業の開発部門です。という不運な方はこの業界の暗黒史を踏まえつつ、いのちをだいじに頑張っていただきたいと思う。

私からは以上です。


スラスラ読める Pythonふりがなプログラミング (ふりがなプログラミングシリーズ)

スラスラ読める Pythonふりがなプログラミング (ふりがなプログラミングシリーズ)

今年の懺悔、深海へ潜れmegamouth

というわけで、大して何も思いつかず、なろう小説も完結させず年末となった。

今年を振り返ると、本業のほうは呆れるぐらい悠々自適にやった。そういう事をすると仕事が全然来なくなるので、酒ばかりを呑んでいた時期がある。
おかげで今になってすごく忙しいのだが、不思議である。なぜまだ依頼するのか、もしかすると私が酒を呑んでいる間に同業者が消えたのかもしれない。

文章のほうは謎の閉鎖宣言があった。今になって思うと何が嫌になったのか覚えていないのだ。多分、ちょっとスネてみただけだと思う。
そしてまた書き出したらダンプに衝突した。

www.megamouth.info


megamouthと言えばクソ社長というぐらいの代名詞になったエントリであるが、ITポエムブログで、閉鎖宣言して、再開して、わかりにくいエントリ書いたら爆発するとか思わないじゃない?消臭スプレーに穴を開けたので、給湯器のお湯で手を洗おう、ぐらいの軽い気持ちであった。

文体的なところは、相変わらずコロコロ変わっている。というか今も変わっている。今年何か手応えのあるものが書けたか、と言われるとあまりない。
実験ばっかしてたような気がする。

www.megamouth.info

これとか上手く書けた気はする、するが、文体もプロットも何のひねりがあるわけでもなく、単に誰もやってなかった、という以上に意味のある文章ではない。
本当に正直に言うと、筆の早い人はこういうのを私より先にやればいいと思う。それぐらい、自分がやる意味を感じていない。

あとは書いたら、ウケたりウケなかったり、Noteに猫の話を書いてみたりした。

note.mu


最近文章の手本にしようとしているのは高橋源一郎である。あの滑らかさは当代一であろう。ちなみに少し前は色川武大であった。しかし、両氏は、文体なんてどうでもいい、とでも仰っしゃりそうで、つまりは、そういう問題でもないようにも思う。

文章を書くのは今でも楽しい。しかし、年々文章を書く方法がわからなくなっている。
勢いで書けなくなった、と言うべきか。勢いで書ける、のはどういうことか、を考えてしまうようになった。

そういう意味では、懊悩して良かった。文章を探求して、文章とは書かぬことと見つけたり、という境地である。いやそれは駄目だ。

AmazonPrimeMusicのご紹介

10月から、ちゃんとヘビーローテションしているアルバムをプレイリストで管理するようにした。
懺悔しなくなったので、すごく溢れている。なので、やけくそ気味に紹介する。

Mbira Lights 1 EP

Mbira Lights 1 EP

日本のドリーム・ポップバンドらしいのだが、検索すると

www.cinra.net

こういうのが出てくる。ふむ。色々大変ですね。音楽のほうは、ソツなくまとまっているし、聞き飽きない。


Two Point Discrimination

Two Point Discrimination

Goldmundという方です。
こちらも良い塩梅のアンビエントであろう。生音が主体というのが今風らしい。
というか最近あまりシンセでアンビエントというのをヒーリングミュージックとかイージーリスニング以外の文脈で見なくなりましたね。

The Man Who Died in His Boat

The Man Who Died in His Boat

Grouperという、漫画で言うとガロ系みたいな人のようである。
何がすごいって、森田童子なみに暗いことである。暗黒が滲み出てくるような暗さであり、どんなにテンションが高くてもこれを聞くと、死にたくなってくる。
よって、調度良い。

Pom Pom: The Essential Cibo Matto [Explicit]

Pom Pom: The Essential Cibo Matto [Explicit]

はい、Cibo Matto
リアルタイムで聴いていた身としては、Tei Towa並には上手くやったユニットというイメージがある。
実際楽曲のバラエティも技巧も素晴らしいが、これらもサブカルの網に絡み取られて「お洒落」のレッテルから逃れられなかったように思う。
音楽がお洒落である必要なんて、これっぽちもあるとは思わない。だから彼女たちにとっては迷惑この上ないことだっただろうと思うのだが、それを突き抜ける力も必要だったのだろうとも思う。

dawn

dawn

Twitterでも書いたが、SilentPoets冷奴。
実際素晴らしいアルバムである。白眉はD.a.nの櫻木氏との"Simple"である。90年代へのオマージュが込められた名曲であるが、さすがにこの歌詞はね…わざとやってるとは思うんだけど。辻仁成とかBookOffで買ってきたくなる。

The Weapons Of Math Destruction

The Weapons Of Math Destruction

はい、Buffalo Daughter
リアルタイムでライブを見に行った数少ないバンドの一つでもある。
ライブでは本物のTR-909のキックの重さに心底驚いた記憶がある。あれはサンプリングでは絶対に出ない音だった。
自分もこういうのがやりたかったなあ、と今さらながら思ってしまう。



そんなところです。
というわけで、皆様良いお年を。

ご注文はCIですか?

いい歳なのにWebプログラマなんていう仕事をしている。
正確に言えばWeb屋だ。今や絶滅危惧種になったこの職業は、デザインをPhotoshopIllustratorでちょっと修正するところから、サーバーのファイアウォールの設定をちょっと変更するところまで、Webに関する何でもをこなす便利屋みたいなものだ。

一時は、Web屋みたいな人をフルスタックエンジニアなんて呼んでいた時期もあって、私も格好をつけたい時に便利に使わせてもらっていたけど、ただの銀玉鉄砲をシルバーバレット・オートマチック・モデルガンと呼んでるみたいで、口にする度に気恥ずかしくなってしまい、すぐに言わなくなってしまった。
これは言葉が悪いのではなくて、きっと私がWeb屋で、フルスタックエンジニアではなかったからだと思う。

銀玉鉄砲が、軽いアルミ缶すら撃ち抜けないように、Web屋もまた、ネットワークやサーバー運用の深淵を知らないし、デザインの理論的側面を知らない。

私たちが知っていて、出来ることといえば、ペライチのデザインをcssとhtmlの珍妙な混ぜ物にすることとか、フォームに入力されたデータをMySQLのテーブルに格納して、パスワードのかかった画面に一覧表示することとか、インストールされたCentOSSELinuxをすぐにDisabledにするぐらいのことだ。

何でもちょっとずつ、がWeb屋のあり方だし、ちょっとずつでも何でも、というのがWeb屋の生存戦略だ。

こういう事をし続けると、ちょっとずつ、というのが深くなっていく。例えば私なんかは、素のcssの代わりにscssで書くことができる(PostCSSは使ったことがない)、jQueryの代わりにVue.jsのコンポーネントを作ることもできる(Reactは使ったことがない)、Laravelでちょっとした業務アプリケーションを組むこともできる(Webで入力されたデータをRDBMSを介してWebで表示する以上のビジネスロジックはほとんど実装したことがない)、Apacheの代わりにnginxを使うことだって出来てしまう(Dockerは実運用で使ったことがない)

つまりは、やっぱり何だって出来てしまうし、周囲もそれなりに「何でも出来る人」扱いしてくれる。でも、括弧で囲んだ部分が示すように、未知の部分は多いし、突っ込んだ何かをするには不十分で、何かあるとすぐに壁にぶち当たってしまう。

少し前に、30代前半ぐらいのプログラマと組んで仕事をした。
彼はPHPとLaravelについてはプロフェッショナルで、私が用意したgitlabにコミットされるソースの質も高くて、私はそれを毎日チェックして、大いに参考にさせてもらった。(そして、自分の受け持った部分を真似して書いた)

「CIで自動テストを回したい」
ある日、彼がSlackのどこかのチャンネルで発言した。それはいいね。と私は答えた。
実際、今まで一緒に仕事をしたプログラマも顧客も、継続的インテグレーションはおろか単体テストの自動化をしたい、なんてことすら言ったことがなかったから、私はやっぱり出来る人は違うなあ、と素直に感心したのだった。
私はすぐにgitlabの隣にjenkensをセットアップして、彼に渡した。

「CIタスクが動かないですね」
しばらくして、彼が言った。
ユニットテスト自体は起動しているみたいだった。どれどれ、と私は彼のテストコードを見た。WebDriverを使ったE2Eテストだった。単体テストじゃないんだ、と私は思ったけど黙っていた。
「WebDriverが動けばいいのかな?」
と私は、少し気を落ち着かせながら、#generalだったか個別チャットだったかで尋ねた。
そうじゃないんですか?
と彼は答えになっていないことを言った。
私はひとまず、chromiumをインストールしたりなんだかして、WebDriverが動くようにした。
それでもテストは動かなかった。そもそもWebDriverがアクセスするサーバーがないんだもの。
「えっと、このテストコードはどこにアクセスするE2Eテストなの?」
「CIで作った環境じゃないんですか?」
「いやだから、このスクリプトでWebサーバーは起動しないじゃない?」
しばらく沈黙があった。私は話が通じているのか、にわかに不安になってしまった。というより、もしかしたら、私のほうがとんでもなく無知なことをしでかしているのかもしれない、という恐怖感が腹の底を重くした。

インフラのことはわからないんで
しばらく後で、彼は発言した。
そんなこと私だってわからない。CIでE2Eテストを回すなら、テストサーバーかなんかにアップロードするタスクの後にやるもんじゃないのか、と私は思った。
でももっと冴えた、CIなら当然の流儀が他にあるのかもしれない。私は逡巡した。
「Dockerとかで出来ないんですか?」
考え込んでいる私に彼は追い打ちをかけてきた。
Docker。CIで動かすスクリプトがLaravelとMySQLが動作するDockerコンテナ群をcomposeして、それからE2Eテストをする、っていうのならできるのかもしれない。だがそんなことやったことがないし、それが正しいやり方かどうかも確信がなかった。

「わからない。多分出来ると思うけど、やったことがないから時間がかかりすぎるよ」
私は白旗を上げることにした。そもそもなんで、君のCIスクリプトまで私が書かないといけないのだ、というのもあった。逆ギレと言われるのかもしれないが、私はWebプログラマとしてこのプロジェクトに参加していて、gitlabだって、誰も立てる人がいないから、立てただけなのだった。

「テストしないなら、品質保証できませんけど、いいんですか?」
最後に彼は言った。それが最後だったのは、私がその発言を無視したからだ。
単体テストもしないでE2Eテストだけで品質保証とかおめでてーな、とか昔のネットワーカーっぽい煽り文句が頭を駆け巡ったけど、どう考えても10歳ほども年下のプログラマに言うべきではなかったから、もちろん言わなかった。


その一件のしばらく後、クライアントの会社に立ち寄った。Slackでしかやり取りしなかった彼はもういなくなっていた。
「彼は、ちょっとコミュニケーションに問題がありましたね」
とクライアントは言った。私も同意した。でも、それで片付けるのも、なんだか居心地が悪かった。何より彼に悪い気がした。
本当は彼が正しくて、私が間違っていただけかもしれないのに。

私が、本当のインフラ屋だったら、きっと彼の要求が間違っているか、正しいのか、はっきり述べることができただろう、と思った。
このプロジェクトにおける私の役割がCI環境を構築することだったら、少し時間を貰えれば上手くやれたかもしれない。
あるいは、私がWebプログラマーだったら、そもそもCI環境を用意するところからお断りしていただろう。
「そういう環境はないと思いますよ」と言った私に落胆して、彼は次の作業に向かった筈だ。

私はWeb屋だった。何でも注文できるけど、何でもちょっとしか出来ないWeb屋だった。

このブログを読んだ誰かが、私がすべきだった何かを教えてくれるかもしれない。または私の無知を糾弾するかもしれない。

そうして、私は前より、ほんの少し賢くなれる。でも、きっと同じ注文は来ない。そして、次の注文に応えられる保証もない。

銀玉鉄砲を持った私は、友だちみんなが帰ってしまった夕日の街並みをトボトボと帰っていくよりないのだ。


[改訂第3版]Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

[改訂第3版]Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)