プログラミングが得意な人、そうでない人

久しぶりにプログラミングの話を書いてみようと思います。プログラミングの割と初歩的な話なのですが、プログラムを作っていく工程には「デバッグ」というものがあります。

要はプログラミング作業のミスによって生じるエラーをバグ(=虫)に見立て、プログラムを修正することによってエラーを解消することをデバッグと表現するのですが、スキルがあるレベルに達するまではこれが非常にきつい。何故かというと修正しても修正してもなかなか自分が思ったとおりに動いてくれず、時間ばかりが過ぎていくということが起こり得るからです。それに加え、プログラムをコンパイルした時や実行した時のエラー表示が、まるで自分を否定されたような気持ちにさせるという側面もあるでしょう。(こんなのは慣れればどうということはありませんが)

そのデバッグ作業なのですが、そのエラーを早く直せる人となかなか直せない人がいます。もちろんその差は知識や経験の差ではあるのですが、具体的にどういうところに現れるのでしょうか。

私がデバッグ作業の進まない人の仕事を見ていて気付いたことがあります。その中の一つが「エラーメッセージを読まない」ということです。つまりコンパイラやインタプリタやミドルウェアが出すエラーメッセージから「エラーを解消するために手掛かりに成り得る情報」を取ろうとしないということです。

その人は「実行したらエラーになった」「直して実行してもまたエラーになった」という程度の情報しか取りませんでした。でも私が見ていたところ、2回目に実行した時にはエラーメッセージが変わっていたのです。そこで「今、エラーメッセージが変わったことに気付きましたか?」と質問したところ「え、そうでした?」というような返事が返ってきました。

もちろん某ミドルウェアのように、非常にわかりにくい不親切なメッセージしか表示されないということもあるでしょう。でも、たとえ分かりにくくても「ある個所を直したらエラーメッセージが変わった」というのはエラーには違いありませんがデバッグを行う上では重要な手がかりです。その上でメッセージの内容を読めば、比較的容易にエラー解消に近づいていくでしょう。

このように、プログラミングのスキルというのは一朝一夕に向上するものではなく、こういった緻密な心配りの積み重ねで伸びていくのかなと思っています。


鵜飼船の若手船頭に学ぶ

一昨日19日にJSDGの中部研修会が開催され、参加してきました。今回は例年開催している長良川の鵜飼いとセットになっている研修会で、石金という旅館の一室を借りて行われました。(もちろんその旅館に宿泊します。)今年で5回目とのことですが、私は去年が初参加で今回は2回目の参加でした。

研修会では鵜飼船の船頭である平工顕太郎(ひらく・けんたろう)さんを招いて、インタビュー形式で鵜飼の話やこの世界に入ったいきさつなどを伺いました。船頭というのは簡単な仕事に見えて細かい気遣いを求められ、最初は厳しい指導を受けたそうですが、自分の舟を持つようになった頃からそういうのは徐々に少なくなっていったそうです。何より船頭としてのスキルは教わって覚えるものではなく、実際にやって解ることが大事なのだとか。差し詰めITの世界で言ったら自分のサーバーを持つようなイメージでしょうか。また、地元を一旦離れて外から眺めて見た方がその良さを再認識しやすく、仕事に対するモチベーションもより高まるようです。川と共に生きる覚悟を決めた男の姿をまざまざと見せつけられました。

平工さんは来月から木製の漁船に観光客を乗せて「結の舟(ゆいのふね)」という体験型ツアーを始めるのですが、私も企画に携わっていて、翌日、他のスタッフと共に体験乗船してきました。最終チェックを行いたいとのことで駆り出されたのですが、情報システムで言うところのユーザーレビューあるいは受入テストに当たるでしょうか。例えば、流れの静かなところで手ほどきを受けながら操船の体験をしたり、平工さんが日頃から漁で使っている網を投げる体験をしたりといった内容です。操船も竿がなかなか川底に刺さらず(川底の石の表面を滑ってしまう)、投網もうまく網が広がらずに束のまま放り投げてしまったり、「なるほど覚えると分かるは違うんだな」ということを改めて学びました。

川には危険がいっぱいあり、先日も小学生が事故に遭ったりして怖いと思う方も多いと思いますが、危険だから近づかないという対処は却って対象をブラックボックス化してしまいます。それよりは具体的にどのような危険があり、どのように対処すればよいかということを学んだ上で遊ぶことが大切かなと思います。河原を歩く時に転倒事故が多いそうなのですが、転倒しないためには浮石を踏まないようにするとか、今回ライフジャケットを着用したのですが、流された時には立ち泳ぎしないでラッコのように浮いて頭を川上に向けて流れに任せるなど、話で聴いただけでは分かりづらいことを体験を通して学ぶことができます。

尚、この体験ツアーは対象を小学1年生以上をとしたいとおっしゃっており、この夏休みに岐阜方面に行かれる方はぜひ検討してみてはいかがでしょうか。この事業を通してより多くの人に川に親しんでもらいたいと思うのと同時に、平工さんの今後のご発展とご活躍を願って止みません。

石金
http://www.ishikin.co.jp/

結の舟
http://yuifune.wix.com/yuino-fune

 

フラットデザインには慣れなければならないのか

アップル社のiOS 7、そしてマイクロソフト社のWindows 8がリリースされてからというもの、あののっぺりとした味気ない画面(UI)に抵抗を感じています。おそらく私はコンピュータの画面が文字ベースからグラフィカルになった頃から今日に至るまでコンピュータに慣れ親しんできて、UIの変遷を見て来ていますので、そもそもUIはリアルでリッチな表現を目指して進化してきたんじゃなかったっけ?というのが素朴な疑問です。

なんていうんでしょう。iPhoneが登場したころ、様々なアナログ・オブジェクトがモデリングされてアプリにされました。そこではピンチやスワイプといった、タッチパネルならではの操作方法と共にそのデバイスの特徴が示されていたと思います。スマートフォンに限らずパソコンのOSでも、例えばボタンはあの立体的な描写だから指で押したくなるわけで(といっても従来のパソコンではマウスポインタを当ててクリックするだけなんですが)、それが急に平坦になるとどうして良いか分からなくなってしまうのです。

とはいえ、iPhone登場前後に、ある種のサイトがこぞってボタンの表現を立体的でガラス光沢のある描写に変えた時、それにも抵抗感を覚えたことも事実です。従前の描写ではなぜいけないのか、その理由が全く見えなかったからです。どうも最近のこの平坦な描写への方向転換は、UIにおける描写のリアルさ、リッチさが本来意図していなかった方向に加熱してしまったことに対する反省に基づいているということのようです。

例えば、本がめくれるような描写は、紙の本を読んできた人でないとピンと来ません。リアルなマイクの図柄も、あのようなマイクを見たことが無いとこれがマイクだと理解できないかもしれません。そうなると、知っている人にとっては「説明しなくても扱い方が理解できる」というメリットがあっても、知らない人にとってはそういうメリットは享受できないことになります。芸人のモノマネが真似ている対象を知らないと面白くないように、パロディが元ネタを知らないと面白くないように、模倣というのは原典(オリジナル)を知らない人にとっては模倣の意味が無いものです。

リアルさ、リッチさとは少し異なりますが、パソコン向けの多くのアプリケーションが「保存」という操作をさせるためのアイコンの図柄にフロッピーディスクを採用しています。しかし、そもそも最近のパソコンにはフロッピーディスク装置が付いていることがほとんど無く、フロッピーなんて知らない人たちがいてもおかしくありません。そうなると、フロッピーディスクのアイコンが何をするものか想像できない人も出てくる可能性があります。

現在進行している方向性は、よく標識に喩えられています。標識は道路に限りませんが、日本の道路標識は非常にシンプルで分かりやすく、良く考えてデザインされていると思います。もし道路標識がリアルでリッチな描写を採用していたら、立ち止まって眺めるにはいいかもしれませんが、車を運転しているときに一瞬で判断しづらい(つまり目的を達成しにくい)のではないかと想像できます。

実は、iOS 7からiPhoneを使い始めたという人からは、このデザインに対して別に違和感はないという意見を伺っているので、そういうものだと思えば済む問題なのかもしれません。となると、今は過渡期なので全てのフラットデザインが使い易いわけではないとしても、流れとしてはシンプルな方向に向かっていくと思うので、やはり慣れていくしかないのではないか、と私の中では結論付けております。


10年後のワークスタイルを考える

昨日JSDGの東京ミニ研修会が開催され、参加してきました。今回は久しぶりに私が企画を担当させていただきまして、「これからの働き方を考える」というタイトルでグループディスカッションを行いました。

研修会の数日前に申込者のリストを見て、私は最年少は免れたもののほぼ最年少に近く、果たして目上の方ばかりを相手にこんな話をしていいのかと正直思いました。グループ分けも最初は単純に分ければ良いかなと思っていましたが、他の幹事の方からどういうグループ分けにしますかと問われて、せっかくだから世代別にしましょうということになり、事前にザックリとグループ分けしてもらいました。(グループ番号が記載された名札を用意してくださったので助かりました。その段取りに感謝。)

本編の構成は私がテーマについて話をして続いてそのテーマでディスカッションするという形で、それを2つのテーマで行いました。前半のテーマは過去から現在のワークスタイルを棚卸する狙いで、私自身のワークスタイルの話と職務特性モデルの話をしました。これは一昨年金沢で「雇われないシスアド」というタイトルでICの事をプレゼンした時の題材を借りてきて、職務特性モデルに照らして今の自分の仕事はどんな点で満足しているかあるいは不満かということをシェアしました。この日参加された方々は全体的に満足度が高かったのが印象的でしたが、グループによって(つまり世代によって)指標の捉え方が異なっていて興味深かったです。

後半のテーマは「ワークシフト」という書籍(丁度著者の方が来日しているそうです!)を紹介し、10年後の未来のワークスタイルについて議論していただきました。

10年後ってなかなか想像しにくいですが、それほど遠くない未来だと思いませんか。ただ、この話題は正解も無ければ結論を出さなければいけないようなものでなく、著者もあとがきで書いているように、みんなでこういったことを議論することが大事なんだと思います。

限られたリソースで最大の効果をもたらすトリアージ

もう随分前になりますが、このブログの中で「デスマーチ」そして「パーフェクトソフトウェア」という2つの著作をご紹介したことがあります。両者に共通するポイントはリソースは有限であるため全てのバグを取り除くことができないという点と、その有限のリソースの中でバグをどのように分類し優先順位を付けて対応するかという点であろうと思います。いずれもソフトウェア開発に関する著作ですので「バグ」が対象にはなっているのですが、もっと広くプロジェクトマネジメントという観点に引き上げてみると、バグだけではなくバグ対応を含めたToDoの捌き方のアドバイスということになります。

前者の「デスマーチ」ではトリアージという戦争時における負傷者救護の優先順位づけのアイデア(これは今の災害時の救急医療現場でも活用されているようです!)を紹介していますが、後者の「パーフェクトソフトウェア」ではトリアージを実践するための具体的なバグの分類方法を提案しています。当時のブログ記事の中でも私なりにアレンジした分類方法をご紹介しましたが、今回はより進んだ分類方法をご紹介します。

システム開発では、開発中のシステムに対する仕様の変更や追加の要求が出されることが良くあります。要求を出す方としては当然のことながらすべてに対応してもらいたいと思うものですが、要求を受ける方としても当然のことながらプロジェクトとして実施している場合は納期も予算もありますので(これがリソースが有限であるということの意味ですが)出された要求の全てに応えることができないという状況に陥ることがあります。

そんな時、要求を一覧化して対応するかしないかを選別しても良いのですが、もっと明確な基準があると判断にも迷わないですし、なされた判断も客観的で納得感が出てくると思いませんか。例えば、次のような分類を考えてみましょう。

レベル0:そもそも技術的に不可能であり、対応できない要求
レベル1:対応できなければリリース延期またはプロジェクトを中止する要求
レベル2:リリース時に無くても良いが、対応しないと業務に支障のある要求
レベル3:可能なら対応したいが、対応しなくても止むを得ない要求

これらの分類をするだけでも客観的な評価となり得ますが、次のような設問フローを作るとより客観的で論理的な判断を下すことが可能になり説得力が増します。

トリアージの判定フロー

(1) 要求が技術的に不可能であるか。
[Yes⇒レベル0/No⇒(2)へ]
(2) 対応されなければリリース延期するか。
[Yes⇒レベル1/No⇒(3)へ]
(3) 対応されなければ業務に支障があるか。
[Yes⇒レベル2/No⇒レベル3]

判断をするときには設問に答えていくだけで客観的な優先付けを行うことができ、レベル0は除外して優先度の高いものから残されたリソースの範囲で対応できるものを決定していくことになります。これも救急医療現場で使われるABCDEアプローチのようなもので、判断を急ぐときにはシンプルで強力なツールとなります。分類の数が多くなっても設問を増やすだけで良く、状況に応じてアレンジもしやすいです。


東京都福祉保健局によるトリアージの説明

データベースの索引がイケてない話

以前、とある業務システムで検索スピードが要件を満たさずにリリースが延期されたという話を耳にしたことがあります。それを聞いた時、かつて少し関わっていた現場で、検索するとCPU負荷が100%に張り付くシステムや、ちゃんと動いていたのにある日を境に検索がタイムアウトするようになったシステムの存在を思い出しました。

この手の話はデータベースの索引が適切でないことに原因があることが多いのですが、データベース設計の教科書でも索引は基本的な単元であるにもかかわらずわりと良く聞く話でもあったりします。プログラムはゴリゴリ書けるけど、DB設計をきちんと学んだことが無い人が作っているという可能性もあるのですが、もしかしたらある程度きちんと機能する索引を付けるにはそれなりに経験を積んでセンスを磨く必要があるということなのかもしれません。

索引は検索キーやソートキーに付与するというのが基本ですが、複数カラムを指定して検索する場合にその索引が使われなければ、別途使われるような索引を付与するといったことをします。ただ、あまり索引を付け過ぎると更新処理のパフォーマンスが落ちるので、検索スピードが欲しい場合はマスタとは別に検索用のテーブルを用意することもよくあります。最初は普通に結合して選択していたものが、段々パフォーマンスが落ちてきたために途中で検索用テーブルを追加するといったことは別におかしいことではありません。

適切な索引が無ければどんなにSQLを効率的に記述してもパフォーマンスは出ませんし、また、基本的な索引は理論だけで行けるとしても、RDBMSの実行計画は実際にテーブルに格納されているデータの件数だけでなく内容によっても変わってきます。なので、もし絶対に止めてはいけないようなシステムの場合は、テストの段階で本番さながらのテストデータを使って本番さながらの件数を格納した上で動作を確認しチューニングする必要があります。

チューニングの作業は私は結構楽しいと思っていますけれど(例えばチューニングして検索スピードが10分の1になったら楽しくないですか?)、面倒くさいと感じる人はなるべくやらずに済ませたいと思ってしまうのでしょうか。


知らない本に出会えるビブリオバトル

去る15日にJSDGの東京ミニ研修会が開催され、参加してきました。今回の企画は事例発表でもワークショップでもなく、JSDG初の「ビブリオバトル」。ビブリオバトルというのは各自自分の好きな本についてプレゼンテーションを行い、どの本が一番読みたくなったかという観点の投票によりチャンピオンを決定するというものです。私もビブリオバトルという名前は聞いたことがあった程度でイメージがつかず今回は発表は敬遠したのですが、参加者の皆さんの発表がとても面白く、次回は私も発表してみたいと思いました。

今回参加者13名に対して発表者9名で、当然IT業界で働く方ばかりなのですが、持参された本は意外と文学などITとは関係のないテーマの本ばかりでした。発表者は5分(タイマーで管理されてました!)発表したあと簡単な質疑応答を行い、途中休憩をはさみながら9名が順次発表していきました。そして最後に投票と集計を行い、優勝者には賞状が贈られました。

単に本の紹介をしたのでは面白くなく、いかに読みたいと思わせるかを考えるところが面白いと思いました。中には本の内容ではなく本の装丁についてプレゼンテーションした方もおり、読みたいではなく持ちたいと思わせる本を紹介するという発想もありなのだなと、なにもルールに縛られることなく自分の好きな観点でアピールして良いのだなという点が面白いと思いました。

また、小説などはネタバレするかしないかギリギリのところの判断が問われ、ネタバレしてしまえば読まなくてもいいやって思うし、あまり披瀝しないと魅力が伝わらなかったりするので、その辺のさじ加減は難しいですね。でもそれぞれの発表者が熱い思いを語るのを聴くにつけ、本の世界にぐいっと引き込まれていく体験も得難いものです。


ドキュメントの色使いと心配り

いつからドキュメントをフルカラーで印刷するようになったのでしょうか。このことについて最近ふと気になっています。というのも、カラーで印刷しなければ情報が伝わらないドキュメントってイケてないよなぁと感じるようになったからです。それは何も色覚異常の方に対する配慮とかそういった論点では必ずしもなく、ドキュメントをカラー化することによって何か自分自身が手を抜いているのではないかという類の疑問です。

もっとも私が社会に出たばかりの頃は、ドキュメントをカラーで印刷するということはほとんどなく、オフィスにもレーザーカラープリンタはまず置いてありませんでした。良くてインクジェットのカラープリンタが置いてある程度でしたが、それでもペコッペコッと1ページを何分もかけて印刷するような始末で、余程営業用途で得意先に渡す資料を厳選してでないと間に合わないような状態でした。

それが数年後あるクライアント先で、私の在任中にレーザーカラープリンタが導入され、20~30代の若い社員たちが多い職場だったせいもあるかも知れませんが、こぞってドキュメントで豊富に色を使ってはカラー印刷を行っていました。しかし、ご存じの方も多いと思いますが、カラー印刷はモノクロ印刷と比べると単価が高いのです。たちまちその会社から、カラー印刷は営業用途に限るように通達がなされました。当時は納得がいかない思いもありましたが、企業としては当然の判断ですよね。

話を戻して、カラーで印刷しなければ情報が伝わらないドキュメントの欠点は何かということについて考えてみると、印刷する人にカラー印刷を強いるという点。そうでなくても、モノクロ印刷をすると情報が劣化するという点。そして、それを補おうとするとドキュメントを修正しなければならないという点です。印刷したものを配布する場合にはじぶんでカラー印刷してから渡せばよいのであまり問題になりませんが、電子データを配布する場合は、それが印刷する可能性があるのであれば考慮しなければならないポイントだと思います。

何故私がこんなことに疑問を持ち始めたか。それは、モノクロ印刷したドキュメントを提示されて、「ここは本当は色分けしてあるのだが」といった説明を何度となく受けてきたからです。提示される立場としては、色が情報を持つならカラー印刷して提示すべきだし、カラープリンタが無い、あるいはカラー印刷を制限されているのなら色に意味を持たせないような資料の作り方をすべきだと思ったからです。私は先に述べた理由で後者の方が好感を抱きます。

今後ドキュメントを作成する時はそういった点を意識しようと思っていますが、もちろん全てのドキュメントがそうであるべきだというつもりはなく、用途や目的に応じて使い分けて良いのです。作成するドキュメントがどういう使われ方をするか、誰の手に渡るのか、いつまで使われるのかといった点も、ドキュメントの色使いを決める上での判断ポイントになるのではないでしょうか。


かんばんボード(タスクかんばん)のレーン設計

以前、かんばんボードを導入する肝はレーンの設計にあるということを述べたのですが、では具体的にどのようにレーンを設計すべきかというテーマについて考えてみたいと思います。

レーンとレイヤーのイメージ

レーンとレイヤーのイメージ

その前に、レーンをさらに横のレイヤーに区切って使うかどうか迷うと思いますが、個人で導入する場合はともかく、チームで導入する場合にはレイヤーに区切った方が良いです。また、区切るとしてもメンバー毎のレイヤーとするか案件毎のレイヤーとするか迷うのですが、案件毎にした場合、時間の経過による案件の増減に合わせてレイヤーを増減させなければならず、それはそれで運用に手間がかかります。メンバー毎のレイヤーにしておけば案件の増減に比べればメンバーの増減は少ないと思いますので、比較的手間はかかりません。それとメンバー毎としておけば、メンバーの生産性と抱えている作業量についてもある程度可視化できるので、チーム運営はしやすくなります。

そうはいってもメンバー毎のレイヤーにすると、案件ごとの状況が見えなくなってくることがあります。(だから案件毎のレイヤーにしたいという衝動に駆られるのですが。)私はタスクかんばんは目の前の仕事を片付けるためにチーム運営を円滑化するツールだと理解しているので、案件毎の進捗管理などはWBS(ガントチャート)のような全体を俯瞰できるツールを使って補う方が良いと考えています。

オーソドックスなレーン設計はToDo、Doing、Doneです。ToDoはやるべきことで未着手のタスク、Doingは現在仕掛中のタスク、Doneは仕上がったタスクです。タスクを付箋に書き出し、ステータスが変化するごとに貼るレーンを変えていきます。あるいはチーム内で完結する現場であればこれだけで事足りてしまうかもしれません。週次でマイルストーンを決めてToDoに落とし込み、週末にToDoが全て捌けてDoneに移動していればよいのです。週末(または週の頭)にはチームでミーティングを行い、翌週(または今週)やるべきタスクを棚卸してToDoに貼り付けていきます。

しかし、業種業態や活動の目的によってチーム外の関係者の多少が違うので一括りには出来ません。チーム内だけで完結しない場合、先ほどの3つのレーンだけでは管理できない局面があります。それは、チーム外の関係先に依頼するような場合、こちらの都合ですぐに返事があるわけではありません。つまり相手のタスクが終わるのを待っている状態、自分ではなく相手がボールを持っているということを表現する必要があります。そのタスクを例えばWaitingのように表します。

また、逆にチーム外の関係者から依頼を受けるパターンや、自分が完遂した作業を確認してもらったり承認してもらったりするパターンがあると思います。既に自分の手を離れていて、最後の確認や承認を待っているという状態です。そのタスクを例えばFinishingのように表します。ここまではメンバー毎のタスクです。


呟いた夢を現実にするワクワク会議

今日は有志で集まってワクワク会議を開催しました。正式には特に名前が決まっているわけではないのですが、参加者の一人がこのような名前で呼んでいたので私もそう呼んでいます。何かそのような会議の手法があるわけでもなく、ただ同じ目的を持ったメンバー同士で適当に進行しています。普段のビジネス現場での会議ばかりだと疲れてしまうのでたまにはこのような緩い会議もいいですね。

私は昨年からTOCfEのコミュニティに参加させていただいていますが、そこからスピンアウトしてTOCの思考プロセス/思考ツールをもっと手軽に便利に使えるようにするにはどうしたら良いか、といったことを議論しています。TOCの思考プロセス/思考ツールはとても便利で強力なツールではあるのですが、作法に則って使う必要があるために使いこなすには習熟が必要で、それが「使ってみよう」と思ってもらうのに障壁になっている側面があります。ですので、TOCについて習熟していなくても、もっと言えばTOCなんて知らなくても表現(コミュニケーションの手段)としての正しい論理を手に入れることができないか、というのが主な研究テーマとなっています。

もともとこの集まりは、メンバーの一人がFacebookでボソッと呟いたのが始まりで、それを拾い上げて形にしようという動きがありました。それがあまりにも面白そうな企画だったので私も思わず手を挙げてしまいました。集まりは今日が2回目で、私は前回は都合がつかずに参加できなかったのですが、前回行ったブレーンストーミングのふりかえりから始めて、更に議論を深め、最後は大まかではありますが今後の現実的な方向付けを行って散会しました。

私自身、こういった仕事とは直接関わりのない人が集まって何か一つの事を生み出そうとする活動が初めての経験なので、これからどうなっていくのかがとても楽しみです。やはり集まりの名前はワクワク会議でいいのかもしれません。