エンジニアリングの話と、ビジネスの話を混ぜるとよくわからなくなるよね

はてブ経由で読んであまりにも面白かったので、ちょっと日記に書く。
【公開】第30回IT勉強宴会「最近感じる日本企業のITの問題と展望~「ソフトを他人に作らせる日本、自分で作る米国」を読んで」: プログラマの思索
やっべ、はてな記法忘れかけてるww ま、それはいい。
いろんな指摘があるけど、ホントそう思う。ただ、そこはエンジニアリングという範囲での話で、下の部分で、ちょっと思うところがあって、久々の日記書きということにする。

本来はユーザ企業でも内製化したい。
自分たちの業務システムを作りこむことで、自分たちの業務をスピーディに強化できる。
自分多たちの業務システムの技術や運用ノウハウも社外に流出しない。

しかし、自社で内製化しようとするとハードルが高い。
ユーザ企業が若い社員にプログラム開発をさせるが、ある程度育つと設計や運用に回り、プログラム開発しなくなる。
若い社員も、単価の高い設計や管理などに向いてしまう。
プログラム開発の楽しさが伝わらない、など。

皆さんは色々話されていたけど、僕は違う意見を持っている。
おそらく、ユーザ企業に限らず、日本のIT企業はプログラミング技術を軽視している文化があるから、人が育たないのだ。

ここ、ユーザ企業で内製できない理由が、ちょっと歯切れが悪いと思った。私に言わせれば、それは経営の観点で、人件費をシステム部門の為に投下できないからだ。日本の雇用環境ってのは、一度正社員で人を採用するとそう簡単には人を切れない。福利厚生もあるし、マトモな会社なら社会保険の負担とかかなりのコストが毎月かかる。外注すればそこを考えなくていい。これは全くエンジニアリングの問題じゃない。日本における雇用の流動性の問題が根幹にあると思ってる。米国では内製が多いなんてのは、IPAの報告書なんかにも書いてあったと思うけど、それが出来るのはプロジェクトが終わったら、余剰人員はサヨナラって言って、言われたほうもじゃあ次へってさらさらと動く環境だからじゃないかな。日本ではその代わり、外の会社にその時だけの契約で(まあ、実際には保守継続してくれないと困るから付き合いは続くけど)一過性の費用計上だけで済ませる。経営者にとってはありがたい仕組みなんだよ。

その、人を抱えるリスクを負ってでも内製化する事のインセンティブがあるなら、それをやるだろうけど、一般的な企業でそこまでのものはないよね。例えば、銀行、保険会社、鉄道会社、電気事業会社、官公庁。こんなところは、内製化のインセンティブないでしょう。ネット証券やゲーム事業やってるような所で、コンピュータシステムがお金を発生させる原動力なら内製化のインセンティブは強いし、実際そーゆー所は内製多いんじゃないの?

コンピュータシステムが金を生むかどうか。それで内製か外注かがわりとハッキリと割れると思う。これはエンジニアリングじゃなくてビジネスの話。そこのところがもやもやした感じになっていると、良くないなーと思ってちょっと書いてみた。よし、送信!

...さっきの内製化インセンティブが薄いところの例示が一般的とか加筆しておいて一般的でない気がしたので、もうちょっと例えばと書いてみるか。小売りや卸業、飲食店なんかは、「一般的」と言えるんじゃないかな。食品、アパレル、事務用品とか。あと、ちょっと大ぶりな所では、機械なんか。そーゆービジネスにおいて、コンピュータシステムというのは金を生む仕組みじゃない、という事ですよと。
コンピュータシステムとか書いたけど、端的に言えば、事務の道具だからなあ。IBMの社名は、端的にそれを示している。

まどか、Blu-ray購入

しました。

今劇場でやってるやつもいずれ出たら買います。これは何度か繰り返し観ると、味わいが変わってくるはず。

かぐや姫はなあ… 媒体買おうと思わないや。もしかすると10年とかたった後に観たくなるのかもしれないけど。いまはまだ、その時じゃない。

かぐや姫の物語を観てきた

観てきました。うん、なんというか、キレイだったし、姫の表情・感情もよく描けていたし伝わってきたし、翁はどうしようもないバカだけど、媼と一緒に姫を愛していたし、姫の愛する世界は美しかった。歌も素晴らしかったですよ。iTunesで買いましたし。

でも、なんか、それだけだったなあと。

贅沢なことを言っているんだと思う。どっかで「風立ちぬ」が制作費100億なんて話を鈴木PがしているのをTVか何かで見た記憶があるんだけど、「かぐや姫の物語」だって製作期間は長いんだし、3/4ぐらいは使ってそうだ。そんだけのリソースをぶっこんで、という事を考えると、なんか伝統芸能保存会の作った日本昔話のスペシャル版としか思えない。

一方で、はるかに費用対効果の高い作品を昨日観ちゃってるんですよ。なんか、ジブリはアートと伝統芸能の保存というところにしか生き残る道はないような気がしてきました。パンツ御大が復活とか、相当事態を憂慮しての事なのかもね。

魔法少女まどか☆マギカ 叛逆の物語、観てきた

ついさっき観てきました。ちょっと感想など。ネタバレてんので、それがアレな人はそっとどこかにいってくれるといいなと。

映画全体を観ての印象だけど、なんというか、いろいろな味わいの料理が並んだフルコースを楽しんできた感じ。それぞれの料理ごとに味わいが変わってくる。そして最後に出てきたフロマージュが人を選ぶ独特の香り(臭気かもしれない)があって、でも、口に含めばそれはそれでおいしいよと、そんな感じの流れだった。

やはり主役はほむらちゃんなんだけど、なんか、切ないな。大好きで大好きで、大切にしてきたお友達を、自分ともども壊すほど思いつめて。多分そのための時間は、数えきれない繰り返しの中で十分すぎるほど積み重ねてきたにしても、その思いはあまりにも重すぎる。そしてそれが人の愛だという答えも。

最後にはそれが神様と悪魔を生じて、その二人が手を取り合ってゆく世界というのは、現し世はこうあって欲しいという作り手の願いのようにも思った。悪魔を生ずるのが愛ではなく、神様と悪魔も結びつけるのが愛だよと。

一方で、やはり強く印象に残ったのは、度しがたきが人の欲という事でもある。愛という言葉で語られたけれども、本当の意味での愛ではないよね。そこは、ほむらちゃんの欲でさ。まあ、狂ってしまうのに十分すぎるほどの時間を過ぎてのことではあるし、そこまで追い詰められれば、人は変わってしまう、狂ってしまうものなんだよって事なんだけどさ。まあ、いろいろと難しい。だからこそ、この世界はもめ事が絶えないわけなんだけど。

2/3ぐらいまではね、すごく甘い展開で、文字通りみんなの願いがかなったような世界でさ。あのままキレイに終わる事もできたはずだけど、そうならなかった。それを残念と思うんだけど、そこで終わらせるような人々なら、こんなここまでの作品は作れなかったよなーとも思う。なんかね、ここも難しい。すっぱーんと明快に割り切れる評価ができない。そーゆー、難しさ満載の作品だった。

難しい難しいって連発してるけど、単純なところではさやかちゃんの立ち位置がよかったな。魔女になっても、別に終わりでもなんでもなく、世界の一部としてきちんと存在していたというのがうれしかった。

なーんか、とりとめなくなっちゃったな! ひさびさの感想日記だからしょーがない。しかもなかなか感想書くのが難しいネタだし! もういいや、とりあえず俺はこう思ったよ! 送信!

昨日のコードちょっと修正

昨日書いたコード、ちょっと修正してみた。元の記事の「いかがだろう、ずいぶんとすっきり記述できる。」という所に少しでも近づきたいという気持ちがあって、いや、あのIfブロックはあれはあれで、ハッキリとした意思表示だと思うんだけど、もっとスパっとかけないもんかなーと。

で、Queueなら! と思いついて利用箇所をこう変えた。

        'こんな風に書けるよ!
        Dim hogeParam1 As String = "hogedefault1"   'set default
        Dim hogeParam2 As String = "hogedefault2"   'set default
        If opts.ContainsKey("hoge") Then
            With opts("hoge")
                hogeParam1 = If(.Count > 0, .Dequeue, "hogedefault1")
                hogeParam2 = If(.Count > 0, .Dequeue, "hogedefault2")
            End With
        End If

見た目はだいぶマシになった。先方のサンプルにあるportとrootを取る記述にしてみる。

        Dim myOptions() As String = {"root", "port"}
        Dim opts = (New OptionParser(myOptions, "-"c)).Parse(args)

        'こんな風に書けるよ!
        Dim root As String
        If opts.ContainsKey("root") Then
            root = If(opts("root").Count > 0, opts("root").Dequeue, ".")
        End If

        Dim port As Integer
        If opts.ContainsKey("port") Then
            If Not Integer.TryParse(If(opts("port").Count > 0, opts("port").Dequeue, "80"), port) Then
                port = 80
            End If
        End If

実際の利用場面を想定したコードだと、それほどのスッキリ感はないなあ。でも、If式でデフォルト値とセットで書けるのはだいぶコンパクトにまとめられるようになったと思う。横に長くなるけども。
あと整数値を取るときの型変換がダルイなー。一気にみてくれがわるくなった。でもまあ、こんなもんじゃないかな。過剰に美しさを求めると、他が犠牲になったりするし、ここでやめとこう。

そうそう、パーサクラスはこうなった。

Public Class OptionParser
    Private listOfOptionName As New List(Of String)
    Private swChar As Char
    Public Sub New(ByVal args() As String, ByVal swc As Char)
        swChar = swc
        listOfOptionName = args.Distinct().ToList()
    End Sub
    Public Function Parse(ByVal args() As String) As Dictionary(Of String, Queue(Of String))
        Parse = New Dictionary(Of String, Queue(Of String))
        For i = 0 To args.Length - 1
            Dim targetArg = args(i)
            If listOfOptionName.Exists(Function(n) String.Format("{0}{1}", swChar, n) = targetArg) Then
                Parse.Add(targetArg.Remove(0, 1), New Queue(Of String))
            Else
                If Parse.Count > 0 AndAlso targetArg(0) <> swChar Then
                    Parse.Last.Value.Enqueue(targetArg)
                Else
                    Debug.Print("{0} droped.index={1}", targetArg, i)
                End If
            End If
        Next
    End Function
End Class

DictionaryのValueがQueueになっただけ。ああ、あとSubstringをRemoveに変更。こんな便利関数があるなんて、今でもVB6現役のボクは知りませんでした!