副読本

2018年2月17日

無償で公開します。ご自由にお読みください。再配布も自由です。

内容を修正したり、ファイルの一部分だけをコピーしたりして再配布するようなことはしないでください。アイデアを参考にすることはご自由にどうぞ。

内容の間違いや古い内容、プログラムが個別の環境で動作しないことががあっても無保証です。 お読みになっての感想、ご意見をいただけるとありがたく存じます

☆   ☆   ☆

著者は、慶應義塾大学湘南藤沢キャンパスで、1990年度から定年退職するまで27年間、非常勤講師を勤めました。情報基礎関連の科目を担当しました。このキャンパスの特徴は、学生さんが大きな多様性を持つことです。学生さんの興味対象や得意な分野は、政治、芸術、スポーツ、語学、科学など、とても多彩です。ですから、情報処理が得意な方もいれば、苦手な方もいます。このような学生さんを 30数名、1 クラスにまとめて授業をすることは、とても難しいことです。同じ内容を聞いて、「とても難しい」 と感じる学生さんがいる反面、「易しすぎてつまらない」 と感じる学生さんもいます。全員に満足していただける授業を行うことは至難のわざということになります。それから、授業時間の制約もあります。

そこで、定年退職を機に、副読本を作ることにしました。キャンパスでの授業を聞いて、易しすぎてつまらない、と感じる学生さんに、授業では扱えない、上級の情報を提供するのが目的のひとつです。こんな内容を授業時間内に説明したら、ただでさえ難しいと感じている多くの学生さんが興味を失ってしまうだろうというような内容です。それから、授業内容に興味が持てないような学生さんに、授業とは少し視点の異なった情報を提供するという目的もあります。少し極端な話をすれば、大学の授業は、学生さんに必要なすべての情報を提供し、すべてを覚えてもらうことが目的ではありません。むしろ、学生さんの、興味を呼び起こすような情報を提供することで、学生さんに研究のきっかけを与え、学生さんに自主的に研究活動をはじめてもらうことが目的です。

そういう意味で、本 副読本は、すべてを読破していただくことが目的ではありません。ご自分で「面白そう」 というテーマを見つけてもらい、それを拾い読みして、興味を持ったら自分で調べてみる、という きっかけになることを目的にしています。

お読みになって、これは面白い、というものがあったら、nara.yasuhiro@gmail.com まで、メールで教えていただけると、ありがたく存じます。反響の大きいテーマについて、さらに内容を充実させてゆきたいと考えています。

注意事項


タイトル一覧



もくじ


1. コンピュータリテラシーを学ぼうの巻

コンピュータリテラシーとは何かを知らなかったななちゃんがそれに取り組むお話
     第1回 コンピュータリテラシーって何?
     第2回 タッチタイピングって?
             キーボードを見ずに入力するのはマジオシャンティ
             タッチタイピング練習方法
     第3回 インターネット上の情報は正しいか?
     第4回 著作権って?
     第5回 電子メールのマナー
     第6回 ファイルが行方不明?
     第7回 アナログとデジタル
     第8回 デジタルデータは劣化しないというのは本当?
     第9回 情報圧縮 (お絵かきツールで絵がにじむ?!)
             情報圧縮ファイル形式
     第10回 プログラミング

2. ウェブページを作ろうの巻

ウェブページを見るだけだったななちゃんが自分のホームページを作れるようになるまでのお話
     第1回 ウェブページの構造(見出し、改行、箇条書き)を指定(HTML)
     第2回 ウェブページの見た目(中寄せ、色、フォント)を指定(CSS)
     第3回 ウェブページをアニメ化(JavaScript)
            まとめ (1)  HTML
            まとめ (2) HTML の リンク
            まとめ (3) HTML/CSS/JavaScript の関係

3. JavaScript超入門の巻

JavaScript超入門者ななちゃんがちょっと慣れるまでのお話
     第1回 はじめてのプログラム
     第2回 コンピュータが話をする ( alert )
     第3回 コンピュータが人間に耳を傾ける ( prompt )
     第4回 コンピュータが判断をする (判断/分岐)
     第5回 根に持つタイプ (変数)
     第6回 まわって、まわって、まわって、まわる… (くりかえし)
     第7回 成績表 (配列)
     第8回 まとめて名前をつける (関数)

4. デバッグ奥義の巻

ななちゃんがデバッグ奥義を教えてもらうという お話
     第1回 デバッグとは
     第2回 デバッグのやりかた
     第3回 デバッグのやりかた:実践編1(デバッガ)
     第4回 デバッグのやりかた:実践編2(デバッグ奥儀)
     第5回 デバッグのやりかた:実践編3(コンソール)
     第6回 デバッグのやりかた:実践編4(便利ツールを作っておこう)

5. もぐらたたきゲームを作ろうの巻

プログラミングをまったく知らなかったななちゃんがもぐらたたきゲームプログラムを
作れるようになるまでのお話
     第1回 イベント?

moleface.png
molehit.png
molehole.png

6. アニメーションプログラムを作ろうの巻

プログラミングをまったく知らなかったななちゃんがアニメーションプログラムを
作れるようになるまでのお話
     第1回:ハローワールド
     第2回:アニメーション用の画面(キャンバス)
     第3回:くりかえし
     第4回:ボールのアニメ
     第5回:折り返し
     第6回:ボールを複数に
     第7回:勝手にシンドバッド(古い!)
     ボイド(Boids)
     第8回:ボイドにルールを埋め込む ボイドルール1(整列)
     第9回:ボイドにルールを埋め込むボイドルール2(結合)
     第10回:ボイドにルールを埋め込むボイドルール3(引き離し)
     研究課題

7. JavaScriptで電卓プログラムを作ろうの巻

電卓アプリの課題でつまずいていたJavaScript入門者ななちゃんが立ち直るまでのお話
     第1回 画面をデザインしよう
     第2回 JavaScript 部分を書く
     第3回 結果を入力欄に戻す
     第4回 「=」キーを設ける
     第5回 input2 欄 と 演算子表示欄 を 削る
     第6回 「×」と「÷」を追加
     第7回 テンキーボタン入力に
     第8回 「クリア」キーを設ける、文字フォントを指定する
     第9回 table を用いて整列する、小数点キーを設ける
     第10回 連続計算対応に
     発展課題
     二進数電卓(整数版)
     二進数電卓(小数対応版)
     N進数電卓(小数対応版)

8. タートルグラッフィクスでJavaScript入門の巻

プログラミングをまったく知らなかったななちゃんがグラフィックスプログラムを
作れるようになるまでのお話
     第1回 コンピュータで絵を描こう
     第2回 簡単な図を描いてみよう
     第3回 指定した回数だけ繰り返す
     第4回 回数をコンピュータに判断してもらおう
     第5回 まとまりのある絵を部品化しよう
     第6回 大きさを変化できる部品
     第7回 まとめ
     タートルグラフィックスとは
     研究課題(1)
     研究課題(2) 再帰
     研究課題(3) フラクタル

9. マルチタートルでオブジェクトを理解しようの巻

複数のタートルを操作する環境でななちゃんがオブジェクト指向とは何かを勉強します
     第1回 復習!
     第2回 マルチタートル!
     第3回 書き方の工夫
     第4回 プログラムの部品化
     第5回 書き方の工夫 (連結)
     JavaScript の オブジェクトの使い方のまとめ
     新しい HSLカラーの使い方 (CSS 3で追加されました)

A. 読まなくて良い教養講座の巻

ななちゃんがアルゴリズムを勉強するという お話
     第1回 アルゴリズムは教養
     第2回 アルゴリズム初級編
     第3回 並べ替え(ソート)
     第4回 検索(サーチ)
     第5回 応用(84点とったのは誰?

B. プチプログラム集

1ページに収まるような小さいプログラム例でプログラミングの楽しさを発見しましょう

  1. リサージュ図形
  2. ランレングス圧縮法
  3. スネークゲーム
  4. ライフゲーム (Game of Life)
  5. 基数変換
  6. 文字コード
  7. タイピング練習
  8. 巡回セールスマン問題
  9. パーサ
  10. ハノイの塔 (Tower of Hanoi)
  11. 宝さがしゲーム
  12. 魔方陣
  13. 円周率
  14. フィボナッチ数列と螺旋葉序(らせんようじょ)
  15. 小町算(こまちざん)
  16. ツェラーの公式
  17. 16進ダンプ

C. かっこいい生意気JavaScriptの巻

ななちゃんが禁断のプロテクニックを覚えるという お話
     第1回 かっこいい生意気テクニックとは
     第2回 かっこいい生意気テクニック(続)
     第3回 かっこいい生意気テクニック(続々)
     第4回 かっこいい生意気テクニック(続々々)
     第5回 かっこいい生意気テクニック(続々々々)
     第6回 かっこいい生意気テクニック(続々々々々)
     第7回 かっこいい生意気テクニック (これでおしまい)
     第8回 かっこいい生意気テクニック(まとめ)

D. マッシュアップに挑戦の巻

ななちゃんがマッシュアップに挑戦するという お話
     第1回 マッシュアップとは
     第2回 マッシュアップの原理(問題点)
     第3回 マッシュアップの原理(解決方法)
     第4回 マッシュアップの準備(JSON形式)
     第5回 さあ、いよいよマッシュアップ
     第6回 マニュアルの見方
     第7回 使用上の注意
     付録1 外部サービス:カレンダー
     付録2 外部サービス:天気予報
     付録3 外部サービス:国土地理院の標高API
     付録4 外部サービス:HeartRails Geo API
     付録5 外部サービス:駅データ.jp

E. jQuery に挑戦の巻

ななちゃんがjQuery に挑戦するという お話
     第1回 jQueryとは
     第2回 セレクタ部
     第3回 操作部(基本)
     第4回 操作部(その他)
     第5回 イベントモデル
     第6回 $.ajaxによるJSONP読み込み
     第7回 アニメーション
     第8回 プラグイン

F. JavaScript 初級プログラマ禁断の Node.js の巻

ななちゃんがNode.js に挑戦するという お話
     第1回 Node.js はなぜ初級プログラマ禁断?
     第2回 Node.js ことはじめ
     第3回 入出力
     第4回 モジュールとパッケージ
     第5回 ウェブサーバも作れる!
     第6回 外部サービスの呼び出し
     第7回 デバッグ支援機能
     第8回 Buffer クラス

G. クリじい探検隊 テキストファイル探検の巻

ななちゃんが文字化けの謎解きに挑戦するという お話
     第1回 探検に出発
     第2回 UTF-8 の海へ
     第3回 UTF-16 の海へ
     第4回 EUC と Shift-JIS の海へ
     第5回 JIS(ISO-2022-JP)の海へ
     第6回 Unicode とは
     第7回 文字コードの歴史
     第8回 文字化けトリビア(1)  「 ¥ 」 と 「 \ 」
     第9回 文字化けトリビア(2)  Shift_JIS コードの悲劇
     おまけ: JavaScript (ブラウザ) を使って、文字コードを調べる

H. クリじい探検隊 ドムドム島探検の巻

ななちゃんがDOMの仕組み解明に挑戦するという お話
     第1回 探検に出発
     第2回 探検の第一歩:名前を確かめる
     第3回 クリじい、変です
     第4回 探検の第二歩:頼み事をする
     第5回 先祖や、酋長のことを聞く
     第6回 家系図を把握する
     第7回 家を作る
     第8回 DOM(Document Object Model)
     第9回 イベント
     第10回 スタイルのクラスを動的に変更する
     トリビア: いじわるテスト
     トリビア: document.getElementById は長ったらしい?
     おまけ: UNIX のディレクトリ操作感覚でDOM 探索を行えるプログラム
     上級者へのプレゼント: XPath (XML Path Language)

I. クリじいイベント調査隊の巻

ななちゃんがイベントの秘密解明に挑戦するという お話
     第1回 探検に出発
     第1回 イベント?
     第2回 イベントの設定
     第3回 マウスイベント、タッチイベント、ポインタイベント
     第4回 子供の喧嘩に親が:イベントの伝搬
     第5回 キーボードイベント
     第6回 セレクトイベント
     第7回 スクロールイベント
     第8回 ファイル操作イベント
     第9回 ドラッグ&ドロップイベント
     第10回 タイマーイベント
     第11回 チェンジイベント
     第12回 window のイベント

J. 何のためのプログラム?:プログラム品質の巻

ななちゃんがプログラムの品質について考えるという お話
     第1回 プログラムの品質?
     第2回 品質?
     第3回 JavaScript を知りたい、使ってみたい(正確性より興味)
     第4回 自分専用の便利ツールを作りたい (自分のパソコン上で動けば良い)
     第5回 自分専用の便利ツールを人にも使ってもらいたい
     第6回 部署のツールとして部員に使ってもらいたい
     第7回 社内ツールとして配布する
     第8回 チーム開発
     第9回 お客様への販売促進に活用する(古いブラウザへの対応、使いやすさへの配慮)

K. 透明マント:スコープの秘密の巻

ななちゃんがJavaScriptのスコープについて調べるという お話
     第1回 スコープとは
     第2回 グローバルスコープと関数スコープ
     第3回 ブロックスコープ (Ecma Script 2015 の新機能!)
     第4回 透明マント:グローバル変数を使わないための工夫

L. 文字列操作に挑戦の巻

ななちゃんが文字列操作の世界を探るという お話
     第1回 文字列操作とは
     第2回 「文字列変換銃」
     第3回 「文字列変換銃」を使ってみる
     第4回 正規表現
     第5回 文字列の抽出と検索
     第6回 文字列と配列の相互変換
     第7回 文字列-配列相互変換を使った文字列操作
     第8回 メソッドチェーン
     第9回 うまい方法
     第10回 文字列操作のちょっとしたノウハウ
     第11回 いろいろな文字列変換
     第12回 その他

M. 配列列操作に挑戦の巻

ななちゃんが配列列操作の世界を探るという お話
     第1回 秘密道具:マイコンソール
     第2回 配列の基礎
     第3回 元の配列を変化させない、複製的操作
     第4回 元の配列を変化させる、万能操作
     第5回 元の配列の両端の挿入、削除操作
     第6回 ちょっと便利な操作
     第7回 型付き配列
     第8回 多次元配列

N. 新大陸SetMapを探れの巻

ななちゃんがES2015のSet/Mapに挑戦するという お話
     第1回 Set とは
     第2回 Map とは

O. キーワードはイテラブルの巻

ななちゃんがイテラブルの概念を学ぶという お話
     第1回 イテラブル(反復可能)とは
     第2回 イテレータとは
     第3回 イテレータ生成器を簡単に作る「ジェネレータ」
     第4回 具体的な「イテラブル」オブジェクト
     第5回 まとめ

P. ハトは平和のシンボル?の巻

ななちゃんがシンボルオブジェクトの使い方を学ぶという お話
     第1回 Symbol オブジェクトとは

Q.原始人の背比べ? の巻

ななちゃんが、JavaScript のプリミティブと、比較(等価演算子)について学ぶという お話
     第1回 秘密道具:マイ・コンソール
     第2回 プリミティブ(primitive、プリミティブ値、プリミティブデータ型)
     第3回 参照渡しと値渡し
     第4回 等価演算子 == と 厳密等価演算子 ===
     第5回 if 文とプリミティブ
     第6回 オブジェクトをプリミティブ値に変換するルール
     第7回 ラッパーオブジェクト
     第8回 お遊び(実用性まったく無し!)(知的好奇心用)

R.This is not a pineapple pen の巻

ななちゃんが、JavaScript のthis の使い方を学ぶという お話
     第1回 第1回 秘密道具:マイ・コンソール
     第2回 this の初期値は window、関数(メソッド)呼び出しでは変化しない
     第3回 HTML要素の中の this
     第4回 イベントハンドラ内の this は、イベントソース要素
     第5回 オブジェクト内の this は、そのオブジェクト
     第6回 関数の apply、call 呼び出し
     第7回 インスタンス内の this は、そのインスタンス

S.カンフーじゃないの?(関数)の巻

ななちゃんが、JavaScript の関数の使い方の基礎を学ぶという お話
     第1回 関数の使い途
     第2回 データをふたつ返すには?
     第3回 実行時に関数を定義する
     第4回 チーム開発のプライバシー保護

T.関数について詳しくなろう の巻

ななちゃんが、JavaScript の関数の使い方を詳しく学ぶという お話
     第1回 秘密道具:マイ・コンソール
     第2回 関数とは
     第3回 Function クラス オブジェクトのプロパティとメソッド
     第4回 JavaScriptの識別子
     第5回 再帰
     第6回 クロージャ
     第7回 関数の仮引数(デフォルト仮引数と残余仮引数)
     第8回 アロー関数
     第9回 コンストラクタ関数

U.エラーは投げるもの?の 巻

ななちゃんが、JavaScript のエラー処理の方法を学ぶという お話
     第1回 エラーをキャッチする
     第2回 エラーを投げる
     第3回 エラーを拡張する

V.教養講座:データ構造 の巻

ななちゃんが、データ構造の基礎(リスト、二分木)を学ぶという お話
     第1回 秘密道具:マイ・コンソール
     第2回 データ構造とは
     第3回 リスト構造
     第4回 検索、ソーティング
     第5回 スタックとキュー
     第6回 二分木
     第7回 ヒープソート

W.メニューを極めよう の巻

ななちゃんが、メニューの使い方をマスターするという お話
     第1回 秘密道具:マイ・コンソール2
     第2回 チェックボックスとラジオボタン
     第3回 セレクトボックスの基本的な使い方
     第4回 セレクトボックスの情報参照
     第5回 セレクトボックスの生成
     第6回 オプショングループ
     第7回 複数選択型
     第8回 応用例

X.データ構造:行列 の巻

ななちゃんが、行列 データ構造を使ってみるという お話
     第1回 秘密道具:マイ・コンソール
     第2回 行列とは
     第3回 行列のコンストラクタと表示
     第4回 基本的な演算子(行列和、スカラー積)
     第5回 少し複雑な演算子(転置、行列積)
     第6回 複雑な演算子(行列式、逆行列)
     第7回 二次元の行列演算子
     第8回 さあ、いよいよ使ってみよう!
     第9回 写像としての行列

Y.データ構造:複素数 の巻

ななちゃんが、複素数 データ構造を使ってみるという お話
     第1回 秘密道具:マイ・コンソール
     第2回 複素数とは
     第3回 複素数のコンストラクタと表示
     第4回 基本的な演算子(和/差、積、共役、距離)
     第5回 少し複雑な演算子(除算、平方根、極形式、指数関数、対数関数、べき乗)
     第6回 複素数の配列とキャンバス
     第7回 さあ、いよいよ使ってみよう!
     第8回 写像としての複素数

Z.ライブラリに挑戦 の巻

ななちゃんが、ななちゃんがライブラリに挑戦するという お話
     第1回 ライブラリとは
     第2回 一般的なライブラリ
     第3回 jQuery
     第4回 Chart.js
     第5回 D3.js
     第6回 Tone.js