« 2011年1月 | トップページ | 2011年3月 »

2011年2月

そんなことばっかりやっていたら、ソフトウェア開発がどんどん面白くなくなってしまうよ。本当はもっと楽しいもののはずなのに。

こんな話を聞いた。
//
ソフトウェアを開発している組織が守るべき規則を決めて、
その組織が規則を守っているかどうかを検証するのが、
ソフトウェア品質保証だという人がいる。

その人がどんな規則を決めているのかを聞いてみると、
それは、CMMIの焼き直しで、「車輪の再発明もどき」だ。
CMMIというのは、カーネギーメロン大学が作ったソフトウェア開発プロセスモデルだ。
それはとてもきちんとしている。

今、CMMIの真似をして、その人が作った規則を「スーパー革命ルール」と呼ぼう。
スーパー革命ルールは、所詮「もどき」なので、CMMIには劣る。

スーパー革命ルールの作者を「革命君」と呼ぶことにすると、

革命君は声を大きくして、
「ソフトウェア開発に関わっている人すべてが、この素晴らしいスーパー革命ルールを知らないといけない!」と叫ぶのだという。

もちろん、多くの人は、スーパー革命ルールは自分の仕事には関係ないし、革命君はなんだか胡散臭いと感じるので、軽く無視する。
少し過激な人だと、「スーパー革命ルールなんて自分たちには必要ない!!」と公言してしまう。

すると、それを聞きつけた革命君は、
「こんなに素晴らしいものが必要ないなんて、けしからん!」
「そんなことをいう人が組織のリーダーをやっているなんて、その組織も終わりだ!」
と、まわりにいる人たちに当り散らす。

それから革命君の自画自賛の演説が30分以上続くのだが、まわりの人も忙しいので、適当に聞き流す。

すると革命君は、「そういえば、この間、あの人にあったけど、その人の自分に賛同してくれた」と自己弁護を開始して、さらに30分以上、自分の言いたいことだけいうと、気がすんだのか、どこかにふらっと消えていくのだという。

ちなみに、革命君は仕事をほったらかして、いろいろな業界の集まりに出かけることが多いので、そこそこ名の知れた有名人とも面識があるらしい。もっとも相手が革命君のことをどう思っているかまでは分からないらしい。
//
どうだろう。
こんな話は、どこの会社や学校にでもよくあることではないだろうか。

僕がとくに気になったのは、革命君が「車輪の再発明」をしてCMMIもどきの「スーパー革命ルール」を作ってしまう件だ。
実は「スーパー革命ルール」の教育とルール自体の見直し作業が、継続して行われており、一部の集団に利益をもたらしている。
しかも「スーパー革命ルール」は実際には使われていないのは、上の話の通りだ。

一部の集団が、自分たちに利益を誘導するために、多くの人には必要のないものをつくっている。
そして、一度その利益誘導システムが出来上がると、あとは必死に守ろうとする。

国政レベルで良くみる構図だが、ソフトウェア開発に関わる組織でも同じことが起こっていることに気づいてビックリした。
//
今回聞いた話はここまで。

「革命君に革命は起こせないと思う」


| | コメント (0) | トラックバック (0)

Pythonでエクセルブックにどんなシートがあるのかを調べる

最近めっきり話題になることが少なくなったマイクロソフトだが、会社や学校ではまだまだオフィス製品を使うことが多いだろう。

例えばエクセルだ。

本当によくデータ管理に使われることが多いこのソフトウェアだが、中にどんなデータが入っているのか、ファイルを開いてみないとわからない。

実に面倒だ。

せめて、そのファイルにどんなシートが入っているのか入っているのかが分かれば、それだけでもかなりの手間が省けるのだが。

そこで、エクセルファイルに含まれるシートの名前リストをファイルに書き出すプログラムを、pythonで作ってみた。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import win32com
from win32com.client import *
import codecs

app = win32com.client.Dispatch("Excel.Application")
app.Visible = False

book = app.Workbooks.Open(os.path.join(os.getcwd(), sys.argv[1]))

alist = [x.Name for x in book.Worksheets]

with codecs.open("sheets.txt", "w", "shift_jis") as fout:

  fout.write(book.Name+"\n")
  [fout.write(x + "\n") for x in alist]

| | コメント (0) | トラックバック (0)

« 2011年1月 | トップページ | 2011年3月 »