細々と働くエンジニアが、細々と何かを書いていきます。

ゼロからプログラミングを学ぶ上で言語選択より大切なこと

»

 プログラミング勉強したいんだけど、どこから手を付けたらいいの?
 http://blog.livedoor.jp/news23vip/archives/4453300.html

 最近、この話題が流行っているようなので、自身の経験談を交えて、思うことを書くことにしました。

 僕が本格的にプログラミングを始めたのは、大学生になってから、2000年代初頭です。インターネットにハマり、自分でもホームページを持ちたいと思ってHTMLを勉強して、その後でです。もっとITのことを勉強したくなり、その一環として「プログラミング」を学びたくなりました。

 ちなみに、僕は教育学部(理科の先生を目指していました)。情報系の畑では無く、全くの素人でした。

 さて、どの言語を学ぼうか調べてみると、「Visual Basic」が初心者向けだという情報を見て、更に、大学の情報処理センターのPCにもVBがインストールされていたので、本を買って情報処理センターで勉強を始めました。

 さっぱり、わけがわかりませんでした(苦笑)。

 他の言語をやってみようにも、同様にわけがわからず。とりあえず本の内容を(わからないことがあったとしても)「こういうものだ」と思いながら進めていけば良かったのかもしれませんが、ちょっとでもわからなくなるだけで先に進もうという意欲が薄れ、すぐに挫折。根底の根底といいますか「プログラミングとは何か」というレベルから理解していなかったのだと思います。今にして思えば。

☆★☆

 プログラミングがわかるようになったきっかけは、基本情報技術者の午後試験の勉強として「アルゴリズム」のことを勉強してからです。

 福嶋先生の基本情報技術者 集中ゼミ 午後・アルゴリズム編 2013年版

 この、福嶋先生という方のアルゴリズム問題対策の書籍は、僕が基本情報技術者の試験を受験した頃から既に発売されていました。この本は、ただの午後問題対策だけではなく、「アルゴリズムとは何か」「上から下に処理が流れる」といった底辺のレベルから解説を始めていました。この本で、僕は基本情報技術者に独学で合格できましたし、この本の内容をマスターしてから、プログラミングも出来るようになりました。docomoのiアプリや、HSPというゲーム作りに強い言語でWindows用のミニゲームを作って遊ぶように勉強していました。

☆★☆

 僕の経緯の話は、ここまでです。

 つまり今回、何が言いたいのかといいますと、プログラミングをゼロから勉強するのであれば、「どの言語を勉強するか」という観点より「まずはアルゴリズムをしっかり学ぶ」ことの方が大事だと思うのです。

 本質を理解しないまま、本のサンプルコードを打ち込んで実行して、本にある通りに出力されて、「こう書けばこう動く」というように「(とりあえず)こういうものだ」と覚えていきながら本を進めても、行き着くところはコピペプログラマな気がします。「趣味で独学」にせよ、「新人研修でプログラミングの基礎を学習中」にせよ、簡単なレベルで挫折してしまうことなく、作りたいと思うプログラムを作れるようになるためには、基礎の基礎から、本質を理解しながら学習していくことが大事だと思っています。

 アルゴリズムアルゴリズムと、しつこく書いてきましたが、では、言語選択とアルゴリズム学習の関連はどうするか。企業の新人研修であれば言語は予め指定されているので、その言語の研修を始める前にフローチャートか何かでアルゴリズムの話をしておく方が良いでしょう。簡単なサーチとソートのアルゴリズムまで行えればベストです。目的(作りたいものの構想)が既にありましたら、それに合う言語を選べば良いと思います。ゲーム作りであれば、今の時代ならJavaScript(+enchant.js)がやりやすいかなと。

 もし、「今は特に作りたいものも無いけどプログラミングを勉強してみたい」というのであれば、プログラミングの本質を理解する(先にアルゴリズムを学習する)ときに、言語を理解する労力は抑えたいところです。一度に覚えるべきことは極力減らすべき、という理由です。そのためには、フローチャートで紙に書くのでも良いですし、PCで何か作って確認していきたいなら、僕自身はScratchが一番良いと思っています。最近、Scracthは、ブラウザでWebからプログラミング出来るようになり、開発ツールをインストールする手間が省けるようになりましたし、「Scratchは子供向け」というイメージが強いかもしれませんが言語習得の労力は他の一般的な言語より少なく済むはずです。

 参考)
 子どものためのプログラミング言語Scratchがブラウザから使えるようになった
 http://jp.techcrunch.com/2013/05/11/20130510kids-programming-tool-scratch-now-runs-in-the-browser/
 「すべての人がプログラミングを学ぶべき」---米MIT教授が三鷹市の小学生に伝授
 http://itpro.nikkeibp.co.jp/article/NEWS/20130127/452101/

☆★☆

 Scratchが無い頃は、「日本語プログラミング言語の『なでしこ』とか初学に良いのではないか」と色々な方に言っていました。言ってみたものの、ほとんどの方に反対されました^^; C言語など現場で使われている言語でなければ意味が無い、などの理由で反論されました。ただ、どうしても、「言語よりアルゴリズム」という思いは変えられません。学校の情報教育でアルゴリズムを取り入れると良いのに、とまで思っていますが、なかなかそういうわけにもいかないのは理解しています。なので、少なくとも、これからプログラミングを始めたい方、情報系以外の畑からIT業界を目指したい(既にIT企業に入社された)方に、挫折しないためにも、プログラミングの本質を理解するためのアルゴリズムの学習を勧めたいです。

 僕自身、一人でも多くの方の助けになるなら、何らかの活動に参加したり、自分で何か企画して実施したりして、手助けをしていきたいです。

 どこかでブログを作って、Scratchを使ったアルゴリズム学習の記事でも書いてみるとか面白いかな……。

Comment(4)

コメント

仲澤@失業者

先生「みなさんに質問です。ゾウを冷蔵庫に入れたいのですが、
   どうしたらよいですか。」

日本人にこの質問をすると、まず巨大な冷蔵庫が必要だという意見が大半でした。
中には小さなゾウを遺伝子操作で作るってのもありましたねぇ(vv;)。
ゾウを操るためにインドに教えを請うとか・・・。

さて、先生は子供たちの意見を一通り聞いた後、
次のように解説するそうです。

先生「やるべき内容を正確に把握することと、
   その手順を計画すること。
   これが大事ですね。」

そして、次のように述べるそうです。

先生「まず、冷蔵庫の扉を開けます。
   次に、ゾウを冷蔵庫に入れます。
   最後に冷蔵庫の扉を閉じます。」

手順の把握が大事なのであって、個々のステップの困難性は
後回しでよろしいという事かもしれません。
この話は英語圏では小学生程度ならみんな知っている話だそうですが、
自分は40を超えてから知りました(vv;)。

仲澤@失業者

言い忘れ。orz.
この話は、「物事はシンプルに考えましょう」という
ことのたとえらしいのですが、
最初に聞いたときは、自分は色々と深読みしてしまいました。
ゾウは分解していいですか、とか。(それは解体だろ)

recordare

学生相手にプログラミングを教えるバイトをしています
用意されている問題を解くようなプログラムを課題としているのですが、全く取り掛かれずに手が止まってしまっている子でも、「こういう処理をすればいい」という目的を明確にすれば自分で書ける子が多いです
つまり、プログラムに落とし込む段階でどのような処理(関数)を作っていけばいいのか、という段階で一番止まりやすいみたいですね

フローチャートを書かせて処理の流れ、目的をイメージさせるのは効果的そうですので、今後参考にしていきたいです

私がPenFlowchart(URL欄参照)を作ったのも,言語特有のこまごましたことをできるだけ考えなくていいように,という思いがベースにありました。