月別アーカイブ: 2021年3月

計算論的思考, 10年後 Computational Thinking, 10 Years Later

〔学習用翻訳〕

Jeannette Wing
2016年3月23日

原文:https://cacm.acm.org/blogs/blog-cacm/201241-computational-thinking-10-years-later/fulltext


「生きてるうちはないでしょう」

K-12でコンピュータ科学が教えられるのはいつになるかを問われたとき,そう答えていました。2009年,国立アカデミー主催の計算論的思考ワークショップの参加者の集まりに向けて講演していたときです。

いまは「私が間違っていました」と喜んで認めましょう。

私が「計算論的思考」という3頁ほどのViewpointコラム原稿をthe Communication to the ACM誌2006年3月号で書いてから10年になります。この機会に,私たちがどこまで来たかを振り返ってみたいと思います。

2005年を思い出してみましょう。ドットコムバブル崩壊後,コンピュータ科学への学部課程入学者が急激かつ一方的に減少し,終わりが見えませんでした。コンピュータ科学コミュニティは手に汗にぎり,キャンパスにおける学部組織生き残りに気をもんでいたのです。そんな多くの同僚と違って,私が見ていたのはコンピュータ科学のバラ色の未来でした。コンピューティングがあらゆるところに浸透すると見ていたのです。

私は計算論の概念と方法そして道具の活用によって,あらゆる学問分野と専門領域,セクターにおける大きなやり方が転換されると論じました。計算的な効果を利用できる能力を持っている人は,そうでない人よりも,大変有利です。なので,コンピュータ科学コミュニティにとって,コンピュータ科学者がどう考えるのかを将来世代に伝えていくとてもよい機会だと私には思えたのです。それで「コンピュテーショナル・シンキング(計算論的思考)」と相成ったわけです。

計算論的思考が,21世紀中盤の世界であらゆる人にとっての基礎スキルとなる,というビジョンにまで到達したことに私自身が驚きと歓喜を感じていることを認めざるを得ません。

科学的方法の第3の支柱

科学と工学の分野で,計算(computation)が,理論(theory)と実験(experimentation)とならぶ第3の科学的方法の支柱であると私は認識していました。なにしろコンピュータはすでに巨大で複雑な物理的自然システムのシミュレーションに用いられていましたし,遅かれ早かれ,科学者とエンジニアであればどんな分野においてもアルゴリズムとデータ型,そして状態機械といった計算論的抽象化のパワーを認識するようになるでしょうから。

今日では,膨大な量のデータの到来とともに,芸術や人文,社会科学を含むあらゆる分野の研究者が計算論的手段と道具を使って新たな知見を発見し続けています。

過去10年,世界中の100近いカレッジや大学に訪問し,大学学部段階における変革を目の当たりにしました。いまやコンピュータ科学専攻ではない学生にもコンピュータ科学コースが提供されています。そうしたコースはコンピュータプログラミングのコースではなく,むしろコンピュータ科学の核心に焦点を当てたものといえます。ハーバード大学に至っては,このコース(CS50)が大学内はもちろん,ライバル校イェール大学を含めて最も人気のあるコースの一つなのです。そしてコンピュータ科学への入学者は,まさにうなぎ登りです。

おそらく最も驚くべきかつ誇らしい結果は,K-12段階で起こったことでしょう。第一は,英国の草の根運動である「Computing At School」が,2014年9月にK-12学校での「Computing」必修化を教育省が指示することに繋がったことです。国家カリキュラムの法的ガイドラインには「質の高いコンピューティング教育によって児童生徒が世界を理解し変えていくための計算論的思考と創造力を身に付けさせる」とあります。

さらに,BBCは,Microsoftを始めとした企業とともに,BBC micro:bitの設計と配布を予算化しました。百万台ものプログラミング可能な小さなデバイスを英国すべての11-12歳(7年生)に一つずつ無償配布するのは今月(2016年3月)とされています。Microsoftリサーチはデバイスの設計とテストに貢献し,MSR Labs Touch DevelopチームはBBC micro:bitのためのプログラミング言語と環境と,指導用教材も提供しました。

第二は,code.orgという非営利組織が2013年にスタートしており,すべての人々がコンピュータ科学教育を受けられるようにするという使命に向けて専念していることです。Microsoftや他に何百もの企業や組織がパートナー,スポンサーとしてcode.orgの活動を支援しています。

第三は,K-12段階でコンピュータ科学を指導することへの関心の高まりが世界的であることです。オーストラリア,イスラエル,シンガポール,そして韓国での努力を私は聞いていますし,中国も近いうちに推進されるそうです。

すべての人々にコンピュータ科学を

私にとって最も喜ばしいのは,バラク・オバマ大統領の宣誓によって,米国の学校におけるコンピュータ科学教育に40億ドルもの資金が提供されることです。これは2016年1月30日に発表されたComputer Science for Allイニシアティブの一環としてです。このイニシアティブには,国立科学財団(NSF)からの1億2000万ドルも含まれており,9000人以上の先生たちをコンピュータ科学が教えられるようにしたり,計算論的思考をカリキュラムに盛り込めるように研修するため用いられます。このようなすべての生徒がコンピュータ科学を学ぶという取り組みは,コンピューティングスキルをもった労働人材の引き合いがあることが一因なのですが,単に情報技術分野だけでなくあらゆる分野においてそうであるということです。Microsoftでもこのことを見ることができます。私たちのエンタープライズ顧客も自動車業界,製造業界と医薬業界などすべての分野からコンピュータの専門知識が必要だとしてMicrosoftにやって来ているのです。

それでも実際的な課題や研究の機会は残っています。もっとも実際的な課題は,K-12の児童生徒にコンピュータ科学を教えられる先生が十分いないということです。とはいえ私は時間が経てば問題は解決するだろうと楽観しています。

また興味深い研究課題として,これについてコンピュータ科学者と認知・学習科学のコミュニティが協働した方がいいと思いますが,第一に,コンピュータ科学のどんな概念をいつどのように教えるべきかというものがあります。

数学にあてはめて考えてみましょう。私たちは5歳に数字を,12歳に代数を,18歳に微積分を教えています。何かしら数学における教える概念の進歩過程を見つけ出したわけです。そこでは,新しい概念を学ぶことは,先行概念の理解の上に成り立っており,そして進歩とは,個々の成長として子供たちの数学的素養の進歩を反映したものといえます。

では,コンピュータ科学の進歩とは何か?たとえば,再起(recursion)を教えるのはいつが最良なのでしょうか。子供達がハノイの塔パズル(最小n)を解くのを学び,歴史の授業では戦いに勝つ戦略として「分断と征服」を教えているのに,一般概念は高等学校で教えるのがよいのでしょうか。私たちは割り算の筆算を9歳児に4年生で教えていますが,決して「アルゴリズム」とは口にしないわけです。けれどもそこで教えられている割り算の筆算は明らかにアルゴリズムなのです。では,アルゴリズムという一般概念を4年生に教えることは早過ぎることなのでしょうか。さらに深堀りすれば,コンピューティングに関わる概念で,本質的かつ形式的にでも学習する必要のないものはあるのでしょうか。

第二は,コンピューティング技術を教室でどのように利用するのが最良かを理解する必要があるということです。教室からコンピュータを投げ出してしまうのは,コンピュータ科学の概念を教えるのに最良であるとはいえません。どうすれば技術を使って学習を推し進め,コンピュータ科学の概念を理解してもらうことを強化できるのでしょうか。技術をどのように用いれば,進歩と学習成果,時間経過後の定着を測定することができるのでしょうか。そして,学習ペースが異なり認知能力も異なる個々の学習者のために学習を個別化するためにどのように技術が使えるのでしょうか。

この10年,すべてのフィールドの研究や教育に計算論的思考を浸透させることに関して大きな進歩がありました。私たちはまだ道半ばではあるものの,幸いにして,計算論的思考を一般的なものにするというビジョンの具現化に向けて,産官学が足並みを揃えているのです。

Jeannette M. Wing氏はMicrosoftリサーチ部門の副社長(当時)。

計算論的思考 Computational Thinking

〔学習用翻訳〕コンピュテーショナル・シンキング

周以真 Jeannette M. Wing (Microsoft Research and Carnegie Mellon University)

原文:Jeannette M. Wing: Computational Thinking, Communications of the ACM, Vol.49, No.3, pp.33-35 (Mar. 2006)

正式翻訳版:中島秀之(公立はこだて未来大学)「計算論的思考」『情報処理』Vol.56, No.6, June 2015, pp.584-587


 

コンピュテーショナル・シンキング(計算論的思考)。
 それは,コンピュータ科学者だけでなく誰にでも例外なく応用できる態度と技能であり,是非とも学んで利用すべきものです。

 計算論的思考とは,コンピューティング・プロセスの能力と限界にもとづくもので,それが人間によるものか,機械によるものかは関係ありません。計算論的な方法とモデルは,私たちが単独で挑むには困難が伴う問題の解決やシステムの設計に勇気を与えてくれます。計算論的思考が対峙している機械知能の謎には:人類がコンピュータよりも優れているのは何か?そして,コンピュータが人類よりも優れているのは何か?といったものがありますが,これらが問うている最も根本的な問いとは:計算可能(computable)であるとは何か?ということなのです。今日,私たちにわかっているのはそうした問いに対する部分的な答えだけです。

 計算論的思考は,すべての人にとっての基本的な技能であって,コンピュータ科学者だけのものではありません。「読み,書き,そろばん(算術)」(3R’s)と合わせ,「計算論的思考」もあらゆる子どもの分析的能力の一つに加えるべきです。まさに印刷技術が3R’sの浸透を促したことに引き付けて言うなら,このビジョンにおいてコンピューティングとコンピュータが計算論的思考の浸透を促すのだと言えます。

 計算論的思考は,問題を解決し,システムを設計し,人間行動を理解することに,コンピュータ科学の基礎概念を利用します。計算論的思考が含んでいるのは,コンピュータ科学分野の幅広さを反映した思考ツール(mental tools)の集まりなのです。

 ある特定の問題を解決しようとするとき,私たちは:解決するのはどれくらい難しいだろう?とか,ベストな解決策は?とか問うでしょう。コンピュータ科学はしっかりとした理論的基盤で成り立っていて,それらの問いに正確に答えようとします。たとえば,解決策を実行しようとするコンピュータ装置,その装置の基本能力を使って問題の難しさを説明するには,装置の命令セットやリソース制約,操作環境についてまで考慮しなければならないのです。

 効率的な問題解決のため,私たちはさらに,近似解で十分なのか,乱数化を効果的に使えるのか,また偽陽性や偽陰性は許されるのか,などを考慮するかも知れません。計算論的思考は,簡略化,埋込み,変換,あるいはシミュレーションなどといった手段を使って,難しそうな問題を私たちが解き方を知っている問題に変換することなのです。

 計算論的思考は再帰的思考です。並列処理であり,コードをデータとして,データをコードとして解釈することです。次元解析の一般化における型検査のことであり,ヒトやモノに対して2つ以上の名前を付けてしまう,いわゆるエイリアシングの利便性と危険性を理解することでもあります。間接アドレッシングとプロシージャ呼び出しのコストとパワーの両方を認識することであり,プログラムを正確さと効率だけでなくその審美性とシステム設計の単純さ,洗練さで評価することなのです。

 計算論的思考は,巨大で複雑なタスクに取り組んだり巨大で複雑なシステムを設計するときに抽象化と分解を用います。つまり関心の分離です。問題の適切な表現を選んだり,問題を扱いやすくするため関連部分をモデル化することです。また,不変項を用いて,システムを簡潔かつ宣言的に記述することでもあります。巨大で複雑なシステムに対し,細部のあらゆることを知ることなしに私たちが変更や影響を与えることができるという確信をもつことなのです。複数のユーザーを想定して何かしらモジュール化することであり,将来的な利用を見越してプリフェッチとキャッシングをすることでもあります。

 計算論的思考は,冗長性や障害抑制,誤り訂正によって,最悪ケースのシナリオを防止したり,そこからの保護や回復について考えることです。交通渋滞(gridlock)をdeadlock(膠着停止)と,契約(contracts)をinterfaces(境界面)と呼ぶことでもあります。さらには,互いに連動してしまった会議の競合状態の回避を学ぶことでもあるのです。

 計算論的思考は,ヒューリスティックな推論を使って解を見つけ出すことです。不確定な状況においてプランニング,学習,スケジューリングをすることだといってよいでしょう。検索して,検索して,さらに検索を重ね,Webページのリストや,ゲームに勝つ方略,あるいは範例を見つけだすようなものです。計算論的思考は,膨大なデータを用いて計算を高速化することです。そこでは,時間と空間,処理能力と記憶容量とがトレードオフ関係にあるのです。

 次のような日常の例を考えてみることにしましょう:あなたの娘が朝学校へ行くとき,その日必要なものをバックパックに詰め込むこと;これがプリフェッチとキャッシングです。あなたの息子が手袋をなくしたとき,あなたに促されて来た道を辿り直すこと;これがバックトラッキングです。どの時点でスキーレンタルの利用をやめて自分用スキーを買うのか;これはオンラインアルゴリズムです。スーパーマーケットでどのレジ行列に並ぶのか;これはマルチサーバーシステムにおける性能モデリングです。なぜあなたの電話は停電中でも通ずるのか;これは障害からの分離であり,設計の冗長性です。完全自動公開チューリングテスト(CAPTCHA)は人間であることをどう立証するのか;これはコンピューティングエージェントの裏をかくため,AIにとって解決困難な問題を利用したものです。

 計算論的思考が人々の暮らしに根付いたと言えるのは,アルゴリズムや前提条件といった単語がすべての人の語彙の一つとなり,非決定性とガベージ・コレクションがコンピュータ科学者の用いている意味となり,ツリーといえば上下逆さに描かれるようになったときでしょう。

 私たちは他の研究領域で計算論的思考が影響を及ぼしているのを目の当たりにしてきました。たとえば,機械学習は統計学を変えました。統計的学習は,数年前には考えられなかったような規模のデータ量と分類次元を有する問題に適用されています。あらゆる組織の統計部門がコンピュータ科学者を採用しています。コンピュータ科学の学部・研究科は,すでに統計部門が存在しているか,あるいは新しい統計部門を設立することに取り組んでいます。

 コンピュータ科学者達の最近の関心が生物学に向いたのは,生物学者にとって計算論的思考が有益であると考えているからです。生物学に対するコンピュータ科学の貢献は,膨大な量のシーケンスデータからパターンを探し出す能力に留まりません。データ構造とアルゴリズム,私たちがいうところの計算論的抽象化と方法論を使ってタンパク質の構造を表現し,その機能を解明することが期待できるのです。計算論的生物学は生物学者の思考法を変えていってます。同様に,計算論的ゲーム理論は経済学者の思考を;ナノコンピューティングは化学者の思考を;量子コンピューティングは物理学者の思考を変えつつあるのです。

 こうした思考は,他分野の科学者だけでなく,すべての人々のスキルセットの一部となり得ます。ユビキタスコンピューティングが今日もたらしているものを,計算論的思考は明日もたらします。ユビキタスコンピューティングが今日の現実となった昨日の夢であったのですから,つまり,計算論的思考は明日の現実なのです。

コンピュータ科学者のように考えるとは,
コンピュータをプログラムできること以上に,複数の抽象的レベルで考えられることを意味します。

何であって,何でないのか

 コンピュータ科学では,計算に関して,何が計算できて,それをどう計算するのか,を研究しています。したがって,計算論的思考は次のような特徴を有しています:

〈概念化であって,プログラミングではない〉コンピュータ科学とはすなわちコンピュータプログラミング,ではありません。コンピュータ科学者のように考えることは,コンピュータをプログラムできること以上の意味を持ちます。それは複数の抽象的レベルで考えることを必要としているのです。

〈基礎的であって,暗唱的技能ではない〉基礎的技能とは,現代社会で活動するために人間なら誰もが知っているべきものです。一方,暗唱的とは,機械的なルーチンのことです。皮肉なことがあるとすれば,コンピュータが人間のように考えることを目指すAIグランドチャレンジ課題をコンピュータ科学が解決してしまうと,人間の思考は暗唱的なもの(機械的ルーチン)だと見なさざるを得なくなることです。

〈人間の思考法であって,コンピュータのそれではない〉計算論的思考は人間の問題解決法であり,人間がコンピュータのように考えることを目指すものではありません。コンピュータは鈍感で退屈であり,人間は賢くて創造性が豊かなのです。私たち人間がコンピュータを刺激的なものにするのです。コンピュータ機器を用いることで,コンピュータ時代より前には扱えなかった問題への取り組みや,私たちの想像力だけが機能性の制約だったシステムの構築にも,私たち自身の賢さを使うことができるようになります。

〈数学的思考と工学的思考が補い合い組み合わさる〉コンピュータ科学は,すべての科学がそうであるように,その形式的基礎が数学にあることから,本質的に数学的思考を内包しています。コンピュータ科学は,現実世界と相互作用するシステムを構築していることから,本質的に工学的思考を内包しています。コンピュータ機器がもっている制約は,コンピュータ科学者を数学的にだけでなく,計算論的に思考するよう仕向けます。自由自在に仮想世界を構築できるため,物理世界を超えたシステムの建設が可能なのです。

〈アイデアであって,モノではない〉私たちが生み出すソフトウェアやハードウェアといった成果物は,単に物理的にいろんな場所に存在して生活の中でいつでも触れられるというだけではありません。計算論的な概念として,私たちが問題にアプローチしたり解決したり,日常生活を管理したり,他人とコミュニケートしたり交流するために用いるものなのです。そして,

〈すべての人に,どこででも〉計算論的思考が,実際的なものとなるのは,人間の努力と一体化して,自明な考え方になったときでしょう。

 多くの人がコンピュータ科学とコンピュータプログラミングを同じとみなしています。一部の保護者はコンピュータ科学を専攻している子供達の就職機会が狭く限られていると見ています。多くの人はコンピュータ科学における基礎的研究は完了していて,工学的な課題だけが残されていると考えています。計算論的思考は,この分野におけるこうした社会通念を変えようと行動している私たちコンピュータ科学の教育者,研究者,実践者を導いてくれるグランドビジョンなのです。私たちにとって特に必要なのは,大学前段階の先生や保護者や生徒に向けて,2つのメッセージを送り届けることです:

〈理解し解決すべき知的な挑戦と魅力的な科学的問題が待っている〉問題の範囲と解決策の範囲を制限するのは私たち自身の好奇心と創造力だけだということです。そして,

〈コンピュータ科学を専門にした人は何にでも携われる〉英語や数学を専門にした人は多数の異なるキャリアを歩んでいます。コンピュータ科学も同じです。コンピュータ科学を専門にした人は,医学,法律,経営,政治,いかなるタイプの科学や工学,あるいは芸術のキャリアにさえ進むことができるのです。

 コンピュータ科学の教授は,「コンピュータ科学者のように考える方法」といった科目を大学の新入生向けに,コンピュータ科学専攻だけでなく他専攻の学生たちにも提供して教えるべきです。大学前段階の生徒にも計算論的な方法やモデルに触れさせるべきでしょう。コンピュータ科学への関心が低下していたり,コンピュータ科学への研究予算配分が減っていることを嘆くよりも,世間一般の関心をこの分野の知的冒険へと導くことにこそ力を割くべきです。そうやってコンピュータ科学のもつ楽しさや尊さ,その威力を広げていき,計算論的思考が当たり前のものになることを目指していきましょう。