Introduction
1. はじめに
1.1. 全体の概要
コンピューターが大好きな人と大嫌いな人がいるのはなぜでしょう。特定の種類のコンピューターの熱狂的なファンがいるかと思うと、腹を立ててデジタル機器を壊してしまう人もいるのはなぜでしょう。このことはコンピュータ科学とどんな関係があるのでしょう。そしてコンピュータ科学とは何でしょう。
このような質問は大歓迎です。簡単に言うと、コンピュータ科学は速くて使いやすくて信頼性があって安全で役に立つ、そして楽しいアプリケーションを設計して作るための道具と技術なのです。
コンピュータ科学はプログラミングと混同されがちです。「天文学が望遠鏡のことではないように、コンピュータ科学もプログラミングではない」という説明もあります(Mike Fellows)。プログラミングはコンピュータ科学者が偉大なアイデアを世の中に実現するための道具ですが、人々に喜んでもらえて役に立つソフトウェアを作るためにはプログラムの書き方を知っているだけでは十分ではありません。
たとえば、コンピュータは1秒間に10億回以上の命令を実行できるようになりましたが、使っているとまだ遅くて困ることがあります。人間は10分の1秒の遅れに気づくことができるので、作ったプログラムの反応がそれより遅いとイライラやストレスにつながります。喜んで使ってもらうためには1秒以内で処理をしないといけないのです!数百万件のデータを検索したり数百万個の画素を表示するときでも同じです。「もっと速いコンピュータを買ってください」と言ってしまったら、ユーザーはそのソフトを使うのをやめて、違う速いソフトに乗り換えてしまうでしょう!
ここでは技術で定評のある企業に投資しているFred Wilsonさんのアドバイスを紹介しましょう。
まず何よりも、私は機能よりも速さが重要と考えています。速さは最も重要なのです。開発したソフトが遅ければ誰も使ってくれないでしょう。この点は特に、パワーユーザーよりも一般的なユーザーにとって重要と考えています。パワーユーザーは改良が必要なサイトに親近感を持って見守ることがありますが、一般的なユーザーである私の妻や子供はサイトが遅ければ使いません。速度は機能より重要な要求なのです。
1.2. Beyond speed
コンピューター科学の重要なテーマのひとつは処理速度です。特に最新でないスマートフォン向けのソフトウェアを販売したり、処理時間で課金されるデータセンターで実行する場合には重要になるでしょう。ユーザーに速いデバイスに買い替えてほしいとは言えません。効率のよいソフトウェアを提供する必要があるのです。
簡単な計算ができる下の2つの電卓を試してみてください。両方と同じ機能を持っていますが、どちらが使いやすいでしょう。それはなぜですか?
(このサイトにはこのような画面で動かせる教材が含まれています。これらの電卓が動かない場合は、より新しいブラウザで試してみてください。このサイトの教材は多くの新しいブラウザで動くように作られています。特にGoogle Chromeはよい選択です)
上の2つ目の電卓は早く計算できませんし、使っていてイライラしてくるかもしれません。しかし、ボタンは押す前に拡大されるなど工夫されているように見えます。この工夫で使いやすくなっているでしょうか?「C」と「=」のボタンが近すぎて困ることはありませんでしたか?
このようなインターフェースの働きもコンピューター科学の主要なテーマです。画像やレイアウトのような見栄えも重要ですが、人々がどのように使うのかという哲学はさらに重要です。たとえば、「OK」と「キャンセル」のボタンの場所がたまに入れ替わってしまうことを考えてみてください。使う人はボタンを押す前に毎回注意して確認する必要があるでしょう。人々の考えや行動を元にしたいくつかの単純な原理を使うことで、多くの人に愛されるシステムを設計することが可能になるのです。
規模の拡大に対応できるソフトウェアの開発も重要なテーマです。あなたの作ったサイトを数千人が見ることを考えてみてください。はじめは順調ですが、ある日突然数百万人が見に来るのです。システムが遅くなってしまうと見に来た人は不満を感じて、翌日には誰も来なくなってしまうでしょう。みんな他のサイトに移ってしまうのです。もしあなたのサイトが規模の拡大に対応して大量のデータを処理できていたら、あなたの会社の価値は買収の話が来るくらい高くなることでしょう。
このような問題は機器を増やすことで対応することもできますが、費用もかかりますし無駄が大きい解決策です(無駄は費用だけではありません。効率の悪い処理を実行するために電力などの資源も使ってしまうのです)。モバイル機器では無駄なく効率を高めることはより重要です。効率の悪いプログラムはバッテリーを早く使ってしまいます。処理とメモリを効率よく使うことは、機器の大きさや重さ、発熱量などに影響するのです。
もしあなたのシステムが成功を続けていると、価値のあるユーザーのデータやパスワードなどをシステムから不正に盗みだそうとする人が現れるかもしれません。そのような攻撃に対して安全で、個人情報や取引情報などが守られているとユーザーに信頼してもらえるシステムはどうやったら設計できるでしょう。
これらの内容もコンピューター科学に含まれます。このサイトではコンピューター科学の考え方を紹介することで、みなさんにこの分野への興味を体験してもらうことができます。レベルは高校程度を想定しています。この分野の概要を理解することに加えて、専門家になるために必要なより深い学習の準備になるはずです。
私たちはコンピューター科学の内容を、世界中で使われているカリキュラムに合わせていくつかのトピックに整理しました。アルゴリズム、ヒューマンインターフェース、圧縮、暗号、グラフィックス、人工知能などです。実際にはこれらのトピックは互いに関連しています。
このサイトの内容は、暗記したりレポートに書き写したりするためのものではなく、あなたがトピックについてよく理解できるための機会を提供するものです。実際、すべてのトピックについて詳しく扱っているわけではありませんが、参考になるウェブサイトや本については詳しく紹介しています。このサイトの目的は、トピックを理解して活用するための背景を説明することなのです。
1.3. Programming
プログラミングについてはどうでしょう。このサイトの内容はプログラミングを行わずに読むことができますが、練習問題として紹介しています。最終的にはしかし、扱われている概念はすべて誰かが書くプログラムに反映されることになります。もしプログラミングを学んでみたい場合は、優れた教材がたくさん存在します。もちろん時間と練習は必要ですが、サイトの内容を学習しながら進める価値はあります。プログラミングを自習できる無料のオンラインのシステムやテキストはいくつも存在しています。プログラムを学ぶための方法は code.org にまとめられています。コンピューターの世界で有名な人のビデオも参考になるでしょう。以下は役に立つかもしれない他の情報源です。
- NCEA高校2年生向けワークブック はJavaとPython言語の教科書で、ニュージーランドの文部科学省にあたる高校卒業資格認定機関が作成しています。高校3年生向けの教科書も執筆が進められています。
- CodeAvengers は課題を通してJavaScriptのプログラミングを学べるオンラインシステムです。このシステムはニュージーランドのプログラミング達成標準(レベル1から3)に対応しています。
- Interactive Python では「Think Python: コンピュータ科学者のように考えてみよう」というPython言語の教科書が公開されていて、WebブラウザでPythonの練習問題を実行できます。オリジナルの書籍はオープンソースでいくつかのバージョンが公開されています。
- Codecademy はPythonとJavaScriptを含むプログラミング言語を学習できるオンラインシステムです。
- Coder Dojo は無料のプログラミング教室を行うNPOで子供向けの教室を定期的に開いています。
- TryPython はすぐに試せるPythonの入門解説でWebブラウザで実行できます。
- CodingBat は数百個の課題でプログラミングの学習がどこまで身についたかを確認できます。
- Greenfoot はJavaでオブジェクト指向を学習できるビジュアルで対話的なシステムです。「ワールド」の中に「アクター」を作り、ゲームやシミュレーションなどのグラフィックプログラムを作れます。
- Khan Academy には「コンピュータ科学」の章があります。多くはコンピュータ科学というよりプログラミングの話題です。
- Grok learning はプログラミングを学習するための新しいサイトです。
以下のプログラミング学習システムはより低学年の生徒向けか、マウス操作でプログラムを記述する形の教育ツールです。
- ScratchEd はマウス操作で2次元アニメーションを作成できるScratchのさまざまな教材を提供しています。Scratchは従来の言語と比べて機能が豊富です。Snap (BYOB) システムはScratchで作られておりさらに高度な機能を提供しています。
- Computer Science Concepts in Scratch はScratchのプログラミング書籍です。
- Alice は3次元アニメーションに適した教育用プログラミング言語です。
- Kodu はXboxでも動くビジュアルプログラミングツールです。
- Snake wrangling for kids は子供たちにPythonのプログラミングを紹介する電子書籍です。
プログラミングはコンピュータ科学者になるために必要なスキルのひとつです。このサイトでは、数学、心理学、通信など、他の重要なスキルも学んでいきましょう。
1.4. このサイトの使い方
このサイトの内容はさまざまなカリキュラムに対応できるように作られており、異なる環境でも使えるように教師用の内容も準備を進めています。生徒向けには、それぞれの章は独立して読めるように作りました。一部の章は前の章で説明した内容を使っています。(いちばん役に立つのは「データ表現」の章でしょう。コンピューターはすべての情報を2進表現で扱うため、コンピュータ科学の多くの領域で重要な役割を果たしています)
それぞれの章は「全体像」で始まっています。扱われているトピックの重要性やコンピュータにどのように役立っているか、どのような可能性があるかを解説しています。続いて中心となる考え方を例を用いて説明しています。学習内容を対話的に確認できるコンテンツが用意されている場合もあります。読むだけでなく学んだ内容を試しながら学習できるように、実際にコンピュータ科学者が扱う問題を簡潔にした題材を扱っています。実際に確かめてみてください。
章の最後は「まとめ」として、詳しい内容のヒントが書かれています。参考文献も紹介されていますが、高度な数学の知識やプログラミングのスキルが必要なものも含まれている場合があります。
このサイトを授業で読んでいる場合は何らかの達成度評価が必要になるかもしれません。それぞれの章には研究課題や実習課題が紹介されていますが、先生から指示があった場合はそれに従ってください。
1.5. このサイトについて
このサイトの内容は、複製、共有に加えて改変も自由です。今後はダウンロードできるようにPDFにしたり、(iBooksなどのための)ePubや(Kindleなどのための)MOBI形式、またはビデオや対話的教材が動く他のフォーマットで公開することも計画しています。
このサイトの内容は Creative Commons Attribution-NonCommercial-ShareAlike licence でライセンスされており、複製や改変が可能です。内容を改良した場合には、ぜひその情報を我々と共有してください。そしてこのサイトへのリンクを張るようにしてください。このサイト(や関連した内容)を公開することは可能ですが、商用で使用することは許されていません。
このサイトの作成の一部には、Googleとカンタベリー大学からの支援が使われています。今後の拡張のための支援も歓迎しています。
1.6. 参考文献
それぞれの章には内容に応じた参考文献が紹介されています。コンピュータ科学の全体を知るための書籍も数多く存在します。ここでは特に推薦するものを紹介します。
- Algorithmics, by David Harel
- Computational fairy tales, by Jeremy Kubica
- Algorithmic adventures: from knowledge to magic, by Jurag Hromkovic
- The Turing Omnibus, by A.K. Dewdney
Wikipedia では幅広い内容が紹介されています。 entry on computer science.
The AQA Computing A2 book(s), by Sylvia Langfield and Kevin Bond は多くのトピックについて詳しく説明しています。
コンピュータ科学全体を説明したサイトとして推薦できるものを紹介します。
- Computer Science For Fun はコンピュータ科学の応用例について簡潔にわかりやすく説明されています。
- Babbage's bag はコンピュータに関する技術解説が集められています。
- CS Bytes コンピュータ科学の応用例について最新の解説があります。
- Thriving in our digital world はコンピュータ科学についての情報と対話的な教材があります。
- The Virginia tech online interactive modules for teaching computer science は関連するトピックを紹介しています。
- CS animated はコンピュータ科学の対話的な教材を紹介しています。
- CS for All
Computer Science Field Guide は Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License でライセンスされています。
このサイトは Tim Bell と Jack Morgan を中心にニュージーランド カンタベリー大学 によって作られました。