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

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

この記事を読むのに必要な時間:およそ 4 分

導入

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

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

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

展開

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

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

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

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

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

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

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

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

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

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

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

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

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

画像

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

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

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

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

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

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

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

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

おわりに

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

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

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

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


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

著者プロフィール

平田敦(ひらたあつし)

地方都市の公立工業高等学校教諭。趣味はプログラミングと日本の端っこ踏破旅行。やがては結城浩氏のような仕事をしたいと妄想している。

Twitter : @hirata_atsushi

コメント

コメントの記入