コンテンツにスキップ

第1回:ガイダンス/プログラミングを学ぶ意義と実行環境の準備

生成AIがあるのに、なぜ学ぶのか

生成AIに頼めば、この授業の演習は一瞬で解ける。仕事でも、AIがコードを書く場面は増えている。では、プログラミングを自分で学ぶ意味はなくなったのだろうか。

逆である。AIがあるいまだからこそ、学ぶ意味がある。

「いま」プログラミングを学ぶ意義

  1. 判断する力:AIの出力が正しいか、自分の場合に合っているかを見極める。AIの出力は、頼んだこと以外はすべて「平均」になる。
  2. 言語化する力:「ここはこうしてほしい」と伝える。言えなければ、出てくるものは「平均」のままである。
  3. 考え方そのもの:問題を手順に分解する力(アルゴリズム的思考)は、コードを書かない場面でも使える。

どれも、中身がわかる人だけが持てる力である。AIを使いこなす側に立つために、まず自分で書けるようになろう。

考える「負荷」が理解を作る

自分で考える負荷そのものが、理解を作る。生成AIは、その負荷を肩代わりしてしまう。答えは手に入るが、理解は残らない。

  • 認知オフロード(Risko & Gilbert, 2016):考える負担を外に出すこと。電卓やメモもこれにあたり、それ自体は悪いことではない。ただし、AIをよく使う人ほど批判的思考のスコアが低いという報告がある(Gerlich, 2025)。
  • 認知的負債(Kosmyna ら, 2025):思考を外注しすぎると溜まる借り。技術的負債と違って、返済する手段がない。

電気電子情報入門(第13回)の振り返り

この話は「電気電子情報入門」第13回で扱った内容の続きである。

演習の取り組み方

  • 演習の正誤は、成績に関係しない(授業時間内の提出で出席となる)。
  • 目的は、正解を当てることではなく、試行錯誤することである。
  • エラーや予測はずれは、学びの材料である。外れた予測も、出たエラーも、そのままテンプレートに残そう。
予測する → 実行する → ずれを考える → 直して、また実行する

生成AIとの付き合い方

この授業では、生成AIは原則使わない(推奨しない)

  • 演習は、自分の頭と手で試行錯誤する時間である。
  • テスト(ミニテスト・中間テスト・期末テスト)は、自分の頭だけで解く。
  • 大学の方針として、生成AIを利用して得た内容をそのまま提出したものは、成績評価の対象とならない。

それでも使うなら、頼み方を選ぼう。

頼み方 結果
×「このエラー、直して」 いまは動く。でも、次の同じエラーもまた聞くことになる
○「なぜこのエラーが出るのか、説明して」 自分の「わからない」を持ち寄ることになる
  • 自分で説明できないものは、提出しない。
  • わかったことと、わからなかったことを書き残す。

学習を守れるのは、みなさん自身である。

プログラムとは何か

プログラム = コンピュータになんらかの処理を行わせるための再現できる手順を書いた命令書

43 × 21 の筆算を例に考える。答えは903だが、「どうやって求めたか」が重要である。

  1. 43 × 1 を計算する
  2. 43 × 2 を計算する(十の位なので桁をずらす)
  3. 結果を足し合わせる → 903

このかけ算の手順も「プログラム」の一種である。コンピュータに「2桁の(人間の)筆算」を解かせるには、この手順を教えなければならない。

「筆算」のPythonプログラム

結果は同じ903でも、「電卓的な計算」と「人間の筆算」はやり方がまったく異なる。

電卓的な計算

answer = 43 * 21
print(answer)  # 出力: 903

これはPythonの * 演算子に任せているだけで、「筆算」ではない。

筆算のプログラム

def hissan_mul(a, b):
    a1, a0 = a // 10, a % 10
    b1, b0 = b // 10, b % 10

    print(f"  {a:>4}")
    print(f"x{b:>4}")
    print("-" * 6)

    carry = 0
    t = a0 * b0 + carry
    carry, r0 = t // 10, t % 10
    t = a1 * b0 + carry
    carry, r1 = t // 10, t % 10
    print(f"  {carry*100 + r1*10 + r0:>4}")

    carry = 0
    t = a0 * b1 + carry
    carry, r0 = t // 10, t % 10
    t = a1 * b1 + carry
    carry, r1 = t // 10, t % 10
    print(f" {carry*100 + r1*10 + r0:>4}")

    print("-" * 6)
    print(f"  {a * b:>4}")


hissan_mul(43, 21)

今の時点でこのコードを読めなくてよい。「人間がふだん頭の中でやっていることを書き出すと、これだけの量になる」ということだけ見ておこう。

2つのポイント

  1. 人間がやっていることは意外と複雑
  2. コンピュータにはコンピュータの得意なやり方がある

演習1-1

次の2つを、はじめての人にも伝わるように、手順として書き出してみよう。

  1. 目玉焼きの作り方
  2. 自転車の乗り方

  3. 手順には番号をつける

  4. 1つの手順には、1つの動作だけを書く
ヒント
  • 書き終わったら、「その手順しか知らない人」になったつもりで読み返そう。迷わずにその通りにできるだろうか。
  • 2つを書いてみて、書きやすさに違いはあっただろうか。

人間とコンピュータの違い

人間 コンピュータ
あいまいな指示(「あれ取って」「いい感じにやって」「適当に調整して」) なんとなく伝わる 全く伝わらない(「あれ」とは何か、「いい感じ」の定義は何か)
大量・長時間の作業(「1万人のデータをまとめて」「3時間これをやって」「いつでも対応して」) (恐らく)苦手 得意(1万回でも3時間分でも繰り返せる、待機もできる)

コンピュータには、あいまいさのない手順で指示する必要がある。そのかわり、手順さえ決まれば、同じことを何度でも正確に繰り返してくれる。

プログラミングの3ステップ

プログラミングは以下の3つのステップで構成される。

flowchart LR
    A[要求\n問題文] -->|ステップ1-2\nアルゴリズム\n思考| B[抽象的な処理\nフローチャート]
    B -->|ステップ2-3\nコーディング\n実装| C[具体的な処理\nPythonのコード]
  1. 要求を理解する: コンピュータに何をさせたいのかを明確にする
  2. 説明できるレベルまで整理する: どうやったらできるかを考え、手順として表す(アルゴリズム)
  3. コンピュータにわかる言語へ翻訳する: 整理した手順をPythonなどで記述する(コーディング)

アルゴリズムの3つの基本構造

すべてのアルゴリズムは、以下の3つの構造の組み合わせで表現できる。

順次:上から順に実行

flowchart TD
    A[処理1] --> B[処理2] --> C[処理3]

分岐:条件によって処理を変える(if)

flowchart TD
    A{条件} -->|True| B[処理A]
    A -->|False| C[処理B]

反復:同じ処理を繰り返す(for / while)

flowchart TD
    A{条件} -->|True| B[処理]
    B --> A
    A -->|False| C[次の処理]

Pythonでの対応

  • 順次:文を上から順番に書く
  • 分岐:if / else(第5回で学ぶ)
  • 反復:for / while(第6回で学ぶ)

アルゴリズムの例:合格判定

要求: 学生全員の点数を見て、合格か不合格かを判定する。

  • 順次:一人ずつ処理する
  • 分岐:60点以上なら合格、そうでなければ不合格
  • 反復:全員分繰り返す

手順を日本語で書くと

字下げで「どこからどこまでが繰り返し・分岐の中身か」を表す。

点数リストを用意する
点数を1つずつ取り出して、くり返す:
    もし 60点以上 なら:
        「合格」と表示
    そうでなければ:
        「不合格」と表示

フローチャート

flowchart TD
    A([開始]) --> B[点数リストを用意]
    B --> C[リストから点数を1つ取り出す]
    C --> D{60点以上?}
    D -->|Yes| E[合格]
    D -->|No| F[不合格]
    E --> G{次はある?}
    F --> G
    G -->|Yes| C
    G -->|No| H([終了])

Pythonコード

students = [75, 42, 88, 55, 90]
for student in students:
    if student >= 60:
        print("合格")
    else:
        print("不合格")

実行結果:

合格
不合格
合格
不合格
合格

手順とコードの対応

  • 反復(「点数を1つずつ取り出して、くり返す」)→ for student in students:
  • 分岐(「もし 60点以上 なら」「そうでなければ」)→ if student >= 60: / else:
  • 日本語の手順の字下げが、そのままPythonの字下げになっている

演習1-2

上の「手順を日本語で書くと」の合格判定を書きかえて、「80点以上はA、60点以上はB、それ以外はC」と表示するようにしよう。字下げもそろえて書くこと。

ヒント
  • 「もし〜なら」を1つ増やせばよい。
  • 書けたら、85点・70点・40点の人で手順を上からたどり、それぞれ A・B・C になるか確かめよう。

アルゴリズム的思考の獲得は役立つ

プログラマにならなくても、手順を整理して考える力は役に立つ。

  • 業務改善: 「この作業、毎回同じことをやっているな…」→ 手順を明確にすれば、自動化・効率化できる。マニュアル化にも有効である。
  • 技術者との協働: 「こういうシステムが欲しい」→ 問題を分解して伝えれば、技術者と対等に議論できる。
  • 問題解決力: 「なぜ売上が落ちた?」→ どの商品か、いつからか、何が変わったか、と問題を分解して整理できる。

なぜPythonで学ぶのか

  • 読みやすく記法がシンプル: 英語に近く、初学者でも理解しやすい
  • 汎用性が高い: Web、データ分析、AI、自動化など幅広い分野で使われる
  • 初学者に人気: 求人も多い

Python vs C言語の比較

# Python
a = 1
b = 3
print(a + b)
// C言語
int a = 1;
int b = 3;
printf("%d", (a+b));

Pythonは型宣言が不要で、セミコロンも不要であり、記述量が少ない。

Spyderの利用

演習室のPython環境はSpyderを用いる。

主なPythonの開発環境

環境 説明
Python直接利用 コマンドラインからPythonを直接実行する
Spyder 科学計算向けのIDE(統合開発環境)。Anacondaに同梱
Jupyter Lab ノートブック形式の対話的な開発環境
PyCharm 高機能なPython専用IDE

IDE(Integrated Development Environment)は、プログラムの作成・実行・デバッグを1つにまとめた環境である。

Anacondaのインストール(自宅用)

自宅で環境を構築する場合は、Anacondaをインストールする。演習室では不要である。

  1. anaconda.com/download からダウンロードする
  2. インストーラ(Anaconda3-*-Windows-x86_64)を実行し、指示に従ってインストールする
  3. インストール完了時に「Clear the package cache upon completion」をチェックすると、ディスクを節約できる

Spyderの起動

  • Windowsスタートメニュー → すべてのアプリ → Spyder を選択する
  • または、検索バーで「Spyder」と入力して起動する

Spyderの日本語設定

Spyderを日本語表示にするには、以下の手順で設定する。

  1. メニューから Tools → Preferences を開く
  2. Application → Advanced settings を選択する
  3. Language を 日本語 に変更する

Pythonの対話モードでの利用

Spyderのコンソール(右下)に表示される In [1]: がプロンプトである。これはPythonが命令を待っている状態を示す記号である。

プロンプトに式や命令を入力してEnterを押すと、すぐに結果が表示される。

In [1]: 1 + 2
Out[1]: 3

In [2]: print("Hello")
Hello

Spyderの使い方

メニューの ヘルプ → ツアーを表示 で、Spyderの基本操作を確認できる。

Spyderの基本操作

  • 左側のエディタにプログラムを記述し、F5キーまたは実行ボタンで実行する
  • 右下のコンソールに実行結果が表示される
  • 右上にはヘルプや変数エクスプローラが表示される

2通りの実行方法

対話モード(IPythonコンソール) ファイル実行(エディタ)
実行のしかた 1行ずつ入力し、そのつど実行される ファイルに書いて保存し、まとめて実行する
結果の表示 式を入れるだけで結果が出る(電卓になる) 結果を表示するには print() が必要

ファイル実行の手順:

  1. エディタに書く
  2. 保存する(拡張子は .py)
  3. 実行する(F5 か ▶)
  4. コンソールで結果を確認する

対話モードを電卓のように使う

演算子 意味
+ 足し算
- 引き算
* 掛け算
/ 割り算
In [1]: 1 + 2 + 3 + 4
Out[1]: 10

In [2]: 2 + 3 * 2
Out[2]: 8

In [3]: (2 + 3) * 2
Out[3]: 10

In [4]: 9 / 2
Out[4]: 4.5
  • 掛け算・割り算は、足し算・引き算より先に計算される
  • ( ) の中が先に計算される
  • / の結果は小数になる(詳しくは次回)

演習1-3

対話モードで、次の4つの式を計算しよう。入力する前に、どこから計算されるかを考えて、結果を予測しよう。

2 + 3 * 4
(2 + 3) * 4
10 - 6 / 2
7 / 2
ヒント
  • 予測に迷ったら、直前の「対話モードを電卓のように使う」を見直そう。
  • 予測と結果が違ったら、どこから計算されたのかを考えよう。

print() で表示する

print('表示したいもの')
  • 文字列は ' ' または " " で囲む
  • 引用符で囲んだ部分は、そのまま表示される
  • 囲まない式は、計算した結果が表示される
print('こんにちは')
print("Python")
print(3 + 4)

実行結果:

こんにちは
Python
7

用語

  • print のように、最初から使える関数を 組み込み関数 という
  • ( ) の中に渡すものを 引数 という

演習1-4

次のプログラムをエディタに書いて保存しよう。実行する前に、出力を紙やメモ帳に書き出してみよう。その後実行して、予測と合っているか確認しよう。

print('Spyder')
print('2 * 5')
print(2 * 5)
print((1 + 2) * 3)
ヒント
  • 予測に迷ったら、直前の「print() で表示する」を見直そう。
  • 予測と結果が違ったら、その行の書き方をよく見比べよう。

プログラムを書くときのルール

  • 半角の英数字と記号で書く(引用符の中の文字列は、全角(日本語)でもよい)
  • 大文字と小文字は区別される
    • ○ print('Hello')
    • × Print('Hello')
  • 記号の前後の空白は、あってもなくてもよい(3+4 と 3 + 4 は同じ)
  • 正しく実行できないとエラーになる。エラーメッセージは最後の行を読む
NameError: name 'Print' is not defined. Did you mean: 'print'?

全角文字に注意

日本語入力がオンのまま打つと、( ) = ’ などの全角記号や、全角スペースが混ざることがある。見た目ではほとんど区別できないので、エラーメッセージを手がかりに探そう。

演習1-5

次のコードをエディタに貼り付けて実行しよう。エラーが出たら、エラーメッセージの最後の行を読んで直し、もう一度実行する。エラーが出なくなるまで繰り返そう(誤りは3か所)。

print('こんにちは')
Print('Python')
print('Spyder')
print('エラー)

期待される実行結果:

こんにちは
Python
Spyder
エラー
ヒント
  • 一度にすべて直そうとせず、1つ直したら実行して、次のエラーメッセージを読もう。
  • エラーメッセージの最後の行と、行番号を手がかりにしよう。

まとめ

  • プログラム=コンピュータに処理をさせるための、再現できる手順
  • アルゴリズムは「順次・分岐・反復」の組み合わせ
  • 実行方法は、対話モードとファイル実行の2通り
  • print() で表示する。引用符で囲むと文字列
  • エラーが出たら、メッセージの最後の行を読む

次回予告

次回は 変数とデータの扱い。「計算した結果を、あとでもう一度使うには?」を考える。

次回の授業冒頭に、今回の内容のミニテスト(WebClass)を行う。