設計者の発言

業務システム開発とデータモデリングに関する語り

システム設計に関するアカデミックな学びの意義

 システム開発会社で技術者向けにDB設計について教えることがある。関数従属性に関する演習をやってもらうとわかるのだが、中堅技術者でもほとんど手が動かないことがある。さまざまな案件で設計経験を重ねているはずなのに、そういった基礎的な学びに苦労してしまうのはなぜなのだろう。

 何度か経験するうちにわかったのだが、彼らにとってシステム設計に関する知見は、限られた数の具体的なシステム仕様と強く結びついている。先輩達がまとめたそれらの仕様を見よう見まねでコピペすれば、駆け出しでもそれなりの結果を出せる。いつしか脊髄反射のような反応パターンを身につけ、良くも悪くも「門前の小僧習わぬ経を読む」ようになる。

 そういったやり方を続ける限り、関数従属性のようなややこしい概念を理解する必要はない。ただし、経験した範囲をはずれると勘が働かないし応用が利かない。年齢を重ねるほどに、新しい案件に対して「その分野、やったことがないので無理です」と拒否する傾向も強くなる。アカデミックな訓練を経ずに「現場叩き上げ」でスキルを身につけることの限界がそこにはある。

 これは、同じ程度の経験年数のシステム開発技術者を何人か集めただけでも、スキル構成に想像以上のバリエーションがあることを表している。現場で活躍する技術者は大別すると「業種特化型」と「多業種対応型」に分かれる。業種特化型としては「金融系専門」や「自治体系専門」等が典型的で、多業種対応型では流通系のさまざまな業種をこなすスタイルが典型的だ。同じような課題をこなしていても、両者のスキル構成はまるで違う。関数従属性のような知識は多業種対応型で活用される。

 「業種特化型」にはある種の危うさがつきまとう。システム開発で稼いでいる職場に多業種対応型の人材が入社した途端、業種特化型の給料は頭打ちになる。なぜなら、特定分野にしか通じていなければ、出番が少ないだけでなく、得意分野でのパフォーマンスも伸び悩むからだ。多くのユーザ企業は外部の技術者に、自分たちでは思いもよらなかったアイデアや、他業種でのプラクティスの転用を期待している。とくにDXを指向するプロジェクトにおいて、そこに貢献できるかどうかは決定的に重要だ。もちろん特定分野に集中すればこその強味もあるが、良いことばかりではない。

 では、危うさのある業種特化型の技術者は、どういった機序で生まれてくるのだろう。他でもない。かれらは「組織の都合」で生み出される。

 多くの開発企業は業種特化型よりも多業種対応型を優遇すると書いたが、だからといって組織は従業員全員が多業種対応型になるよう育成に努めるわけではない。どんな企業でも、人材育成より四半期の売上確保が優先される。似たような案件の受注が安定して続けば、組織はそれらを無難に完了させるために、同種の仕事を担ったことのある技術者を充てようとするだろう。結果的に、一定数の従業員は業種特化型として成熟してしまう。運が悪いともいえるが、必要以上に適応的、あるいはお人好しであり過ぎた結果ともいえる。

 他に、売上の主要部分を特定分野向けのサービスが占めているような開発企業、あるいはユーザ企業の情シス部門でも、同じようなことが起こる。そういったサービスは安定的な収益になっているゆえに、企業は待遇や福利厚生で技術者たちを引き留めようとする。しかしこれは技術者にとって、「安定待遇つきの特定分野へのロックイン」をどう評価するかという悩ましい問題だ。自分の嗜好や適性や家庭状況、あるいは職業的相場観に沿って各人が納得できる答を得るしかない。

 繰り返すが、限定された分野だけ担うのであれば、関数従属性のようなアカデミックな素養は求められない。それまでに蓄積された仕様(DB設計やコード)を使いまわすことで日々の仕事には対応できるからだ。しかし、もし読者が多業種対応型になりたいのであれば、あるいは河岸を替えることを考えているのであれば、アカデミックな素養を身につけることには意義がある。

 具体的にどんな意義なのか。たとえば、DB設計の中心課題は「業務要件からデータ項目間の関数従属性のネットワークを識別する過程」である。それを理解することで、未経験の業務分野に関わることへの恐れは消える。すべてを理解する必要はなく、関数従属性の探索に集中すればいい。結果的に、複雑な業務要件を効率的に把握し、データモデルを含むシステム要件として手早く形式化できるようになる。業種・業務横断の俯瞰的視点を持てるということでもあって、多業種対応型の技術者がやっていることはそれなのだ。

 システム設計に関するアカデミックな素養は、立場によっては必要ないかもしれない。しかしIT技術者としての駆け出しの頃に、一度は学んでみてほしい。それらは学生時代に学んでも味気ないものだろうが、ある程度の開発経験があれば、日々の仕事に役立つ知識として興味深く学べるものだ(簿記も同様)。若い頃に身につけたそれらの素養は、IT技術者としての職業的選択肢を豊かにしてくれるだろう。

 そして、それらを習得できたなら、未経験な業務分野の仕事にも積極的に関わってほしい。「その分野、やったことがないので無理です」ではなく、「その分野、やったことがないのでやらせてください」とか「馴染みの分野にロックインされたくないので、別の分野をやらせてください」と上司に談判してみよう。