arveltのソフトウェア技術メモ

Arvelt's software technology memo

SIerを退職し、Web系に転職しました

銀行系列の中規模SIerを退職し、
受託と自社サービスの開発を行っている小規模Web系に転職することになりました。
7/30が最終出社日でした。8/1からは新しい勤め先へ向かいます。


1.これまでやったこと
2.これからやりたいこと
3.なぜ転職しようと思ったのか


なお、3はいわいる自分語りを含む上に長いのでご注意ください。
読ませる知り合いもいないのに何故書いた。



1.これまでにやってきたこと。
オープン系の基幹システムの保守開発に携わり4年ほど。
JavaCOBOL、ExcelVBAをメインにやっていました。
もちろんSQLも普通に書いたりしつつ、触ったことのあるDBはOracle、PostgresSQL、SQLServer
業務知識は主に流通系。Web開発とかもやりました。Javaでstruts1.Xとか、ASP.NETC#VBとか。
それと個人的欲求に基づき、Androidアプリの開発や、
Web関連の基礎とRubyRailsの勉強をしたりしていました。

この技術要素を並べただけの経歴でおおすげえ経験豊富だなぁと思った方はそれSIerの罠なのでご注意ください。



2.これからやること、やりたいこと。
Google App Engine / python でのいわいるWebサービスの開発をやることになりました。
MacVimLL言語という始めて触れる開発環境や、
自社サービスとしてのWebアプリケーションの開発、
githubとjenkinsを用いた開発フロー等、
新しい場所と環境でやっていくことになります。
そういうのがやりたくてWeb系を志しましたので、全力で取り組んでいきたいと思います。

「楽しくプログラミングがしたい」ということを望みます。
そして縁あってか、この思いを共有できる職場がありましたので、
そこでやっていこうと思うに至りました。



3.なぜ転職しようと思ったのか

SIerで働き始めて一年が経とうかというころでした。
私は自分の仕事に疑問をもっていました。なぜ仕事でやっているプログラミングは楽しくないのか?
そんな時に、この記事を読みました。

人月計算とExcelとスーツの世界より
http://anond.hatelabo.jp/20070831005830

涙がでました。
私が抱いた疑問と違和感は私だけのものではありませんでした。
記事の日付を考えると私が読んだ時点ですでに2年は経っていたはず。
それでも私の胸に、今のままでいいのか?という疑問の火を灯すには十分だったのです。


文学部の私はソフトウェアを作ることに憧れシステム開発の会社に就職しました。
ソフトウェアを作るための技術を向上させて、その技術を活用して何かの問題を解決する。そんな仕事をすることになるのだと思いました。
しかし、ソフトウェアの技術は大切になるされることもなく、言われたとおりのものを作るだけの作業がまっていました。


システムを知らない顧客のためにExcelの方眼紙にわかりやすい日本語で記載した仕様書を作成します。
了承を得たらソースコードを書き、コンパイルし、テストし、この結果を紙に印刷して、顧客とレビューを行います。
品質管理委員やマネージャーや役員と状況共有するために、進捗や問題点を書いたExcelで会議を行います。
デプロイ時にはチェックシートを用いて、クロスチェックを行います。
顧客先に常駐しそういうことをするのが私たちの仕事でした。
そのうちソースコードを書いてテストすることが特に私の仕事でした。


オブジェクト?結局やることはCOBOLと同じでしょ。
Web?クライアントサーバーで同じ事してんじゃん。
システムなんか誰が作っても同じになるから。
DBにデータを出し入れすること。ifで振り分けること。forでくりかえすこと。それだけできれば困らないよ。
重要なのは業務のノウハウを知っていることなんだ。技術にそんな違いはない。
上司や先輩からはそういうことを教わりました。


4年も勤め上げた今ならその言葉の意味も理解できます。
企業の基幹システムは、その企業の売上を生み出すために使用されるのであって。
ハードウェアの導入も、そこで動くソフトウェアも、
目的を達成するための多数ある手段の中の一つにしか過ぎません。それはいいのです。何も間違いはなく、ひたすらに正しい。


たしかに業務知識が最優先でした。
それがわかっていれば業務システムのアプリケーションを作ることは比較的容易でした。
それがわからなければどんな簡単そうに見えるソースコードさえ、その意味が理解出来ませんでした。
企業活動はデータの流れそのものです。
そのデータはどこからやってきて、どのように加工され、どのように保存され、どのように出力されるのか。
データの流れを理解していることが最も重要でした。
ソフトウェアという生地を編む縦横の糸がデータとアルゴリズムであるのならば、
そのうちデータにこそ価値がありました。
そしてそれを作るのは、一度決めてしまえばそれは外注に出すべきただの作業でした。
お客様の業務の流れを理解しそれに寄り添う人こそが、最も優れたシステムエンジニアなのです。
システムエンジニアにも問題を解決する喜びはあります。
知らないことを知る昂揚はあります。システムを作る満足はあります。
でも、楽しいと感じられないことに私は気づきました。いくらそれが正しくとも楽しくなければ決して続けることはできません。


結局のところ、関わっているプロダクトそのものに興味を持つことができなかったのです。
自分の知らないことを知っていく楽しみはありましたが、その先はありませんでした。顧客のシステムなのだから当然です。
もちろん仕事だからしっかりとやりました。品質は重要です。
このCOBOLが異常終了したら明日の商品が出荷されないせいで新聞沙汰になる可能性もあるんだぞ。
その時の顧客が扱う商品の特性を考えればそのとおりです。いい加減にやっていいことではありません。


仕事でするプログラミングが楽しくなくて技術も学べないならば、自分でプログラミングして自分で学ぼうと思いました。
ネットで調べたら、プログラマたるものこれを読むべきと言われていたので、CodeCompleteを読みました。
Javaを使うならこれを読むべきと言われていたので、EffectiveJavaを読みました。
そんな風にネットでプログラマのための名著などを調べて、自分でもわかりそうなものを読んでいきました。
知らないことばかりでした。読む前よりほんの少し賢くなりました。
自分が書くおまじない一つに一つに必ず意味があることを知りました。
しかし結局のところ、業務で読むソースコードにその知識が役に立ったことはありませんでした。
せいぜいStringBuilderを使うべき箇所を指摘した程度のことでした。


実際に何か作ろうと思いました。ゲームが好きだった私は、ゲームを作ろうと思いました。ゲームこそプログラミングの華だと思いました。そして、よし作ろうと思い立ってから、やったできたと思うまで2年かかりました。ちなみにここにおいてあります
あるとき、螺旋の弾幕を3ヶ月かかっても作りきれず、ネットで知り合ったプログラマにソースを見てもらったことがあります。
いくらプロとはいえ1週間くらいかかるのだろうと思っていたのです。
あったこともない人の時間を使わせるわけにはいかないと思ってためらっていました。
そんなこと気にするなと向こうは言ってくれるので、結局見てもらうことにしました。
彼は2時間ほどで私がやりたかった通りのものを完成させ、私に見せてくれました。
彼が相応に先を走っていることを差し引いても衝撃でした。本物と偽者の差を思い知りました。
プログラマの生産性が100倍違うというのは誇張のない真実だったのです。


しかしやはり、そうやって得た知識と経験は仕事になにも訳にたつことがありませんでした。
SIerC言語DirectXでゲームを作る仕事をするわけがないのですからこれは当然です。題材を選んだのは自分の責任ですが、やはり虚しく思いました。
せいぜいゲーム好きの同僚を見つけることができた程度のことでした。それと同時にゲームを仕事にすることは私には無理なのだととわかりました。



疑問を抱きながらも私は日々の業務をこなしていました。
その中で思うことがありました。


荷姿や受払い、という言葉の意味がわからずに調べているときに私は思います。
googleで検索すること、これはソフトウェアではないのだろうか。
実際のプログラムであればifとforを数回かくだけのソースコードの仕様を、
日本語で書き起こす仕事を終えたその夜に私は考えるのです。
目の前で100万回再生おめでとうというコメントが流れていくニコニコ動画、これはソフトウェアではないのだろうか。
午後のレビューのためにひたすらExcel方眼紙の仕様書を印刷することで午前中を使った昼休み、私は感じるのです。
芝生の公園でおべんとなう、と呟いたtwitter。これはソフトウエアではないのだろうか。


私はよくわからなくなりました。ソフトウェア技術をないがしろにするSIer業界の構造ってなんなのだろう。
建築業界を参考にしたという、水が流れるが如く後戻りを許さない開発のフロー、細分化された分業と階層構造。
これはソフトウェア業界を不幸にしただけなのではないか。
ソフトウェアを作るためにはソフトウェアなりのやり方をしないといけないのではないか。
建築業界と似ていると思ったのが間違いなのではなかったか。


受託開発では人月を元に見積りしますので、
効率化して期間が短くなると人月計上できないので売上が下がります。
実際には、単価を上げるという形で対応していることでしょう。
私たちが売っているのは技術そのものなのでしょうか?しかし技術そのものに値段をつけることができません。
それは商標や特許などの話になるのでしょう。
結局のところ我々は技術といいながら人に値段をつけるしかないのです。
いくら唸ろうとも、下請けの下請けの下請けとしてソフトウェアを製造するだけだった私には荷が勝ちすぎる問題でもありました。


これと、あれは、なぜこんな違うのだろうか。


私はいわいるwebサービスへの憧れを抱くようになりました。
今、ソフトウェアで誰かの問題を解決することに真剣なのは、Webなのではないだろうか?
そう考えるようになりました。


そうしてwebの勉強をするようになりました。

<html><body>hello world!</body></html>

と書いたindex.htmlファイルをIEで開いてみて。
これが普段見ているWebサイトだったのかと知りました。
webは状態を持たず、問われたら返事をを返すだけ。このシンプルさが、広く受け入れられた理由なのだと知りました。


Javaservletを勉強しようとして、その頃よく目にするようになっていたVpsサーバーを借りてapachetomcatを入れ、文字化けに悩んだりしました。
そのうちスクリプト言語をさわることを思い立ち、よく目にしていたRubyRuby on railsを触りました。作ったものをheroku上に公開してみました。
開発部隊もインフラチームもオペレーターもいないのに、簡単にアプリケーションを全世界へと公開できました。
まるで魔法でした。これは魔法。プログラマは現代の魔術師。
なるほど、偉大なハッカーのことをウィザードと呼ぶのも納得です。


CGIで動的なホームページを作ることから派生していった、スクリプト言語によるwebアプリケーション。
作る前に要件を確定できると奢ることなく、素早く作って検証することを繰り返すアジャイル開発。
バザールと例えられた、OSSのエコシステム。


webに収束しようとしているハッカー文化にあこがれました。


しかし同時に気がつきました。この魔法はあまりわかっていなくても使えてしまう。
ネットで見かけたコードをコピーペーストしただけでもなんとなくできてしまう。
それでいいのかとも思い始めました。


ゲームを見てくれたプログラマから理解していないソースを書いてはいけないと言われた。
職場の上司からは自分の書いたソースの意味を説明できないとダメだと言われた。
ネットではコピペプログラマは使えないという文章が散見される。


まったく利害の違う場所で同じ趣旨のことを何度も見聞きしました。
ということはきっと真実に違いない。
これはちゃんと学ばなければならない。しかし私はついていけるだろうか。


自分はプログラマに向いていない自覚があります。
整理して質問して理解したつもりでいても、本質的なところを取りこぼしていたりする。
抽象化された概念とソースコードが結びつかず、テストしてみてやっと理解できる。
70%くらいまではスムーズにできても、70%を100%にするために70%にするまでにかけた時間の2倍をかけてしまう。
プログラミングが3度の飯より好きなんてことはなく、ゲームでもして楽器でも触って遊んで暮らす方がよっぽど好き。


不安に思うのです。
もしかしたら、本物のハッカーたちが魔法のようにソフトウェアが生み出すことの熱に当てられただけで、
偽物の私は自分でソフトウェアを創り出す能力などないのかもしれない。
もしかしたら、プログラマっぽい言動をしていい気になることで、
何も生み出せないワナビーである自分から目を背けようとしているだけなのかもしれない。
もしかしたら、自分の知らないことに触れたその喜びに酔いしれただけで、
実際は何も身についていないのかもしれない。
もしかしたら、目新しく自分の知らないWeb業界というものに一時的に魅せられているだけで、
システムエンジニアとして過ごすべきだったのかもしれない。


ではこのまま過ごすとどうなるのだろうか。
今のまま楽しくない仕事を続けて、心が死んでいくに違いない。
Excel方眼紙のメンテナンスが仕事の、プロジェクトマネージャーになるに違いない。
自分で手を動かさずに外注を何社も使うことの利ざやで稼ぐ仕事で人生を過ごすに違いない。
それでいいのだろうか。それは楽しいだろうか。


諦めるにはまだ早い気がしました。どうせいずれ散るならば、戦わずに散るよりも、戦ってから散った方がいい。
願わくば、自分の好きな道具を使い、自分が好きになれるものを作ってみたいと思いました。


隣の芝は青く見えます。webだから理想郷に至れるというわけではありません。
しかしそれでも、ソフトウェア技術も大事にする、面白いプロダクトを開発する、Webなら両方やれるのではないかと思いました。
私は、webの会社で働いてみようと決めたのです。



追記。
転職して一年後のことを書きました。