東京医療保健大学
Menu

ヘルスケアコラム

プログラミングの難しさ

医療保健学部 医療情報学科
金澤 功尚

プログラミングは難しいとか,向き不向きが強く表れるものとよく言われています.本学でプログラミング関連の科目をもって数年経ちますが,学生の様子を見ているとそのことが強く感じられます.

そもそもプログラミングとはどういうものなのでしょうか.

プログラミングは,端的に言えば「機械」に仕事をさせるための「作業指示書」を作ることです.ここでいう「機械」とはコンピューターを指します.コンピューターというとデスクトップやラップトップといったパーソナルコンピューターを想像しがちですが,ほかにもスマートフォンであったり,自販機やレジの制御部であったりいろいろなものがあります.

「作業指示書」とはどのようなものでしょうか.例えばこの記事のサムネイルのようなタイヤを履いているラジコンのようなロボットがあったとして,このロボットに対して

1.  3秒直進する.
2.  90度右に旋回する.
3.  1に戻る.

というような指示の列を作ることがプログラミングに相当します.そしてこの3行の指示がプログラム,これを記述するための特別な記法がプログラミング言語ということになります.これだけであれば特段難しいことがあるように思えないかも知れません.ですが現実のプログラミングの習得には様々な困難が伴います.

この困難さの原因はいろいろと考えられるのですが,今回は「言語能力」について取り上げたいと思います.

プログラミングには一定以上の言語能力が必要とされます.前述の3行のプログラムは日本語で書かれていますが,そのようなものは現実にはほとんどなくたいていのプログラミング言語では英語に由来する語彙を用います.例えば以下のように記述されます.

var aRobot = new Robot();

for (;;)
{
    aRobot.goForward();
    delay(3000);
    aRobot.turnRight(90); // ※
}

どの部分をとってみても英語のような何かで書かれています.これだけで読み取るのを諦めてしまう人は少なくありません.単語の意味が分からなければ何を意図しているのかをつかむのも困難になります.また,プログラミングに関連する技術資料は英語で書かれているものがほとんどですから,英語を読み取る能力は必須となるのです.

ただ,言語能力というのはこのような英語の問題だけではありません.※をつけた行に着目してください.この部分は「90度右に旋回する」を意図しているのですが,このカッコの間に書かれているものが旋回する「角度」の指定ということになります.ここから,

旋回するには,「robot.turnRight(★)」と書く.
★の部分には旋回する角度を示す数値が入る.

と説明して「では30度旋回するためにはどうしたらよいですか?」と問いかけて「robot.turnRight(30)」という記述を素直に書ける人は実は思うよりもずっと少ないのです.このためには,記述例や構文の説明を読んで必要な部分を置き換える,という能力が必要とされます.これも言語能力の一つといえるでしょう.SVOのVには動詞が入る,というのと似たような話です.英語ならば基本五文型で済みますが,どのような単純なプログラミング言語であっても,このような置き換えを必要とする構文を無数に含んでいます.プログラミング言語を操るには,このような能力が非常に重要となるのです.

*  *  *

プログラミングとその困難さについてご理解いただけたでしょうか.今回は言語能力にまつわるものだけを取り上げましたが,これは記述の表面上のことでしかなく,それを超えた先には「目的の状態を作り出すための手順を自ら考え出す」という本質的な困難さも控えています.

どのように教えれば学生にプログラミングを効率よく習得させることができるのか悩む毎日ですが,英文読解の課題を出題しようかなどと検討しつつ筆を置きたいと思います.

教員データベース:金澤 功尚⇒

このページの先頭へ