深き海より蒼き樹々のつぶやき

Sochan Blog---深海蒼樹

プログラムが書けないあなたへ、プログラムが書けない僕からのヒント

cpus

 僕がプログラミングできない理由 — 「まずは、言葉にしてみましょう」の意味を書いたのは、2014年の3月のことだった。ということは、今が2015年の12月なので、その間に流れた時間は1年と9ヶ月ほどだということになる。これは、少し驚きだ。あれから、もっともっと時間が経った気でいたので、少しどころか、正直に言うと、僕はかなり驚いている。
 あれから僕はとっくに3年か5年以上の時間が経過したような気でいたのだ。だから、まだ2年すら経ってない事実に呆然と立ちすくむような感じだ。
 しかし、これまでに流れた時間を、僕が短いと感じようが、長いと感じようが、まぎれもないもう一つの事実がある。
 相変わらず、僕は、プログラミングができない
ということだ。勿論、そんなことを自慢したいわけではないけれど、事実なのだから、仕方ない。

 ひとつ、恥ずかしながら、書いておきたいことがある。この言い訳がどういう意味をもつのか、僕にも判然とはしないのだけれど、事実を事実として書くことによって、誰かになにかを伝えられることができるかもしれないと信じて、僕は書こうと思う。
 この1年9ヶ月、僕はプログラミングの勉強というか、技術習得の努力を払ってこなかった結果として、いまもプログラミングできないというわけではない。
 まわりくどいだろうか? でも、どう言っていいのか、僕自身言い方を変えてもどれもしっくりこないでいる。
 PHPにだって手を出したし、Processingにだって手を出した、そして、PythonのTurtleでなんだかコツを掴めた気がしたこともあった。けれど、どれも結局のところうまくいってはいない。
 そして、今現在の僕がなにをしているのかと言うと、ずっと避けてきたJavaに手を出している。僕としては、これでダメならプログラムというものから手を引こうと、決心している。習得できないプログラムに時間と金をかけているよりも、もっと別のことにその労力を使った方がいいような気がしてきたのだ。

 そんなダメダメな非プログラマーである僕が、これからプログラムを習得しようとしている誰かや、習得できないで悩んでいる誰かにもしもヒントを与えられるならと、僕は書いている。
 それは結局のところ、前回の『僕がプログラミングできない理由 — 「まずは、言葉にしてみましょう」の意味』の繰り返しになる。
 かの記事の中でも、僕はこう書いていた。

そして、「言葉にしてみましょう」という作業が、簡単なことではないということも。

 そうだ、言葉にすること自体が簡単ではないのだ。
 そして、友人でありプログラマーであるのっちがずっと言っていた、
 『言葉にできるってことは、プログラムできるってことなんですよ』
の意味が、やっとわかってきた気がするのだ。

 そして、その言葉にするためのヒントとして、以前には清水亮氏の本を紹介した。まぁ、事実が物語っているとおり、その本を読んだ僕はいまだプログラミングできるようになっていないわけだ。勿論、これは清水亮氏の本に文句を言っているわけではない。
 今回は、この間、Javaの解説書というか、入門書をやっていて、ハッとしたことを伝えたいのだ。
 入門書だと、言語の解説だとか、例文解説みたいなものがあったあとに、練習問題があったりする。この練習問題がスラスラと解けると気持ちがいい。気持ちがいいだけじゃなくて、この言語こそ自分に向いた言語なのではと、かなり期待してしまったりする。次の練習問題で簡単につまづいて、そんな思いは木っ端微塵に吹っ飛んでしまうのだけれど。
 では、なぜ、ある練習問題は簡単に解けて、別の練習問題は解けないのか?
 僕はずっと自分の習得具合なり理解が未熟なせいだと思っていた。自分の頭が悪いからだとか、やっぱりこの言語も僕には不向きなんだとか。
 けれど、ふとあることが僕の頭をよぎった。ちょっとした仮定だ。
 『問題文がいいと、プログラムできる』
 なんだか、自分の頭の悪さを人(出題者)のせいにしているように聞こえるだろうか?
 別に、プログラム技術が身につかないことを他人のせいにしようという話ではない。
 比較的容易に解けた練習問題があったなら、その出題の仕方をよく見てほしい。それは、どんな風に書かれていただろうか? そして、なぜ、あなたはその問題文を読んで、比較的簡単にその全体像なりをイメージすることができただろう?
 そうだ、その出題分を自分で書けばいいのだ。もしくは、抽象的に書かれた問題文を読んでいきなりプログラムを書こうとせずに、抽象的に書かれた問題文を具体的に書かれた問題文に書き換えていくのだ。徐々に。

 入門書や解説書を読んでいて、いきなり難しくなると感じたことはないだろうか? ひょっとしたら、その時急に内容が難しくなっているのではなく、具体的だった話し方なり書き方が、急に抽象的になっただけかもしれない。もしくは、段階的に書かれていたものが、いくつかの階段をすっ飛ばして書かれていたのかもしれない。
 ならば、そのすっ飛ばされた階段を埋めていけばいい。勿論、そのときに書くのはコードでなくていいのだ。言葉であればいい。
 もう一度、書こう。のっちの言葉だ。
 『言葉にできるってことは、プログラムできるってことなんですよ』
 残念ながら、プログラムが不得手な僕やあなたは、言葉にせずにプログラムすることはできないけれど、言葉にすればプログラムできるのだ。僕は、そう信じている。

 自分が解きやすい、いい練習問題を見つけよう。
 僕が最近見つけたプログラムを身につけるためのヒントは、そういうことだ。健闘を祈る。