Raspberry-Piで基礎のC言語。IoT技術者への入り口へ。

Raspberry-Piの基本の言語はやはり「C言語」とにかく、まずは「Lチカ」まで行ける、という初心者向けの本を書きました。続編は「コピペでいける!Raspberry-Pi/C言語でセンサーとネットのプログラムを書く本」「コピペでいける!Raspberry-Pi/C言語でLPWAのプログラムを書く本」この3冊で、ラズベリーパイとC言語は完璧。次は本格的なIoT技術者を目指せる。

 


 

子供にプログラミングを教えるのであれば

最近は学校教育でプログラミング必修、とかなるらしいので、あちこちでその話題を聞くんだが、正直なところ、この程度の理解では、そりゃ面白くもなんともなかろうなぁ、と思うわけですよ。

まずね。人間が物事を理解するのは「分析(Analyze)と統合(Integration)」という基本があるんだぜ、ってことがわかってないんじゃないかと思うのね。これは西洋の科学の基本のところなんだな。日本語で「科学」って訳した人、すごいねぇ。ちゃんと本質をわかってます。西洋の科学の基本概念は「ツリー構造」なんですよね。ほら、フォルダとファイルなんて、そういう感じでしょ。コンピュータのソフトウエア世界そのものが、この思想で出来てるわけです。プログラミングでいえば、クラスとか、構造化とかって、そういうことだよね。

「科学(Science)」ってのは、「科」する学問なんざますよ。「科」ってのは、ほら、草木の分類とかで「~科~目の」なんて言うじゃないですか。あの「科」です。その意味は「分けて、分けたそれぞれに名前をつける」ことなんです。そうして分けたそれぞれのものが別のものだと認識する。そして、わけられたものも、またさらにわけられて。。。。で、結局どうなるかというと、わけられたものの構造は「より簡単になる」わけで、人間が理解しやすくなる(はず)って言うことなんですね。だから「分ける」「分けたものに名前をつける」「名前をつけることによって、わけられたものどうしが別のものであると認識する」わけです。分かった?なんつって。こうやって、ツリー構造の幹から枝に向かうわけですね。概念的にね。これを「分析(Analyze)」と言うわけですな。

で、分けて、違うものと認識する、というのが前提だから、同じ名前のファイルとかって、同じフォルダの中の同じレベルの場所に作れないようになってるよね。そういうことだよ。昔のコンピュータサイエンス関係の本には「named」っていう単語がいっぱい出てきた。「名前が付けられた」ってことね。これが重要な意味を持つのは、「分類」がそれによってなされるからだね。

反対に、このツリー構造の枝で別れたものを組み合わせて幹の方に向かう、複雑なものを作っていくのは「統合(Integration)」っていうのね。

近代から現代に至る「科学」のそれは根本的な哲学なんですわ。コンピュータの構造とかプログラミングも、要するにそういうものが根底にあって、それで作られているわけね。まずはさ、子供にここを理解してもらわんと、困っちゃうわけです。

しかし、だ。この「科学」という人間の叡智も、ビックラこいたのが、生物の世界。言い換えれば、自然科学のほとんどだわな。分析していきゃわかるだろ、らくしょー、とか思って分けて分けて分けて分けまくった先には「C,H,N,O」っていう4つの元素しかなかった。いくら分けても、人間てものがどうできているか、まるでわかんなかったんだね。逆に、わけていってシンプルにしたら、かえってわかんなくなっちゃった。この方法じゃわからん、ってことがわかったんだな。人間とか生物の秘密は、実は分けてもわかんなかった。「生物の秘密」は実は「分けてもわからず、その組み合わせにあった」から、分けて分けて分けても、かえってわからなくなっちゃったんだ、というのが、やっと最近わかってきたわけですね。

まぁ、そういう「生物学」の世界の話はともかくだな、その前段階としての「西洋的科学を支える哲学」ってのは、難しい概念でもなんでもないので、まずはそれを教えて欲しいわけですよ。それがわかると、みんなそのアナロジーでできてるのがコンピュータとかプログラミング言語なんで、どんどんわかっていくんだよ。そう「ツリー構造」という概念がなぜ西洋の科学の本質として使われてきたか?それでコンピュータがいかにできているか、ってのを学んで欲しいなぁ、と思うわけです。

 


プログラミングを身につけるには

このところ、義務教育でも、プログラミングをできるようにする、という目標が掲げられているので、とにかく、あちこちでプログラミングのことについて書いてある本やサイトが増えた。特に小学生くらいの子供にいかにプログラムを教えるか?ということが義務教育に取り入れられる、というニュースが駆け巡ってからは、なんと「PCなどの機器を必要としないプログラミング」についても、あちこちで聞く。「他のやらなきゃならないこともあるのに、おカネもかけられない。迷惑だ」みたいな現場の感じが良く出ているなぁ、と外野からは見ているだけだ。

たとえば、英語などの外国語でもそうだが、何事に於いても、新しいことを学習し、身につけるには「環境」が最も大事だ。例えば、同じ英語を使うといっても「power」は政治の世界では「権力」の意味だし、電気の世界では「電力」の意味だ。そして、それぞれに単語の意味は微妙に異なるニュアンスがある。どの分野で学ぶか、ということ、言い換えれば、どんな環境で学ぶか、で、単語1つでも全く違うものを相手にしなければいけなくなる。

自分がプログラミングをしてきた経験から言うと、まず子供の頃はアマチュア無線がとても楽しくて、自作の無線機などを作っていた、というところから始まる。無線機を作るには、半田ゴテが必要だしニッパーとペンチも。。。。ペンチも大きなペンチからラジオペンチ。。。。、電線にはワイヤストリッパーが。。。と工具は毎週のように増えていく。気がつけば、そういう工具に囲まれて生きている。その方面の同好の友人も増え、情報交換で仲間も増えていくし、友が友を呼んで、ますます、自分の身の回りは同好の人間ばかりになっていく。そうしているうちに、時代がハードウエアからソフトウエアに変わり、気がつけば自分はインターネット界の端っこで、結果として、だけど、インターネットを日本にもって来る役目(の片隅)に。。。みたいな、そういう感じで自分の世界を広げてきた。

おそらく、自分の次の世代も同じように「Webって面白いなー」から始まった、同好の士の集まりができてきているのだ。であれば、そういう環境に自分を置くことが、実は一番大切なことだ。義務学校教育で「これをマスターすると、褒められます」とか「将来は安泰です」みたいな、その「行為」とは別のところに行為のモチベーションを置いても、要するに、人参を目の前にぶら下げられた白けた馬がノロノロと歩いて行くだけになるのは、目に見えている、と思う。子供はそういうことでは動かないのだ。

プログラミングは、物事を論理的に見て、決断し、実行するもので、要するにそのままそれは「解決すべき問題を見つけて」→「解決方法を探り」→「解決方法を確立し」→「プログラミングという手法でそれを実現する」、と、そういうものだから「プログラミングのお勉強をしましょう」というのは、私に言わせれば、だが、正直なところ、プログラミング教育とは言わない。まずはその子供の周りに環境を意識的に整えるのが、大人のやることじゃないだろうか?

今の世代はインターネットが出現し、コンピュータのプログラムなどをやりはじめた私たちの世代から、さらに3~5世代が隔たっている。であれば、その世代の興味はもっと違うところにあるだろう。プログラミングも、今であれば、コンピュータの前に座ってキーボードとマウスを相手にしなくても、コンピュータについたマイクにあれこれ指示をすると、勝手にPCの中のソフトウエアがプログラムを作ってくれる、というところまで行きそうな勢いだ。

「ぼくがエアコンのスイッチを入れて、室温を22度にしてくれるように、プログラム作ってくれないかな?」
「わかりました。その合言葉はなににしますか?」
「温めて、にする」
「わかりました。できました。言ってみてください」
「温めて」

なんていう、そういう「音声プログラミング」だって、今は可能だ。

であれば、プログラミングをするプログラマーも、また違う仕事をする必要があるだろう。プログラミングはコンピュータが自動で作るものになるのだから、「どんなプログラムを作ったら役に立つか?」を考えることがもっと重要になる。「XXができます」ではなく「XXを作るといいです」ということを考える仕事が、より大切になる。

時代の流れは速く、法律も教育も、そして人間もついていける人はごくわずかだ。