小山博史のJavaを楽しむ(10)【新人なるプログラマーへ】
ソースコードを読みましょう
ガリレオ
小山博史
2008/4/9
教育界、技術者コミュニティでJava言語の教育と啓蒙に長年携わってきた筆者が、独自の視点からJavaの面白さを掘り下げていく。(編集部)
| 今回の主な内容 ・ ソースコードを読むのって、どんなとき? ・ ソースコードを読む能力はプログラマーの“基礎能力” ・ ソースコードを読む能力を高めるには? ・ ソースコードから理解できる“技術者”を目指そう! |
新しい年度になって、もうじき新人の皆さんが現場に行く時期になってきました。大きな会社であれば、新人研修があって、その後に配属となりますから、実際に現場で活躍するようになるまでには、まだまだ時間があるかもしれませんが、小さな会社であれば即戦力として期待され、早速開発に参加することになるのではないでしょうか。
ということで、今回は新人の皆さん向けに、プログラミング技術上達の方法として、「ソースコードを読むこと」について語ってみたいと思います。
■ ソースコードを読むのって、どんなとき?
新人の皆さんは、「ソースコードを読もう!」といわれたときに、どういうことを想像するでしょうか。「プログラムの参考書などを購入して、そこに掲載されているサンプルのソ−スコードを読むのかな」と思う人が多いのではないでしょうか。もしくは、「自分が作成したソースコードを何度も見直して、実行時に問題が発生しないかどうか検討するということなのかな」と思うかもしれません。
ここでは、それらのソースコードを読むことも含めて話をしますが、ほかにも、開発チームのほかの人が書いたソースコードを読むことや、オープンソースのコードを読むことについても考えてみたいと思います。
■ 中心となる開発者の書いたソースコードをお手本に読む場合
筆者の経験では、チームで開発をするプロジェクトでは、中心となる開発者(コアデベロッパー)がソフトウェアの中心/核/礎となるソースコードを書き、それを参考にしたり、マネをしながらほかの開発者(デベロッパー)が周辺のプログラムを作成するといった開発に参加したことがあります。
![]() |
| 図1 コアデベロッパー中心の開発スタイル |
フレームワーク部分や共通ライブラリとして使われるプログラムをコアデベロッパーが作り、「プラグイン」プログラムやフレームワークのAPIをどう使うのかのサンプルとなるような簡単な機能も同じコアデベロッパーが作成するわけです。デベロッパーはコアデベロッパーが作成したプログラムのソースコードを読んで、自分が担当する機能を「プラグイン」として実装したり、フレームワークへ載せるプログラムとして作成したりすることになります。
■ 既存のソフトウェアを修正・変更する場合
また実際の業務上、既存のソフトウェアのバージョンアップやバグを治す機会も多々あるかと思います。そういった場合は、いかに“速く”ソフトウェアのロジックや動きを把握してソースコード中の修正/変更する部分をピンポイントで見つけ出すかも重要になってくると思います。
■ ウォークスルーをする場合
ソフトウェア工学について勉強したことがあれば、システム開発の工程の1つに「ウォークスルー」というのがあるのはご存じでしょうか。
![]() |
| 図2 ウォークスルー |
この方法では開発チーム全員でソースコードのレビュー(評価、確認)をするので、そのときにソースコードを読む必要があります。複数の目で、処理の流れを確認することにより、1人では気付きにくいミスを発見することが期待できます。
■ リファクタリングをする場合
また、最近は「リファクタリング(単純に説明すると、コードの修正によるソフトウェアの再構築、読みにくいコードを読みやすく洗練されたものに改善するなど)」をするためにソースコードを読むこともあります。
![]() |
| 図3 リファクタリング |
ちょっと前までは、「動いているコードは触るな」という常識がありましたが、TDD(テスト駆動開発)などでは、互換性を確保するためのテストを必ずすることを前提としたリファクタリングが推奨されていて、改善が必要なコードは積極的に修正するようになってきています。リファクタリングに当たっては、既存のコードを読んだうえで改善をすることになるので、その場合もソースコードを読むことになります。
編集部注:TDD(テスト駆動開発)について詳しく知りたい読者は、記事「プログラムを書く前にテストを先に書くことの利点」をご覧ください。
■ オープンソースを使っている場合
オープンソースのソフトウェアを使っているときに、うまく動かないことがあると、どんなエラーが発生しているのかを調べて、開発ホスティングサービスなどにあるソースコードをチェックするということもあります。
編集部注:開発ホスティングサービスについて詳しく知りたい読者は、記事「ソースコードの宝石箱、●●Forgeを見逃すなかれ」をご覧ください。
![]() |
| 図4 オープンソースの使用 |
オープンソースソフトウェアだと、ライセンスに同意すればソースコードを読むことができるので、ちょっとしたエラーなら、自力で応急処置をしておき、後で正式なパッチ(修正プログラム)を当てるといった方法もできるというのが魅力です。
■ ソースコード読む機会はたくさんある
このように、ちょっと考えただけでも、ソースコードを読む機会というのは多くあります。こうしてみると、プログラミング言語を勉強したてのころはあまり気が付かないものなのですが、「ソースコードを読む」という能力は意外と重要だと分かるはずです。
■ ソースコードを読む能力はプログラマーの“基礎能力”
さて、「ソースコードを読む能力」は重要といいましたが、筆者は「ソースコードを読む能力が上がれば、プログラミング技術上達に直結する」と思っています。これは、「キーボード入力の能力が上がれば、プログラミング技術上達に直結する」といっているのと同じようなものです。
■ キーボード入力能力も重要
プログラミング学習において、キーボード入力がたどたどしい人は、サンプルプログラムを入力するだけで時間と気力を使ってしまい、肝心のサンプルプログラムについて理解する時間が足りなくなってしまいます。コンパイルエラーの修正にも、時間がかかってしまいます。
これが、キーボード入力の速い人は、タッチタイピングでさっと入力してしまいますし、エラーの修正もキー入力のところで戸惑ったりはしません。そうすると、動作確認できるサンプルプログラムの数は、キーボード入力の能力が高い人の方が多くなる傾向となります。
短い時間で動作確認できるサンプルプログラムの数が多い人の方が、プログラミング技術力が高いというわけではなく、サンプルプログラムを理解できた数が多いかどうかの方が、プログラミング技術力が高いかどうかに影響してくるのですが、ここでは、大ざっぱな感覚としての傾向と考えてください。
最近のGUI環境のIDE(統合開発環境)ではソースコードの補完機能などがあるので、それを使えば、こういったキーボード入力の能力差は大きな影響はなくなっているとはいえ、ショートカットキーなどによる入力も、結局のところキーボード入力が必要なので、この傾向に変わりはないような気がします。
![]() |
| 図5 統合開発環境Eclipseのソースコード補完機能 |
ということで、「キーボード入力の能力が高い人の方が、同じ時間内で動作確認できるサンプルプログラムが多い」といえるかと思います。そうであれば、多くのサンプルプログラムを動作確認できる人の方が同じ時間内に多くのことを学べると考えられます。
■ キーボード入力能力を野球で例えると……
「キーボード入力の能力」は、野球の世界でいえば基礎能力の部分で、「走れるか」とか「打てるか」とかいった部分だと個人的には思っていますから、この能力が上がれば、プログラミング技術上達に直結するはずです。
とはいえ、「キーボード入力が速い人ほどプログラミング技術がある」というわけではありません。これは、野球の世界で「走れるからといって良い選手とは限らない」のと同じです。
■ ソースコードを読む能力の重要性とは?
ここで、筆者は「キーボード入力の能力」と同じように、「ソースコードを読む能力」も“基礎能力”だと考えています。
「ソースコードを読む能力」は、「キーボード入力の能力」ほど明確に能力差を測定できないので、説明が難しいのですが、「ソースコードを読む能力」が高ければ、多くの良いサンプルソースコードを読むことができますし、実際に動作しているプログラムのソースコードを素早く分析できるはずです。
こういう基礎能力が上がれば、プログラミングの総合力は上がるはずだと考えています。
それでは、ソースコードを読む能力を高めるためにはどうすればいいのでしょうか? 次ページで、そのヒントをお教えしましょう。
| 1-2 |
| INDEX | ||
| 第10回 【新人なるプログラマーへ】ソースコードを読みましょう | ||
| Page1 ソースコードを読むのって、どんなとき? ソースコードを読む能力はプログラマーの“基礎能力” |
||
| Page2 ソースコードを読む能力を高めるには? ソースコードから理解できる“技術者”を目指そう! |
||
小山博史のJavaを楽しむ バックナンバー
- 第1回 JavaとJavaScriptの親しい関係
- 第2回 いろいろなJavaを楽しむ
- 第3回 待望のJava SE 6 でパーシステンス
- 第4回 (Java+Derby)* Ruby on Rails プログラミング
- 第5回 【新人研修向け特別企画】JavaでPHPを使ってみた
- 第6回 JavaFXでJava RIA開発はどれくらい変わるの?
- 第7回 そろそろブログ+RSSアプリでも作ってみませんか?
- 第8回 デスクトップをJava製ウィジェットでにぎやかに
- 第9回 Google Android用携帯アプリ作成のための基礎知識
- 第10回 【新人なるプログラマーへ】ソースコードを読みましょう
- 第11回 Javaはクラウドのプラットフォームになり得るのか
- 第12回 「Javaは遅い」から「Javaは楽しい」に至る歴史
- 第13回 Subversionならできる! NetBook最強バックアップ術
| Java Solutionコラム一覧 |
ホワイトペーパー(TechTargetジャパン)
- Android NDKでJNIを使用してアプリを高速化するには (2010/3/17)
C/C++やOpenGL ESといったネイティブコードを使うためのNDKとJNIを紹介し、その使い方や注意点を徹底解説します - 調査の難しい「OutOfMemoryError」事例、5選 (2010/3/11)
Java開発者が避けて通れないメモリ不足エラーの基本的な問題切り分け方法と発生につながる事例、対処法を解説 - 究極の問題解析ツール、逆コンパイラJD-Eclipseとは (2010/3/8)
ライブラリ内で例外が発生! そのクラスのソースコードを調べたい!! 自動で逆コンパイルしてくれる無料Eclipseプラグインがあります - いまさら聞けない「Webサービス」の常識 (2010/2/26)
昨今では企業システムでも使われる「Webサービス」の概念やJava標準のJAX-WSを紹介しJBoss WSでサンプルを作成
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |











