Processingで学ぶ 実践的プログラミング専門課程

第31回実践的プログラミング専門課程 閉講行事

導入

「実践的プログラミング専門課程」というタイトルで30回の連載をしてきました。この連載を始める前、章立てについて私が考えたのは「工業高校の生徒たちに、プログラミングの実践的な力をつけさせたい」ということでした。

工業高校で教員としてプログラミングの初歩を教えていると、ほとんどの生徒たちが「ある壁」を越えられずに諦めの境地に落ちてしまいます。授業時数という制限や、自分の指導力、知識等の不足を痛感しつつも、せめて「プログラミングって、やればなんとかなりそうだ」と思わせたい。この連載は私なりの問題解決の形です。プログラミング言語の文法を指導した後、こんなふうに指導できれば、多くの生徒にこの壁を越えさせられるのではないか。そう思っています。

最終回である今回は、この専門課程の閉講行事として、教員の立場から日々感じていることを紹介します。

展開

改めて、プログラミングが「できる」とは

プログラミングが「できる」ということについて、いくつもの定義が可能です。私がここで用いたいのは次の定義です。

定義:コードで目的の仕事を行えることが、プログラミングが「できる」ということ。

例えば、特定のプログラミング言語の文法を学習し、入門書に掲載されている程度のサンプルコードを多少変更して活用できるというレベルがあります。それでも確かに目的の仕事を行うためにコードの力を使っているわけですから、たいしたものなのです。

しかし、ここで悲劇的なのはプログラミングが「できる」人に要求される「目的の仕事」がいつも簡単とは限らないということです。ちょっとしたアプリケーションを作りたいと思った場合でさえ、⁠目的の仕事」をコードに落とし込むために必要な知識や技術が全く足りないのです。

プログラミングは楽しい?

ところで、このところよく目にする「プログラミングは学ぶこと自体が楽しい。だから学ぼう」という目的は理想的です。Linuxを開発したリーナス・トーバルズ氏や、Rubyの父まつもとゆきひろ氏がその好例です。確かにこれが当てはまる人はいますが、多くの人にも当てはままるかというとそうでもないと思います。プログラミングを学ぶことが多くの人にとって楽しいものであれば、学校でわざわざ学習する必要はありません。ミニゲームやインタラクティブなグラフィックといった題材を上手に選んで、苦痛を感じない程度の難易度の学習に限っているからこそ楽しいと思えるのです。

考えてみてください。勉強が楽しくて毎日ウキウキしている生徒が学校にどれだけいるでしょうか。ある程度のレベル以上の内容を学習するためには、乗り越えなければならないハードルやトレーニングが相当にあるのです。それを乗り越えるには苦労をしますし、我慢も必要です。それでも生徒にプログラミングの有益さ・楽しさを感じてもらい、さらにプログラミングが「できる」ようになってもらうのが、私たち教員の仕事です。

前提:プログラミングは、誰にとっても楽しい学習課題ではない。

プログラミングが「できる」ようになるために

私は、目的の仕事を完遂するためのプログラミングが「できる」という力、すなわち「ソフトウェア作成能力」について、目的の仕事に関する知識・経験は当然のこととして、次の図に示すような様々な技術・技能の習得が必要だと考えています。

第0回で提示した図を再掲します。

図0.1 連載第0回で掲載した、ソフトウェア作成能力の図
画像

あるプログラミング言語の文法を学習して、データの入出力や繰り返し処理、分岐処理などが書けるようになったからといって、それだけではまともなコードは書けません。有用なソフトウェアを作りたくても、プロトタイプのコードを書くことさえ難しいでしょう。

そこで、やみくもに問題に取り組んでコードを書くのではなく、各種の技術・技能をかじりながら、それを問題に活用していけば、効率良くソフトウェア開発能力がアップするはずです。学ぶ当人にとっては、行きつ戻りつで自分の進歩を感じにくいかもしれませんが、実は上昇するスパイラルをたどることができます。それぞれの技術・技能には互いに関連があるので、2度目、3度目にスパイラルをめぐって同様の問題に取り組む際に、前回よりも高い視点から理解し、新しい技術・技能を活用していることに気づくでしょう。ソフトウェア開発能力の修得は、図に示した各種の技術・技能を単独で極めてから次へ進むのではなく、同時並行で学習していくべきです。同時が難しければ、短いスパンで切り替えながら次々と学習するべきです。

提言:ソフトウェア開発能力は、各種の技術・技能を同時並行で学習するべき。

教養として学ぶ「使える」ソフトウェア開発能力学習方法

ソフトウェア開発能力を得たいと考える人は、次の方法をたどるのが効率の良い学習方法だと提案します。

  1. 使用するプログラミング言語の文法や簡単なデータ構造、アルゴリズムを学ぶ。できるだけ多くの、実際に活用されているソフトウェアのソースコードを読む(週に2時間、合計で60時間程度)
  2. 本連載の内容を学習する。同時に月に一つ程度のプログラム作成課題をこなす(週に2時間、合計で60時間程度)
  3. 自分のソフトウェア開発テーマを設定し、これを完成させる。できればチーム開発を行う(週に3時間、合計90時間程度)

最低限、上記のような方法で時間を費やして学べば、最低限のソフトウェア開発能力を身につけられるでしょう。つまり、本連載の読者の皆さんにお勧めする今後の学習プランは「自分のソフトウエア開発テーマに取り組み、完成させること」です。プログラミングは教科書をなぞって学ぶだけではできるようになりません。継続的に知的学習と実践実習を並行して行ってこそ身につくものです。そして、完成させることでレベルアップするのです。

提言:プログラミングの学習は知的学習と実践実習を並行して継続してこそ身につく。

おわりに

プログラミングに対してArtという表現を使うときがあります。日本語でアートは芸術というニュアンスが強い単語ですが、プログラミングをArtと表現するときは高度な技能とか技という意味になります。旋盤やフライス盤といった工作機械の熟練工の技がArtであるといえばしっくりきます。日本の伝統的な工芸品の作り手、大工さんの技にもArtを感じます。

私の住む町には、⁠産業技術学校」があります。ここには大工さんになるための1年間のコースがあります。学生は手指に黒いアザを作りながら学んでいます。指導者は現役や退職後の大工さん達です。指導者の中にはマイスターと呼ばれる方々もおられます。学生たちは先輩の技をその目で見ながら、日々実際にものを作りながら学んでいます。学生達の就職も手厚く世話をしています。私はプログラマ育成にも、このモデルを適用すべきだと考えています。

現在、社会から求められているプログラマは、たとえてみれば大工のような存在なのだと考えています。すべてのプログラマが大工のような技能者でなければならない、という主張ではありません。現在プログラマが不足していると言われている現場に必要なのは、技能者としてのプログラマ、Artであるプログラミングを行うプログラマではないでしょうか。それに対する指導内容の焦点が定められないことが、⁠プログラミングは学校の教育では身につかない」という意見が生まれる背景だと思っています。

プログラミングが「できる」ようになるには、効率の良い手順があります。プログラマになりたい、ソフトウェア開発能力を得たいという方々が、自信を失わず学び続けられることを祈ります。


ほぼ一年間にわたる連載をご愛読くださったみなさん、ありがとうございました。みなさんの学習が、今後さらに深まって、目的のソフトウェア作成能力を着実に獲得されますようお祈りし、おわりの挨拶といたします。

付録

学習内容総覧

この連載で学習したテーマの一覧を下に示します。今後の学習を進める際のブックマークとして活用ください。

大変広い範囲ですが、一覧表にしてしまえばたったのこれだけです。そして、今後の学習を発展させるための土台に過ぎません。一つずつ極めようと思わず、一気に学ぼうとせず、それぞれ少しずつ学んで、確実に使っていきましょう。崖を一気に登る力がある人はわずかです。でも、迂回路を登ることは多くの人にできます。下手に最短経路をたどるとかえって時間がかかることがあります。迂回路を悠々と歩く人が早く頂上へだどりつくこともあるのです。心を壊さずに頂上を目指すため、じわじわいきましょう。

テーマ 概略
0~2 導入 この連載の目的、学習環境の準備
3, 4 コーディングルール 統一感が有り読みやすいソースコードを書く
5~8 構造化 コードに小さな単位の構造を与える
9~12 データ構造とアルゴリムズ 基礎的なデータ構造とアルゴリズムを知る
13~17 オブジェクト指向 オブジェクト指向の基本を知る
18~20 UML コードの構造を表現する図法を知る
21~22 テスト駆動開発 テストによってコードを確実に書く
23~26 デザインパターン プログラムの大きな単位の構造の常套句
27~30 リファクタリング 読みやすくメンテが容易なコードを書く
31 まとめ 総括、ソフトウェア作成能力とは

参考文献総覧

この連載で紹介した参考文献をテーマごとに整理し掲載します。また、連載で紹介しなかった、学習を深めるために役立つ書籍も掲載します。それこそ"Further Reading"(継続学習のための文献、発展資料)です。学習者には書籍が命です。

ProcessingとJava言語

  • 『Getting Started with Processing』⁠ケーシー・リアス, ベン・フライ著 Oreilly社
    • Processingの両親によるProcessingの入門書。簡易な英語で書かれていますので、高校生の英語学習にも使えます。邦訳はこちら
  • 『プログラミング言語Java』⁠ケン アーノルド、デビッド ホームズ、ジェームズ ゴスリン 著、東京電機大学出版局
    • Java言語のバイブル。必携です。
  • 『Java言語プログラミングレッスン 第3版(上)⁠下⁠⁠結城浩 著、SBクリエイティブ上巻下巻
    • Java言語の入門書として最高の一冊。上巻はJava言語入門者向け。下巻はJava言語でのオブジェクト指向を学ぶための良書。
  • 『本格学習Java入門[改訂新版⁠⁠佐々木整 著、技術評論社
    • Java言語の基本的な文法が良くまとめられています。また、大変広い範囲をカバーしているので、はじめてJava言語に触る人が、Javaがどんな言語なのかを知るために役立つ資料になるでしょう。
  • 『Processing 2: Creative Programming Cookbook』⁠ Jan Vantomme著Packt Publishing
    • たくさんの興味深いProcessingのサンプルコードが掲載されています。どれも楽しい題材です。特に動画や音楽に関するサンプルは秀逸です。課題として本書に掲載されたサンプルに取り組めば、おのずとProcessingでのプログラミングを楽しめるでしょう。残念ながら邦訳はありません。

プログラミング概論

  • 『イラストで読むプログラミング入門』⁠ダニエル・アップルマン著, インプレス社
    • プログラミングという技術全般をイラストレーションで分かりやすく解説しています。中高生から読めます。
  • 『エクストリームプログラミング』⁠ケント・ベック、シンシア・アンドレス 共著、オーム社
    • エクストリームプログラミング(XP)の原典。XPはプログラミングの技術というより、身につけるべき習慣。プログラミングを職業とする方、プログラミングを業務の一部として持つ方は必修。

コーディングルール

  • 『プログラム書法 第2版』(ブライアン・W・カーニハン, P.J.プルーガー 著、共立出版)
    • 広い意味でのコーディングルールの古典的書物。
  • 『プログラミング作法』⁠ブライアン・W・カーニハン, ロブ・パイク 著、福崎俊博 訳、KADOKAWA
    • コーディングルールからテストまで、プログラミングの基本がまとめられています。
  • 『Javaルールブック ~読みやすく効率的なコードの原則』⁠大谷晋平、米林正明、片山暁雄、横田健彦 共著、電通国際情報サービス 監修、技術評論社
    • 効率良くJava言語の標準的なコーディングルールを学習できます。
  • 『ずばりわかる! Java Javaの良いコード、悪いコード(日経BPパソコンベストムック⁠⁠日経ソフトウェア 編著、日経BP社
    • 各トピックともにコンパクトにまとまっており、Java言語でコーディングをする際の具体的な指針やその例が掲載されています。

データ構造、アルゴリズム、コンピュータ数学

  • 『改訂C言語によるはじめてのアルゴリズム入門』⁠河西朝雄 著、技術評論社
    • 各種のアルゴリズムとサンプルコードが掲載された入門書。辞書的な内容です。
  • 『教養としてのコンピュータ・サイエンス』⁠渡辺治 著、サイエンス社
    • 大学1年生の教養科目としてのコンピュータ・サイエンスの教科書です。
  • 『ハッカーのたのしみ 本物のプログラマはいかにして問題を解くか』⁠ヘンリー・S・ウォーレン、ジュニア 著、株式会社エスアイビー・アクセス)
    • 計算効率と速度を究極まで求めるならば、本書がオススメ。
  • 『Javaで学ぶコンピュータ数学』(平田敦 著、カットシステム)
    • 高校生から学べるコンピュータ数学のテキストです。
  • 『いかにして問題をとくか』⁠G・ポリア 著、丸善株式会社
    • 数学的に問題を解く考え方を丁寧に解説した名著。
  • 『The Art of Computer Programming Volume 1 Fundamental Algorithms Third Edition 日本語版』⁠ドナルド・E・クヌース著、アスキードワンゴ社
    • プログラミングを学習する人は、早期に本書を入手して学習しましょう。大変ハイレベルな文献ですが、本書を敬遠するのは損失です。
  • 『コンピュータの数学』⁠ドナルド・E・クヌース、 オーレン・パタシニク、ロナルド・L・グラハム 著、共立出版社
    • 一般的にプログラミングで活用される数学を丁寧に解説した実用数学書。プログラマの教養として学習しましょう。

UML、デザインパターン

  • 『これだけでわかる!初歩のUMLモデリング―基礎から各種テクニックまで第一人者が伝授!! (@ITハイブックス)』(萩本順三 著、技術評論社)
    • UML入門の良書。
  • 『オブジェクトモデリング表記法ガイド―例題で学ぶUML』(MISCOオブジェクト指向研究会 編著、今野睦 監修、プレンティスホール出版)
    • UMLの全体像が大変分かりやすく記述されています。
  • 『増補改訂版Java言語で学ぶデザインパターン入門』⁠結城浩 著、ソフトバンククリエイティブ)
    • デザインパターン入門書の最高峰。
  • 『オブジェクト指向における再利用のためのデザインパターン』⁠Eric Gamma 著、ソフトバンククリエイティブ
    • デザインパターンの原典。別称『GoF本⁠⁠。デザインパターンを学ぶなら必携です。
  • 『Java デザインパターン徹底攻略』⁠日立ソフトウェアエンジニアリング⁠株⁠インターネットビジネス部 著、技術評論社
    • GoF本の解説書で、サンプルはJava言語。
  • 『Robocodeで学ぶ 一歩先のJavaプログラミング』⁠平田敦 著、カットシステム
    • Robocodeを使ったJava言語の学習書です。デザインパターンの活用にも言及します。

ソフトウェアテスト

  • 『ソフトウェアテスト293の鉄則』⁠セム・カーナー, ジェームス・ベイハ, ブレット・ベチコード 著、テスト技術者交流会 翻訳、日経BP社
    • 現場で長年現場経験を積んだ著者らがまとめた各鉄則は、大変有益です。

リファクタリング

  • 『新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)』⁠マーチン・ファウラー著、オーム社
    • リファクタリングのバイブルです。
  • 『Java言語で学ぶリファクタリング入門』(結城浩 著、ソフトバンククリエイティブ)
    • ファウラーのバイブルと併せて読むことをお勧め。

おすすめ記事

記事・ニュース一覧