Centerにて、素晴らしい会場が準備されており、またデモ用の小道具も整っています。Fisherが描いた18世紀のハーバード大学のキャンパスの水彩画をステージの背景にしました。20年前、Davidは学部生として彼自身の恐怖を克服し、自分のコンフォートゾーンの外に出てCS50を履修しました。このコースがプログラミングの授業であるという以上に問題解決のための授業であることを発見しました。実際、CS50受講生の2/3は、コンピュータサイエンスのコースを受講したことがありません。このコースで最終的に重要なことは、クラスメートと相対的にどの程度成長したかということではなく、コースを最初に始めたときの自分と相対的にどの程度成長したかということです。スーパーマリオの構成要素を再作成します。Financeと呼ばれるWebアプリケーションを構築し、最後に独自の最終プロジェクトを作成してコースを終了します。コンピュータサイエンスとは?コンピュータサイエンスの根本は問題解決です。生成するプロセスと考えることができます。コンピュータサイエンス、つまり私たちが書き方を学ぶコードです。そのためには、標準化された方法で情報を保存また操作できるように、入力と出力を表す方法が必要です。数値表現まず部屋の人数を数えて出席を取る作業から始めます。私たちの手を使って、一度に1本ずつ指を立てて1人を表現することもできますが、あまり多くは数えることができません。このシステムは単項と呼ばれ、各桁が1つの値を表します。私たちは、0から9までの10個の数字を使う、より効率的なシステムを学んでいます。9このシステムは、各桁で10の異なる値があるので、10進法または基数10と呼ばれます。基数2と呼ばれる単純なシステムを使用します。各2進数はビットとも呼ばれます。コンピュータは電気で動いていて、電気はオンにもオフにもできますから、スイッチをオンにしたりオフにしたりして0か1を表すことで、便利にビットを表すことができます。電球が1つの場合、これをオンにすると1と表せます。現代のコンピュータは電球ではなく、トランジスタと呼ばれる小さなスイッチを無数に持っており、それらをオン・オフしてさまざまな値を表すことができます。私たちは次の10進数は123を表すことを知っています。33は1の位、2は10の位、1は100の位です。123と考えられます。数字の各桁は10の累乗を表します。これは各桁で10通りの数字があるからです。右が100、真ん中が101、一番左が102です。32進数では、数字は2通りのみで、各桁に2の累乗が対応します。#これは以下と同じです。#すべての電球またはスイッチをオフにすると、値は0のままです。1に変更すると、2と1を加算するため、10進数の値では3になります。1電球がさらにいくつかあるとすると、2進数は例えば110010になり、10進値はこの時50になります。50であることに注意してください。ビットが多ければ多いほど、さらに大きな数を表せます。テキスト文字を表現するというのは、数字と文字をどのように対応させるかを決めるだけです。何年も前に、数と文字の標準的なマッピングを定めまとめた人がいました。66のようになります。このようなルールで、スプレッドシートや電子メールなど、異なるプログラムが同じビットを数値やテキストとして解釈して表示できます。標準的なマッピングであるASCIIは、小文字と句読点も含まれます。10進値が72、73、および33のビットパターンを持つテキストメッセージを受信した場合、これらのビットはHI!という文字にマッピングされます。各文字は通常、8ビットまたは1バイトのパターンで表されるため、受信するビットシーケンスは01001000、01001001、00100001になります。バイトなどの用語にはすでに慣れていることでしょう。(数えられる最大値は255です)。他の言語のアクセント記号付きの文字や記号など、その他の文字はUnicodeと呼ばれる規格の一部で、ASCIIよりも多くのビットを使用してこれらの文字すべてに対応します。絵文字を受け取ると、コンピュータは実際にはバイナリ形式の数字を受け取り、Unicode標準に基づいて絵文字のイメージにマップします。絵文字はビット000000011111011000000010に他なりません。イメージ、ビデオ、サウンド絵文字のように、画像は色で構成されています。色を表すシステムにはさまざまなものがありますが、一般的なのはRGBです。RGBは、各色の赤、緑、青の量を示すことで、異なる色を表します。(テキストメッセージを受け取るのではなく))。それぞれの数値は1バイトで、256通りの値がとれますから、3バイトで何百万もの色を表現できます。先ほどの例の3バイトのコードは黄色の濃い色を表します。画面上の点や四角はピクセルと呼ばれ、画像は何千~何百万ものピクセルで構成されています。3バイトで各ピクセルの色を表現することで画像を作ることができます。拡大すると絵文字のピクセルが見えます。画像の解像度は水平方向と垂直方向のピクセル数であるため、高解像度イメージの方がピクセル数が多く、保存に必要なバイト数も大きくなります。ような動きを表現しています。マッピングなど、各瞬間の音の周波数へのより複雑なマッピングが可能です。JPEGやPNG、WordやExcelのドキュメントなどのファイル形式も、情報をビットで表現するために特定の決められた標準に基づいています。アルゴリズムさて、入力と出力を表現できるようになったので、問題解決に取り組むことができます。先ほどのブラックボックスには、問題を解決するためのアルゴリズムと手順が示されています。料理のレシピなど、人間もアルゴリズムに従うことができます。コンピュータをプログラミングするときは、命令があいまいになったり誤解されたりしないように、アルゴリズムをより正確にする必要があります。連絡先をアルファベット順に並べたアプリがあなたのスマートフォンにあるかもしれません。昔ながらのものとしては、電話帳、つまり名前と電話番号を印刷した本があります。誰かの電話番号を見つけるという問題のインプットに対して、探すべきは電話帳に載っている名前です。本を開いて最初のページから始め、一度に1ページずつ名前を探します。このアルゴリズムは正しいでしょう。名前が本に載っていれば、最終的にその名前が見つかるからです。一度に2ページずつ本をめくるかもしれませんが、名前が書かれたページをスキップするかもしれないので、このアルゴリズムは正しくありません。このバグ(誤り)は、電話帳がアルファベット順にソートされていることがわかっているので、スキップしたページを探すことで修正できます。問題のサイズを半分に減らすというものです。名前が見つかるまでこれを繰り返し、毎回問題を半分にします。電話帳が1024ページであれば、半分に分けるというステップを10回繰り返すだけで、あと1ページをチェックするというところまで到達できます。これは、1ページずつ検索するアニメーションと比較して、電話帳を繰り返し半分に分割するアニメーションで視覚化できます。実際、それぞれのアルゴリズムの効率をグラフで表すことができます。一度に1ページずつ検索する最初の解決策は、赤い線で表すことができます。問題のサイズが大きくなるにつれて、解決に要する時間は直線的に長くなります。nは問題の大きさを表す数字なので、電話帳のページ数がnの場合、名前を見つけるには最大n回の手順を踏まなければなりません。一度に2ページを検索する2番目の解は、黄色の線で表すことができます。勾配はそれほど急ではありませんが、線形です。2ステップしか必要ありません。電話帳を毎回半分に分割するという私たちの最終的な解決策は、緑の線で表すことができます。電話帳が1000ページから2000ページになった場合でも、自分の名前を見つけるのに必要な手順は1ステップ増えるだけです。サイズが2000ページから4000ページに倍増しても、あと1ステップで済むでしょう。ラベル付けされています。これは、各ステップで問題を2で除算しているためです。アルゴリズムを使ってプログラムを書くときには、効率などの要素を考慮して、どれだけ正確かだけでなく、どれだけうまくデザインされているかも気にします。擬似コード私たちは疑似コードを書くことができます。Quitこれらの手順を使用して、中央のページをチェックし、何をするかを決定し、繰り返します。探している名前がページ上になく、本のページが残っていない場合は、作業を中止します。この最後のケースは特に覚えておくことが重要です。コンピュータ上の他のプログラムがその最後のケースを忘れた場合、説明されていないケースに遭遇したためにフリーズしたり、応答を停止したりするかもしれません。何のメッセージもなく、バックグラウンドで同じ作業を何度も繰り返すでしょう。これらを関数と呼ぶことにしましょう。Quitまた、道路の分岐のように、異なる経路につながる分岐もあります。これを条件と呼びます。Quitどこに行くかを決める質問はブール式と呼ばれ、最終的にはyesまたはno、trueまたはfalseの値になります。Quit最後に、ループと呼ばれるプログラムの一部を繰り返すサイクルを作成する単語があります。(スクラッチ)このレッスンで発見した構成要素を使ってプログラムを書くことができます。expressionsブール式loopsループさらに、次のような機能も追加されています。variables変数threadsスレッドeventsイベント...Cと呼ばれるテキストベースのプログラミング言語の使用方法を学ぶ前に、Scratchと呼ばれるグラフィカル・プログラミング言語を使用して、指示を含むブロックをドラッグアンドドロップします。world」を出力する簡単なプログラムは次のようになります。world\n");}多くの記号や構文、またはこれらの記号の配置を理解する必要があります。Scratchのプログラミング環境はもう少し使いやすいものです。追加または変更できます。左側には、関数や変数などの概念を表すパズルのピースがあり、中央の指示領域にドラッグドロップできます。右下には、プログラムで使用する文字を追加できます。world」と表示させることができます。(ステージの上に緑のフラグがあり、これを使用してプログラムを開始できるため)。world」と入力しました。これらのブロックが何をするかはインターフェースを調べて実験することで分かります。name?(お名前は?)」のような質問をドラッグし、それを”say”ブロックと組み合わせて答えを得ることもできます。ブロックに配置することもできます。David」と言えるようにします。ブロックをネストしたり、一方をもう一方の内側に配置したりしようとすると、Scratchはブロックを使用できる場所を拡大してくれます。いう出力を生成します。ブロックの出力を生成します。結合アルゴリズムへの2つの入力として使用できます。ブロックへの入力として渡すことができます。ブロックを使用して、猫の発声を聞くことができます。Speech拡張機能は、インターネット上のクラウドやコンピュータサーバのおかげで、テキストを音声に変換してくれます。言わせることもできます。と3回言わせることもできますが、現在はブロックを何度も繰り返しています。ブロックを使用しましょう。これでプログラムは同じ結果を得られますが、ブロック数は少なくなります。変更したいものがある場合は、3つではなく1つの場所で変更するだけで済みます。ネコをマウスの方に向けて、マウスの方に移動させることができます。ブロックを使用して、Pen拡張機能を試します。なければ、ペンを立てます。これを何度も何度も素早く繰り返すので、マウスを押したままにすると、いつでも描画の効果が得られます。Scratchには、キャラクターに使えるさまざまな衣装やイメージもあります。カウントするためのプログラムを作成します。変数で、その値を設定、使用、変更することができます。画面の端にいるときはいつでも向きを変えて、猫が画面上を永遠に行ったり来たりするbounceのようなプログラムもあります。bounce1は10ステップごとに異なる衣装に変更し、アニメーションを改善しています。緑の旗をクリックしてプログラムを実行すると、猫が脚の動きを交互に変えているのがわかります。コンピュータのマイクを使って自分のサウンドを録音し、プログラムで再生することもできます。複雑なプログラムを作成するには、まずこれらの単純な機能から始めて、それらを相互に重ね合わせます。pet0ではマウスポインタで触れるとScratchが鳴きます。barkでは、同じScratchプロジェクトに1つではなく2つのプログラムがあります。緑のフラグをクリックすると、これらのプログラムが同時に実行されます。変数がfalseに設定されている場合は、一方がアシカの音を鳴らします。trueに設定します。1つの拡張機能は、コンピュータのウェブカメラで撮影されたビデオを見て、ビデオの動きがしきい値を超えている場合にニャーという音を再生します。使用すると、それぞれに異なるブロックセットを設定できます。ブロックをクリックします。2つのスプライトがお互いにコミュニケーションをとるために使われており、舞台裏でメッセージを送るようなものです。待って、「Polo!」と言います。翻訳拡張機能を使って、他の言語で何かを言うこともできます。ブロックへの入力として渡されます。基本がわかったので、プログラムのデザインや品質について考えることができます。ブロックでネコにニャーと3回鳴かせるとします。複雑な概念を単純化する抽象化を使用できます。ブロックをScratchで定義し、meow3に示すようにプログラムの他の場所で再利用することができます。利点は、これがどのように実装され、コードで記述されているかを知る必要がなく、プログラム内で使用するだけで読みやすくなることです。meow4として入力するブロックを定義することもできます。このブロックには、猫が一定回数鳴くようにするブロックがあります。ブロックをどのように使用するかのように、プログラム内でそのブロックを再利用して何度でも鳴き声を作成できます。remixやOscartimeなど、ループ、条件、動きを組み合わせてインタラクティブなゲームを作成するというデモを紹介しましょう。OscartimeはDavidが何年も前に作ったもので、最初はスプライトを1つ追加して、それから機能を1つずつ追加していき、やがて複雑なプログラムになりました。最終的にAndrewはコンピュータサイエンスを専門としないことになりましたが、このコースで学ぶ問題解決スキル、アルゴリズム、アイデアはどこにでも応用できます。languages.。