特集

プログラミング入門をどうするか
基 応
専 般

プログラミング教育／学習の理念・特質・目標

久野 靖（筑波大学大学院ビジネス科学研究科）

教育か学習か ?

なぜプログラミングか ?

筆者は最近，原稿等で，本稿のように「プログラそれでは改めて，なぜプログラミングなのだろミング教育／学習…」という語をよく用いるが，「なうか ?

ぜ教育／学習なのか，教育でいいのでは」と尋ねらのため」を合わせて思い付くものを挙げてみる（書れることがある．確かに題名が長々しく見た目が悪籍くなるが，それでも単に「教育」だとどうしても，「受ソフトウェア開発者が必要（V1）：今日では世の中け身で教わることを消化していく」というイメージのあらゆるところでコンピュータが使われており，☆1

1）

ここでは「専門家になるため」「一般の人なども参考にした）．

があり（図 -1） ，それにとどまりたくない，というこれら多数のシステムを動かすソフトウェアを誰か気持ちがあって「学習」をつけている．

が書かなければならない．そのような職に就く人はその気持ちの由来を内省してみると，次のように当然，プログラミングを学ぶ必要がある．

なる．過去においては，プログラミングの技能は「情仕事の一環としてプログラミングが必要（V2）：コ報技術者になる」「情報科学の研究手段として用いンピュータの広範な普及の結果，ソフトウェア開発る」などの「必要」のために「専門家やその卵が」者でなくても，自分の仕事のために必要なプログラ身に付けるものであり，そのためのトレーニングはムを作成することが増えてきている

いかにも（図 -1 のイメージでの）「教育」的だった．

す，プログラミングを学んでいなければ就けない職

しかし今日では，「コンピュータの本質を知る」「論☆2．今後ますま業が増えると見込まれる．

理的指向力を養う」等のため（詳しくは次章），「一ソフトウェア技術者との連携のため（V3）：ソフト般の人が」プログラミングに接するようになった．

ウェアを発注するなどのかたちでソフトウェア技術

そうなると，技能が目的ではなく，その「接する人」者と連携する必要のある仕事は多い．そのような場がより高みを目指すことに力点が置かれ，それで「学合に，技術者と有効なコミュニケーションをとり，ぶ」「学習」を使いたくなるのである．

効果的な開発を行うには，プログラミングの経験や☆1

教育とは決して受け身なものだけではない，ということは十分承知していますが…．

理解が有効だと考えられる．
コンピュータの原理理解のため（L1）：コンピュータの本質が何であり，何ができて，なぜ今日のよう教育「先生」

知識のコピー

自分で考える学習
自分で調べるに広まったのかについて真に理解するには，自分でプログラムを書いて動かす体験が必要である．これは，既存のプログラムを使うだけでは「そのプログラムでできること」しかできないのに対し，自分で児童・生徒・学生
図 -1

340

教育と学習のイメージ

情報処理 Vol.57 No.4 Apr. 2016

「学習者」

☆2

たとえばデータサイエンティストは，既存のソフトを使って分析するというより，自ら大量のデータを収集したり取り扱うためのコードを書くことが求められる職業だといえる．

ユーザ
外からいじれるところ＝固定プログラマ（可能性として）何でも作れるソフト
コンピュータ＋ソフト
図 -2

コンピュータ

ユーザとプログラマの違い

スト・安全性・場所・機材・身体能力等に大きく制約されることなく）もの作りの活動が行える題材となり，創造力を育む機会を提供してくれる．
思考を外部化した成果物として（E3）: プログラム
は「自分が考えたこと」を厳密かつコンパクトに外部化したものであり，それを自分や他人が見て検討することは「個人が考えたことを論理性・客観性を持ってグループで検討する」経験となる．
楽しく熱中できる題材として（X1）：人間は楽しんュータになることであり「コンピュータができるこで熱中するとき最もよく学ぶ．プログラミングはコとは可能性として何でも作れる」からだと考える

ンピュータに指示して思い通りに動かすという点で，（図 -2）．

多くの人にとって楽しく熱中できる題材であり，熱論理的思考を身に付ける（L2）：コンピュータはプ中して学ぶ貴重な体験を提供してくれる．

ログラムの指示通りに動作するので，プログラムを試行錯誤の経験を積む場として（X2）：実社会にお書く際には起こり得るすべての場合を想定し，それける課題には，少し考えただけでは解決せず，さまぞれの場合について厳密に動作を記述する必要があざまな可能性を試行錯誤していく必要があるものもる．このため，プログラミングを経験することは筋多い．プログラミングは，他人に気兼ねせずいくら道立てて系統的に考える練習となる．

でも失敗してみられる場として，貴重な試行錯誤の問題解決と能動学習の題材として（L3）：コンピ経験を与えてくれる．

答を導く」「人間に代わって作業してくれる」とい養（L1 ～ 4）」「表現力・創造力（E1 ～ 3）」「価値う両面から解決策を提供し得る．このため，プロある体験（X1 ～ 2）」に分類できる．筆者はいず

グラミングを通じて自分が持つ問題を解決するこれも今後の我が国を担う人たちにとって欠かせなとを（自分の問題としての～能動的な）学びの題いことだと考えているが，実際にプログラミング材としやすい．

教育／学習を実現する際には，漫然と全部を目指

答えが 1 つだけでない題材として（L4）：我が国のすのではなく，これらの理念・特質のうちどれ（複初等中等教育は（特に大学受験前後で）「想定され数でもよい）に力点を置くかを決め，それに合わた唯一の正解を当てる」ことに偏重し過ぎており，せて設計・配慮する必要がある（各学校段階の分これが個人が社会に出て答えのない問題に取り組む担案については後述）．

・

目標

上記はおおまかに「職業的必要性（V1 ～ 3）」「教特質ュータは強力なツールであり，多くの問題に「解・際の妨げとなっている．プログラムは同じ動作を実現する複数の記述が可能であり，「解の多様性」を身を持って学べる題材である．

目標は「離陸」

自己実現／表現の手段として（E1）：自分で考えて本章ではプログラミング教育／学習を行う際の具プログラムを作ることは，自分のアイディアを表現体的な目標設定について検討する．筆者はこれまでしかたちにすることであり，強力な表現手段である．にさまざまなプログラミング教育／学習の活動をそしてプログラムを完成させることは，自信や達成（直接・間接に）見聞してきたが，それらの中で「う感をもたらしてくれる．

まく行っていない」と思えたものはおおむね，次のもの作りと創造力のため（E2）：ソフトウェアは実ような特性があったと感じている．

際に動いて役立つものなので，プログラミングは（コ（a）プログラミング言語の文法や機能を逐一，順番

情報処理 Vol.57 No.4 Apr. 2016

プログラミング教育／学習の理念

プログラムを書くことはある意味では自分がコンピ

341

特集

プログラミング入門をどうするかに説明していく．

動かす（b）1 つの例題を選んで丁寧に説明し，試験もその動かす例題から出す．

動かす
動かす

（c）例題をその通りに打ち込んで動かすことにだけ

書く 観察
書く 観察

注力する．

書く

（a）については，そもそもプログラミング言語の書く 観察

図 -3 「離陸」の概念

テキストは言語を機能別に説明していくことが普通なので，そのようなテキストを教科書として採用し，であっても，「どのような計算をするか」についてその順番に説明していくと自然にそうなってしまう．

は無限の選択肢があり，コードの書き手がその中かすると学生はその説明を暗記して試験に対応しよう

ら「自分の意思で」選択しているとするので，プログラムを書くということにはあまそのことを指摘し，実際にさまざまな計算を行うよ

り意識が行かず，書けるようにならない．

うに求め，学ぶ側が実際にあれこれ試して意外な結（b）はこの「書けるようにならない」問題を克服

果に遭遇し，コンピュータの杓子定規さに触れるこしようとして生まれたように思える．しかしこの方とで「離陸」が実現できると考える．

☆3．授業の場面で法だと，学生はその 1 つの例題の字面と説明を暗記

一度簡単なコードで「離陸」が実現できたら，そして試験を乗り切ろうとするので，その例題の「再の状態を維持しつつ，制御構造，関数など，次第に現」だけはできても，自力でコードを書くことはお高度な（そして「離陸」している者にとって使いでぼつかなくなりやすい．

がある）機能に進んでいくのがよい．その場合，そ（c）は，プログラミングに対してあまり多くの経れらの機能を使うことで自然にこなせる課題を示し，験を持たない者が教える場合に，コードの内容やそ自分で試しながら（唯一の正解ではなく）自分なりの意味を十分説明できないので，学んだというかたの解に到達することを求めることで，「離陸」を維ちを作ることに注力する結果，起こりやすい．この持していけるというのが筆者の経験である．

このような報告に対し，「学生による違いが大き場合も学生はコードを十分理解していないので，書けるようにならない．

☆4

く，全員にとって適切な課題を出すのは困難」といこれらの知見から，筆者はプログラミング教育／う指摘を受けることがある．これについては筆者は，学習においてはまず次のことを目標にするべきだと各段階においてやさしいものから高度なものまで複考えるようになった．

数の問題を用意し，学生に選択してもらっている．
そうすると常にやさしい課題ばかり選ばれないか

離陸：自分の手でコードを書いて動かし，結果を見て手直しできるようになる．という危惧もあると思うが，学生も学ぶことの価値なぜ「離陸」が大切かというと，これができればや大切さは認識しているので，「自分が学んで成長（手直ししたものをさらに動かして…と続くことで）するためには適切な水準の問題を選ぶことが大切」

自力でコードを改良していけるからである（図 -3）．

であることを呼びかければ十分従ってもらえるとい前章で挙げた項目の大半は「離陸」していて初めてうのが筆者の経験である☆5．

成り立つものであり，この意味でも「離陸」が最重要な目標だといえる．これは前記のような状況を考えると，野心的な目標に思えるかもしれないが，決☆3☆4

してそうではない．
たとえば，2 ～ 3 個の数値を入力し，それを元に計算を行い，結果を表示する，という数行のコード

342

情報処理 Vol.57 No.4 Apr. 2016☆5

多くの授業ではこのような例題を「簡単なもの」としてすぐに通過してしまうが，それは「離陸」の機会を奪ってしまう大変もったいない行為ではないだろうか．
多くの授業ではたくさんのことを教えた後で「さあ，では離陸してください」とやっているが，それではその間に教わったことが全部重荷になってしまい，浮かび上がれない者が増えるという印象である．
もちろん「離陸」できていることが必須である．「離陸」できていれば，前章の「楽しむ」「熱中」の要素が働くことで，むしろ積極的に難しい課題に取り組んでもらえることも多い．

学校段階ごとの分担
現在の我が国では，小学校・中学校・高等学校・大学における体系的なプログラミング学習は（情報・工業・商業などの専門高校や大学の情報系・理工系を除けば）ほとんど実現されていない．そのため，どの学校段階であっても，最初の「離陸」からやる必要があり，そのために「楽しさ」に基づく学びが不可欠である．
しかし，そのようなかたちだと各学校段階ごとのから大学まで切れ目なくプログラミングを学ぶ機会が提供できるなら」という仮定のもとで，各学校段階ごとに何を理念とすべきかを提案する（表 -1）．
大学については初年度の共通教育までを考え（専門

中学校：L1 L2 L3 L4 E1 E2 E3 X1 ─ コンピュータについて知ることも重要だが，併せて論理的思考・問題解決・答えが 1 つでない問題への取り組みを学ぶことも重要．表現手段，創造力，熱中しての取り組みも引き続き重視する．
高校 必履修：V2 L2 L3 E1 E2 X2 ─ 仕事の上で必要ならソフトウェアが作れることと，論理的思考や問題解決のためのプログラミングを，表現や試行錯誤と合わせて取り上げる．
高校 選択：V2 V3 L3 L4 E2 E3 X2 ─ 必修部分に加えて，専門家と連携，多数の正解，グループでの検討などの側面まで，より踏み込んで学ぶ．
大学 情報系：V1 V2 V3 L2 L3 E1 X1 ─ 開発者から発注側まで職業的観点を一通り学ぶ．また論理的思考，問題解決，自己実現，熱中できるなどの点も盛り込む．グループで作るなどの部分（E2 E3）は専門課程にゆだねればよいと考える．
大学 理工系：V1 V2 V3 L2 L3 E2 E3 X1 ─ 情報系でなくても現状
ではソフトウェア開発者への進路も考慮する．専門課程は情報技術が中心ではないので，初年度段階でもの作り的視点を経験させたい．に言えないため），情報系，（情報系以外の）理工系，

大学 一般：V2 V3 L4 E1 E2 E3 X1 ─ 情報系・理工系以外では，複数の解を持つ題材として，また自己表現やもの作りの体験手段としてプログラミングを取り入れる（汎用スキル指向）．

それ以外で分けた．高校については普通科で全員が

表 -1

課程については学部学科ごとの違いが大きく一概プログラミング教育／学習の理念違いが見えにくい．そこでここでは，「仮に小学校

小学校：L1 E1 E2 E3 X1 ─ プログラミング体験を通じて「コンピュータとはどのようなものか」を知ることが重要である．
また，図画工作や音楽などと同様，表現手段・創造力を養う手段としても扱う．熱中して取り組み，楽しい体験を持たせることがこの先の学習に備える上で大切．

各学校段階ごとの理念の選択☆6

学ぶ部分と選択科目で分けた．職業科・高等専門学校については大学の情報系／理工系／その他のいずれかに準じればよいものと考えている．

そしてもう 1 つ，今後追加したい理念に「コード2）・特質

コードは美しく参考文献
1） 神谷加代 著，竹林 暁 監修：子どもにプログラミングを学ばせる
6 つの理由，インプレス (2015).
2） Kernighan, B., Bentley, J. and まつもとゆきひろ他 著，久野禎子，
久野 靖 訳：ビューティフルコード，オライリー (2015).
3） McConell, S. : The Code Complete 2nd ed., Microsoft Press   
(2004).
(2015 年 12 月 28 日受付）

目標

は美しく」がある ．これは，ソフトウェア工学の・

3）観点からも必要であるし ，価値あるコードで世の中に貢献している人の多くは「美しく」書くことにこだわっていると思うからである．ただ，この理念は天下り的に規則を紹介しても身に付かないと思う．
筆者は今は学生に「自分で美しいと思う指針を考えよう」と呼びかけるにとどめているが，よりうまくこの理念を学んでもらう方法は，今後の課題としたい．
☆6

現在検討中の次期学習指導要領では，情報の科学的な理解に重点を置く必履修科目とその履修を前提とした選択科目の 2 科目体制が想定されている．本稿では進学しない場合は必履修科目まで，する場合は選択科目までを学ぶとして考えた．

久野靖（正会員）■ kuno@gssm.otsuka.tsukuba.ac.jp

1984 年東京工業大学理工学研究科情報科学専攻博士後期課程単位取得退学．同年同大学理学部情報科学科助手．筑波大学講師，助教授を経て現在，同大学ビジネスサイエンス系教授．理学博士．
プログラミング言語，ユーザインタフェース，情報教育に関心を持つ．

情報処理 Vol.57 No.4 Apr. 2016343