シラバス
科目名 応用プログラミング(Python)
英語科目 ナンバリング Ilab207
開講期 秋学期集中 開講学部等 コンピュータ理工学部 配当年次 2年次 単位数 2単位
教員名 青木 淳
 ※履修条件,配当年次等の詳細は履修要項をご確認ください。
授業概要/Course outline  
 この授業は秋学期集中の講義(演習を伴う集中講義)であり、実施日時は12月の土曜日、12月01日(土)・12月08日(土)・12月15日(土)の3日間、1限から5限までをフルに活用して行う。1週間ごとの通常のプログラミングの授業と異なり、3日間(3週間)という短期間に1つのプログラミング言語を一気に習得できるチャンス(効率のいい授業:3日間(3週間)で2単位は美味しいはず<笑>)である。
 情報系の産業において主流となっているオブジェクト指向プログラミングをPythonを用いて学ぶ。同時にPythonを介して関数プログラミングのスタイルも会得する。世の中に必要とされているプログラミングの知識と技術を、実際に動作する例題プログラムをふんだんに用いて解題してゆく。
 基礎プログラミング演習を通して手続き的なプログラムを作ることに先に慣れてしまうため、発展プログラミング演習で垣間見るオブジェクト指向プログラミングに馴染めなかった学生も多いのではなかろうか。いわんや関数プログラミングをや。演習の不足や消化不良を払拭してしまおう。
 CやJavaなどはプログラムを実行するのにコンパイルを必要とする。一方、Pythonはスクリプト言語(scripting language)であり、コンパイルを必要としない。情報産業において、コンパイル言語も、スクリプト言語も共に多用されている。コンパイル言語だけの習得では、これから先が立ち行かない。ぜひともスクリプト言語で表現されたプログラムの取り回しの良さを実感してほしい。
 この授業ではプログラミングにおけるマルチパラダイム(いくつものプログラミングのスタイルを場合に応じて押し出せること)を徹底的に指導する。オブジェクト指向プログラミングも、関数プログラミングも、手続きプログラミングも、メジャーなスタイルを自らのものにしてしまおうではないか。プログラミングに対する苦手意識を解消し、いずれのプログラミングのスタイルも楽しく愉快に駆使できる高みをめざす。
 同時にプログラミングの厳しさや険しさの自覚を働きかける。人命にかかわるような、社会基盤にかかわるような、ミッションクリティカルと呼ばれる極めて重要なプログラムが多く存在する。けっしてバグってはならないプログラムである。そのようなプログラムの開発に携わってきた講師自らの経験を基にして、一行一行を丁寧に書き下ろすための精神力や技術力について、勘どころを伝えてゆく。
  ■前もってどのような科目の履修が望ましいか:
   ・発展プログラミング演習
   ・ソフトウェア工学I
   ・アルゴリズムとデータ構造
   ・グラフィックスI
   ・ヒューマン・インタフェースI・II
  ■今後どのような科目を履修するのに役立つか:
   ・プロジェクト演習
   ・ソフトウェア工学II
   ・オペレーティングシステム
   ・グラフィックスII
   ・プログラミング言語
   ・分散処理システム
授業内容・授業計画/Course description・plan  
 この授業では「まず、やってみる、それから、学ぶ」をライトモチーフにしながら、以下のようなテーマに沿って進めてゆく。ただし授業の進行状況に応じて変更することがある。
<1日目:12月01日(土)>
[第01回]
テーマ:プログラミング事始め(Getting Started Guide)
[第02回]
テーマ:変数と組み込み型(Variable and Build-in Type)
[第03回]
テーマ:条件分岐と繰り返し(Conditional Branch and Loop)
[第04回]
テーマ:関数:定義と利用(Function:Definition and Calling)
[第05回]
テーマ:組み込み関数(Build-in Function)
<2日目:12月08日(土)>
[第06回]
テーマ:ファイル入出力(File Input/Output)
[第07回]
テーマ:内包表記・イテレータ・ジェネレータ(Comprehension・Iterator・Generator)
[第08回]
テーマ:オブジェクト指向プログラミング:クラスとインスタンス(Object-Oriented Programming:Class and Instance)
[第09回]
テーマ:継承と集約(委譲)(Inheritance and Aggregation (Delegation))
[第10回]
テーマ:エラーと例外処理(Error and Exception)
<3日目:12月15日(土)>
[第11回]
テーマ:モジュールとパッケージ(Module and Package)
[第12回]
テーマ:名前空間とスコープ(Name Space and Scope)
[第13回]
テーマ:標準ライブラリと自作ライブラリ(Standard Library and Home-made Library)
[第14回]
テーマ:アプリケーション開発(Application Development)
テーマ:プログラミング過程(Process of Programming)
[第15回]
テーマ:リファクタリング過程(Process of Refactoring)
テーマ:頒布(はんぷ:広く配るため)のしつらえ(Distribution: Software Configuration, Licence, etc.)
準備学習等(事前・事後学習)/Preparation and assignments  
 授業内容が実際のソフトウェアの開発・運用・保守の現場(ソフトウェア開発会社)でのプログラミングを想定している。そのため、学問的なことばかりではなく、作法(さほう・さくほうの両方)や書法(プログラムやドキュメントの著し方)なども範疇に入り、たいへん多くのことに気を配らなければならない。事前に関係するところを調べて授業に臨み、その後、講義で学んだ知識を整理し、さらに理解を深めるために宿題レポートを真剣に行い、理解(りげ)から行解(ぎょうげ)に変えてほしい。また、数々の宿題には複数の配付資料やプログラムが関連する。したがって、それらの整頓も大切である。予習と復習を合わせて20時間ほどの学修をしなければ、授業に追随することが難しくなる。
<1日目:12月01日(土)>
[第01回〜第05回]
テーマ:プログラミング事始め(Getting Started Guide)
テーマ:変数と組み込み型(Variable and Build-in Type)
テーマ:条件分岐と繰り返し(Conditional Branch and Loop)
テーマ:関数:定義と利用(Function:Definition and Calling)
テーマ:組み込み関数(Build-in Function)
[事前学習]必ずシラバスを読んで初回の授業に臨むこと。配付資料を教員ページ(リポジトリ)またはmoodleページからダウンロード(チェックアウト)し、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。約5時間ほどの学修(予習)を必要とする。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ15時間ほどの学修(復習)を必要とする。
<2日目:12月08日(土)>
[第06回〜第10回]
テーマ:ファイル入出力(File Input/Output)
テーマ:内包表記・イテレータ・ジェネレータ(Comprehension・Iterator・Generator)
テーマ:オブジェクト指向プログラミング:クラスとインスタンス(Object-Oriented Programming:Class and Instance)
テーマ:継承と集約(委譲)(Inheritance and Aggregation (Delegation))
テーマ:エラーと例外処理(Error and Exception)
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約5時間ほどの学修(予習)を必要とする。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ15時間ほどの学修(復習)を必要とする。
<3日目:12月15日(土)>
[第11回〜第15回]
テーマ:モジュールとパッケージ(Module and Package)
テーマ:名前空間とスコープ(Name Space and Scope)
テーマ:標準ライブラリと自作ライブラリ(Standard Library and Home-made Library)
テーマ:アプリケーション開発(Application Development)
テーマ:プログラミング過程(Process of Programming)
テーマ:リファクタリング過程(Process of Refactoring)
テーマ:頒布(はんぷ:広く配るため)のしつらえ(Distribution: Software Configuration, Licence, etc.)
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約5時間ほどの学修(予習)を必要とする。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ15時間ほどの学修(復習)を必要とする。
授業の到達目標/Expected outcome  
 動くプログラムと正しいプログラムの相異を知ることが到達目標である。少なくとも、オブジェクト指向プログラミングと関数プログラミングの双方を会得し、スクリプト言語とは何ぞや?に応じられるようになり、UML(Unified Modeling Language)やデザインパターンなどオブジェクト指向デザイン(設計)への橋渡しも到達目標とする。最高学府のプログラミングの授業である。将来の情報社会に寄与できる精神とプログラミングの知識と技術を保持した人間の育成をめざす。すなわち、学位授与の方針(ディプロマ・ポリシー)の一環である「当該専門科目を充分に理解し、プログラム作成などの技術力を身につけて、情報化社会に寄与できる応用力を養うこと」が到達目標である。
身に付く力/Special abilities to be attained  
 論理的思考力(課題発見力、計画力、論理的分析力、総合的判断力)、実践力(働きかけ力、実行力、主体性)、そして、実社会の開発現場で役立つコンピュータ理工学「オブジェクト指向プログラミングと関数プログラミング、加えて手続きプログラミング」の知識と技術を身につけることができる。
履修上の注意/Special notes, cautions  
 定員を45名とし、受講希望者多数の場合はコンピュータ抽選を行う。平成26年度以前入学生は履修不可。詳細は履修要項別冊ガイドを参照。
 システムエンジニア(SE)などの情報産業界の職種を希望している者の履修を強く勧める。より良いプログラム作りをめざしたい、効率的にコストをかけずに高品質のプログラムを開発したい・運用したい・保守したいと望む者の履修を歓迎する。
 毎回、各自のコンピュータを持参し、必ずネットワークに接続して、授業が始まる前までに稼働状態にしておくこと。講義中に援用するプログラムはネットワークを介して取得する。リポジトリ(SCM: Software Configuration Management、たとえばSubversionやGitなどのソフトウェア構成管理)もアクセスするので、その作法(マナー)に慣れること。
評価方法/Evaluation  
 毎回の授業の初めに課す小テストを50%、毎回の授業の終わりに課す宿題レポートを50%、合計100%として、それらの出来具合を総合的に評価する。法令に「1単位45時間(2単位90時間)の学修」が宣われている。授業の終わりに課される宿題レポートは、当該時間(1回すなわち1限分の授業を受けたら約4時間の学修:5限分なので約20時間の自宅勉強)を確保するものであるから、その時間に見合うレポート内容(質と量:A4版で10ページ以上)を必要とする。また、授業の初めに課される短時間の小テストは、当該学修時間の成果を見極めるために実施し、授業への取り組みや姿勢を(出欠および遅刻などを含めて)つまびらかにするものでもある。小テストの実施と宿題レポートの提出およびフィードバックは、都度moodleを介して行うので、必ず目を通して振り返りをすること。
教 材/Text and materials  
 教科書:配付資料
 参考書:John V. Guttag著,久保幹雄監訳『Python言語によるプログラミング イントロダクション』(近代科学社,2014)
 参考書:柴田淳『みんなのPython』第3版(ソフトバンククリエイティブ,2012)
 参考書:Pythonサポーターズ著『パーフェクトPython』(技術評論社,2013)
 参考書:Tarek Ziade著,稲田直哉・他訳『エキスパートPythonプログラミング』(KADOKAWA/アスキー・メディアワークス,2010)
 参考書:青木淳,浅岡浩子,澤本依里『Smalltalkで学ぶオブジェクト指向プログラミングの本質』(日経BP社,2008)
 参照URL:http://www.cc.kyoto-su.ac.jp/~atsushi/
その他/Others  
 研究室:第2実験室棟3階65実験室
 オフィスアワー:木曜日3限(13:15-14:45)
 連絡先:配付資料の表紙に記載されているメールアドレス
 授業に関する質問やホウレンソウ(報告・連絡・相談)がある場合には、オフィスアワーの時間に研究室へ訪問するか、メールで問い合わせること。メールアドレスは配付資料の表紙に記載されている。
Copyright (C) 2018 Kyoto Sangyo University. All rights reserved.