プログラミングを全くしたことが無い人から見たプログラムの世界

プログラミングの超初心者用教科書の最初のページに書いてあるような、

  • コンピューターはプログラムを1行ずつ実行する
  • 変数というのがあって、変数には値を代入することができる

というプログラマーにとっては当たり前の話。でも、プログラミングを全くしたことが無い人は、そういう一番基本的なプログラムの原理のこともわからないと思います。

大学や、最近では小中高でもプログラミングを教わることがあると思います。何か動くものを作るまでには至らなくても、プログラムの原理というのはどこかのタイミングで習うこともあるのではないでしょうか。

わかってるからどうとか、わかってないからどうとか、というのはこの記事の本題ではありません。

わかってない人から見たプログラムの世界というのはどんな感じに映っているのか、というのを過去の体験談から紹介してみたいと思います。内容は、僕自身が2009年頃(僕が34歳の頃)に書いた記事のほぼ全コピペです。要するに、手抜きです。アヒャ。

そしてもう1つの裏テーマとしては、「新しいことを勉強するとは何ぞや」という話。社会に出てからの勉強というのは、学校のテストで良い点を取るための勉強とは根本的に違います。

スポンサーリンク

以下、2009年頃の記事から抜粋

いろいろとワケがありまして、今日はプログラマーの新人を採用するか否かの面接(兼ディスカッション兼試験兼雑談)をしてきました。

そのW君(仮名)は確か23歳。大学を途中でリタイアし、就職活動の経験は無い。アルバイトは何かしているらしい。そして、プログラミングに関してはプの字も知らない素人。

即戦力を求めているのに何故素人のW君がウチの門戸を叩いたかというと、実はこのW君は、取引先のW様様様のご子息。ウチが人材を求めているということをW様(父)が知って、「わしのダメ息子を面倒見てくれないか」となったわけですね。

でも、W様(父)は決して圧力はかけないし、介入もしない。いやむしろ、びしびし厳しくやってくれ、ダメならダメで容赦なく斬り捨ててくれ、とのことでした。

 

そんなこんながあったのが1ヶ月前。とりあえず入門書を渡し、その一冊(Windowsのコントロールの基礎とか文法の基礎)を独学でマスターするよう言い渡しました。期間は1ヶ月。その間の賃金は一切出さない。でも、質問はいつでもOK。

その成果を確認するのが今日だったわけですね。

こちらとしても、プログラミングのプの字も知らない人にそれだけの勉強を強いるのは過酷だということはわかってる。僕が同じ状況におかれたら多分できないだろう。それでも、今ウチも教育に時間を割くことができないという現状を理解してもらい、また、それだけの勉強の気合が無いとこの先やっていけないということを体感してもらうため、このようなカリキュラムに至ったわけです。

ぼく

さて、どのくらい本を読みました?

W君

え…っと、この辺までです。

ぼく

半分もいってないよね。それに、この一ヶ月間、一度も質問してこなかったよね。

W君

何がわからないかがわからなくて…

望み薄、か。じゃあとりあえず、即興で一本プログラムを書いてもらおう。僕が人に課した課題の中で、最も最低レベルのやつを。(普通の一般人はこれができなくても全然大丈夫です)

課題(VB.NET/WinForms)

2つのテキストボックスに被除数と除数を入力し、「計算」ボタンを押すと、割り算の余りが3つ目のテキストボックスに表示されるプログラムを作ろーぅ。(例:54と5を入力して「計算」ボタンを押したら、「4」と表示される)

で、めっちゃくちゃ悩みながらもW君から出てきたモノがコレ。

Private Sub TextBox1_TextChanged(略)
  Dim a1 As Integer
  TextBox1.Text = a1
End Sub
Private Sub TextBox2_TextChanged(略)
  Dim a2 As Integer
  TextBox2.Text = a2
End Sub
Private Sub TextBox3_TextChanged(略)
  Dim a3 As Integer
  TextBox3.Text = a3
End Sub
Private Sub Button1_Click(略)
  Dim a1, a2, a3 As Integer
  a3 = a1 Mod a2
End Sub

むうう…。むうううぅぅ………。

1ヶ月間、何もしていなかったことは明白だ。もう、これだけで指摘点が100個くらいあって、正直どうしたものかと悩んでしまいましたよ。

とりあえず、何故TextChangedに書いたのか聞いてみた。やり方によってはTextChangedで間違いではないし、そこに何か思想があったのかなと。

W君

えっと、ダブルクリックしたらこれが出てきたからです

はい、そうですか。もういいです。聞いた僕が悪かった。

 

今日の段階で仮採用するか否か、あるいはウチの経費から彼の講習代(プロの、なんとかプログラミングセミナーとかいうやつね)を出そうか、そんなことを判断するつもりだったんですが、こりゃぁもう、判断以前の問題だ。だって、何もやってないんだもん。

まあ、ウチも全く彼にかまってあげてなかったから、ある意味仕方が無いかもしれない。というわけで、さらに1ヶ月の猶予を与え、「今度こそ一冊読破」を課しました。もちろん、一切の賃金や費用は出しません。

 

さてここで、上のコードをもう一度見てみよう。これはつまり、何も知らない一般人が「プログラムって、こんな感じじゃね?」という雰囲気で書いたものです。プログラムとは、上から順に1行1行実行されるものだ、ということすら知らない人の。

そう考えると、なかなか面白いものが見えてきます。まず彼には「代入」という概念がありません。「これとこれが等しい」というある種の希望というか属性というか、そういうものを等号で結んだだけです。実行の順番も何も無い。ただ、値と値の関係や性質をそこに書いただけ。

これはもしかしたら、オブジェクト指向に通ずるところがあるのではないだろうか。非オブジェクト指向的な「実行・制御」を概念の頂点に据える考え方にどっぷり浸かってしまうと、なかなかこういう考え方に転向するのは難しい。まっさらな状態の素人のほうが、より本質を見抜く力があるのではないだろうか。

などと考えたりしましたが、だからといって、彼に良い評価を与えるつもりはありません。0点です。それは覆りません。

(※昔の記事のコピペ、終わり)

新しいことを勉強するということ

新しいことを勉強しようとすると、初歩的な教科書であっても、1ページ目からわからないことだらけということがよくあります。

ほにゃららとは、ふにゃららむにゃむにゃすることである

と書いてあっても、ふにゃららむにゃむにゃがわからなければ理解できません。わからないのでググってみると、

ふにゃららとは、ごわごわつやつやぬるぬるなどのことである

って書いてあって、さらにわからない用語や概念が出てきます。

そういうわからないことを全部分解して調べ尽くして、自分のわかる内容にまで落とし込んだとき、やっとほにゃららが理解できます。

その膨大な作業が、新しいことを勉強するということです。

社会に出ると、こういう勉強が常につきまといます。学生を卒業してやっと勉強から解放されたと思いきや、社会に出てからのほうが勉強量が多いという現実を突きつけられます。

その一方で、社会に出てからの勉強というのは、カンニングし放題です。というか、むしろカンニングしろ。答えを出すために必要なら、手元にメモを置いてもいいし、ググってもいい。そこが、学生のときの勉強とは大きく異なりますね。

まぁとにかく、そういう「新しいことを勉強する」という作業に屈せずに挑戦し続けられるかどうか、全部は無理でも部分的に何かを身につけることはできるかどうか。それを前述のW君に求めたかったのですが、残念ながら0点でした…。

何も知らない人の視点

何も知らない人の視点というのは、時に斬新だったりします。それを知ってる側から見たら当たり前すぎて気にも留めないようなことを、別の視点から見るからこそ見えてくることもあるかもしれません。

何も知らない人からさえも学ぶという気持ちを、常に持ち続けていたいものですね。

スポンサーリンク