シラバス
科目名 応用プログラミング(Python)
英語科目 ナンバリング Dlab207
開講期 秋学期集中 開講学部等 情報理工学部 配当年次 2年次 単位数 2単位
教員名 青木 淳
 ※履修条件,配当年次等の詳細は履修要項をご確認ください。
授業概要/Course outline  
【実務経験のある教員による授業科目】
 この授業は、実務経験が豊富な教員が担当する。国内および国外でのコンピュータ・ネットワーク・システム開
発の実務経験があり、特にプログラミングやソフトウェアデザインそしてプロジェクトマネジメントの経験が著し
く、スーパープログラマ(伝説のプログラマ)という異名を持つ。日本のオブジェクト指向プログラミングおよび
オブジェクト指向分析設計の創成期を作った。その経験をふんだんに活かしながら行う本格的なプログラミングの
授業である。
 この授業は秋学期集中の講義(演習を伴う集中講義)であり、実施日時は12月の土曜日、12月07日(土)・12月14
日(土)・12月21日(土)の3日間、1限から5限までをフルに活用して行う。1週間ごとの通常のプログラミングの授業
と異なり、3日間(3週間)という短期間に1つのプログラミング言語を一気に習得できるチャンス(効率のいい授
業:3日間(3週間)で2単位は美味しいはず<笑>)である。
 この授業では、スマートフォンのようなICT(情報通信技術)を活用しながら行い、授業に援用するスライドな
どの資料もすべて事前に電子的に配付される。それらの資料へのメモ書きなども電子的に(ペーパーレスで)行う
ことを強く推奨する。また、講義を視聴する(座学)だけでなく、触れる・試すなど、五感を使って参加・体験を
促進する実習(ハンズオン方式のアクティブラーニング)を含む。
 情報系の産業において主流となっているオブジェクト指向プログラミングをPythonを用いて学ぶ。同時にPython
を介して関数プログラミングのスタイルも会得する。世の中に必要とされているプログラミングの知識と技術を、
実際に動作する例題プログラムをふんだんに用いて解題してゆく。
 基礎プログラミング演習を通して手続き的なプログラムを作ることに先に慣れてしまうため、発展プログラミン
グ演習で垣間見るオブジェクト指向プログラミングに馴染めなかった学生も多いのではなかろうか。いわんや関数
プログラミングをや。演習の不足や消化不良を払拭してしまおう。
 CやJavaなどはプログラムを実行するのにコンパイルを必要とする。一方、Pythonはスクリプト言語(scripting
 language)であり、コンパイルを必要としない。情報産業において、コンパイル言語も、スクリプト言語も共に
多用されている。コンパイル言語だけの習得では、これから先が立ち行かない。ぜひともスクリプト言語で表現さ
れたプログラムの取り回しの良さを実感してほしい。
 この授業ではプログラミングにおけるマルチパラダイム(いくつものプログラミングのスタイルを場合に応じて
押し出せること)を徹底的に指導する。オブジェクト指向プログラミングも、関数プログラミングも、手続きプロ
グラミングも、メジャーなスタイルを自らのものにしてしまおうではないか。プログラミングに対する苦手意識を
解消し、いずれのプログラミングのスタイルも楽しく愉快に駆使できる高みをめざす。
 同時にプログラミングの厳しさや険しさの自覚を働きかける。人命にかかわるような、社会基盤にかかわるよう
な、ミッションクリティカルと呼ばれる極めて重要なプログラムが多く存在する。けっして不具合を出して(バグっ
て)はならないプログラムである。そのようなプログラムの開発に長く(25年間以上も)携わってきた講師自らの
実務経験を基にして、その勘どころ(知識・技術・技能の一端)を伝えて(垣間見せて)ゆく。
  ■前もってどのような科目の履修が望ましいか:
   ・発展プログラミング演習
   ・ソフトウェア工学I
   ・アルゴリズムとデータ構造
   ・ヒューマンインタフェース
  ■今後どのような科目を履修するのに役立つか:
   ・プロジェクト演習
   ・ソフトウェア工学II
   ・コンピュータグラフィックス
   ・プログラミング言語
   ・分散処理システム
   ・言語オートマトン
   ・オペレーティングシステム
授業内容・授業計画/Course description・plan  
 この授業では「まず、やってみる、それから、学ぶ」をライトモチーフにしながら、以下のようなテーマに沿っ
て進めてゆく。ただし授業の進行状況に応じて変更することがある。
<1日目:12月07日(土)>
[第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月14日(土)>
[第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月21日(土)>
[第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月07日(土)>
[第01回〜第05回]
テーマ:プログラミング事始め(Getting Started Guide)
テーマ:変数と組み込み型(Variable and Build-in Type)
テーマ:条件分岐と繰り返し(Conditional Branch and Loop)
テーマ:関数:定義と利用(Function:Definition and Calling)
テーマ:組み込み関数(Build-in Function)
[事前学習]必ずシラバスを読んで初回の授業に臨むこと。配付資料を教員ページ(リポジトリ)またはmoodleペー
ジからダウンロード(チェックアウト)し、それを良く読み、事前に関係するところを調べて、疑問点を明らかに
して授業に臨むこと。約5時間ほどの学修(予習)を必要とする。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し復習すること。特に、Pythonプログラムを
アプリケーションに仕上げる方法を、きちんと身に着けること。さらに理解を深めるため、授業中に指示される宿
題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ15時間ほどの学修(復習)を必要
とする。
<2日目:12月14日(土)>
[第06回〜第10回]
テーマ:ファイル入出力(File Input/Output)
テーマ:内包表記・イテレータ・ジェネレータ(Comprehension・Iterator・Generator)
テーマ:オブジェクト指向プログラミング:クラスとインスタンス(Object-Oriented Programming:Class and 
Instance)
テーマ:継承と集約(委譲)(Inheritance and Aggregation (Delegation))
テーマ:エラーと例外処理(Error and Exception)
[事前学習]前回で学んだ内容を理解し行解していること前提にして続きの授業が行われるゆえに、前回で学んだ
事柄を整理し復習して、よく試行し、しっかり練習した上で授業に臨むこと。また、前回の内容を問う授業冒頭の
短時間の小テストに備えること。約5時間ほどの学修(予習)を必要とする。
[事後学習]宿題レポートとして、明治の板チョコ(Meiji Chocolate 
Bar)のプログラム「MeijiChocolateBar_Problem」、群れオブジェクト(Bevy:べヴィ)を継承と集約の
両方で実装する「Bevy_Problem」、これら二つが課される。さらに授業内容を理解を深めて確固たるものにするた
めである。果敢に取り組んで、〆切までにmoodleを介して提出すること。およそ15時間ほどの学修(復習)を必要
とする。
<3日目:12月21日(土)>
[第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.)
[事前学習]最終回にあたり、いままで学んだ事柄の総復習をして授業に臨むこと。前回の内容を問う授業冒頭の
短時間の小テストに備えること。約5時間ほどの学修(予習)を必要とする。
[事後学習]宿題レポートとして、ドラゴンのプログラム「Dragon_Problem」、ドラゴンのプログラミング過程と
リファクタリング過程のプログラム「Dragon_Programming_Process」、これら二つが課される。Pythonによるオブ
ジェクト指向プログラミングと関数プログラミングを確固たるものにするためであり、Pythonプログラムがどのよ
うに出来上がってゆくのか、さらに、Pythonプログラムをどのようにライブラリ化するのかも、写経のようなプロ
セスを介して身に着ける(追体験する・再確認する)という内容である。それらに果敢に取り組んで、〆切までに
moodleを介して提出すること。およそ15時間ほどの学修(復習)を必要とする。
授業の到達目標/Expected outcome  
 動くプログラムと正しいプログラムの相異を知ることが到達目標である。少なくとも、オブジェクト指向プログ
ラミングと関数プログラミングの双方を会得し、スクリプト言語とは何ぞや?に応じられるようになり、UML(Uni
fied 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) 2019 Kyoto Sangyo University. All rights reserved.