Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

前口上 (心の準備)

本課題の目標

この課題では,

  • 世の中で実際に使われている,
  • 大きなソフトウェアを改良,機能拡張できるようになることを目標にする.本課題のテーマは,実際のソフトウェア作りの現場 --- 製品づくりでも研究でも--- でほぼ必ず遭遇する場面:
  • 自分で書いたわけではないので全容を把握していない,または,
  • 全容を把握できない程度に大きい ソフトウェアを改良したり,機能拡張する場面を経験して,大きなソフトウェアを作るのに必要なスキルや考え方を身につけることである.

この課題を作った理由

ほとんどの大学のプログラミング課題は,あるトピック --- アルゴリズム,ネットワーク,音声,グラフィクス,... --- に関連するプログラムを「一から」作るという課題である.限られた時間内に,一から作るという制約上,作れるソフトウェアの規模は自ずと小さくなる.そのような課題は,プログラミング言語の基本を身につけ,対象となるトピックの基本を理解するためには必須・有用なものであるが,それを繰り返していても本格的な大規模プログラムを構築するために当たりまえのように使われている道具,スキル,知識,概念,etc. は身につかない.それらは,体系的に整理することが難しい,ないし,整理するほどのことでもないと思われているということもあり,あまり明示的に教えられることもない.この課題では,それを学ぶ --- 教えるというよりも自ら学んでもらう --- ことを目的とする.

ロードマップ

そのためにこの課題では,既存のオープンソースのソフトウェアの改良・機能拡張を目標とする.具体的にどのソフトウェアを対象とするか,それにどのような改良・拡張を施すかも自分達で決める.課題期間中の活動内容は,

  • デバッガを使ってソフトウェアの動きを追跡する練習

  • チーム作り

  • チームで,どのようなオープンソースソフトウェアを対象に,どのような改良・拡張を行うかを議論 する

  • その計画を早いうちに発表し,他のチームや教員・TA からのフィードバックを得る

  • 定期的に進捗を発表し,他のチーム,教員・TA からのフィードバックを得る

  • 活動内容,調査内容のドキュメントを残す (レポート) 最終的に達成した課題の有用さや難易度も大事だが,それをしっかりとドキュメント化 (あとに引き続く人が有用だと感じるドキュメントを残す) することも重要視する. この教科書の残りは主に上記の 1. を補足するために書かれているが,それは課題の内容の,最も表面的な部分に過ぎない.実際に身につけて欲しいのは,以下のことである.それは研究や製品作りの場面できっと有用になることである.

  • よくわからないソフトを解析して,なんとかする根性

  • 背景理論もよく知らないソフトの背景理論を独習して,なんとかする根性

  • ツールの高度な使い方を,人から教わるのではなく,自分で一次ソース (と言ってもソフトの使い方の一次ソースはマニュアルであり,歴史的文書と異なり,簡単に手に入る) を調べて,自らスキルを高めていく根性

本サイト

  • 本サイトでは, オープンソースをダウンロードして, ビルド (特に, デバッガで追跡できるようにするためのビルド), デバッガで追跡する手順を, 代表的な言語・エコシステムについて説明する
    • C/C++
    • Python
    • JavaScript (Node.js)
    • Rust
    • Go
  • ただし一部は書きかけ
  • 2024年度までのサイトでは C/C++ の場合について詳細解説しているが, 本サイトでは Python, JavaScript など近年よく使われている (実験でも選ばれている) エコシステムの説明を充実させ, 説明の多くの部分を動画でカバーした