[ トップに戻る ]

2016年度 : プログラミング1


更新情報


第1回: 卓上プログラミングによる開発設計概観,関数と再利用


第2回: Pythonインタプリタとスクリプトの体験1,ペア・プログラミングの導入


第3回: インタプリタとスクリプトの体験2: 文字列とif文, 関数の利用


第4回: 関数の利用2、ループ処理(while文)


第5回: ループ処理(for文)、range()関数とリストによるシーケンス集合表現、浮動小数点問題

  • Q & A: これまでに出た質問への回答一覧。
  • [授業録画アーカイブ]
  • 宿題
    • 教科書読み: 講義スライド参照。

    第6回: 関数とスコープ、仕様、ユニットテスト、モジュール

    • 今週のお告げ:

      締切を守る工夫をしよう」。10科目前後の授業やアルバイト・遊びの約束等あれこれ積もるとどうしてもど忘れしてしまう可能性が高くなります。紙媒体でも電子媒体でも良いですが、未来の予定を忘れないようにメモろう。e.g., カレンダー、ToDo管理ツール等。未来の予定を見据えて計画的に動こう。

    • Google Classroom。参加コードはslack参照。
    • ミニテスト

      補足: 学科のG-mailアドレス「e1657xx@ie.u-ryukyu.ac.jp」でログインしてください。

    • [講義スライド] 第6回: 関数とスコープ、仕様、ユニットテスト、モジュール
      # 実行例, スライド p.10
      % curl https://ie.u-ryukyu.ac.jp/~tnal/2016/prog1/week6_doctest.py -o week6_doctest.py
      % pydoc3 -w week6_doctest
      % open week6_doctest.html
      
    • [演習] 終了後に進捗確認アンケート。
        [ (week2) 演習1〜演習4: 初めてのレポート ]
      • Googleドキュメント内の「week2」。
        • 演習1 (1.1〜1.3)は、机の右に座ってる人がまずdriverを担当し、1.3まで終えたら左の人がdriverを担当してもう一度やり直そう。(同じことを2回繰り返すことになります)
        • 演習2 (2.1〜2.5)のdriver担当は、机の左に座ってる人。
        • 演習3 (3.1〜3.3)のdriver担当は、机の右に座ってる人。
        • 演習4 (4.1〜4.3)のdriver担当は、二人で話し合って、より苦手な人に練習させてあげよう。
        [ (week3) 演習5: if文と関数 ]
      • 同じGoogleドキュメント内の「week3」。
        • 演習5 (5.1〜5.5)のdriver担当は、5.4までを机の左に座っている人。5.5を机の右に座っている人。
        [ (week4) 演習6: while文の利用とこれまでの復習 ]
      • 同じGoogleドキュメント内の「week4」。
        • 「演習6.1, 6.2」、「演習6.3, 6.4」、「演習6.5」とでdriver/observerを交代しよう。席の左右どちらから始めても構いません。
    • [ 進捗確認アンケート ]
  • Q & A: これまでに出た質問への回答一覧。
  • [授業録画アーカイブ]
  • 宿題

    第7回: KISS原則とDRY原則、doctest補足、再帰と木構造


    第8回: File I/O, Tuples, Jupyter Notebook, 振り返り


    第9回: 統合開発環境PyCharm、デバッガ, 振り返り

    • 今週のお告げ:

      人柱になろう」 環境はなるべく最新版を使おう。最新版が安定してるとは限らないが、既存のバグ修正等は終わっている可能性が高い。特別な理由がない限りはSoftware Update, brew update 等して最新版を使うようにしよう。問題が起きたらトラブルシューティングのチャンスなので、人柱になろう。

    • レポート2の採点結果とコメントGoogleドキュメントの以下にアップロードしました。
      • report2/evaluation2: 評価+コメント
    • ミニテスト

      補足: 学科のG-mailアドレス「e1657xx@ie.u-ryukyu.ac.jp」でログインしてください。

    • [講義スライド] 第9回: 統合開発環境PyCharm、デバッガ *今回はスライドありません。

      次の2点を追加修正: 初期設定: Mercurialの設定、PycharmProjectsディレクトリの用意

      PyCharmからMac版PyCharm CE (Community Edition)をダウンロードしよう。
      
    • [演習]

      時間がなかったため今回は無し。

    • Q & A: これまでに出た質問への回答一覧。
    • [授業録画アーカイブ]
    • 宿題
      • レポート課題: レポート3: 「基本構造の解説」
      • 教科書読み
        • 5.2 Lists and Mutability
        • (5.3 Functions as Objects) *一旦スキップ
        • 5.4 Strings, Tuples and Lists
        • (5.5 Dictionaries) *余裕があれば。

    第10回: リスト操作、文字列操作と調べ方

    • 今週のお告げ:

      [勉強の仕方を学ぼう] エンジニアの世界は日々新しい技術が生み出される。初めての分野なら大学等の授業のような形式で学ぶのも良いが、似たような技術は独学で学べるようになろう。学び方を学ぼう。

      P.S. そろそろ七夕の時期らしいので、、、先輩に書いてもらった短冊

    • ミニテスト

      補足: 学科のG-mailアドレス「e1657xx@ie.u-ryukyu.ac.jp」でログインしてください。

      • 始める前に: NumPyのインストール。(線形代数でやってるベクトル・行列演算等をサポートするパッケージ。演習は後日やる予定ですが、触ってみたい人は公式チュートリアル触ると良いかも。)
        % pip3 install numpy
        
      • ペアの人と、レポート3で作成したレポートと元に説明しあってもらいます。具体的には4つの基本構造(if文、for文、while文、関数)について、下記を繰り返します。
        • 教師役と生徒役の順番: if文は左の人が教師役。for文は右の人が教師役。以下交互に繰り返す。
        • 各々数分程度解説。開設時間は最小2分、最大4分。
        • 解説終了後、1,2分程度(合計5分)の質疑応答。内容に関する質問だけでなく、解説の仕方や応答の仕方に関する指摘・コメント等でも構いません。受講生側として聞いて疑問に思ったこと、気になったことを伝えよう。
      • 4つの基本構造について質疑応答まで終えたら、上記ミニテストに報告すること。
    • [講義スライド]: 第10回: リスト操作、文字列操作と調べ方
    • [演習] *時間がなければ次回。

      時間がなかったため今回は無し。

    • Q & A: これまでに出た質問への回答一覧。
    • [授業録画アーカイブ]
    • 宿題
    • 関連リンク

    第11回: これまでの振り返り(演習)


    第12回: ディクショナリと関数オブジェクト

    • [席指定] Googleドキュメント *学科のG-mailアドレスでログイン。

      「ペア・プログラミング調整3.pdf」

    • 今週のお告げ:

      [教科書・参考書を活用しよう] Web上には参考になる記事も数多くあるが、Web全体としては整理されておらず、前後関係や背景知識を知らないと良質の記事であっても役に立たないことや、古い記事で今では誤っている内容であったりすることが少なくない。整理された書籍を繰り返して読みなおし、分からないことを整理しながら減らしていこう。(どんな書籍がオススメか、教職員・先輩・友人らに聞くのも手です)

    • ミニテスト

      補足: 学科のG-mailアドレス「e1657xx@ie.u-ryukyu.ac.jp」でログインしてください。

    • [講義スライド]:
    • [演習]
        [取り組み方]
      • 新しいペアで「演習7の続き」からやります。
      • 新しいペアで互いに「どこまで終わったか」を確認し、先に進んでいた方が「差分」について解説してください。解説は、「week7」の該当レポートや手元に保存してあるコード等を使って構いません。解説を聞く方は何か気になることがあれば聞こう。
      • 解説を終えたら、先に進んでいた方の続きから取り組みましょう。
      • 今週からはペアが変わるため「week7-2」を利用して下さい。その際、解説を終えたところまでは削除して、その続きからやってください。
      • e.g., 例えば7.4から取り組む場合、week7-2の該当pair番号の新レポートを開き、7.3までを削除してから取り組んで下さい。(補足: ここで削除させてるのは不要なら削除しようというだけのことです。コード共有など、残していたほうが都合が良いなら削除しなくてもOK
    • Q & A: これまでに出た質問への回答一覧。
    • [授業録画アーカイブ]
    • 宿題
      • 教科書読み
        • 6. Testing and Debugging
          • 6.1 Testing については、ざっくりと読む(太字注意して用語の意味を掴む)ぐらいでok。
          • 6.2 Debugging については、全体の流れを読み取ろう。特に6.2.3節はデバッグ時の取り組み方が整理されてます。
      • 予告(調整中)
        • 来週にでも最終レポート課題を出す予定です。締切日はテスト期間の授業日(8/4(木))を予定しています。他科目との兼ね合いもあると思いますので早めに取り組むと楽になるでしょう。
        • レポート70%の内訳は、「レポート1:レポート2:レポート3:レポート4=10%:20%:10%:30%」になる予定です。
    • 締切を過ぎた場合のレポート提出について
      • 8/18(木)までは受け取ります。病気等何らかの理由で提出がこれ以上遅れる場合には「8/18(木)までに個別相談」ください。事前相談がない場合、原則として受け取りません。
      • 各レポートの締切を過ぎてから提出する人は、アップロード後にメールで報告下さい。

    第13回: テストとデバッグ、関数設計

    • 今週のお告げ:

      [何をやるにしても体が資本] 好き嫌いせずに適度にバランス良く食べよう。それなりに体動かそう。座ってるだけじゃ絶対に体が錆びるし、20代のうちから腰痛いとか言ってる人見ると将来が怖いよ。。。なるべく夜更かしは避けて規則正しい生活で過ごせるようにスケジュールしてみよう。

      自分自身の問題だけじゃなく、外的要因(ホコリ/カビ/etc.)も十分あり得るので身の回りにも気を配ろう。勿論共有の自習室等は皆で綺麗に保ってください。

      (通常と違って)体調不良がやけに長引いてるとか、原因が良く分からない場合には病院なり保健管理センターなりで相談してみよう。自己判断だけで長期間放置するとそれだけ悪化してしまうこともあるので、体のためにも時間を作って労ってあげよう。

      課題があるから、とかでも無理のし過ぎで体を壊してしまっては本末転倒です。そういう時には個別に担当の先生と相談してみてください。必ずしも考慮してくれるとは限りませんが、自分からそういう相談をすることも含めて社会勉強です。

    • レポート3の採点結果とコメントをGoogleドキュメントの以下にアップロードしました。
      • report3/evaluation3: 評価+コメント
    • ミニテスト

      補足: 学科のG-mailアドレス「e1657xx@ie.u-ryukyu.ac.jp」でログインしてください。

    • [講義スライド]:
    • [演習]
    • Q & A: これまでに出た質問への回答一覧。
    • [授業録画アーカイブ]
    • 宿題
    • 締切を過ぎた場合のレポート提出について
      • 8/18(木)までは受け取ります。病気等何らかの理由で提出がこれ以上遅れる場合には「8/18(木)までに個別相談」ください。事前相談がない場合、原則として受け取りません。
      • 各レポートの締切を過ぎてから提出する人は、アップロード後にメールで報告下さい。

    第14回: 例外とアサーション, matplotlibとpandas入門

    • イベント告知: レキサスてくてくトーク Vol.1 (7/30(土), 14時-16時)
    • 今週のお告げ:

      [量は質を生む] 「量より質」と言われることもありますが、質の高い学びを取捨選択できるレベルになるまでは地道に量をこなすしかないことも少なくありません。何か一つの道でスペシャリストになるまでは量をこなすことを意識しよう。スポーツや芸能で普段からの地道な練習が重要視されてるのと同じように、勉学においても積み重ねが重要です。

    • ミニテスト

      補足: 学科のG-mailアドレス「e1657xx@ie.u-ryukyu.ac.jp」でログインしてください。

    • [講義スライド]:
    • [演習]
    • Q & A: これまでに出た質問への回答一覧。
    • [授業録画アーカイブ]
    • 宿題
      • 教科書読み
        • 8 Classes and Object-Oriented Programming (余裕のある人)

          クラスとオブジェクト指向プログラミングの解説は後期にやります。

      • レポート課題: レポート4: 「力技で解く巡回セールスマン問題」

        課題詳細2番以降も一応確定。読んでて意味がわからないところがあれば質問して下さい。

    • 締切を過ぎた場合のレポート提出について
      • 8/18(木)までは受け取ります。病気等何らかの理由で提出がこれ以上遅れる場合には「8/18(木)までに個別相談」ください。事前相談がない場合、原則として受け取りません。
      • 各レポートの締切を過ぎてから提出する人は、アップロード後にメールで報告下さい。

    第15回: バージョン管理システム Git入門


    参考文献・サイト

    • 教科書・参考書
      • 教科書: Introduction to Computation and Programming Using Python, Revised And Expanded Edition: 授業では「Part 1 (Chapter 8まで)」をメインに取り扱います。約100ページ。これを4回は読もう。余裕がある人は Chapter 9 以降に取り組んでみよう。必ずしも順番通りに進める必要はなく、目次や索引を眺めて興味のあるところから手を付ける良いです。
      • UNIXという考え方: いわゆるUNIX哲学(下記)を学べる本。ただし癖の強い訳語も多いので、やや読みにくい。
        [UNIX哲学] 「一つのことを行い、またそれをうまくやるプログラムを書け。協調して動くプログラムを書け。標準入出力(テキスト・ストリーム)を扱うプログラムを書け。標準入出力は普遍的インターフェースなのだ。」
      • なぜ、あなたはJavaでオブジェクト指向開発ができないのか: Javaでの話になっていますが、プログラミング全般に共通する話題です。プログラミングにアレルギー持ってる人向けの「取り組み方処方箋」。
      • オブジェクト指向でなぜつくるのか 第2版: プログラミングの歴史を踏まえつつ、どのような意図で言語が開発・改定されされているのかという側面から「オブジェクト指向」の特徴を紐解く一冊。
      • 情報科学入門 Rubyを使って学ぶ: 本講義で使用する教科書の Chapter 9 以降に近い位置づけ。Python以外にも触ってみたい、情報科学ってなんだろうという視点から取り組んでみたいという人向け。
      • 大学生のためのリサーチリテラシー入門: 研究のための8つの力: 物事についてどう調べ、整理し、まとめるのかという「大学生に求められる力」を整理し、取り組み方について解説している本。全員、早い段階で一読することを強くお勧めします。
      • Learning Python: ガチでPythonマスターを目指したい人向け。1600ページ。
      • Pythonチュートリアル 第3版: 例題中心に進みますので、動かしながら動作を確認するには向いています。ただし、これだけだと「言われたことをやる」レベルに留まりがち。
    • 独習サイト (主にPython)
      • Code Studio(言語を問わず、用意されたブロックを組み合わせてパズルを解く形でプログラミング全般の考え方を学べるサイト。)
      • paiza(初めてプログラミングする人向けの動画講義。1つのコンテンツは数分程度に細分化されてて、かつ、コードを自動採点するシステムが提供されています。独習の進め方としては「数分動画閲覧して、自動採点される課題に取り組む」を繰り返すことになります。)
      • ドットインストール(paiza同様、1つのコンテンツが数分程度の動画に細分化されて提供されてます。Python以外にも多数の言語や環境について学べます。)
      • プログラミングコンテスト(Web参加可能なコンテストサイトを整理してます。日時指定があるものが多いですが、過去問やコード例が公開されてるサイトもあります。)
      • CheckiO(課題をこなすことで先にすすめるゲーム型のサイトです。コード例も豊富。基本的には英語。)
      • CodingBat(課題が多数例示されています。サイト上でコードの動作確認をすることも可能。)
      • 言語処理100本ノック 2015(特定分野に偏っていますが、課題が難易度別に提供されてます。UNIX思想も含まれてます。)
      • NLPプログラミングチュートリアル(こちらも特定分野に偏っていますが、「解説資料+演習+コード例」を見ながら勉強できます。)
      • Python公式ドキュメント: [ 英語版 | 日本語版 ]
      • pygame(ゲーム開発を通して学びたい人向け?)
      • Code School(一部無料コースあり)
      • CodeIQ(いろんな人が提示する課題に挑戦できるサイト。面白い問題を探すもよし、手当たり次第解くのもよし、どういう組織が関わってるか嗅ぎまわるもよし。)
      • codecademy
    • その他