tetsunosukeのnotebook

tetsunosukeのメモです

手作業かコーディングか?ブラックな職場からの一言

http://togetter.com/li/207810 が、ちょうどいいタイミングで流れてきたので一考。

正直なところ「12時間も書かなきゃいけないプログラムで何かを改善する」ってのは結構やばい。これが、書くのは一時間、だったりしたら・・・十分やりがいがあるが。

さて。過去のブラック(謎)な職場でした体験について書こうと思った。
そのブラックな、というのは「自分の好きなソフトウェアをインストールできない、かつ、インターネットにつながらない」という環境である。

Write once, run anywhere

一度目は「このファイルの中で先頭がAで始まるのは何行あるか数えてくれる?」というものであった。UNIXマシンでもつながる環境であれば一発である。しかし正直MS-DOSレベルでどうこうできるレベルにもなく、またVBSで書くほどVBSも暗記してない・・・という時代がありました。幸いにもこのプロジェクトはJavaのプロジェクトで、JDKだけはどの人のマシンにも入っていました。Write once, run anywhere() だよまさに!100万行あるファイル10個を分担して作業することを提案し、夜にこっそりこれを動かして、しれっと帰ったものである。まさに常駐派遣のブラックな実態!

いまどきのWindowsは...

二個目はまさにネットにつながらないどころか、何の開発環境もインストールされていないWindowsXPにて、10000件のパラメータによるページタイトルを洗い出す、という作業だった。これは本気で詰んだと思ったね。しかし自分は気づいた。Windowsの場合、最近のものであれば、.NET Frameworkがインストールされている・・・つまり、cscなどのコマンドラインコンパイラが必ず入っているのだ。

習慣の話題が出たけど

受託開発や自社サービスの人の場合、自身の作業を効率化、また、将来にわたって自分の作業を効率化することは、必ずどこかで価値を産むものだけど、常駐派遣の場合、下手すると楽した分だけ仕事が増える(が評価や少なくとも自社からの給料はあがらない)。この環境で、自身の成長につながるであろうこういったこころみをしようとしないエンジニアが一定数いる、ということは、非常に重要だと思う。

こういった中、この視点から成長欲を持たなくなったエンジニアが弊社にも時折面接でくるのですが、正直「最近の技術に興味をもって・・たとえばAndroidが面白そうなので本で勉強しています」みたいなアピールは割とどうでもよくて、こういう処理をPerlで書いたら実行速度が遅くて話にならなかったのでちゃんとCで書けるようにしておきましたとか、速度の絡みでいうと並列実行しないとやっぱり根本的に駄目なのでErlangを覚えましたとか、そういう動機が欲しいなあと思うところ。結局「勉強」があなたにとって「何のためであるか」が結構重要だと思うので。

というわけで

元にコメントしているけど自分が気にしているのは「(自身の成長という意味で)投資になるか」「(将来の自分(またはチーム)の工数的な意味で)投資になるか」を基準とするが「それをやるための見積もりが割と正確にできている場合(もしくは短時間である場合)」ってところかなって思ってます。
(あと、自分の心が折れなくなるかなど健全のため。)

これについては最近やっている回帰分析じゃないけど、式があればいいよね。

手作業にかかる時間> a * プログラミングの時間 + b*プログラム実行時間 - c*自身の成長度数 + d * そのプログラムの耐用年数(何回実行するともとが取れる?か) ならやる、とか。

ちなみに、先に「見積もりが正確に」と書いたけど、やはり短時間であることは重要であると思っていて、両辺が10倍されたものと、10分の1されたものでは判断軸が異なってくると思う。

自身の投資っていっても

例えば使ったことない言語とか、使ったことないWindowsのAPIとか、そういうレベルでいいと思ってるけど。これを「頭で知っている」のを「手が動かせる」っていうレベルの差を埋めるのに、非常に有益な題材と捉えるようにしています。



あ、さらにもとに戻ると、
10時間かかる作業で12時間のプログラムの規模っておそらく「数独」のソルバーくらいのレベルなのかな。