業務知識と計算機科学の知識

この記事の企業側の発言で「コンピュータ・サイエンスの学科を増やさないと問題は解決しない」というのがあったが、これは嘘だ。SI業界に限っていうと、仕事で必要になるコンピュータ・サイエンスの知識量は大したものではない。本当に必要なのはいわゆる「業務知識」と、それを通常どのようにコンピュータで実現するかという知識だ。

そもそもプログラミングとは目的ではなく手段だ。だから何かシステムを開発する場合、手段(プログラミング)だけでなく、目的にも詳しくなくてはならない。SI業界だと分かりにくいのであれば、たとえばCG作成ツールの開発会社に、グラフィックやモデリング、ベクトル計算にはまったく知識のない天才プログラマーが入ったとしたらどうか? あるいは今まで一回もゲームをやったことがないスーパークリエイターがゲームソフト開発会社に入ったとしたら? 彼らは手段であるプログラミングには詳しいが、目的であるグラフィックやゲームには素人なのだ。優秀なので飲み込みも早いだろうが、それでも長期間それらについて学ばなければならないだろう。

全体的に賛成だけど一部異論を。「計算機科学=プログラミング」じゃない。計算機科学はとても広い知識体系でプログラミングはその一部分。たとえば、基本情報処理技術者試験の試験範囲をみていただければすぐに理解していただける。また、大阪大学:情報科学科のカリキュラムを見ても、どちらかというと数学っぽい。まあ、この数学っぽいところが経団連に批判されているのだけど。

大学の多くの情報系学科は計算機科学を教えており、カリキュラムは1997年に情報処理学会がまとめたJ97に準じている。

最近の産業界の不満(上流工程を教えていない!計算機科学偏重過ぎる!)に対する世界の情報系学会のカリキュラム変項の動きは文部科学省のこの資料がよくまとめられている。というか私もこのエントリーを書くために検索して初めて知った。

従来はカリキュラムの対象は計算機科学(Conputer Science)という1領域であったが、社会の変化と計算機の爆発的な普及により、ACMIEEEが定めた大学カリキュラム案CC2005では、CS(Computer Science)、IS(Information System)、SE(Software Engineering)、CE(Computer Engineering)、IT(Information Technology)の5つの領域に分割されているらしい。

それで、CC2005を日本向けにアレンジしたのがJ07というものらしい。

情報処理学会の情報専門学科カリキュラム標準J07では、米国における最新の情報処理標準カリキュラムであるCC2005等も参考にしながら、?当該分野のカリキュラムの国際的な整合性に十分配慮する、?カリキュラムの端から端までを縛るのではなく、最低限どのような知識をどの深さまで習得することを目標とすべきかを定める、などの原則をふまえ、具体的な科目配置・履修学年等は一例を示すに留めることなどを方針としてカリキュラム標準の策定が進められている。

上記ページで説明されている5領域について転載。

  • CS(Computer Science、コンピュータ科学): CSは、情報の表現・蓄積・伝達・変換に関するアルゴリズム的プロセスを、理論・分析・設計・実現・評価の各面にわたって系統的に扱う領域である。この領域の根底にある問題意識は、「何が効率よく自動化できるか」である。
  • IS(Information Systems、情報システム): ISは、社会や組織の問題点を見つけ出し、組織の変革を行い、費用対便益の高い情報システムの開発・導入を創造的・効果的に実現するために必要となる、理論・技術・技量を幅広く扱う領域である。この領域の根底にある問題意識は、「いかにして最大の費用対便益をもたらすか」である。
  • SE(Software Engineering、ソフトウェアエンジニアリング): SEは、CSおよびソフトウェア工学を基にし、「体系化された方法論および計量技法を用いて、ソフトウェアシステムを開発、運用および保守すること」を目的とする領域である。
  • CE(Computer Engineering、コンピュータエンジニアリング): CEは、情報のプロセスを応用各面にわたって系統的に扱い、ハードウェアでの実現を目指す領域である。
  • IT(Information Technology、インフォメーションテクノロジ): ITは、情報システムから、アプリケーション技術、そしてシステム基盤に至るまでの広い範囲にわたって、組織や個人の情報技術に関する広範なニーズに答えることを目指す領域である。

この5つの領域においてそれぞれ学ぶべきことがJ07で提案されており、カリキュラム案も提案されている。つまり、「うちの学科はCSの人材を出すためのカリキュラムをとっています」という言い方をするように作られている。

情報処理学会のワーキンググループの報告がここで見れる

ざっとみるかぎり、日本の大学がこれらに対応したとしても企業での「業務知識」の教育活動は不可欠と思われる。しかしながら、

この記事の企業側の発言で「コンピュータ・サイエンスの学科を増やさないと問題は解決しない」というのがあったが、これは嘘だ。SI業界に限っていうと、仕事で必要になるコンピュータ・サイエンスの知識量は大したものではない。本当に必要なのはいわゆる「業務知識」と、それを通常どのようにコンピュータで実現するかという知識だ。
aikeの日記:スーパークリエイターがSI業界で即戦力になれない理由より)

にある、「それを通常どのようにコンピュータで実現するかという知識」を持った学生を輩出できることが期待できる。

大事なのはノウハウじゃなくて方法論なのね。ノウハウだけで生きている人は、その世界がなくなったときにつぶしが利かなくなる。ほら、いわゆるバカにされるCOBOLERって、他の言語行ってもグローバル変数使いまくったり、配列の添字が1から始まったりするじゃん?必要なのはコンピューターシステムとしての方法論で、COBOLの言語仕様からは離れたところにあるはずなんだけど、言語に即した方法論しか学べてないのね。

SI 業界って、ミクロレベルの仕事をしているととてもつまらないと思うことって多いと思うんです。でも学生には今まで学んだことを是非発揮して欲しい。その為にはまず最初に配属された現場の仕事を俯瞰的な視線で見て欲しいし、それができるとすぐに戦力として認めてもらえるかもしれません。

世の中で専門学校卒よりも大学卒の方が基本的に優遇されるのは大学卒は「地頭力」があると期待されているから(平均的に大卒の方が多そうであると期待されているだけで、実際に持っているかどうかは個々人による。)情報系学科も今後生き残っていくため、社会に優秀な学生を輩出するためには、情報系学科卒業生は上記5領域のどれかにおいて「地頭力があると期待できる」学生を送りだすことだと思う。

業務知識は分野や業務限定、かつ腐りやすい(陳腐化しやすい)ので大学で業務知識を教えるなんて無理。大学の時間の流れは基本4〜8年で一単位。なんせ、カリキュラムを変えてその成果を評価するのに学生をそのカリキュラムで卒業させてみないといけないので。

なので、基礎を身につけた「地頭力」がありそうな学生の輩出を目指していこうというのが基本方針だと思う。ただし、現在の問題としては「基礎」がCSに偏り過ぎじゃない?というのがあるので、せっかく情報処理学会がまとめてくれたんだからJ07の方向へ舵を切っていくべき。

これから大学の教員を目指す方々は、J07でそれを教えられる人がすくなそうなCS以外の分野で実績をつくっておくのが良いと思う。同様に、私のように既に大学に在籍しているペーペーは、一生懸命CS以外の分野の知識を増やした方が将来につながると思う。

なんか、最初の方の話とはずれたけど。新しい知識を得られたので良し。