2021年度 : プログラミング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:上原@NAL研M2。
 - 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インタプリタの起動と逐次処理・変数の利用
- 来訪可能な学生: 全員OK。2週目以降も当面OK。
 - 今週のお告げ
    
分からないことは自分から尋ねよう。
 - ミニテスト: 今週はアンケート。
    
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
 - [環境構築]
  
2021年度に初めて環境構築する人向けの説明です。再履修者は環境構築済みだと思いますので、スキップしてください。
# step 1. ターミナルを起動。 # step 2. 下記2行をそれぞれ実行。 /usr/bin/python3 -m venv ~/.venv/prog1 source ~/.venv/prog1/bin/activate コメント: sourceコマンド実行後にプロンプトが (prog1) に変わればOK。 # 以下を帰宅後に実行。 # step 3. Python環境の追加構築。 source ~/.venv/prog1/bin/activate pip install --upgrade pip pip install numpy matplotlib jupyterlab # step 4. ターミナルは閉じてOK。下記リンクを参考にAtomをインストールしよう。 テキストエディタAtomのインストール
 - [講義資料]
  
- 第1回: プログラミング概観、Pythonインタプリタの起動、逐次処理、変数の利用
    
*このページ上部のアイコンが並んでいる部分から下矢印を選び、pdfを選択すると授業資料をPDF形式でPCに保存できます。
 
 - 第1回: プログラミング概観、Pythonインタプリタの起動、逐次処理、変数の利用
    
 - 課題レポート1: print()関数と変数の利用、用語整理。
  
- 提出先: Googleドライブのreport1内の各自アカウント名。今回はテンプレートを用意済み(再履修者は自分でフォルダを作成し、sampleをコピーして利用してください)。
 - 課題に取り組む前に、報告者欄を自身の学籍番号と氏名に編集すること。協力者欄は何らかの形で誰かと相談等しながら取り組んだ場合には、書いてください。特になければそのままで構いません。
 - レベル4まで終えたら、実施日欄の年月日を編集すること。
 - 〆切: 第3回の講義日。
 
 - お便りコーナーについて
  
- 回答が次回の授業時やそれ以降で構わない場合には、上記リンクから記入ください。
 - プログラミング1を想定していますが、それ以外についても可能な範囲で対応します。気になる点・相談等あれば、次回の授業日前日までに記入。書き込み件数によりますが、基本的には授業中に回答を予定。早めに相談したい場合にはオフィスアワー使ったり、友人・先輩・教職員に対面 or Mattermost等で尋ねよう。
 
 - 関連リンク
 
第2回: Pythonインタプリタとスクリプトの体験、計算的思考
- 今週のお告げ: 
各種連絡網(教務情報,eveメール, ieメール, Mattermost)を確認しよう。教務情報・eveメールは転送設定できます。教務情報は「設定」から。eveメールはマニュアル参照。
 - ミニテスト
    
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
 - [講義資料]
 - 関連リンク
 - 備忘録
  
課題1の〆切は来週講義日です。
 - お便りコーナー
 
第3回: 関数定義とその動作、デバッグ実行入門
- 今週のお告げ: 
分からないこと、気になることは自分から相談しよう。
 - ミニテスト
    
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
 - [講義資料]
 - 課題レポート2: 自動販売機の気持ちになろう。
  
- 提出先: Googleドライブのreport2を開き、自身のアカウント名でフォルダを作成し、そこにレポートおよびソースコードをアップロードせよ。
 - 〆切: 第5回の講義日(5/14)。
 
 
第4回: 条件分岐
- 今週のお告げ: 
新しい概念・用語に出会ったら自分なりに説明してみよう。(ラーニング・パターン No.31: はなすことでわかる)
 - ミニテスト
    
出欠確認を兼ねています。必ず回答ください。
知能情報コースの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」でログインしてください。
 - [講義資料]
 - 残り時間:モブプロ演習の続き。
 
第7回: シーケンス、リスト型、辞書型、集合
- お知らせ: 質問対応について => Mattermost参照。
 - ミニテスト
    
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
 - [講義資料]
 - 課題レポート4: 基本的な自然言語処理を実装してみよう(その1)。
  
- 提出先: Googleドライブのreport4を開き、自身のアカウント名でフォルダを作成し、そこにレポートおよびソースコードをアップロードせよ。
 - 〆切: 第9回の講義日。
 
 
第8回: ファイル入出力、型ヒント、ドキュメンテーション
- 今週のお告げ:「時間配分を意識しよう」。
なにか難しいことに直面した際にまずは自分で頑張ろうと取り組むことは大切です。だけど、例えば毎週課題が出るような授業があったとして、その課題一つに10時間かけるのはどうだろうか。勿論「大好きな科目なので時間をいくら注ぎ込んでも良い」とか何かしら理由があってのことなら問題ありません。しかし特別な理由なしに延々と自己解決だけで時間を使う自習方法は、アプローチが宜しくない。「この課題は途中で20分進展しなかったら相談する」とか設定してみて、他を頼るタイミングを作ってみよう。
 - ミニテスト *今週はアンケート。
    
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
 - [講義資料]
  
- ファイル入出力の基本
 - 型ヒント
 - docstringドキュメント
 - 時間に余裕があれば:リスト操作時の注意点以降。
 
 
第9回: doctest、スタックフレーム、関数のデフォルト値
- [確認事項: numpy, matplotlibの動作確認。]
  
- (再履修生は恐らくcondaで環境構築済みのため、step 1,2 は不要。step 3 以降をやってください)
 - step 1: ターミナルで uname -m を実行する。x86_64 と出力されることを確認。
      
もし arm64 と出力されるなら、環境構築し直しが必要。以下の手順(x86_64設定、仮想環境構築し直し)で構築し直そう。
- (1) ターミナルを終了(⌘Q)する。
 - (2) Finderで「アプリケーション」フォルダを開く。その中の「ユーティリティ」フォルダに移動する。
 - (3) ターミナルを選択し、Ctrlを押しながらクリックしてサブメニューを出す。そこから「情報を見る」を選択。
 - (4) 「Rosettaを使用して開く」にチェックを入れて、閉じる。
 - (5) ターミナルを起動し、uname -m を実行して x86_64 と出力されることを確認。
 
[ターミナルを x86_64 で起動するための設定] 上記確認後、python仮想環境を構築し直そう。
- (1) 古い環境を消すために次のコマンドを実行。rm ~/.venv/prog1/
 - (2) 仮想環境構築:/usr/bin/python3 -m venv ~/.venv/prog1
 - (3) 仮想環境に入る:source ~/.venv/prog1/bin/activate
 - (4) pipの更新:pip install --upgrade pip
 - (5) 外部モジュールのインストール:pip install numpy matplotlib jupyterlab
 
[Python仮想環境の構築し直し]  - ターミナルが x86_64 で起動していることを確認できたら、step 2 以下に進む。
 - step 2: ターミナルを立ち上げ、source ~/.venv/prog1/bin/activate を実行し、仮想環境に入る。
 - step 3: ディレクトリを移動:cd prog1
 - step 4: サンプルコードをダウンロード:curl -O https://ie.u-ryukyu.ac.jp/~tnal/2021/prog1/static/samples/numpy_matplotlib.py
 - step 5: サンプルコードを実行:python numpy_matplotlib.py
      
正常に実行できると、sine curveのグラフが描画される。描画されるなら問題なし。終了するにはグラフを閉じよう。
何かしらエラーが出る場合には、step 1の[Python仮想環境の構築し直し]で構築し直そう。
 
 - ミニテスト *今週はアンケート。
    
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
 - [講義資料]
  
- doctest
 - 関数の補足(スタックフレーム、デフォルト値)
 - 時間に余裕があれば:リスト操作時の注意点以降。
 
 - 課題レポート5: 基本的な自然言語処理を実装してみよう(その2)。
  
- 提出先: Googleドライブのreport5を開き、自身のアカウント名でフォルダを作成し、そこにレポートおよびソースコードをアップロードせよ。
 - 〆切: 第11回の講義日。
 
 
第10回: 振り返り2、JupyterLabとNumpy入門
- ミニテスト *今週はアンケート。
    
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
 - [講義資料]
  
- リスト操作時の注意点 *後回しになってたもの。
 - 振り返り2
 - Jupyter Lab を使ってみよう
 - Numpyを使ったベクトル・行列演算入門
 
 
第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入門
- 今週のお告げ:「メリハリを付けよう」。
リフレッシュする時間を確保しよう。遠隔授業を含めこれまでと異なる生活環境のため大変だと思いますが、勉強以上に大事なものは心身面での健康。体は資本なので「命を大事に」。課題等は貯めこんだり締切間近になってから焦って徹夜したりするのではなく、余裕を持って取り組もう。
 - ミニテスト
    
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
 - [講義資料]
 
第15回: 振り返りと今後の道標
- 今週のお告げ:「問題解決の仕方を学ぼう」。
先輩・友人らに教えてもらいながら演習・課題に取り組むのはとても良いこと。だけど「言われたとおりに手を動かすだけだと、その後一人で同じことを再現したり、応用したりできない」ままです。もしそういう状況になっていると、これは学びになっていません。コピー機と一緒です。そうではなく、「何故そういう風に取り組むのか」「今どう取り組めばよいのか」といった問題解決の仕方を学ぼう。
 - ミニテスト *今回はアンケート
    
出欠確認を兼ねています。必ず回答ください。
知能情報コースのG-mailアドレス「@ie.u-ryukyu.ac.jp」でログインしてください。
 - 授業評価アンケート
 - お知らせ
  
- 期末試験期間について。
    
授業自体は今日で終了。8/2からはテスト期間。プログラミング1はテストありませんが、レポート相談等に対応するため、8/6(金), 8:30〜10:00 は prog チャンネル & Zoom で対応できるようにします。教室開催も検討中。=>
教室でも開催。オンライン併用。=> 遠隔のみに変更。 - 勉強会について。
    
アンケート取りながら夏休み期間にも実施してみようと思います。なにか希望あれば連絡ください。=> 8/20(金), 2限目
 
 - 期末試験期間について。
    
 - 課題レポート関連
  
- 未提出者でこれから出したい人がいたら、アップロード後にメール報告すること。
 - 全レポートについて、8/11(水)までは減点付きで受け取り保証(確実)。それ以降は受け取れるか分かりません。遅れそうな場合は早めの個別相談を。相談〆切8/11(水)まで。
 - 大幅遅延でも受け取るのは今回までです。後期以降は大幅減点や受け取らないケースも出てきます。
 
 - 振り返り(重要な点と、課題では特に扱っていないが大切な部分を中心に)
    
- シラバス
 - プログラミングに含まれる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