プログラミングがピンとこない人に向けて、プログラミングを説明する

「プログラミングって、どういうことをするの?」
こんな質問を時々受けるけれど、どのレベルで何を説明すればいいのか、に結構悩む。

人それぞれだとは思うけれど、私の思う範囲は、
人がやることを、コンピュータに代理作業をしてもらうにあたっての、
その間全部の作業を指す
、としています。

さらに、以下の5つに分類します。

1.やりたいことを手順化する(仕様作り)
2.何を使って、どのレベルまでコンピュータに指示するかを決める
3.コンピュータへの指示を実装する
4.やりたいことが実現できているか、検証
5.検証できたものを実行できる場所に配置する

※複数人で作業したりだとか、仕事でやったりだといろいろあるけれど、
 一人で好きなものを作ってみるプログラミングの場合、ってことで。

プログラミングは3を指していると思ってる人が多いイメージですが、
この中で、特に大事だな、と思うのは1と2です。

今いるところから、目的地までの経路検索をしてくれるアプリを作りたいとしたうえで、それぞれで何をするかを説明してみます。

1.やりたいことを手順化する(仕様作り)

例えば、こんなことを考えます。
・必要なのは「今いるところ」と「目的地」
・「今いるところ」をどう入力方法(GPSを使用?住所入力?)
・経路の検索方法(自力で実装?どっかのAPIを使う?)
など。

まだ、パソコンもプログラミング言語も登場しません。
(プログラミング言語によって、実装時に意識しないといけないレベルも違うので、この時点で決めているに越したことはないのですが)

2.何を使って、どのレベルまでコンピュータに指示するかを決める

例えばこんなこと。
・プログラミング言語は何にしよう?(得意な言語?あえて勉強用のもの?)
・どこまで自分で実装する?(GoogleMapのAPIとか、使えるものは使う?自力で勉強がてら頑張る?といったことを考える)
・データベースは何を使う?
・どのOSまで面倒見る?(iOSのみ?Windowsも?など)
など。

使えるものは使った方が早いし確実なのではありますが、
あえて勉強のために自力で実装する、ということもありますね!

3.コンピュータへの指示を実装する

プログラミング言語で実装。
言語ごとに文法や書き方はもちろん違うし、開発環境もいろいろある。悩みつつも、「おっ、この環境はここが便利だな」「かゆいところに手が届かない。。。」だとかを感じながら作っていく。

Scratchだとこんな感じだし、

(チュートリアルから抜粋)

私が一番よく書いているC#(母国語と言えよう)だとこんな感じ。

1と2で決めたことを粛々と実装するのだけれど、ここでいろんな工夫をしたりだとか、決めたことが実装できずに悩んだりする。

大事なのは1と2と書いたけれど、個人的に一番楽しいのはここ。

4.やりたいことが実現できているか、検証

ちゃんと、やりたいことが満たされているかをテストして検証しましょう。
全て思った通りにできていることはほぼ無い。
「あれ、結構バグってるな。。。」と思いつつ、テストをしては直します。

コンピュータは指示したようにしか動きません。
思った通りにならなかった場合は、検証方法が間違っているか、
実装が間違っているか、仕様が不適切か。
規模が大きくなると、各機能が複雑に絡み合ってくるので、テストも大変だし、直すのもどこまで影響範囲があるやら、とかで大変になってきます。
目の前のバグはなおったけど、ちゃんと動いてたところが動かなくなった、というのもよくある話です。

5.検証できたものを実行できる場所に配置する

自分の家の中でしか動かさないのなら自分のPCに配置すればよいですし、
外でも見たい、となると、外からでも見えるクラウドの環境に配置したり、
スマートフォンのアプリだったら、審査を通してストアに配置だとか、
やることはそれぞれです。

さいごに

こなれてくると、1~3を一緒くたにしつつ、行ったり来たりしてる気がします。1と2が大事だとは思うけれど、3が一番楽しい。
「あんなこといいな、できたらいいな」のやり方を手順化できれば、
自分の手で目の前で実現できるのだからね。

改めて、「プログラミングって、どういうことをするの?」と問われたら、
「コンピュータへの指示全般」とざっくり答えるかなぁ。
で、こういうことが面白いだとかを得々と語ってしまいそうです。

プログラミングの敷居が高いなー、と思ってる方々、
興味があるのであれば、ぜひ一度手を出してみてもらいたい、と思います(^^

この記事が気に入ったらサポートをしてみませんか?