2023年度 : プログラミング2
- シラバス
- 講義用Mattermost: prog チャンネル。 *プログラミング1で利用してましたが、プログラミング2でも継続利用。全員向け通知は全てslackでやります。
- 連絡先:
- 當間愛晃 (Naruaki TOMA)@工1-705
- オフィスアワー: 水2予定
- E-mail: tnal@ie.u-ryukyu.ac.jp
- Twitter: @naltoma
- サポーターの皆さん: 技術職員&TA (Teaching Assistanct)
- 技術職委員1: 小林 夏樹さん@地創棟506: 授業サポート、マシントラブルサポート等を担当。
- TA予定: 上間さん、屋比久さん@NAL研
- 参考文献・サイト
- 講義資料
- 第1回: コンパイラ言語(インタプリタとコンパイラ、静的な型付け、型宣言)、Javaの基本知識(変数と定数,演算子,型変換,配列,制御文), report 1
- 第2回: 基礎知識2(データ型、キャスト、命名規則、基本ライブラリ、演算子、while文、ジャンプによる制御)
- 第3回: オブジェクト指向1: クラスとインスタンス,コンストラクタ, report 2
- 第4回: オブジェクト指向2: 参照、コンストラクタのオーバーロード、カプセル化
- 第5回: バージョン管理とGitHubの利用, report 3
- 第6回: gradle による構成管理、JUnitによるユニットテスト、jarの利用、ドキュメンテーション
- 第7回: 継承と継承ツリー、Override, report 4
- 第8回: 抽象クラスとインタフェース
- 第9回: 例外(File I/Oを例に), report 5
- 第10回: 多態性、コレクション入門, report 6
- 第11回: 高度なデバッグ実行(スタックフレームの移動、条件ブレーク)
- 第12回: 静的メンバ
- 第13回: 振り返り2(実践的なプログラミング,継承,隠蔽,オーバーロード,オーバーライド,多態性)
- 第14回: C言語入門1(制御文、関数、コンパイル、実行), report 7(C言語レポート1回)
- 第15回: C言語入門2(配列、構造体) *余裕あればポインタも。
- (第16回: レポート未提出者対応)
第1回: コンパイラ言語(インタプリタとコンパイラ、静的な型付け、型宣言)、Javaの基本知識(変数と定数,演算子,型変換,配列,制御文)
- アナウンス
- 講義用Mattermost:
progチャンネル *プログラミング1で利用してましたが、プログラミング2でも継続利用。全員向け通知は全てMattermostでやります。
- 1週目、2週目は2限目(プログラミング演習2)もプログラミング2の時間として利用。
- 環境構築: VSCodeの環境構築
- 授業中の質問対応
- Mattermost/~prog1-質問 で「質問です」と書いてください。サポーターの皆さんが対応します。
- レポート提出延長について
後期のレポート提出延長は、試験期間まで。それ以降は受け取れません。これは16単位未満除籍チェックのため、大学的に時間が取れないことも関係していますが、元々本来は遅延提出そのものがおかしいことに注意。(病気等本人努力の問題ではどうしようもない理由は情状酌量の余地があります)
- 教科書に関する補足
- 予習:教科書読み5章まで。余裕があるなら6章も。約200ページだが、大半はPythonで学んだ概念を Java ならどう書くかという内容です。分かる部分はどんどんスキップし、適宜振り返って使おう。
- dokojavaは授業では使いません。個々人で気になる人は使ってください。
- 来週以降の授業の進め方
- 約30分のオンデマンド授業 + 当日約60分の教室授業
- オンデマンド授業は、Teamsにアップロードしてあるオンデマンド用コンテンツ(動画)を指します。これを毎週講義日前までに各自で取り組んでください。閲覧だけで済む場合もありますし、実際に手を動かす演習を含むこともあります。
- 授業当日は、9時開始とします。8:30に来なくても構いません。ただし教員とサポートスタッフは8:30から教室待機しています。授業開始前の時間帯は、先週授業やオンデマンド授業、課題などに対する相談対応の時間として利用できます。友人らとの相談や雑談に使ってもらっても構いません。 オンデマンドの録画時間に応じて、当日授業開始時間を少し調整します。
- 講義用Mattermost:
- ミニテスト:出欠確認
補足: 学科のG-mailアドレス「e2357xx@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- VSCodeの環境構築 *再掲
- Visual Studio Code での開発の流れ
- 初めてのJava(例題2〜3ぐらいまで)
- 授業録画アーカイブ: => Teams参照。
- [レポート課題] 課題レポート1: Javaの言語仕様に慣れよう
- 提出先: Google driveの「report1」。各自、学科アカウント名でフォルダを作成し、その中に提出すること。
- レポート形式は一般的に読める形式であれば問わない。e.g., Word等での作成=>アップロードもOK。
- 〆切: 第3回の講義日。
- [ペアプロ演習: 一人も、3〜4名でのチームでも可]
- 演習1: Javaに慣れよう
- Google drive
- ペアプロ演習の進め方
- 進捗状況
- 関連リンク
- 公式ドキュメント: JDK 17 [ API | Documentation ]
- Progate: Java I, II(初めてプログラミングする人向けの解説+演習。一歩ずつゆっくり進みます)
第2回: 基礎知識2(データ型、キャスト、命名規則、基本ライブラリ、演算子、while文、ジャンプによる制御)
- オンデマンド代わり:教科書5章まで30分程度。
- 教科書補足
- 教科書読み6章まで。約260ページだが、大半はPythonで学んだ概念を Java ならどう書くかという内容です。今すぐ覚える文法を100%必要はありません。「こう書けば良さそうだ」と分かったらどんどんスキップし、必要なときに振り返って使おう。何度か繰り返していくうちに覚えます。
- dokojavaは使わない。
- 「c:¥hoge¥fuga」のような「¥」は、Windows系OSにおけるフォルダ構成を示していると解釈しよう。
- 分かるところはスキップしよう。
- e.g., 各章の最後にある「練習問題」をやると簡単にチェックできるはず。コードはできるだけ動かして確認するようにしよう。
- ミニテスト
補足: 学科のG-mailアドレス「e2357xx@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- [モブプロ演習 => ソロ演習+α]
- 演習1: Javaに慣れよう
- Google driveの「ex1」。 *使いたい人orグループは使ってください。必須ではありません。
- 関連リンク
- 公式ドキュメント: JDK 17 [ API | Documentation ]
- Progate: Java I, II(初めてプログラミングする人向けの解説+演習。一歩ずつゆっくり進みます)
- 次週予定: オブジェクト指向入門
第3回: オブジェクト指向1: クラスとインスタンス,コンストラクタ
- オンデマンド:2023prog2-week3-ondemand.mp4 (約30分, .pdf, .javaあり)
- お知らせ:
- シラバスに古いURLが記載されていました。この古いURLをブックマークして利用している人は、新しいURLに変更しておいてください。なおミニテストについて古い方で回答していた分についてはこちらで対応しますので、改めて新しい方で回答する必要はありません。(既に回答しし直した人はそのままで構いません)
- 学サポ:金3。地創棟5階リフレッシュルーム&Zoom。
都合悪いなら再調整検討
- ミニテスト
補足: 学科のG-mailアドレス「e3257xx@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- [モブプロ/ペアプロ/ソロ演習]
- 演習1: Javaに慣れよう
- Google driveの「ex1」。 *使いたい人orグループは使ってください。必須ではありません。
- 課題
- [レポート課題] 課題レポート2: クラス検討してみよう。
- 〆切: 第5回の講義開始前。
- 3ページ上限。
- 提出先: Google driveの「report2」。各自、学科アカウント名でフォルダを作成し、その中に提出すること。
第4回: オブジェクト指向2: 参照、コンストラクタのオーバーロード、カプセル化
- オンデマンド:2023prog2-week4-ondemand.mp4 (約23分)
- 連絡&補足
- レポート遅延提出・再提出する際には、レポートをアップロード後に必ずメールで報告すること。最終受付は1週目に説明済みです。
- クラス、オブジェクト、インスタンスを区別して使い分ける練習をしよう。
- ミニテスト
補足: 学科のG-mailアドレス「e2357xx@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- オブジェクト指向2: 参照、コンストラクタのオーバーロード、カプセル化
- 演習: 演習2: クラス実装に慣れよう
- Google driveの「ペアプロ記録」、「演習2」。 *使いたい人orグループは使ってください。必須ではありません。
- 宿題
- レポート2: 第5回の講義日。
- Git復習
- 教科書読み: 9章、13章。余裕があれば10〜12章も。
第5回: バージョン管理とGitHubの利用
- オンデマンド:2023prog2-week5-ondemand.mp4 (約37分)
- 事前準備。課題3に取り組む前にやる必要があります。
gradleのインストール。参考: 事前にやる環境構築
- 今週のお告げ:
分からないことをググる(ChatGPTに質問する)のは良いが、信用しすぎないように注意。
参考: 国立大学法人琉球大学における生成AI利用に関するガイドラインの制定について(学長メッセージ) - ミニテスト
補足: 学科のG-mailアドレス「e2357xx@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- Git振り返り(前期資料)
- Git + GitHub演習(演習2しながら)
- 課題3の準備。
- [モブプロ/ペアプロ/ソロ演習]
- 演習2: クラス実装に慣れよう
- Google driveの「演習2」。 *使いたい人orグループは使ってください。必須ではありません。
- 宿題
- [レポート課題] 課題レポート3: リファクタリングを通してユニットテストとバージョン管理に慣れよう
〆切: 第7回の講義日。
3ページ上限。ソースコードはGitHubに提出してもらうので、レポート内にコード全体のコピペは不要。レポートは的を絞って書いて下さい。
ステップ毎に git push すること。
- 教科書読み: これまでの復習。余裕があれば10章(継承)を予習。
- [レポート課題] 課題レポート3: リファクタリングを通してユニットテストとバージョン管理に慣れよう
第6回: gradle による構成管理、JUnitによるユニットテスト、jarの利用、ドキュメンテーション
- オンデマンド:2023prog2-week6-ondemand.mp4 (約30分)
- (今週のお告げ)
- ミニテスト *今週はアンケート。Gradle演習後にやります。
補足: 学科のG-mailアドレス「e2257xx@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- Gradle + JUnit 5 入門
授業資料では ex-gradle を使っていますが、これは課題3に設定しており説明済みです。6週目は別例として、TicTacToeを利用します。[ Main.java | TicTacToe.java | TicTacToeTest.java ]を例に説明します。これらを gradle プロジェクトを作成し、以下のように配置し、パッケージ名を修正して利用します。
src/main/java/Main.java
src/main/java/sample/TicTacToe.java
src/test/java/sample/TicTacToeTest.java
- Gradle + JUnit 5 入門
- [モブプロ/ペアプロ/ソロ演習]
- 演習2: クラス実装に慣れよう
- Google driveの「演習2」。 *使いたい人orグループは使ってください。必須ではありません。
- 演習1: Javaに慣れよう *演習2を終えたら演習1。
- 宿題
- 教科書読み: これまでの復習。余裕があれば10章(継承)を予習。
第7回: 継承と継承ツリー、Override
- オンデマンド:2023prog2-week7-ondemand.mp4 (約28分)
- ミニテスト
補足: 学科のG-mailアドレス「e2357xx@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- 継承
- コード例
- 会員クラスの例(オンデマンド動画、Teams参照)
- Github: ex-inheritance
- 課題
- [レポート課題] 課題レポート4: リファクタリングを通して継承に慣れよう
〆切: 第9回の講義日。
3ページ上限。
- [レポート課題] 課題レポート4: リファクタリングを通して継承に慣れよう
- [モブプロ/ペアプロ/ソロ演習]
- 演習2: クラス実装に慣れよう
- Google driveの「演習2」。 *使いたい人orグループは使ってください。必須ではありません。
- 演習1: Javaに慣れよう *演習2を終えたら演習1。
第8回: 抽象クラスとインタフェース
- オンデマンド:2023prog2-week8-ondemand.mp4 (約28分)
- 今週のお告げ: 「動作確認する方法を考えよう。」
例えば、課題3からコードの提出先をGitHubにしました。多くの学生は問題ありませんが、「本人はpushしているつもりだが、実際にはされていない」ケースも少なくありませんでした。pushできたかどうかはどう確認したら良いでしょうか? 今回のgit/GitHubに限らず、何かを実行する際にはそれが適切に動作しているかどうかを確認する方法を考え、実際に確認する癖をつけるようになりましょう。
- ミニテスト
補足: 学科のG-mailアドレス「e2357xx@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- [モブプロ演習] *時間あれば。
- 演習1: Javaに慣れよう
- 演習2: クラス実装に慣れよう
- 演習3: Git, GitHubに慣れよう
- Google drive。 *使いたい人orグループは使ってください。必須ではありません。
第9回: 例外(File I/Oを例に)
- オンデマンド:2023prog2-week9-ondemand.mp4 (約30分)
- 今週のお告げ:
PCは壊れるもの。USBメモリや外付けHDD等も同様。バックアップを大切に。重要度に応じて二重三重に。
- ミニテスト
補足: 学科のG-mailアドレス「e2357xx@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- 例外(File I/Oを例に), 教科書17章, 18.1節。
- java.nio
- 課題
- [レポート課題] 課題レポート5: 例外に慣れよう
〆切: 第11回の講義日。
3ページ上限。
- [レポート課題] 課題レポート5: 例外に慣れよう
- [モブプロ演習] *時間あれば。
- 演習1: Javaに慣れよう
- 演習2: クラス実装に慣れよう
- 演習3: Git, GitHubに慣れよう
- チームでgoogleドライブ共有したい人はどうぞ。
第10回: 多態性、コレクション入門
- オンデマンド:2023prog2-week10-ondemand.mp4 (約25分)
- 今週のお告げ:
レポート再提出・遅延提出について。期日は1週目参照。アップロード後、メールで報告すること。
- ミニテスト
補足: 学科のG-mailアドレス「e2357xx@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- 多態性(ポリモーフィズム; Polymorphism) *軽い復習のみ。
- コレクション入門: 教科書16.1節。
- 課題(Java最終課題)
- [レポート課題] 課題レポート6: Java最終課題(小作品制作、仕上げ)について
〆切: 第14回の講義日。
10ページ上限。
- [レポート課題] 課題レポート6: Java最終課題(小作品制作、仕上げ)について
- [モブプロ演習] *時間あれば。
- 演習1: Javaに慣れよう
- 演習2: クラス実装に慣れよう
- 演習3: Git, GitHubに慣れよう
- チームでgoogleドライブ共有したい人はどうぞ。
第11回: 高度なデバッグ実行(スタックフレームの移動、条件ブレーク)
- オンデマンド:2023prog2-week11-ondemand.mp4 (約38分)
- お知らせ
- 課題5の〆切:今日。
- 課題6の〆切:第14回の講義日(説明済み)。
- 今週のお告げ:
My辞書を作ろう。新しいことを学ぶ際にはそれを表現する新たな用語や、これまでとは違う意味合いで用いる用語が出てくる。分からない用語に出会ったらまずリストしておき、時間のある時に調べ、自分なりに整理してみよう。説明・出典・用例等自分で振り返りやすくなるように作り上げてみよう。
例: scrapbox: ie-ryukyu
- ミニテスト *今週はアンケート。
補足: 学科のG-mailアドレス「e2357xx@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- デバッガの利用
- コード例: noisy_file
- 関連: 教科書 付録B: エラー解決・虎の巻
- おまけ: シンプルなチャットサーバ&クライアントのコード例
- [モブプロ演習] *時間あれば。
- 演習1: Javaに慣れよう
- 演習2: クラス実装に慣れよう
- 演習3: Git, GitHubに慣れよう
- 演習4: 継承とインタフェースを使ってみよう
- googleドライブ: 演習終わる都度「ペアプロ記録」に日付を記入していってください。
第12回: 静的メンバ
- オンデマンド:2023prog2-week12-ondemand.mp4 (約12分)
- 連絡
- 諸事情で今日は2限目も當間が「プログラミング2」の内容でやります。具体的にはC言語の環境構築と演習です。2限目に他の授業を入れている再履修者はそちらを優先し、後日自身で対応してください。
- 課題6の〆切は予定通りのまま(本来の14週目、2024年1月23日(火))。
- 来週火曜日(12/26)は休みですが、2限目にプログラミング相談受付予定。
- ミニテスト *アンケート。
補足: 学科のG-mailアドレス「e2357xx@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- [モブプロ演習] *時間あれば。
- 演習1: Javaに慣れよう
- 演習2: クラス実装に慣れよう
- 演習3: Git, GitHubに慣れよう
- 演習4: 継承とインタフェースを使ってみよう
- googleドライブ: 演習終わる都度「ペアプロ記録」に日付を記入していってください。
第13回: 振り返り2(実践的なプログラミング,継承,隠蔽,オーバーロード,オーバーライド,多態性)
- オンデマンド:2023prog2-week13-ondemand.mp4 => なし。12/19(火), 2限目に実施済み。
- 来週に向けた準備
- 今週のお告げ: outputを伴う振り返りを大切に
- 単に何度もやり直すのも良いが、俯瞰したり細部をみたりという立ち位置を意識することで理解を深めよう。
- 例: 実践性達成目標.zip (古) at Google共有フォルダ
分かりやすいように感じる解説サイト、書籍は探せばあるかもしれない。しかし読む(input)だけでは「分かったつもり」になりがち。inputだけで学べる人は超人ぐらいです。私自身含めて一般人は、自由に使ってみたり、整理して自分地図作ってみたりといったoutputもしよう。参考書を自分で作るぐらいのつもりで書いてみると、それ自体が理解向上に繋がります。まずは自分の興味のある科目・分野だけで十分なので、outputを大切にしよう。
- ミニテスト
補足: 学科のG-mailアドレス「e2357xx@ie.u-ryukyu.ac.jp」でログインしてください。
- [講義資料]
- 宿題締め切り
課題レポート6、第14回の講義日。
- [モブプロ演習] *時間あれば。
- 演習1: Javaに慣れよう
- 演習2: クラス実装に慣れよう
- 演習3: Git, GitHubに慣れよう
- チームでgoogleドライブ共有したい人はどうぞ。
第14回: C言語入門1(制御文、関数、コンパイル、実行)
- オンデマンド:2023prog2-week14-ondemand.mp4 (準備中)
- 備考
- 今日は「プログラミング2, プログラミング演習2」連続で當間が担当します。来週は両方とも赤嶺先生が担当します(8:30開始)。再履修者でどちらか片方のみ受講している学生は、時間通りの受講で構いません。
- 16週目(2/7, 1限目)は、相談対応します。
- プログラミング2の授業は今回が最後の予定。
- 課題6の締切日: 1/23(火)
- 課題7の締切日: 2/6(火)
- レポート受け取り保証は期末試験期間予備日(2/13)までです。それ以降は保証外です。遅延提出、再提出は提出後にメールによる報告を忘れずに。
- ミニテスト *アンケート
補足: 学科のG-mailアドレス「e2357xx@ie.u-ryukyu.ac.jp」でログインしてください。
- レポート6口頭試問調整(チームで取り組んだ人のみ)
- [講義資料]
- 演習
- 関連リンク
- C言語対応IDE: C/C++言語に最適な2つのテキストエディタと4つのIDEをざっくりと紹介
- ちゃんとした教科書: C実践プログラミング 第3版
- C言語: 教科書代わり1: ソフトウェア1 (2020)
- C言語: 教科書代わり2: 初心者のためのポイント学習C言語
- C言語: 教科書代わり3: 苦しんで覚えるC言語(苦C)
- C言語: 動画解説+演習: paiza:C言語入門
- C言語: 解説+演習: TechFUL
- マニュアル: 【man 】 オンライン・マニュアルを参照する
- [レポート課題] 課題レポート7(C言語レポート1): 点数が高い順に並べよう
- 〆切: 第16回の講義日(レポート未提出者対応日)
- 上限4ページ。
- コードをGitHubで管理している場合にはGit URLを掲載すること。GitHub使わない場合にはコードの提出を忘れずに。
以下は昨年度のコピペのままです。その都度修正していきます。
参考文献・サイト
- (C言語) 参考書
- C実践プログラミング 第3版 (2015年度まで利用してたC言語の教科書)
- 初心者のためのポイント学習C言語 (教科書代わり1)
- 苦しんで覚えるC言語(苦C) (教科書代わり2)
- 【 man 】 オンライン・マニュアルを参照する (ドキュメント参照コマンド)
- キーワードやコマンド名の一部からコマンド名を調べるには (正確な名称が分からない場合に利用)
- ポインタ虎の巻 (ポインタ編)
- ポインタの裏話 (ポインタ編)
- (Java) 教科書・参考書
- 教科書: 新わかりやすいJava入門編: 前半のChapter 10 までは、基礎を学んでる人にとっては文法的な違いを把握する程度ですので、軽く流す予定です。本番は11章以降。
- 統合開発環境(IDE): IntelliJ
- Java公式ドキュメント(チュートリアルもあります)
- online: Java Platform, Standard Edition (Java SE) 8
- download: Java SE 8 Documentation
- UNIXという考え方: いわゆるUNIX哲学(下記)を学べる本。ただし癖の強い訳語も多いので、やや読みにくい。
[UNIX哲学] 「一つのことを行い、またそれをうまくやるプログラムを書け。協調して動くプログラムを書け。標準入出力(テキスト・ストリーム)を扱うプログラムを書け。標準入出力は普遍的インターフェースなのだ。」
- なぜ、あなたはJavaでオブジェクト指向開発ができないのか: Javaでの話になっていますが、プログラミング全般に共通する話題です。プログラミングにアレルギー持ってる人向けの「取り組み方処方箋」。
- オブジェクト指向でなぜつくるのか 第2版: プログラミングの歴史を踏まえつつ、どのような意図で言語が開発・改定されされているのかという側面から「オブジェクト指向」の特徴を紐解く一冊。
- 大学生のためのリサーチリテラシー入門: 研究のための8つの力: 物事についてどう調べ、整理し、まとめるのかという「大学生に求められる力」を整理し、取り組み方について解説している本。全員、早い段階で一読することを強くお勧めします。
- 独習サイト (主にJava)
- Code Studio(言語を問わず、用意されたブロックを組み合わせてパズルを解く形でプログラミング全般の考え方を学べるサイト。)
- paiza(初めてプログラミングする人向けの動画講義。1つのコンテンツは数分程度に細分化されてて、かつ、コードを自動採点するシステムが提供されています。独習の進め方としては「数分動画閲覧して、自動採点される課題に取り組む」を繰り返すことになります。)
- Progate(同上)
- ドットインストール(paiza同様、1つのコンテンツが数分程度の動画に細分化されて提供されてます。Python, Java以外にも多数の言語や環境について学べます。)
- プログラミングコンテスト(Web参加可能なコンテストサイトを整理してます。日時指定があるものが多いですが、過去問やコード例が公開されてるサイトもあります。)
- CodingBat(課題が多数例示されています。サイト上でコードの動作確認をすることも可能。)
- 言語処理100本ノック 2015(特定分野に偏っていますが、課題が難易度別に提供されてます。UNIX思想も含まれてます。)
- NLPプログラミングチュートリアル(こちらも特定分野に偏っていますが、「解説資料+演習+コード例」を見ながら勉強できます。)
- CodeIQ(いろんな人が提示する課題に挑戦できるサイト。面白い問題を探すもよし、手当たり次第解くのもよし、どういう組織が関わってるか嗅ぎまわるもよし。)
- codecademy
- その他
- ラーニング・パターン(曰く「よりよい学びを実現するためのコツを抽出・記述したもの」。)
- レポートの書き方
- draw.io