Scratchをやってみよう。~はじめてのプログラミング~

プログラミングってなに?

学校でタブレットが配られて、「さぁプログラミングをやてみよう!」という人が増えてきました。
学校の先生たちも一生懸命に「プログラミングの勉強」をしています。

自己紹介

Javaプログラミングを布教す活動をしている、「たくのじ」と申します。Javaプログラミングは17年ほどやっています。
最近は、テキストRPGというアプリを作成しています。

Javaでクロス!モンハンじゃないよ? Javaプログラミングの布教をするために奮闘中

作ってみました。↓

プログラミングの必要性

「プログラミング」と聞いて「?」が頭に浮かんだ方、正常でございます。ある意味「マニアック」な領域です。
文部科学省など、「プログラミング教育」を推進しているようですが、「プログラミング」を仕事にしていた自分としては「主旨はなに?」と疑問に思いました。
文部科学省のサイトにある次のPDFを見てみると「小学校プログラミング教育の手引(第三版)」に以下のように記述がありました。

コンピュータを理解し上手に活用していく力を身に付けることは、あらゆる活動においてコンピュータ等を活用することが求められるこ
れからの社会を生きていく子供たちにとって、将来どのような職業に就くとしても、極めて重要なこととなっています。

筆者の解釈

コンピューターは世間で仕事などいろんな場面で使われるので。。。

  1. PCがどんなものか、理解しましょう。
  2. 存在するアプリ・インターネット・ビッグデータなどの扱い方を理解しましょう。

上記のようなことを、子供たちに学習させようという意図が感じられました。

プログラミングを学んでみた感想

筆者も0からプログラミングを学習したので、学習してみた結果どう感じたのか?を記述したいと思います。

一言でいうならば、『プログラミングは、主に「設計→実装→テスト」をいろんなレベルで繰り返す行為』という認識を持っています。

具体的には、以下の通りです。

設計

  1. 何かしらの目的を定めて、それを実現するための方法を考える。※必要ならば調査する
  2. パソコンに命令し、その目的を実行させるために必要な知識を学ぶ
  3. 同様に、実現するための仕組みを、頭の中で組み上げる

実装

  1. 設計したものを実現するためのモノを作る
  2. 作ったモノを動かして想定通りに動いたか確認する

テスト

  1. 特定のシナリオを用意して、動かし問題がないことを確かめる
  2. 想定とはずれたような操作をしても問題が発生しないことを確かめる

つまり

上記のようなことを、実際の物を使って行うと、『お金がいくらあっても足りない』ということになってしまいますが、プログラミングであればPCがあれば事足ります。

言葉を変えるならば、計画~実行~振り返りの工程を手軽に、体験できるということです。

「何かしらのアクションを起こす」ということと一致することなので人として、社会人として学ぶ事がたくさんあります。

我々大人も、上記のような体験(仕事)を通して成長してきました。PCを使えば「会社を巻き込まなくてもある程度の規模で『プロジェクト』を立ち上げて実行すること」ができます。

プログラミングが必要なわけ

つまり、社会人としての総合力を身に着けるよい材料になるので「プログラミング教育」を義務教育化しているのであろう。というところに落ち着きました。

はじめてのプログラミング

では、どこから始めようか?と疑問が出ると思います。プログラミングにはいろんな言語がありその言語も目的によって使い分けます。
正確には、「どの言語が良いか決めます。」

今回は。「はじめて」ということと「プログラミング教育向け」という理由から『Scratch(スクラッチ)』というプログラミング言語を紹介したいと思います。

スクラッチをやってみよう

まずは、ブラウザ(Google Chrome, Edge, Safari etc ...)でこちらのURLにアクセスしてみてください。

プログラミングは身近なもの

動画でプログラミングのやり方を学ぶ事ができます。世界ではプログラミングを広めようという動きがたくさんあります。
その中の一つとしてマサチューセッツ工科大学(MIT)があります。他にもプログラミングを広めるためにスイッチ財団などが出しているラズベリーパイ, Microsftが出しているマイクロビットなどたくさんあります。

そして。非営利のプログラミングクラブ「CoderDojo」も全世界に広まっています。日本ではCoderDojo Japanがあります。※当然日本全国にCoderDojoXXXがあります。

具体的には、北海道であれば次のDojoがあります。※もしかしたら他にもあるかもしれません。

スクラッチのやり方

チュートリアルを見るのが一番ですが、ここでは簡単に(大人向けに)記述します。こちらのページにアクセスると下のような画面が見れます。

左側に「動き」「見た目」などの項目があるのでそれを選択すると、色々なコマンドが表示されます。
コマンドは「操作」ということです。
チュートリアルにあった。操作であれば、「10歩動かす」というコマンドがあるのでそれをクリックすると「ネコが10歩動きます」

まずは、やってみることが大切ですが、さわり程度に知っておくことも大切ですね。

スクラッチで作品を作る

スクラッチのページを開くと、上部に「作る」「見る」などの項目があります。

「作る」を選ぶと

下のような画面が見れて、「実際に何か作ってみよう」となります。

「見る」を選ぶと

他の人が作った、プロジェクト(作品)を見ることができます。この作品はプログラム(ブロック)を書き換えてオリジナルなものに変更することができます。
もちろん。人のやり方を真似するもよし、人のコードから学習するもよし。使い方(学び方)は自由です。

プログラミングのコツ

作るの画面で「言葉のブロック」を組み合わせてプログラムを組みます。
具体的には、下のように考えて作ります。

  1. 下の「ブロック」にある文言を組み合わせて作ります。

  2. 具体的には、次のようにブロックを組むと、猫が10歩、歩きます。

上記のように、「ネコが、XXXしたときに、○○○する」という文章を作ったのと同じように考えることができます。
これが「コツ」です。

つまり

言葉で考えて、それをプログラム(ブロック)におとし込むというところです。

やりたいことをやるために〜プログラミング的アプローチ〜

イントロダクション

前回は「プログラミング教育」の話題で「我思う」を記載しました。まとめると「プログラミング教育では『プログラミング的問題回解決力』を教育に取り入れる」と言うことらしいと言うことでした。

そして、その問題解決力を使用して「やりたいことをやる」のが自分のためになると思う次第です。

さらに、そのやりたいことが「世のため人のため」になることならば「世間の注目」を集めるかもしれません。まさに「WinWin」な感じだと思うのですが難敵が潜んでいることが多いようです。

難敵のリストアップ

指名手配中の「難敵」を以下にリストアップします。

  1. 「やる気が起きない」
  2. 「時間がない」
  3. 「一人ではできない」
  4. 「メリットを感じない」

上記に有名どころの「難敵」をリストアップしました。大雑把に言い訳の材料です。

難敵をやっつける武器

多くの人が既に知っているように「生活改善」がその答えのように見えますが。これは完全な答えではありません。プログラミング的に解釈すると「穴だらけの仕様」であり、このような答えでシステムを組んだ日にはそこの現場は大炎上してプロジェクトも破綻するでしょう。

こんな仕様は、はっきり言って「悪」だと思います。なぜかと言うと全ての人が不幸になるからです。つまり、プロジェクトに関わる人全てが大変な思いをする事になります。まぁ、みんな平和のために日々努力してるんですがね(笑)

話を戻して、難敵をやっつけるための武器は「トライアンドエラー」です。
※これも完全な答えではありません。この答えは実行する本人にしか正しい答えは出せません。

「トライアンドエラー」=「勇者の剣」

余談ですが、とある会社さんの開発現場では「厄介なバグ」を発見した人には「勇者の剣」が支給されるそうです。そしてこれで「バグをやっつける」と言うことらしいです。我々の日常でも似たようなことがたくさんあります。「あーしたい」「こーしたい」と思う事が多く、それぞれに対する「こーすればできる」がなかなか見つからない…というケース、などがそうです。

体に悪いことを続ける

例えば、「夜食で沢山食べる」とか「昼夜逆転生活」とか。。。これらのようなことはすぐに習慣化します。なんでかはわかりませんが。。。

他にも「やりたいことがあるのに自分に言い訳をしてやらない」と言うのも同様だと思います。精神衛生上よくないし、ストレスもたまると思います。

このような時に上記であげた「難敵」が出現していることに気がつきます。

駄菓子菓子、悪い習慣が出来上がっていて「やりたいことができない」状態になっているかもしれません。これは自分の力だけで、解決できるものの1つです。

そこで「勇者の剣」

当たり前な話ですが、いきなり悪習を変えるのは無理です。

だから「ちょっとずつ」が大事なのです。以下のような手順になると思います。

  1. 改善する計画を立てる => PLAN
  2. 改善する計画を実行    => DO
  3. 実行した結果を省みる=> CHECK
  4. 再計画する                  => ACTION

上の「1〜4」を繰り返して、トライアンドエラーでちょっとずつ改善していきます。ちょっと無理やりですがこのサイクルを作れる様になると、人生が変わった様な感覚になります(笑)

自分がお勧めするのは1日続けて反省して、次は2日。。。のように少しずつ期間を伸ばしていくのが良いと思います。そこで以下のようなツールを使います。

日記(メモやノートで良い)

そして、やったこと、思ったこと、改善策や今後のやりたいことなどの計画を日付とともに1つのノートに記載して後で見直すことができるようにしておく。

具体例

「毎日の生活の中で15分走る」を目標にした場合。以下のような状態の人間をサンプルとして記載いたします。

  • 帰宅は22時半
  • 出勤は9時に現場
  • 土日の休みも危うい

自分の場合ですが、サンプルとして記載いたします。

まぁ「帰宅した後にご飯食べて寝るだけ」の生活ですが、ここに「運動する習慣」を加えてやりたいと思いました。そして改善策としては以下の手順でやりました。

  1. 自分の1日の生活パターンをフロー図にして可視化する
  2. フローの中で「やりたいことをやるスキ」を探す
  3. このスキに「やりたいことをする」習慣をつけるようにする

<自分の生活パターン>

  • 起床
  • 朝食
  • 出勤
  • 仕事(午前)
  • 昼休み
  • 仕事(午後)
  • 帰宅
  • 風呂
  • 夕食
  • 就寝

このようなリズムでした。そして「スキ」は上に赤い字で記載しました。

出勤と帰宅の途中を通勤経路を変更して2, 3キロ走って移動するように変更しました。これで15分程度のランニングができるようになり、帰宅後の夕食も現場で済ませるように変更してやると生活の中にだいぶ余裕ができました。

これには周りの人間の協力もありすぐに切り替えることができました。

やって、反省して、再挑戦

早い話が「トライアンドエラー」でやれば大体のことはなんとかなると言うことです。そのために以下のようなことがキーポイントになります。

  1. 現状の見直し
  2. 問題点の抽出(リストアップ)
  3. 「ここをこーすれば。。。」と言うアイディア
  4. 改善して続けるモチベーションを保つ

とりあえずはやってみないと始まらないですがね、やって反省して再計画。。。

目標達成プロジェクトと称して上手くやる方法を模索中です。

この流れをゲームにできたら人生がもっと楽しくなるかもしれません(笑)。

余談ですが、いろんなノートを使ってみるのも1つのアイディアではないでしょうか?

[rakuten ids="pivot-sanyoh:10001554"]

 

プログラミングのススメ〜Javaでのプログラミングで学べること〜

イントロダクション

今までのブログ記事は、主に技術ブログを書いていました。今回はちょっと趣向を変えて「技術」を離れてみようと思います。

プログラミング教育に関して

2020年から「プログラミング教育」が始まる始まっているのですが、内容に関しては理解していないので、ちょいと調べてみたところ、文科省が言うには「プログラミング技術」を学ばせるようなことではないようです。
※筆者の理解です。

じゃあ一体何をするのか?調べた結果、自分の理解するところでは、以下のように理解しました。

「どうやれば物事が解決できるか?の答えを自ら出せるような教育を行う」

と言うことらしいです。当たり前な話ですが、我々大人は、仕事などで以下のような手順で物事を進めることが多々あります。

  • 何かをするための筋道(計画)を立てる
  • 立てた筋道の実行準備をする
  • 実行する。
  • 反省(打ち上げ)をする。

大雑把にこんな感じで「祭り」「自治体」「バンド活動」など、複数人で協力して行います。

なんでか?

大人(自営・就業している人)は仕事があるので自由時間は限られています。そして「祭り」「バンド」は一人で行うことができません。何かのイベントや大きな夢にしたって同様です。※夢はまだ叶えていないのではっきりとは言えませんが。。。

とりあえず、ある程度、大きなことをやろうとするならば誰かの力を借りないとできません。そこで「計画」です。

計画とは?

みなさん知っての通りです、これがあればみんなでスケジュールを合わせて「協力」して物事を進めることができます。それに「モチベーションを保つ」と言う部分に関して一人でやるより数段楽です。

やっぱり、人間は一人では生きていけないと思いました。

実行する

計画を立てたら今度は行動に移します。「計画を立てたけど続かない。。。」と言う話はよく聞きます。この「続かない」や「うまくいかない」などに対する対応策や手段を自ら考え出せると良いと思います。

プログラミング教育とは?

計画から実行までのプロセスにおいて「問題を解決する力」を育てて行こうと言う趣旨で学校での学習時に「問題を解決する力」を育てる要素を組み込むと言うことがそれのようです。

本題「プログラミングのススメ」

初めに「プログラミング教育」の話題を出したのは「計画」と「問題を解決する力」に関して記載したかったからです。大雑把にこの力に必要な要素として以下のようなものが挙げられると思います。

1. 物事を順序立てて考える
2. 実行するために必要なものリストアップする
3. 想定外の事態に直面した時、現状の整理や把握を行う
4. 結果、作成物に対し客観的に「良し」「悪し」を判断する

これがそのまま、プログラムを作成して運用していくときに必要な事です。

プログラムを扱うならば、もちろん、専門知識(技術)が必要ですし学習コストと言う「時間」も必要です。ただ、1つ言えるのは「プログラミング」はお金かけないでプログラムの作成〜運用までいけます。※自分のPC代金と電気代は除く

まぁ一人でやるのは大変だけど、仲間を集めたり、協力者を求めたりやり方はたくさんあると思います。学生のうちにやり始めると楽だと思います。

じゃ大人はどうする?

自分自身もそうですが、やはりコミニティを開く、コミニティに参加するなどの方法でチームを作るとモチベーションを保つのにとても効果的です。

自分もCoderDojoと言うところに参加して、子供達にプログラミングの考え方を話したり、「こんな事やりたいけどどうすれば良い?」と言う疑問に対して「どうやったら良いか?」を一緒に考えたりしています。

最近のホットな話題としては以下のような仕様を実装する事です。

  1. 「OKガンダム」と言うとガンダムの眼が光る
  2. 「うんちングスタイル」と言うとガンダムが「うんちングスタイル」をする
  3. 続けてガンダムが右斜め45度に顔を向け目を光らせる

しかし、この仕様は音声入力もさることながら、ジャイロセンサーで機体のバランスを取らなければいけないのでちょいと大掛かりになるのでこれの一歩手前

「OKガンタンク」で行こうと言うことになっています。

終わりに

「OKガンタンク」は眼が光るのもそうですが、動いたりキャノンを発車したりする機能もつけたいので画像識別による「敵」判定を行う必要があります。実はそれで「TensorFlow」に手を出し始めたしだしです。そのほか「OpenCV」でも画像認証や識別ができます。共通して言えるのは「機械学習」が必要だと言うことです。

同時にガンダムに話をさせるのはどうだろうか?と言う意見もあり言葉を喋るアプリケーションも検討中です。冗談から始まったのですがなかなか面白そうな企画だと思いませんか?

TensorFLowを学ぶ

  1. Tensorflow Keras 〜初めてのKeras
  2. Tensorflow Keras Errors”python is not installed as a framework.”
  3. Python Tensorflow 〜初めての人工知能(TensorFlowインストール)
  4. Tensorflow Keras〜初めのトレーニング_1
  5. Tensorflow Keras〜初めのトレーニング_2:前処理〜
  6. TensorFlow Keras〜テキストの分類〜
    1. TensorFlow Keras 実行結果〜テキストの分類〜
  7. Python TensorFlow tutorial〜チュートリアルを進めるコツ、ワンポイント〜
  8. TensorFlow Keras〜回帰、準備から予測まで〜
  9. TensorFlow Java 環境構築〜JavaでもTensorFlow〜

OpenCv

  1. Java OpenCV 環境セットアップ(on Mac)
  2. Java OpenCv Lv1 〜入門写真の表示〜
  3. Java OpenCV Lv2 〜画像を表示する〜
  4. Java OpenCV Lv3 〜画像の平滑化(smooth())
  5. Java OpenCV Lv3 〜画像にガウシアンフィルタ(GaussianBlur())
  6. Java OpenCV Lv3 〜画像に中央値フィルタ(medianBlur())
  7. Java OpenCV Lv4 〜画像の中身をみてみる〜
  8. Java OpenCV Lv5 Matクラスで描画処理〜
  9. Java OpenCV Lv6 Matクラスで背景から作成してみる〜
  10. Java OpenCV Lv7 MatクラスでEllipseしてみる〜
  11. Java OpenCV Lv9 〜画像編集「足し算」(cvAdd)
  12. Java OpenCV Lv9 〜画像編集「引き算」(cvSubtract)
  13. Java OpenCV Lv9 〜画像の掛け算〜
  14. Java OpenCV Lv10 〜行列演算Mat#submat()
  15. Java OpenCv Lv10〜画像の平均値をだす〜



[rakuten ids="book:18919179"]

プログラム 習得 順序 手を動かして理解

イントロダクション

前回、プログラムには、動かすためのルールがあり(記述ルールがあり)それはどんなものがあるのか眺めてみました。

今回は、文法を理解する為の手順(文法を使いたくなるところまで辿り着く手順)を記載します。

これは、自分が「プログラムでメシが炊けるか?バカ言ってんぢゃねーよ(笑)」なんて思っていた頃にやった方法です。決して要領の良い方法では無いけど「手を動かして理解する」の典型になると思います。

因みにプログラムでご飯は炊けます。マイコンジャーの「マイコン」はプログラムです。マイコン→極小OSの事

ハローワールド

このプログラムは動かせたと思いますので、こいつをカスタムして文法へたどり着くまでやります。

基盤となるコードをカスタムしていきます。丁度問題を解いていくような形です。

コードのサンプルは下のURLにあります。

http://zenryokuservice.com/wp/2018/12/03/プログラム-習得-順序3-文法java/

<問題>

  1. ハローワールド表示
  2. プログラム引数表示
  3. プログラム引数を2つ表示
  4. 1+1の結果を表示
  5. 1-1の結果を表示
  6. 1×1の結果を表示
  7. 1÷1の結果を表示
  8. プログラム引数を渡した分表示
  9. プログラム引数が"Bye"だったら「お疲れ様です!」を表示してプログラムの処理を中止する
  10. プログラム引数が数字だったら加算して合計値を表示
  11. プログラム引数に数字と「+」「-」「×」「÷」を渡し各計算をして結果を表示
  12. プログラム引数に1〜10までの数字を渡してその合計値を表示
  13. プログラム引数に1〜10までの数字を渡して奇数のみ、偶数のみの合計値を表示(奇数であれば、1,3,5.7,9の合計)
  14. プログラム引数に1〜10までの数字を渡して順番に表示(1,2,3...)
  15. プログラム引数に1〜10までの数字を渡して逆順に表示(10,9,8,7...)

とここまでやれば、文法は理解できると思います。自分は理解できました。

この問題をクリアしていくのに、どんな手段を用いても構いません。

ただし、犯罪や、非人道的ことはやめましょう、

プログラム 習得 順序3 文法(Java)

イントロダクション

前回は、ハローワールドの実行手順について記載しました。

  1. コンソールに文字を出力
  2. プログラム引数を使う

なんて事をやりました。

文法について

ベースにするコードはハローワールドの時に作成したものです。おそらく初めのプログラムは下のようなコードになっていると思います。

<ハローワールド>

Class クラス名 {
   public static void main(String[] args) {
     System.out.println("Hello World");
   }
}

初めのプログラムを作成した時に、自分の書いたものを見てやった方は「プログラム引数」に関して理解していると思いますので「プログラム引数」に関しては飛ばします。

上のようにクラスを作成し、ハローワールドを作成したら今度はこのコードをいじって遊んで見ます。先ほどの「プログラム引数」を表示するようにプログラムを変更してみます。

<ハローワールド2>

Class HelloWorld2 {
   public static void main(String[] args) {
     System.out.println(args[0]);
   }
}

プログラム引数に文字列「タイガーマスク」を渡した時、コンソールには左の文字が表示されます。

次は、プログラム引数を2つ渡して表示します。

<ハローワールド3>

Class HelloWorld3 {
   public static void main(String[] args) {
     System.out.println(args[0]);
     System.out.println(args[1]); 
   }
}

プログラム引数を1つしか渡していない時は「ArrayIndexOutOfBoundsException」が表示されプログラムが途中で止まります。

次はプログラム引数は飽きたので、足し算などの計算をしてみます。

<ハローワールド4>

Class HelloWorld4 {
   public static void main(String[] args) {
     System.out.println("1 + 1 = " + (1 + 1));
   }
}

これで計算結果の「2」が表示されます。

これに、プログラム引数を計算するようにプログラムを変更します。

<ハローワールド5>

Class HelloWorld5 {
   public static void main(String[] args) {
     System.out.println("引数1 + 引数2 = " + (args[0] + args[1]));
   }
}

これで、計算結果が表示されるはず?実は表示されません。これは少し考えてみてください。

文法をやる

上記のようにプログラムを「あーしたら?こーしたら?」を繰り返していくといろんな処理ができるようになっていきます。

でもここでちょっと手抜きをします。「手抜き」の正体は「文法を理解する」ことです。

プログラムを書く時にはちょっとしたルールがあります。そのことを「文法」と呼びます。日本語と一緒です。そのルールは以下のようなものです。

  1. プログラムは上から下に流れる
  2. 変数を使って、データの処理を行うことが出来る
  3. ループ、条件分岐を行いプログラムの処理をコントロールする

このブログでは、JavaをメインにしているのでJavaでこの文法の話を進めます。

余談ですが、Javaを理解してしまえば、他の言語も使えるようになってしまいます。その理由に関しては「余談」の部分に記載いたします。

そんなわけで、文法を理解するのには簡単な四則計算などをプログラムで実行できるようになると早いと思うので以下の記事を参考にやって見てください。きっと文法に関しては理解できるようになっていると思います。※ちょっと量があるので1つずつやることをススメます。

<文法学習メニュー>

  1. Java Basic Level2 Arithmetic Calculate 四則計算をやる
  2. Java Basic Level3 About String class 文字列クラスについて
  3. Java Basic Level 4Boolean 真偽値の使い方
  4. Java Basic Level 5If Statement If文の使い方
  5. Java Basic Summary from Level1 to 5 レベル15のまとめ
  6. Java Basic Level 6 Traning of If statement If文の練習
  7. Java Basic Level8 How to use for statement ループ文の使い方

余談

自分は、Java屋で今までやってきたのですが、Java屋をやっていると、エクセルでデータの確認、ドキュメントの作成〜DBのデータ操作までやることになってしまいます。Javaでみんなアクセス & コントロールできるのと仕事で情報整理や開発ツール、サーバー管理のためにエクセル〜DBまで触ることになるからです。そして気がつくとエクセルVBA〜DBのプロシージャまで使えるようになってしまう…という結果になってしまいます。


早い話が

「プログラムが理解できれば言語は関係ない」

ということです。