fc2ブログ

ネタつつき5-開発工程の分断化問題。最高の喜劇。

ウォーターフォールについて書いていたら、昨今の開発に関する危機的状況が脳裏をよぎったので書きます。私はフリーエンジニアの例に漏れず「何でも屋」です。一人で仕様書段階から運用までシステム構築する事も頻繁にあります。フリーエンジニアとは孤独な職業で何時もアウェー状態です。私は一人開発チーム状態なので、向こう側にとっては常に「部外者」なのです。そういった事から心体ともに疲れ果て2年ほど本業をお休みして、ちょっとしたバイト(データ移行、VBをVB.NETへ変換、アルバイトなど)をして、情報処理技術の研究で心を癒しつつ生活していました。
昨今はアジャイルソフトウェア開発の話しを聞きますが、私が関わったプロジェクトでも【体面だけアジャイル開発】状態でした。私の場合は、一人開発チーム状態なので、そんな事は関係なく、1仕事大体3~6ヶ月ぐらいで、長くて1年ぐらいで終わらせていたので、アジャイルは当たり前のことであり、内心冷ややかにその様子を見ていました。というのも、体面だけアジャイルなので、「無駄が多すぎる」状態だからです。ソフトウェア工学の記事でも少し書きましたが、プロジェクトに情報処理技術に関してド素人が居るのが問題の本質であり、不思議な事にこの業界は無知な方に比重を置いて開発を進めるので、ソフトウェア開発つプロセス以前の問題なのです。あまりこの業界に詳しくない読者の為に詳細を書きますと、プログラミングを教育がされていない新人に合わす場合が多いですし、要求仕様書や内部設計書も「素人が書いた素人用のもの」なのです。こんな状態で上手くいく筈がありません。見習いに料理を合わす料理人が居るでしょうか?素人用の設計図を書く建築家が居ますか?・・・
さらにその事態に追い討ちをかけるように、個々の技術者の知識が狭くなってきています。もちろん、それは技術者個人が悪いわけではなくちゃんと理由があります。それは、情報処理技術の進化が日進月歩だからです。その状態なのにも関わらず、技術者達は学習の時間が与えられていません。無知な人に合わし、その反動を技術者が受け、無知な人が一番利益を得る歪な一部業界構造になっています。その時一番困るのが「コミュニケーションが成り立たない」という事です。他の業界の人から見れば、冗談だとしか思えないでしょうがそれが現実なのです。まず、一番始めの開発プロセスで情報の素人であるお客様に「情報の素人」が対応しています。素人同士が話しをしてどうやってまともなものを作るのでしょうか?次に実装段階(ソフトウェアを作る段階)でも大きな問題があります。今度は「一番頼りの技術者同士が分かり合えない」のです。この状態で品質を求めるのは無謀だと言う事が分かっていただけると思います。
私は今年で30歳なのですが、私より上の世代には【本物の職人】がいっぱい居ました。それこそ、電子計算機の全てを解剖して組み立てる(ハッカーの語源)実力を有した技術者が普通に居たのです。ですから私は自分より年配の人に敬意を持っています。しかし、現在はゆとりと3K化が進み、技術者は職人とは呼べなくなってきました。それがあまり目に見えないのは開発ツールの進化がそれを覆い隠しているからです。そして、開発ツールに頼ってレトルト商品を作っているのが現状です。誤解が無いように先に言っておきますが、開発ツールの高度化は必要です。私自身も開発ツールを自作して作業を効率化しています。しかしながら、職人が自分の道具を知りつくしてものを作るのと、電子レンジでレトルトを暖めるのとでは天と地ぐらいの差があります。近い将来開発環境がユーザーフレンドリーになればそんなレトルト技術者は不要になるでしょう。厳しいようですがそれが現実です。私自身がコードジェネレータを研究していますのでそれが良く分かります。
さて、ここまで読んで「それならば他業種が高度な開発ツールを使えば問題なし」と思われた人も居るでしょう。しかし、情報処理技術はそんなに甘くありません。やはり知らない人が開発ツールを使うのと、職人が作るのとではその品質に差がありますし、全ての状況に対応できる開発ツールは実現不可能です。
話しが少しそれましたので戻します。技術者同士が通じないというのは具体的にどのような状況なのかといいますと、抽象的な説明では伝わらないと思いますので、私の実体験を基に説明します。私は常に独りで開発する状況ですので生きていくために必然的に、プログラミング・データベース・ネットワーク・セキュリティ・システム管理・・・などのほぼ全ての情報処理技術を学んでいます。つまり全方位テクニカルエンジニアなわけです(マネージメント系は苦手です)それで、プロジェクトに参加する際は、私は情報処理技術全般の知識を総動員して開発を進めます。しかし、どの工程でも困った事に話しが完全には通じないのです。私は全開発工程を多角的に考えて発言をするのですが、各工程の人は一部の知識しかありません。しかも自分さえ無難に仕事をこなせばいいと言う日本人体質で、全体としてのシステム品質など二の次なのがよくある現実なのです。この様にチームがバラバラな状態で一つの大きな製品を作るのでは品質なぞ期待できません。個人は自分の身の保身で精一杯なのでしょう。私にはその気持ちも理解できます。日本では一番立場が弱いものが責任を取らされがちだからです。誰もが不自由で品質に気を配る余裕がないという事です。
長くなりましたのでそろそろ纏めに入ります。私は敢えてこの状況に結論はだしません。私は職人肌ですので自分を常に鍛えておりますが、万人に何かを強いるのは嫌いですし、世間が品質の悪い情報システムを望むのならばそれはそれで仕方がありません。あらゆる物事は各々が判断するべきことであって、その行為が自然に結果を出すでしょう。また誤解されそうなので、最後に私がこの記事を書いたわけを書いておきます。私が書いた理由はこの状況が非常に面白い喜劇だからです。この業界に居る人はあまり笑えないかもしれませんが、客観的に居ればこれほど面白い喜劇はそう無いと思います。
スポンサーサイト



テーマ : その他
ジャンル : その他

コメントの投稿

非公開コメント

 開発ツールを自作で思い出しました。
 ソフトウェア職人気質や達人プログラマでは自分のツールを持てと言ってますね。
 自分のツールを選ぶ目や作る手を持つのは重要なことですよね。それとものぐさしたい心も。

あおいたんコメント有難う。
自分専用開発ツール作りは楽しいですよね♪
自分だけに最適化されているから作業効率も抜群。
さらに、バージョンアップも簡単ですし♪
会社は技術者を自宅勤務させたら、開発者の方も気兼ねなく秘密兵器を使えるから生産性が上がるのにぃとよく思います。
※一部の会社は実現しているそうな。
ただ、それをするとセキュリティの問題があるんですよねw
組織って難しいですね。

 それを合法化 (社則的な意味で) して開発効率とアイデアを引っ張り出したのがGoogleなんかでやってるマイプロジェクト規則ですよね。
 会社によって使っていい時間は違うものの、自由に業務外のことが出来るのはモチベーションの意味で大きいです。
 自宅では利用できないリソースを利用した上で自由に研究できる環境というのはとてもうらやましいことだと思います。
プロフィール

インドリ

Author:インドリ
みなさん、はじめまして、
コンニチハ。

ボクは、無限の夢(infinity dream)を持つネタ好きな虹色の鳥インドリ(in dre)です。
色々な情報処理技術を啄ばむから楽しみにしてね。

http://twitter.com/indori
は別人による嫌がらせ行為です。
私とは関係ないので注意して下さい。
次はなりすましブログなどをするかもしれませんが、ここ以外でブログをするつもりがないので、ここ以外にインドリのブログがあったとしても無視してください。


何度言っても分からない人がいるので、ここにコメント欄へ書き込むときの注意事項を書きます。


一、社会人としてのマナーをわきまえましょう。
一、妄想に基づく書き込みを止めてください。
一、暴言の類は書かないで下さい。
一、某誹謗中傷サイトの書き込みは彼らの妄想に基づく書き込みですから無視して、ここへ書き込まないで下さい。
一、コメント書く前に他のコメントよく読んでから行って下さい。
一、言いがかかり等の行為を禁止します。
一、その他常識的に考えて迷惑なコメントはしないで下さい。


以上のルールを守れない人のコメントは削除します。



利用上の注意
ここに紹介してある文章およびプログラムコードは正確であるように心がけておりますが、内容を保証するものではありません。当サイトの内容によって生じた損害については、一切の責任を負いませんので御了承ください。


執筆したCodeZineの記事


【VB.NETで仮想CPUを作ろう】

  1. VB.NETで仮想CPUを作ろう
  2. レジスタの実装
  3. 仮想CPUのGUI化
  4. テストドライバの改良
  5. CPUの基礎動作の実装
  6. MOV命令の実装
  7. ADD命令実装
  8. SUB命令実装
  9. INC命令&DEC命令の実装と命令長
  10. MLU命令の実装とModR/Mについて
  11. DIV命令の実装とイベント設計について
  12. 機械語駆動式 関数電卓を作ろう!
  13. 機械語駆動式 関数電卓を作ろう! 解答編(前半)
  14. 機械語駆動式 関数電卓を作ろう! 解答編(後半)


【仮想ネットワーク実装でTCP/IPを学ぼう】
  1. TCP/IPの基礎と勘所
  2. ネットワークアクセス層の勘所
  3. インターネット層の勘所
  4. トランスポート層の勘所
  5. アプリケーション層の勘所
  6. セキュリティの基礎と仮想ネットワークの仕様
  7. GDI+と独自プロトコルの定義



【並列化】
インテル Parallel Studioを使って並列化プログラミングを試してみた
並列プログラミングの効率的なデバッグを実現する「Parallel Inspector」


【TBBシリーズ】
  1. インテル スレッディング・ビルディング・ブロックの概要
  2. インテルTBBから学ぶループの並列化
  3. スレッドセーフとインテルTBBのコンテナ
  4. インテルTBBのスレッドクラス


【OpenMPシリーズ】
  1. OpenMPの基礎構文
  2. OpenMPの実行時ライブラリと並列ループ
  3. OpenMPのメモリモデルとfork- joinモデル

最近の記事
最近のコメント
月別アーカイブ
カテゴリ
Ada (9)
COBOL (5)
C (9)
C++ (11)
C# (370)
D (25)
Java (8)
Perl (1)
Ruby (14)
PHP (2)
Boo (2)
Cobra (2)
LISP (6)
F# (33)
HTML (0)
XHTML (0)
CSS (0)
XML (0)
XSLT (0)
Scala (4)
WPF (0)
WF (2)
WCF (0)
LINQ (4)
MONO (5)
Linux (0)
MySQL (0)
ブログ内検索
リンク
最近のトラックバック
RSSフィード
ブロとも申請フォーム

この人とブロともになる

QRコード
FC2カウンター