2023年度 : プログラミング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:調整中。
- TA2:調整中。
- 講義資料
- 第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」でログインしてください。
- [環境構築]
2023年度に初めて環境構築する人向けの説明です。インストール大会に参加した人はスキップして構いません。再履修者は環境構築済みだと思いますので、スキップしてください。
- 授業中の質問相談について
- 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回の講義日。
- 授業後の質問相談について
- Teams, Mattermost, もしくはメールを利用ください。できるだでクラス共有したいので、できればDMは避けてください。どうしてもDMが良い人はDMでも構いません。
- 困っているのは何か。どうやろうとしたのか。どう駄目だったのか。
- 例: 課題レポート1のLevel2で困っている。変数使っているつもりだがエラーが出る。具体的に書いたコードは○○。実行すると○○と出力されており、想像と異なる。
- 来週以降の授業の進め方
- 約30分のオンデマンド授業 + 当日約60分の教室授業
- オンデマンド授業は、Teamsにアップロードしてあるオンデマンド用コンテンツ(動画)を指します。これを毎週講義日前までに各自で取り組んでください。閲覧だけで済む場合もありますし、実際に手を動かす演習を含むこともあります。
- 授業当日は、9時開始とします。8:30に来なくても構いません。ただし教員とサポートスタッフは8:30から教室待機しています。授業開始前の時間帯は、先週授業やオンデマンド授業、課題などに対する相談対応の時間として利用できます。友人らとの相談や雑談に使ってもらっても構いません。
- オンデマンドの録画時間に応じて、当日授業開始時間を少し調整します。
- 関連リンク
第2回: Pythonインタプリタとスクリプトの体験、計算的思考
- オンデマンド:2023prog1-week2-ondemand.mp4 (復習込み37分)
- 今週のお告げ: 課題の提出方法。
期限内にGoogleドライブの指定箇所に提出。課題1はこちらで用意していたので、編集し終えるだけで提出したことになります。締め切り後、採点する際に編集されているところまでをチェックします。課題2以降は自身でフォルダやレポートファイルを作成することになります。
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- 第2回: Pythonインタプリタとスクリプトの体験、計算的思考
4.3節 str.formatは来週以降にやる予定。
- 第2回: Pythonインタプリタとスクリプトの体験、計算的思考
- 関連リンク
- エディタの例: [ CotEditor | Sublime | ATOM ] *ATOMは開発停止。
- Reserved words
- Google Python Style Guide
- Python 3.10 documentation
- str.format
- 備忘録
課題1の〆切は来週講義日です。
第3回: 関数定義とその動作、デバッグ実行入門
- オンデマンド:2023prog1-week3-ondemand.mp4 (約22分)
- 今週のお告げ:
分からないこと、気になることは自分から相談しよう。
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- 課題レポート2: 自動販売機の気持ちになろう。
- 提出先: Googleドライブのreport2を開き、自身のアカウント名でフォルダを作成し、そこにレポートおよびソースコードをアップロードせよ。
- 〆切: 第5回の講義日。
第4回: 条件分岐
- オンデマンド:2023prog1-week4-ondemand.mp4 (約20分)
- 今週のお告げ: 課題の採点について。
- 採点結果をgoogleドライブの「score」に掲載しています。
- 1項目辺り5点以上の減点がある場合には、再提出により改善することが可能です。ただし満点にはなりません。希望する人は、(1) 修正前後がわかるようにレポートに記載し、(2) メールで修正概要を報告してください。(Mattermostではなくメールです)
- 未提出社でこれから遅延提出する人は、減点付きで受け取ります。提出後にメールで報告してください。
- TA一人は来週から授業時間外でのサポートに変更。
- 火3、地創棟5階リフレッシュルーム
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料スライド]
- 課題レポート2: 提出締め切り:第5回の講義日。
第5回: ループ処理
- オンデマンド:2023prog1-week5-ondemand.mp4 (約32分)
- 今週のお告げ:「問題解決の仕方を学ぼう」。
Web検索や友人レポートを参考にしたり、先輩・友人らに教えてもらいながら演習・課題に取り組むのはとても良いこと。だけど「言われたとおりに手を動かすだけだと、その後一人で同じことを再現したり、応用したりできない」ままです。もしそういう状況になっていると、これは学びになっていません。コピー機と一緒です。そうではなく、「何故そういう風に取り組むのか」「今どう取り組めばよいのか」「こういうアプローチの仕方もあるのか」といった問題解決の仕方を学ぼう。
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- 演習(ペア・プログラミング)
- Googleドライブ
- ペアプロ演習の進め方
- 進捗状況
設問を終える毎に「ペアプロ記録」に日付を記入しよう。
- 演習1: シェルとPythonインタプリタの使用
- 演習2: print()関数と変数の利用
- 演習3: ブーリアンと文字列処理
- 演習4: マニュアル(ヘルプor公式ドキュメント)の利用
- 演習5: 数当てゲーム1 (大小ヒント付き) を実装してみよう。
- 課題レポート3: 基本的な統計処理を実装してみよう。
- 提出先: Googleドライブのreport3を開き、自身のアカウント名でフォルダを作成し、そこにレポートおよびソースコードをアップロードせよ。
- 〆切: 第7回の講義日。
第6回: 振り返り
- オンデマンド:2023prog1-week6-ondemand.mp4 (約21分)
- 今週のお告げ: 自分に合ったinput/outputのバランスを探そう。
inputだけでもoutputだけでも、どちらか片方だけでは学びは深まらない。教科書読んでるけど良く分からない人は、それを何らかの形でoutputしてみよう。outputできない人は教科書を読み直して自分で説明できない箇所がないか探してみよう。
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- 演習(ペア・プログラミング)
- Googleドライブ
- ペアプロ演習の進め方
- 進捗状況
- 演習1: シェルとPythonインタプリタの使用
- 演習2: print()関数と変数の利用
- ミニ演習
- 演習3: ブーリアンと文字列処理
- 演習4: マニュアル(ヘルプor公式ドキュメント)の利用
- 演習5: 数当てゲーム1 (大小ヒント付き) を実装してみよう。
第7回: シーケンス、リスト型、辞書型、集合
- オンデマンド:2023prog1-week7-ondemand.mp4 (約30分)
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- 課題レポート4: 基本的な自然言語処理を実装してみよう(その1)。
- 提出先: Googleドライブのreport4を開き、自身のアカウント名でフォルダを作成し、そこにレポートおよびソースコードをアップロードせよ。
- 〆切: 第9回の講義日。
第8回: ファイル入出力、型ヒント、ドキュメンテーション
- オンデマンド:2023prog1-week8-ondemand.mp4 (約32分)
- 今週のお告げ: 「時間配分を意識しよう」。
なにか難しいことに直面した際にまずは自分で頑張ろうと取り組むことは大切です。だけど、例えば毎週課題が出るような授業があったとして、その課題一つに10時間かけるのはどうだろうか。勿論「大好きな科目なので時間をいくら注ぎ込んでも良い」とか何かしら理由があってのことなら問題ありません。しかし特別な理由なしに延々と自己解決だけで時間を使う自習方法は、アプローチが宜しくない。「この課題は途中で20分進展しなかったら相談する」とか設定してみて、他を頼るタイミングを作ってみよう。
- ミニテスト *今週はアンケート。
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- ファイル入出力の基本
- 型ヒント
- docstringドキュメント
- 時間があれば:シーケンス集合(str, list, tuple)の10.4.3「リスト操作時の注意点」〜10.5.1「リスト内包表記」 => 次回以降
第9回: doctest、スタックフレーム、関数のデフォルト値
- オンデマンド:2023prog1-week9-ondemand.mp4 (約27分)
- 第10回目に向けた環境構築: pandas, plotlyのインストールと動作確認。
- 再履修者も他授業で使っていなければインストールしていないはず。
- step 1: pandas, plotly, japanize-matplotlibのインストール。
conda install pandas plotly pip install japanize-matplotlib
- step 2: 作業ディレクトリ(~/prog1/を想定)に移動して、コード例をダウンロード。
cd ~/prog1 curl -O https://ie.u-ryukyu.ac.jp/~tnal/2023/prog1/static/samples/example_pnadas_plotly.ipynb
- step 3: 動作確認のためJupyterLabを起動し、実行。
# JupyterLabを起動 jupyter lab # 実行したいファイルの選択&実行 # (a) 左パネルのフォルダアイコンをクリック。 # (b) 「example_pandas_plotly.ipynb」をダブルクリック。 # これでコード例を右パネルに表示できる。 # (c) Runメニューから「Run All Cells」を選択。 # しばらく待って表やグラフが出力されるならOK。
- 補足
- 再履修生は、構築した環境により実行方法が異なる。
- conda利用者(2021年度、2022年度のインストール大会で環境構築した人)は、2023年資料通りで動くはず。
- condaで仮想環境を構築している場合には、まず 「conda info -e」 で仮想環境の一覧を確認する。見つかったら、「conda activate 環境名」で仮想環境を切り替えよう。その後、step1を実行してみよう。参考: Anaconda:仮想環境の構築と設定
- venv + pipで仮想環境を構築している場合には、一旦 source コマンドでその仮想環境に入ろう。例えば2021年ならここを参照。その後、step1を実行してみよう。ただし全てpipでインストールすること。
- 再履修生は、構築した環境により実行方法が異なる。
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- doctest
- 関数の補足(スタックフレーム、デフォルト値)
- 時間があれば:シーケンス集合(str, list, tuple)の10.4.3「リスト操作時の注意点」〜10.5.1「リスト内包表記」
- 提出先: Googleドライブのreport5を開き、自身のアカウント名でフォルダを作成し、そこにレポートおよびソースコードをアップロードせよ。
- 〆切: 第11回の講義日。
第10回: 振り返り2、JupyterLabとNumpy入門
- オンデマンド:2023prog1-week10-ondemand.mp4 (約29分)
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- 環境構築(第9回参照)
- [講義資料]
- 振り返り2
- Jupyter Lab を使ってみよう
- example_pnadas_plotly.ipynb(第9回の環境構築でダウンロードしたノートブック)
- Numpyを使ったベクトル・行列演算入門
第11回: デバッグ演習2、正規表現の紹介、モジュール
- オンデマンド:2023prog1-week11-ondemand.mp4 (約26分)
- 今週のお告げ:自分なりに振り返って整理しよう。用途や向き不向きがあるため自分に合った整理ツール探してみよう。
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- 課題レポート6: コード読解
- 提出先: Googleドライブのreport6を開き、自身のアカウント名でフォルダを作成し、そこにレポートおよびソースコードをアップロードせよ。
- 〆切: 第13回の講義日。
第12回: 浮動小数点の取り扱い、抽象化&再帰関数
- オンデマンド:2023prog1-week12-ondemand.mp4 (約25分)
- 連絡事項
- 課題6: 2種類リンクが辿れる状況です。どちらでも構いません。
- 課題のコード例(現時点で課題4まで)
- 仮総合評価
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- 演習(ペア・プログラミング) *時間あれば。
- Googleドライブ
- ペアプロ演習の進め方
- 進捗状況
- 演習1: シェルとPythonインタプリタの使用
- 演習2: print()関数と変数の利用
- ミニ演習
- 演習3: ブーリアンと文字列処理
- 演習4: マニュアル(ヘルプor公式ドキュメント)の利用
- 演習5: 数当てゲーム1 (大小ヒント付き) を実装してみよう。
第13回: 例外とアサーション
- オンデマンド:2023prog1-week13-ondemand.mp4 (約30分)
- 今週のお告げ:
心身問題溜め込まず、相談しよう。[ 保健管理センター | ハラスメント相談支援センター ]
- 環境確認: git
- ターミナルから「git --version」と実行。バージョンが出力されるならok。
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- 課題レポート7: 原始的なインデキシングによる検索エンジンの実装
- 提出先: Googleドライブのreport7を開き、自身のアカウント名でフォルダを作成し、そこにレポートおよびソースコードをアップロードせよ。
- 〆切: 第15回の講義日。
- 演習(ペア・プログラミング) *時間あれば。
- Googleドライブ
- ペアプロ演習の進め方
- 進捗状況
- 演習1: シェルとPythonインタプリタの使用
- 演習2: print()関数と変数の利用
- ミニ演習
- 演習3: ブーリアンと文字列処理
- 演習4: マニュアル(ヘルプor公式ドキュメント)の利用
- 演習5: 数当てゲーム1 (大小ヒント付き) を実装してみよう。
第14回: バージョン管理システム Git入門
- オンデマンド:2023prog1-week14-ondemand.mp4 (約31分)
- 環境構築:
gitがインストールされていない人は、GitのインストールのStep 0を実行。
- 今週のお告げ: 不正はしないように、、。
- ミニテスト
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- Gitによるバージョン管理入門
- オススメ参考サイト
- Git でのバージョン コントロールの概要 (Microsoftチュートリアル)
- Git-it (コマンドラインチュートリアル)
第15回: 振り返りと今後の道標
- オンデマンド: 下記動画を閲覧ください。2つ目までは必須。3つ目以降は興味があればどうぞ。
- 今週のお告げ:「今後の道標」参照。
- ミニテスト *今回はアンケート
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
- 授業評価アンケート
- 振り返り(重要な点と、課題では特に扱っていないが大切な部分を中心に)
- シラバス
- プログラミングに含まれる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