2022年度 : プログラミング1
- シラバス(工学部工学科知能情報コース「工共114」と、情報工学科「情105」の同時開講)
- 講義用Mattermost: https://mattermost.ie.u-ryukyu.ac.jp/login チャンネル: ~prog1
- 連絡先:
- 當間愛晃 (Naruaki TOMA)@工1-705
- オフィスアワー: 木2
- E-mail: tnal@ie.u-ryukyu.ac.jp
- Twitter: @naltoma
- サポーターの皆さん: 技術職員&TA (Teaching Assistanct)
- 技術職員・名嘉秀和さん, 小林夏樹さん@地創棟506: 授業サポート、マシントラブルサポート等を担当。
- TA2名。主に授業中のサポートを担当。
- TA1:馬(MA)さん@NAL研M2。
- TA2:上間さん@NAL研M1。
- 講義資料
- 第1回: プログラミング概観、Pythonインタプリタの起動、逐次処理、変数の利用
- 第2回: Pythonインタプリタとスクリプトの体験、計算的思考
- 第3回: 関数定義とその動作、デバッグ実行入門
- 第4回: 条件分岐
- 第5回: ループ処理
- 第6回: 振り返り1
- 第7回: シーケンス、リスト型、辞書型、集合
- 第8回: ファイル入出力、型ヒント、ドキュメンテーション
- 第9回: doctest、スタックフレーム、関数のデフォルト値
- 第10回: 振り返り2、JupyterLabとNumpy入門
- 第11回: デバッグ演習2、正規表現の紹介、モジュール
- 第12回: 浮動小数点の取り扱い、抽象化&再帰関数
- 第13回: 例外とアサーション
- 第14回: バージョン管理システム Git入門
- 第15回: 振り返りと今後の道標
- 参考文献・サイト
第1回: 卓上プログラミングによる開発設計概観、Pythonインタプリタの起動と逐次処理・変数の利用
- 今週のお告げ
授業中に分からないことは、自分から尋ねよう。
授業後に疑問が出てきたら、まずはググろう。10分程度調べて解決できなければ相談しよう。
- ミニテスト: 今週はアンケート。
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [環境構築]
2022年度に初めて環境構築する人向けの説明です。再履修者は環境構築済みだと思いますので、スキップしてください。
- 授業中の質問相談について
- Mattermostを使います。
- 「prog1-質問」チャンネルに「相談です」と書こう。
- それを見たサポーターの皆さんが「対応します」と書いてきます。複数人が反応した場合には、最初に書き込んだ人が対応するとします。
- サポーターがDMを送るので、そこで相談できます。
- 共有したい内容については、「prog1-FAQ」に過去ログが残っています。
- [講義資料]
- 第1回: プログラミング概観、Pythonインタプリタの起動、逐次処理、変数の利用
*このページ上部のアイコンが並んでいる部分から下矢印を選び、pdfを選択すると授業資料をPDF形式でPCに保存できます。
3.2.1節〜3.2.3節は授業中はスキップします。時間のあるときに読んでみよう。
- 第1回: プログラミング概観、Pythonインタプリタの起動、逐次処理、変数の利用
- 課題レポート1: print()関数と変数の利用、用語整理。
- 提出先: Googleドライブのreport1内の各自アカウント名。今回はテンプレートを用意済み(再履修者は自分でフォルダを作成し、sampleをコピーして利用してください)。
- 課題に取り組む前に、報告者欄を自身の学籍番号と氏名に編集すること。協力者欄は何らかの形で誰かと相談等しながら取り組んだ場合には、書いてください。特になければそのままで構いません。
- レベル4まで終えたら、実施日欄の年月日を編集すること。
- 〆切: 第3回の講義日。
- 授業後の質問相談について
- Mattermostもしくはメールを利用ください。DMでも prog1 チャンネルでも良いです。
- 困っているのは何か。どうやろうとしたのか。どう駄目だったのか。
- 例: 課題レポート1のLevel2で困っている。変数使っているつもりだがエラーが出る。具体的に書いたコードは○○。実行すると○○と出力されており、想像と異なる。
- 関連リンク
第2回: Pythonインタプリタとスクリプトの体験、計算的思考
- 今週のお告げ: 授業中の質問の仕方。
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- 第2回: Pythonインタプリタとスクリプトの体験、計算的思考
4.3節 str.formatは来週以降にやる予定。
- 第2回: Pythonインタプリタとスクリプトの体験、計算的思考
- 関連リンク
- 備忘録
課題1の〆切は来週講義日です。
第3回: 関数定義とその動作、デバッグ実行入門
- 今週のお告げ:
分からないこと、気になることは自分から相談しよう。
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- 課題レポート2: 自動販売機の気持ちになろう。
- 提出先: Googleドライブのreport2を開き、自身のアカウント名でフォルダを作成し、そこにレポートおよびソースコードをアップロードせよ。
- 〆切: 第5回の講義日。
第4回: 条件分岐
- 今週のお告げ: 採点方針について。
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料スライド]
- 課題レポート2: 提出締め切り:第5回の講義日。
第5回: ループ処理
- 今週のお告げ:「問題解決の仕方を学ぼう」。
Web検索や友人レポートを参考にしたり、先輩・友人らに教えてもらいながら演習・課題に取り組むのはとても良いこと。だけど「言われたとおりに手を動かすだけだと、その後一人で同じことを再現したり、応用したりできない」ままです。もしそういう状況になっていると、これは学びになっていません。コピー機と一緒です。そうではなく、「何故そういう風に取り組むのか」「今どう取り組めばよいのか」「こういうアプローチの仕方もあるのか」といった問題解決の仕方を学ぼう。
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- 課題レポート3: 基本的な統計処理を実装してみよう。
- 提出先: Googleドライブのreport3を開き、自身のアカウント名でフォルダを作成し、そこにレポートおよびソースコードをアップロードせよ。
- 〆切: 第7回の講義日。
第6回: 振り返り
- 今週のお告げ: 自分に合ったinput/outputのバランスを探そう。
inputだけでもoutputだけでも、どちらか片方だけでは学びは深まらない。教科書読んでるけど良く分からない人は、それを何らかの形でoutputしてみよう。outputできない人は教科書を読み直して自分で説明できない箇所がないか探してみよう。
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- グループ演習
- Googleドライブ
- モブプロ演習の進め方
- 進捗状況
- 演習1: シェルとPythonインタプリタの使用
- 演習2: print()関数と変数の利用
- 演習3: ブーリアンと文字列処理
- 演習4: マニュアル(ヘルプor公式ドキュメント)の利用
- 演習5: 数当てゲーム1 (大小ヒント付き) を実装してみよう。
第7回: シーケンス、リスト型、辞書型、集合
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- 課題レポート4: 基本的な自然言語処理を実装してみよう(その1)。
- 提出先: Googleドライブのreport4を開き、自身のアカウント名でフォルダを作成し、そこにレポートおよびソースコードをアップロードせよ。
- 〆切: 第9回の講義日。
第8回: ファイル入出力、型ヒント、ドキュメンテーション
- 今週のお告げ: 来週から遠隔のみ。
遠隔に慣れてきていること、ほぼ教室参加者がいないこと、モブプロ演習のような発話を伴う演習では遠隔が便利であることから、授業を完全遠隔に切り替えます。321教室に来てもらって良いですが、教員は基本不在予定です。
- ミニテスト *今週はアンケート。
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
第9回: doctest、スタックフレーム、関数のデフォルト値
- 第10回目に向けた環境構築。numpy, matplotlibの動作確認。
- (再履修生は恐らく環境構築済みのため、step 1 は不要。step 2 以降をやってください)
- step 1: ターミナルで以下を実行。(y22生はminicondaで環境構築してる前提)
conda install numpy matplotlib jupyterlab
- step 2: ディレクトリを移動:cd prog1
- step 3: サンプルコードをダウンロード:curl -O https://ie.u-ryukyu.ac.jp/~tnal/2022/prog1/static/samples/numpy_matplotlib.py
- step 4: サンプルコードを実行:python numpy_matplotlib.py
正常に実行できると、sin curveのグラフが描画される。描画されるなら問題なし。終了するにはグラフを閉じよう。
何かしらエラーが出る場合には、TAや教員に相談してみよう。
- 補足
- 再履修生は、構築した環境により実行方法が異なる。
- venv + pipで仮想環境を構築している場合には、一旦 source コマンドでその仮想環境に入ろう。例えば2021年ならここを参照。その後、step4を実行してみよう。
- condaで仮想環境を構築している場合には、まず 「conda info -e」 で仮想環境の一覧を確認する。見つかったら、「conda activate 環境名」で仮想環境を切り替えよう。その後、step4を実行してみよう。参考: Anaconda:仮想環境の構築と設定
- 再履修生は、構築した環境により実行方法が異なる。
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- 課題レポート5: 基本的な自然言語処理を実装してみよう(その2)。
- 提出先: Googleドライブのreport5を開き、自身のアカウント名でフォルダを作成し、そこにレポートおよびソースコードをアップロードせよ。
- 〆切: 第11回の講義日。
第10回: 振り返り2、JupyterLabとNumpy入門
- ミニテスト *今週はアンケート。
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- グループ演習 *時間あれば。
- Googleドライブ
- モブプロ演習の進め方
- 進捗状況
- 演習1: シェルとPythonインタプリタの使用
- 演習2: print()関数と変数の利用
- 演習3: ブーリアンと文字列処理
- 演習4: マニュアル(ヘルプor公式ドキュメント)の利用
- 演習5: 数当てゲーム1 (大小ヒント付き) を実装してみよう。
第11回: デバッグ演習2、正規表現の紹介、モジュール
- 今週のお告げ:自分なりに振り返って整理しよう。自分に合ったmindmapアプリ探してみよう。
- 例1: 道具一覧を少し整理した例 (by Freeplane, MindNode
- 例2: 教科書 pp.431-433(quick rereference), pp.435-(index)
- ミニテスト *今週はアンケート。
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- 課題レポート6: コード読解
- 提出先: Googleドライブのreport6を開き、自身のアカウント名でフォルダを作成し、そこにレポートおよびソースコードをアップロードせよ。
- 〆切: 第13回の講義日。
第12回: 浮動小数点の取り扱い、抽象化&再帰関数
- 今週のお告げ:
心身問題溜め込まず、相談しよう。[ 保健管理センター | ハラスメント相談支援センター ]
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
第13回: 例外とアサーション
- 今週のお告げ:
頭の中だけで考えるのではなく、紙の上で図を書きながら整理してみよう。
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- 課題レポート7: 原始的なインデキシングによる検索エンジンの実装
- 提出先: Googleドライブのreport7を開き、自身のアカウント名でフォルダを作成し、そこにレポートおよびソースコードをアップロードせよ。
- 〆切: 第15回の講義日。
第14回: バージョン管理システム Git入門
- 環境構築: Gitのインストール
Step 0を実行。
- 今週のお告げ:「メリハリを付けよう」。
リフレッシュする時間を確保しよう。遠隔授業を含めこれまでと異なる生活環境のため大変だと思いますが、勉強以上に大事なものは心身面での健康。体は資本なので「命を大事に」。課題等は貯めこんだり締切間近になってから焦って徹夜したりするのではなく、余裕を持って取り組もう。
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- Gitによるバージョン管理入門
- オススメ参考サイト
- Git でのバージョン コントロールの概要 (Microsoftチュートリアル)
- Git-it (コマンドラインチュートリアル)
第15回: 振り返りと今後の道標
- 今週のお告げ:「今後の道標」参照。
- ミニテスト *今回はアンケート
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- 授業評価アンケート
- お知らせ
- 期末試験期間について。
授業自体は今日で終了。8/3からはテスト期間。プログラミング1はテストありませんので、今日が最後の授業日です。なお、レポート相談等に対応するため、8/5(金) は prog チャンネル & Zoom で対応できるようにします。教室&遠隔でのハイブリッド開催。
- 勉強会について。
- 下記以外で希望あれば連絡ください。以下は現時点での予定です。
- 確定: 8/2(火), 3限目, 学サポ by 上間さん
- 案1: 8/3(水), 5限目@Zoom, 30分ぐらい。
- 案2: 8/4(木), 5限目@Zoom, 30分ぐらい。
- 確定: 8/5(金), 1限目@321&Zoom
- 課題レポート関連
- 未提出者でこれから出したい人がいたら、アップロード後にメール報告すること。
- 全レポートについて、8/12(金)までは減点付きで受け取り保証(確実)。それ以降は受け取れるか分かりません。遅れそうな場合は早めの個別相談を。相談〆切8/15(月)まで。
- 大幅遅延でも受け取るのは今回までです。後期以降は大幅減点や受け取らないケースも出てきます。
- 期末試験期間について。
- 振り返り(重要な点と、課題では特に扱っていないが大切な部分を中心に)
- シラバス
- プログラミングに含まれる3ステップ
- プログラミングの取り組み方
- デバッグ関連: [ 入門 | バグ要因発見のアプローチ例 ]
- 開発をサポートするツール: モジュール、単体テスト、型ヒント、ドキュメント、例外、アサーション、バージョン管理、、、
- 今後の道標
- 教科書の後半。
- 参考: 『フカシギの数え方』 おねえさんといっしょ! みんなで数えてみよう!
- 授業後の道標?(Python等プログラミングメイン)
- 1年次向けオススメ書籍
参考文献・サイト
- chart for python learners: Python勉強する際の情報源を目的別に整理したもの。
- 教科書・参考書
- 教科書: Introduction to Computation and Programming Using Python: With Applications and Understanding Data: 授業では「Part 1 (Chapter 7まで)」をメインに取り扱います。約100ページ。これを4回は読もう。余裕がある人は Chapter 9 以降に取り組んでみよう。必ずしも順番通りに進める必要はなく、目次や索引を眺めて興味のあるところから手を付けると良いです。
- UNIXという考え方: いわゆるUNIX哲学(下記)を学べる本。ただし癖の強い訳語も多いので、やや読みにくい。
[UNIX哲学] 「一つのことを行い、またそれをうまくやるプログラムを書け。協調して動くプログラムを書け。標準入出力(テキスト・ストリーム)を扱うプログラムを書け。標準入出力は普遍的インターフェースなのだ。」
- なぜ、あなたはJavaでオブジェクト指向開発ができないのか: Javaでの話になっていますが、プログラミング全般に共通する話題です。プログラミングにアレルギー持ってる人向けの「取り組み方処方箋」。
- オブジェクト指向でなぜつくるのか 第2版: プログラミングの歴史を踏まえつつ、どのような意図で言語が開発・改定されされているのかという側面から「オブジェクト指向」の特徴を紐解く一冊。
- 情報科学入門 Rubyを使って学ぶ: 本講義で使用する教科書の Chapter 9 以降に近い位置づけ。Python以外にも触ってみたい、情報科学ってなんだろうという視点から取り組んでみたいという人向け。
- 大学生のためのリサーチリテラシー入門: 研究のための8つの力: 物事についてどう調べ、整理し、まとめるのかという「大学生に求められる力」を整理し、取り組み方について解説している本。全員、早い段階で一読することを強くお勧めします。
- Learning Python: ガチでPythonマスターを目指したい人向け。1600ページ。
- Pythonチュートリアル 第3版: 例題中心に進みますので、動かしながら動作を確認するには向いています。ただし、これだけだと「言われたことをやる」レベルに留まりがち。
- 入門Python 3: Python3の構文から一通り学ぶための入門書。
- 独習サイト (主にPython)
- Code Studio(言語を問わず、用意されたブロックを組み合わせてパズルを解く形でプログラミング全般の考え方を学べるサイト。)
- Progate(初めてプログラミングする人向けのオンライン講義&演習。1つのコンテンツは数分程度の分量に細分化されてて、かつ、コードを自動採点するシステムが提供されています。)
- paiza(初めてプログラミングする人向けの動画講義。1つのコンテンツは数分程度に細分化されてて、かつ、コードを自動採点するシステムが提供されています。独習の進め方としては「数分動画閲覧して、自動採点される課題に取り組む」を繰り返すことになります。)
- ドットインストール(paiza同様、1つのコンテンツが数分程度の動画に細分化されて提供されてます。Python以外にも多数の言語や環境について学べます。)
- プログラミングコンテスト(Web参加可能なコンテストサイトを整理してます。日時指定があるものが多いですが、過去問やコード例が公開されてるサイトもあります。)
- CheckiO(課題をこなすことで先にすすめるゲーム型のサイトです。コード例も豊富。基本的には英語。)
- CodingBat(課題が多数例示されています。サイト上でコードの動作確認をすることも可能。)
- 言語処理100本ノック 2015(特定分野に偏っていますが、課題が難易度別に提供されてます。UNIX思想も含まれてます。)
- NLPプログラミングチュートリアル(こちらも特定分野に偏っていますが、「解説資料+演習+コード例」を見ながら勉強できます。)
- Python公式ドキュメント: [ 英語版 | 日本語版 ]
- pygame(ゲーム開発を通して学びたい人向け?)
- Code School(一部無料コースあり)
- CodeIQ(いろんな人が提示する課題に挑戦できるサイト。面白い問題を探すもよし、手当たり次第解くのもよし、どういう組織が関わってるか嗅ぎまわるもよし。)
- codecademy
- その他
- ラーニング・パターン(曰く「よりよい学びを実現するためのコツを抽出・記述したもの」。)
- レポートの書き方
- draw.io