COLUMN

コラム

やらずに死ねないプログラミング【2】
​​目的がないプログラミング学習は無意味なのか
山辺 真幸

2020/01/15

山辺 真幸

プログラミングを学びたいと思っている人は、明確な目的がないとダメなのでしょうか。ここでは、そのようなちょっとモヤモヤした状態を脱出して、重い腰をあげる方法について考えます。

プログラミングを学ぶことに興味はあるけれど……

「学んだほうがいい」とわかっていても、なかなかはじめられないプログラミング。たしかに、仕事や学業など目に見える成果に直結していなければ、貴重な時間を割いてまで重い腰をあげる気にならないというのもうなずけます。

理系も文系も関係なくプログラミングを学ぶことが大切という主張は、もはやあらゆるところに溢れかえっているので、ここであらためて書く必要はないでしょう。またAIやデータサイエンスのような、特定の技能習得のためのプログラミング学習についても、多くの入門書やスクールが存在し、働きながら学びたい人に向けたリカレント環境は整いつつあるように思います。

しかし問題は、プログラミングを学ぶことに興味はあるけれどそこまで切迫した状況にない人が、どのようにプログラミングにアプローチしていけばいいのか、このことについてはあまり語られていません。明確な目的がない人にとっては、プログラミングを学ぶ必要も方法もないのでしょうか。

目的に応じて細分化・高度化しているプログラミングの世界

image

IEEE(アメリカ電気電子学会)が毎年発表している、プログラミング言語の利用度ランキング

spectrum.ieee.org

プログラミングといっても、達成したい目的によって使用する言語が異なります。そのため、一般的には、まず何をプログラミングで実現したいかをハッキリさせてから学ぶのがよいとされます。たしかにWeb制作、モバイルアプリ開発など目的に応じたプログラミングの本やスクールなどでは、それらの目的のために用意されたカリキュラムがあり、それにそって体系的かつ効率的に学べます。

しかし一方でこのことが、目的がハッキリしないうちにプログラミングをはじめることの妨げになっているとも言えます。ほとんどの人は数あるジャンルの中からどれを選択するべきか迷ってしまうのです。

少しでも興味があることからはじめてみればいいという意見も多く見受けられます。たしかに何もやらないよりはマシかもしれません。しかし、興味の対象になりやすいWebやアプリやゲームなどを作るとなると簡単なものであってもそれなりの時間も費用もを要す上に、やっと自分が形にしたものと日常的に見慣れている一般のプロダクトを比べてしまうと到底満足のいくものにはならないでしょう。

なぜそうなるのかというと、もちろん教材やカリキュラムが悪いわけでも学ぶ側の能力の問題でもありません。その理由は明白で、Webやアプリといった私たちが何気なく日常的に使うプロダクトは、エンジニアやデザイナーが長い年月をかけて積み重ねて磨き上げた技術の最先端の領域でもあるからです。

そうした領域では、利用者の視点で「いつも見慣れているもの」であっても技術的にはかなり高いレベルにあります。それゆえに、プログラミングを少し知っておきたいつもりではじめたのに、「自分にはこれしかできない」という挫折感につながりやすいのです。

目的がなくてもプログラミングを学ぶ意味

image

たくさんの粒子の運動を計算する単純なプログラムから、どのような視覚的な楽しさが生まれるかを探る。計算と造形の関係を、遊びと学びの中間的な行為から体験する。筆者の授業資料から引用。(リンク先では動く様子が体験できます。ソースコードも公開しています。)

www.openprocessing.org

目的をもって学ぶことはもちろん素晴らしいことです。とはいえ目的がないからといってプログラミングをはじめることに負い目を感じる必要はありません。筆者のプログラミングの授業の履修者アンケートでも、明確な目的をもって臨んでいる学生は多いときでも2割程度です。

もちろん美術大学なので表現することに対する強い関心はありますが、たとえば「プロジェクションマッピング」や「VR(バーチャルリアリティ)」などのように具体的なアウトプットを目指して学ぶというスタイルの学生は少数派です。そのような目的意識のハッキリした学生には、それに必要な知識や技術と現在の本人の技量のギャップを伝え、それを埋める方法について指導すれば、半独学で学び続けられます。

目的がハッキリしない大多数の学生に何をさせるかというと、プログラミングそのもの学ぶのではなく、プログラミングを通じてコンピューターでできる表現で遊ぶことを促します。コンピューターで遊ぶというと「ゲーム」を連想しますがそうではなく、小さな子どもが積み木でする遊びのようなイメージです。

「遊ぶ」ということに目的は必要ありません。子どもは積み木で形を作ったり崩したりしているうちに、重力や色や形のバランスなど、この世界の秩序を発見しながら学んでいきます。このようなプログラミングの世界での目的のない「遊び」がコンピューターとの距離を縮める大きな役割を果たします。

コンピューターとの距離

image

「コンピューターとの距離」とは何でしょうか。私たちは日々、PCやスマホなどを使いこなし「コンピューター」については十分知っているように思い込んでいますが、実はそれは間違いです。「コンピューター」を苦もなく簡単に自然に使いこなせているのは、「コンピューター」を人間にとって有用で使いやすいものにするための研究が発展し、それを形にするデザイナーやエンジニアが日々研鑽を重ねているからであって、私たちは完全にその恩恵の傘の下にいます。

GUI(グラフィカル・ユーザー・インターフェイスは)その最たる例です。コンピューターは一般的な道具と違って、何にでも利用できる汎用性の高い機械であるがゆえに、そのままの形ではかえって人間には使いにくいのです。ですから「デスクトップ」とか「ゴミ箱」といった人間が連想しやすい記号をまとわせることで、誰でも目的に応じた使い方がすぐにできるようにデザインされています。

言い換えれば、私たちは「コンピューター」そのもの、つまり膨大な計算を瞬時に行い大量の記憶や通信する機械という道具の本質については覆い隠され、見たり触れたりすることなく過ごしているため、ほとんど何も知らないのです。

ひらめきは教えられない

子どもが遊びながらこの世界の秩序や多様性を感覚的に身につけていくのと同じように、プログラミングで遊ぶことによって、何にも覆い隠されていない「コンピューターの世界」の秩序や本質が見えてきます。「遊び」とはその計算能力を使って何ができるのかを、目的を決めずにあれこれやってみることです。「遊び」を通じた気づきは他人が教えたり、言葉では伝えられません。本人がやってみるしかないのです。

そしてコンピューターの本質を少しでも垣間見る経験ができたとき、人の創造性は大いに刺激されます。そしてあるとき、「これを応用すれば○○ができるのでは?」という小さなひらめきが舞い降りてきます。それこそがあなたがプログラミングを学ぶ目的になるのです。

あとは、その小さなひらめきを大切にすることです。どのようなひらめきかはわかりませんが、それはあなたがこれまでに積み重ねてきた経験を元にコンピューターの力によって、あなたができることの範囲を一段階外に拡張してくれることは間違いありません。

スティーブ・ジョブズは、移動のエネルギー効率を人間と他のさまざまな動物で比較した資料を目にしたと言います。生身の人間は他の動物たちに比べて劣るのに、自転車に乗った人間のそれは、他の動物を圧倒することに衝撃を受け、次のように述べています。

Humans are tool builders and we build tools that can dramatically amplify our innate human abilities.
人間は道具を作ることによって、生まれもった能力を劇的に増幅できる。
ー” Steve Jobs: The Lost Interview ” © John Gau Productions & Oregon Public Broadcasting 2011

itunes.apple.com

コンピューターはどんな道具にもなり得ますし、その道具を作る手段がプログラミングなのです。その道具は、多くの人が使うものであっても、自分一人だけが楽しむものであってもかまわないのです。

やっていればプログラミングをする目的が見えてくる

逆説的ですが、目的を定めずにプログラミングをすることによって、自分なりのプログラミングをする目的が見えてくるはずです。次回はそのような「遊び」を楽しむために最適なプログラミング言語や環境について紹介します。

やらずに死ねないプログラミング【2】​​目的がないプログラミング学習は無意味なのか
山辺 真幸

2020/01/15

山辺 真幸

関連記事

image
image
image
人気の記事
タグ一覧
バレッドキッズ新規生徒募集
バレッドアカデミー
バレッドキッズ先生募集