Gopherくんではじめるプログラミング教育

こんにちは。サーバサイドエンジニアの藤原です。

2020年度から小学校でプログラミングが必修科目になるそうです。もう来年なんですね。
お子さんのプログラミング教育に力を入れていきたい!というお父さんお母さんも多いのではないでしょうか。

ただ、いきなりプログラミングをやってもらおうと思っても「型とは・・・」「変数とは・・・」「関数とは・・・」みたいなところから入ると、子供達は「難しい。。」「楽しくない。。」と感じてしまうかもしれません。

そこで、「まずはプログラミングの楽しさを知ってもらいたい!」そんな思いを叶えてくれるサービスを見つけましたので今回ご紹介したいと思います。

そのサービスでは、Go言語のマスコットGopherくんが活躍します。
https://blog.golang.org/gopher/gopher.pnggo gophers by Renee French | CC BY 3.0

このビジュアルで子供達のハートを掴んでくれること間違いなしです。

Gopherくんがお絵描き

今回ご紹介するのは、go.playspace というサービスです。 コマンドを記述するとGopherくんがその通りに動いてお絵描きしてくれます。
f:id:fujiwam:20190513155341g:plain 実際にサイトへ行って動かしてみましょう! goplay.space Runボタンをクリックすると始まります。 f:id:fujiwam:20190513084337p:plain

いかかでしょうか。子供達食いつきそうですよね?
大人が見ても楽しいです☺️

Gopherくんのコマンド

コマンドは非常に簡単です。使うのは主に以下の6種類のコマンドです。

# コマンド 内容
1 draw mode 開始のおまじない
2 color <色> 色指定(例:black、red、blue)、offで透明
3 forward <距離> まっすぐ進む
4 right <角度> 右回りに回る
5 left <角度> 左回りに回る
6 say <メッセージ> Gopherくんがメッセージを表示する

Gopherくんがお絵描き中に
ShiftでGopherくんの動きが早くなります。
TabでGopherくんが次の場所まで瞬間移動します。

シンプルな実装例

fmt.Printlnの中にコマンドを順次記述していくだけです。
これなら小学生の低学年でもできそうです。

func main() {
    fmt.Println(`
        draw mode

        color blue
        forward 5
        right 30

        color red
        forward 5
        left 150

        color green
        forward 5

        say Hello
`)
}

関数やループを使う実装例

シンプルな例に慣れてきたら関数やループを使ってより複雑な描画をすることも可能です。

func main() {
    fmt.Println("draw mode")
    colors := []string{"black", "blue", "red", "green", "yellow"}
    colorNum := len(colors)

    for i := 0; i < 100; i++ {
        turn()
        color := colors[i%colorNum]
        drawLine(color)
    }
}

func turn() {
    fmt.Println("right 15")
}

func drawLine(color string) {
    fmt.Printf("color %s\n", color)
    fmt.Println("forward 2")
}

プログラミングっぽくなってきましたね。

幾何学模様を描く

アンモナイト風な幾何学模様も描けちゃいます。 f:id:fujiwam:20190513105705p:plain 幾何学模様-スパイラルの実装サンプル

歴史

この分野のプログラミングの仕組みは古くからあり、1960年代のLOGO言語のタートルグラフィックスというのが元にあるようです。 ja.wikipedia.org まだ表現できる性能のディスプレイが存在しない時代からこのような研究がされていたのは驚きです。

Gopherくん文字を描く

さて、せっかくなので私もこの仕組みを使い何か作りたいと思います!
思いついたのは、Gopherくんに文字を描いてもらうことです。

ということで文字列をGopherくんへのコマンドへ翻訳してくれるツールを作ってみました。 github.com

早速このツールで生成したコマンドを Gopherくんへ渡してみたいと思います。
まずはアルファベット

f:id:fujiwam:20190513074829p:plain
https://goplay.space/#lHxhJYBb_9x

漢字もいけます!

f:id:fujiwam:20190513074105p:plain
https://goplay.space/#wLv1kUhpQRu

こんな複雑な漢字も

f:id:fujiwam:20190513075441p:plainf:id:fujiwam:20190513075500p:plain
https://goplay.space/#6mANF5J722x
こんな漢字見たことない

f:id:fujiwam:20190513080102p:plainf:id:fujiwam:20190513080111p:plain
https://goplay.space/#AdLOy8UhCk_k
こんな漢字見たことない 2回目

まとめ

Go言語は2018年プログラミング別年収ランキングで1位だったそうです😮 codezine.jp

早くからお子さんにGo言語の英才教育をするのも、お子さんの幸せに繋がるかもしれません。
(お金=幸せ という訳でもないでしょうが、幸せを構成する要素の一つではあるかと思います🍀)

HRBrainではそんなGo言語などを使って一緒にサービスを作っていく仲間を募集しています。
パパママ世代も活躍していますので、是非ご連絡ください。