60
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 「書く」ソフトウェア教育から 「読む」ソフトウェア教育への転換 山上俊彦 IoT 事業本部, ACCESS 2016/07 山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 1 / 60

「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 (in Japanese)

Embed Size (px)

Citation preview

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換

山上俊彦

IoT 事業本部, ACCESS

2016/07

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 1 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

書くソフトウェア教育の生産性に疑問を持ち よりよい方法を  捜す人が対象

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 2 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

探して読むを基本に1 日 1 万行読むための ソフトウェア教育を     解説

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 3 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

読むソフトウェア教育のイントロ

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 4 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

普遍的な知的能力の獲得

既存の知識ネット上の資産(利用可能)

- 最小ギャップの発見

� 問題解決ソリューション

【ソフトウェアでも技術でも事業開発でも同じ:オープンイノベーション時代のスキル】

検索・結合 洞察

小学校の読書 - 作家教育はしない

【読み書きの教育】

時間がたてば自分も他人

- 読むスキルの需要

【ソフトウェア開発における不可避の時間軸の問題】

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 5 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

何故、「読む」ソフトウェア教育?

小さな完結するソフトウェア製作は企業にはない

- 100 行のソフトを書く演習は必要?

【情報通信ソフトウェアで 30 年務めた所感】

書く:完結する、ゼロから動く

- 読む:俯瞰してつかむ

【ソフトウェア教育のトレンド変化】

トップダウン設計力ボトムアップコーディング力

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 6 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

読むソフトウェア教育

1. ソフトウェアは書かないと理解できない

2. 書かないと楽しくない

【読むソフトウェア教育への 2 つの反論】

書く教育は言語やプラットフォームに

依存- 教育者の選択が悪いと役に立たない

【読むソフトウェア:言語依存・プラットフォーム依存のない教育】

書くスキル- 読むスキル

【読み書きにはそれぞれ固有のスキル: 読む教育の教育は不足】

(デバッグスキル、実行環境スキル) (大量読破、俯瞰スキル)

(工数判定、品質判定、依存性・拡張性判定)

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 7 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

OSS に見るプログラミングスキル転換

スキル パワー

10 年前のプログラミング

アーキテクト能力

スキルパワー

今のプログラミング

ソフトは資産ではなくて負債 (1 行でも書かないほうがいい)80 % 以上はフレームワークが仕事をしている何をどう流用し、組み合わせるかを知っていることが決定的

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 8 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

俯瞰するプログラミングで獲得すべき能力

開始、終了、接点、繰り返し、の把握

依存性、ドキュメント、基盤、拡張の把握

処理作法、名前、記述規則、の把握

品質、例外処理、負荷対応の把握

【俯瞰するプログラミングスキル】

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 9 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ソースコードを読む技術

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 10 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ソースコードを読む技術

構成力を付ける

- 名前、ファイル、ライブラリ、拡張性、プロジェクト統一規則

【読むソフトウェア:構成力(抽象化単位)】

動的構成力を付ける

- 利用技術、利用基盤、依存性、処理ルール (エラー等)

【読むソフトウェア:動的構成力(抽象化単位)】

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 11 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ソースコードを読む技術 (2)

判定力を付ける -利用技術、規模、複雑さ、依存性、拡張性、品質

【読むソフトウェア:判定力(利用可能性を判断)】

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 12 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ソースコードを読む技術 (3)

巨視的な理解規模の把握 (ファイル数、行数など)、ディレクトリ構造、ドキュメントの精査、プロ ��� ェクトのポータルサイトの確認 (サイトマップ)、メーリングリスト、掲示板等コミュニティサイトの確認、名前付け規約の確認、ソースコード管理システム、バグ管理システム

微視的な理解ソースコード、ソースコードリファレンス、ChangeLog、バグデータベース、ソースコード管理システム (バージョン間の差分)、検索エンジン、メーリングリスト、コーディングガイドライン

周辺言語選択、実行環境選択、依存環境、プラットフォーム選択、圧縮方法選択、ドキュメンテーション、コミュニティ

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 13 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

具体的なソフトウェアソースの読み方

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 14 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ソースの読み方

シーケンシャル 実行フロー(ジャンプ) 探して戻る

【読み方はいろいろ】

静的に読む(IDE, gdb などツール利用)

- 動的に読む(ログ、性能などを

読む)

【大量だと静的に読むのも大変】

はしから順に読む - 順書きされていない順読みするようにできていない

【もっとも非効率的な読み方】

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 15 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

読まない技術

読む技術とは読まない (飛ばす)

技術- 読むべきところを

見つける

【もっとも効率的な読み方(読まないスキル): 1 人で読めるのは 1 万行くらい】

(e.g. oprofile, gprof)

目的に合わせて絞って読む

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 16 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ソースを読む: 読む目的

書くのは動けばいいが、読む目的はいろいろプログラミングの学習(テクニック、作法、構造)コードの概要(構造、外部 IF(F, DB, Net)、技術理解、異常処理、運用処理)品質、外部依存性、チーム構造、歴史 (最近の更新)、ライセンス改造、拡張の準備コードは How、テストは What、ドキュメントは Why

読みながら何を「書く (メモ)」かも問題。ツール活用

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 17 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ソースの読み方はサイズに依存

サイズはあらゆる人間の協調活動に

影響- 読み方は

サイズに依存

【プログラムのサイズが読み方を決める】

・サイズが読み方、書き方、メンテナンスの仕方を決める

小規模1–5 万行

中規模5–20 万行

大規模20 万行越え

(100 人年以上)

【チームの能力による: サイズの目安】

10 人以下、半年以下

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 18 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

大規模なソース

OSS は 100 万行なんて珍しくない(MySQL/PHP/PostgreSQL/Samba/Perl …)Linux カーネルなんて 500 万行 (2007)ひらメソッド(超精細)なんてのもある:

LKH-jp(旧読学のススメ)で提案されているコードリーディング手法.関数単位で Wiki にメモを残しながら,ボトムアップに読み進める.知らない関数がでないようにボトムアップに読む

WebKit (browser) テスト除いて 80 万行Android  カーネル除いて  800 万行OSS でなくてもブラウザ、Java、など 100 万行超える組み込みソフトはごろごろ

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 19 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

実践: 読む技術

全体構成、モジュール構成、オブジェクト構成

エントリポイントを把握

入出力作法(型など)を把握

呼び出し関係

メイン処理部分

実行シーケンス

終了処理

(ソース履歴)コーディング規則

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 20 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

メタコーディングガイドライン

プログラミング言語による

ファイル構成を読み解く

コーディングガイドラインを読み解く

なぜそうなっているかを読み解く不規則性の把握

マクロ、typedef など

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 21 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

静的な読み方: 名前の理解

読むこと名前の塊を理解すること

関数名、変数名、定数名、…コメントのスタイルファイル名名前付けの体系

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 22 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

静的な読み方: 歴史、依存関係の理解

歴史を読むこと設計の開始点を読むチーム構成を読む変更の時間間隔、最新の変更を読む

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 23 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

静的な読み方: 構造の理解

構造を読むことファイル構成、ディレクトリ構成  (言語によってはクラス、オブジェクト)バージョン管理グローバルな名前体系、コーディングルールインタフェース仕様拡張の方法想定されているデバッグのしかた外部依存関係データ構造制御構造データベース構成

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 24 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

静的な読み方: 周辺ドキュメントを読む

ヘッダファイルを読むこと基本的なデータ構造分岐やデバッグの作法依存関係

権利を読むことライセンス条件配布条件

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 25 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

静的な読み方:ツールの使い方

静的な解析ツール (プラットフォーム依存)ctags, doxygen, …呼び出し関係の可視化ツールなどもある

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 26 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

静的な読み方:人の理解

ソースコードには著者の意思や哲学がちりばめられている書いたひとを理解できればソースの理解は格段に効率化する拡張する方法、好きなデータ構造などテーストを理解ドキュメント提供の仕方、パッチ判定の仕方を理解

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 27 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

静的な読み方: テストコードを読む

テストコードを読むことテストの環境設定テストの網羅性テストの対象

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 28 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ソースを読む:いろいろ読む

読む技術

仕様書を読む技術

API 仕様書を読む技術アーキテクチャを読む技術

コード規則を読む技術

リリースプロセスを読む技術

コメントを読む技術

ロードマップを読む技術

依存関係を読む技術

人間を読む技術

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 29 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

目的別の読み方

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 30 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

プログラム言語を学ぶ

名前付け規則(変数、関数、定数、予約語)

データ定義(型、クラス)

構文規則(代入、条件文、繰り返し)

宣言、実行文、コメント

モジュール定義、処理フロー

ライブラリ、API、実行環境依存部分他のプログラミング言語との類似、差異

教育効果尺度: 言語仕様理解度、言語比較理解度

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 31 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

プロジェクトを学ぶ

プラットフォーム、依存する実行環境、ライブラリ、共通部分

名前付け規則(変数、関数、定数、ファイル)

コメント、ドキュメンテーション

バージョン管理

変遷、成長 (拡張) の過程拡張、外部 APIコンフィギュレーション定義

ライセンス条件

ロードマップ

教育効果尺度: プロジェクト理解度、API 理解度

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 32 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

技術を学ぶ

技術該当部分

実装部分と API 実行、Web 実行部分コンフィギュレーション定義

ライセンス条件

教育効果尺度: アルゴリズム理解度、プラットフォーム理解度

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 33 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

品質を学ぶ

コーディングの整合性、規則性

更新履歴

条件判定(アサーション)

エラー判定(準正常系)

エラー処理(異常系)

耐性(異常データ、異常トラフィック)更新履歴(頻度、更新方法、ドキュメンテーション)

教育効果尺度: 品質判定の正確性

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 34 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

機能実装例を学ぶ

例えば、Android コーディングの実装例具体的に何を書くの?携帯電話アプリってどう動くの?プラットフォーム、API?プラットフォーム依存のコーディング作法 (開始、終了、異常処理)IDE?

教育効果尺度: 機能実装準備理解の進み具合

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 35 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ソフトウェアソースを大量に読む

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 36 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

ソースを読む:たくさん読む

読む技術 - たくさん読む

【ソースをたくさん読む: 目的をはっきりさせて】

たくさんの著者と対話して学ぶ

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 37 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

大きなプロジェクトを読み解く

大規模プロジェクトにしかないものAPI 仕様書アーキテクチャ技術資料リリースプロセスロードマッププロジェクト間依存関係 (Required Versions)ファウンデーション (ByLaws, Membership agreement, …)(= ソース管理団体)人間関係、今起こっていること

概要を読んで計画する

あるいは、できればコードまで読まないですます場合

プロジェクト外部からの言及、批判

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 38 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

大量のコードを読む

大量のコードを読むそうはいっても何読むの?

Linux Kernel? GNU? GNOME? Android?Adobe Open Source / http://sf.net/projects/adobe-source (C++ です)

石黒邦宏 (ACCESS 元 CTO) 曰く、「凄いコードなんでびっくりした。凄いハッカーが作った凄いコード。ここ五年間に見たコードの中でいちばん凄かった。皆、これを勉強しなきゃ」

知らない OSS は怖い→ ルータソフト Zebra http://www.zebra.org/

石黒邦宏作成の OSS

読む経験

読む勘所

既視感

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 39 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

大量のコードを読む: 読む力 = 探す力

読む力 = 探す力

探すキー

関数、変数、

マクロ、型、…

探す場所

Dir, Web, Mail,

document, test, …

探すツール

Google, ViewVC,

Eclipse plugin, …

コード専用検索エンジンもある:BlackDuck Open Hub http://code.openhub.net/ (旧

Koders), Krugle (http://www.krugle.com/), {(http://www.google.com/codesearch は終了 (2015))

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 40 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

大量のコードを読む: 忍耐力

大量の情報を処理するにはツールでも時間がかかる400 万行のソースコードは doxygen かけるのに 2 時間

他人の書いたコードを読むのは苦痛読み始めに抵抗感、ハードルが高い

(プログラムは思ったとおり動かない、書いたとおり動く)大量といってもどれくらい読めばいいの?

Code Complete 2nd Edition にコードリーディングの節があるが、1日 1,000 行とのこと

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 41 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

大量のコードを読む: ソース可視化

IDE: 階層表示、型表示 on Eclipse (C/C++ なら Eclipse+CDT)エディタ: Emacs with etags, vi with ctagsコードクローン可視化ツール: Gemini (阪大), CCFinderXC フロー: cflow, cscopeSourceNavigatorソース以外の視覚化

性能ボトルネックの可視化Wiki の可視化データ可視化: Gnuplot, GNU Octova, Scilab, MayaVi, Maxima,OpenDX (バックエンドに使う)

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 42 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

大量のコードを読む: ソース可視化 (2)

山のようにツールはあるが探すのもかったるいとりあえず Eclipse+CDT (C/C++ の場合) にする

Eclipse 4.5 をダウンロードしてインストールCDT Plugin (8.8) をダウンロードしてインストールworkspace をつくり、“src” などソース拡張のディレクトリを指定読みたいソースを指定したディレクトリに格納

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 43 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

大量のコードを読む: ツール選択

フレームワークの理解最近は main() やイベントハンドラを書くことはない80 % 以上はフレームワークが仕事をしている再利用可能な部品をどう組み合わせるかが勝負

フレームワーク対応のツールで読むことが多いJava なら Eclipse, iPhone なら Apple Xcode, …フレームワークの中身が読めないと意味がわからないこちらから呼ぶのではなく、向こうがこちらを呼ぶHollywood Principle: Don’t call me, I will call you.

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 44 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

大量のコードを読む: 紙から実行まで

紙派: 驚くべきことに紙と鉛筆というエキスパートも多い集中できる情報が多すぎない何万行も紙で読むことは不可能: どこを読むかが重要

実行派: コンパイルして、動くコードなら、ビルドして動かすIDE で breakpoint をいれて動かす

call stack など見ながら読むところの目星を付けるグローバル変数の動きなどを追う

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 45 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

大量のコードを読む: 書き留めること

ただ読んだだけではだめわかったことを書き留める書き留めるツールの選択書き留めるフォーマットの選択当然、何を書くかでどう読むかが変わる読む前に書くことを考える

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 46 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

大量のコードを読む: 人に聞く

OSS を理解する最良の方法は知人に聞くこと大量で無秩序な情報 →  事情を知っている人に聞く「誰に」「何を」聞くかを的確に知ること

OSS の世界は狭い: ヒューマンネットワークが重要OSS 関係者は大量のメールを読んでいるので埋没する可能性に注意

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 47 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

演習

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 48 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

演習 A

1 プロジェクト探索大規模なプロジェクト、小規模なプロジェクトを探す小規模で活発なプロジェクトを探す

2 プロジェクト解説プロジェクトの歴史、概要をまとめる

3 OSS 地図大きな Foundation 化されているプロジェクトの比較をする

4 Coding style 比較Linux Kernel coding style と GNU coding style の比較をする

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 49 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

演習 B

1 プロジェクト観察小規模で活発なプロジェクトを探し、過去 2 週間のメールアーカイブから、プロジェクトの現在状況をまとめる小規模で活発なプロジェクトを探し、メーリングリストに 2 週間入って、プロジェクトの現在状況をまとめる

2 ソース観察適当なサイズのコードを読み、プログラム構造をまとめる

3 IDE 体験Eclipse を使ってみる

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 50 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

演習 C

1 用語辞典作り適当なプロジェクトを探し、ドキュメント、メーリングリストから、わからない単語 10 個を抽出し、意味を調べる

2 ツール探索ソース用検索ツールを探すインストールして使ってみて使用感をレポートする探した履歴をまとめ、どうすれば早く探せるかをまとめてレポートするソースの可視化ツールを探す

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 51 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

むすび

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 52 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

むすび

書く技術より読む技術ソースコードを読むことは状況を読むことに近い

読む目的を理解外部依存性の理解すべては読まない技術構造の理解リスクの理解成り立ちの理解

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 53 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

参考

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 54 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

参考

ソースコードを読むための技術http://i.loveruby.net/ja/misc/readingcode.html

その後、Ruby ソースコード完全解説序章にはいった模様

Code Reading: The Open Source Perspective (by Diomidis Spinellis,2003 Addison-Wesley)オープンソースのコードサーチエンジン BlackDuck Open Hubhttp://code.openhub.net/

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 55 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

最近の潮流

単体で読みやすくするユニットテストをしっかりするリファクタリングする

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 56 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

(参考)Eclipse

IBM によって開発された Java 用統合開発環境 (IDE)Java で書かれている1998 年開発開始, 2001 年 11 月オープンソース化2004 年 Eclipse Foundation 設立

プラグインさまざまな機能をプラグインとして組み込めるよう設計非常に拡張性が高いプラグインでさまざまな言語 (C++, Perl, C#, Python, …) に対応CVS 連携, JUnit 連携, Ant 連携SWT(Standard Widget Toolkit) を使い、動作が軽快

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 57 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

(参考) リファクタリング

振る舞いを変えずにソースコードの内部構造を整理する)主な技術

長いメソッドの抽出双方向関連を単方向に変更継承を委譲に書き換えるコンストラクタを Factory Method に書き換える引数オブジェクトの導入クラス、メソッド、属性の名称を変更

最近の IDE はリファクタリング機能が具備アジャイルプログラミングの XP などでは開発の習慣としてリファクタリングを挙げている

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 58 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

スーパープログラマの知人が推奨する読むべきソースコード

C なら Python のインタープリタ  https://github.com/python/cpython(ボリュームがある)きれいに書いてあるのは Python

バージョン管理ツールの mercurialhttp://mercurial.selenic.com/release/?M=D

– (ver 0.1 は 689 行 (6KB) ver3.2 のサイズは 600 倍の 3.9MB)  適当なサイズのを選んで読む

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 59 / 60

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

...

.

参考文献

Code Reading—オープンソースから学ぶソフトウェア開発技法(2004)

山上俊彦 (ACCESS Confidential) 「書く」ソフトウェア教育から「読む」ソフトウェア教育への転換 2016/07 60 / 60