前回、妻にプログラミングを教えることにした背景を記載した。
プログラミングを体験することによって、人に伝える前に内容を整理する習慣が付いて、整理するということが結果として様々な人達の業務改善に繋がると信じている。
そして前回記載しなかった内容だけれども、もう一つ教えたい背景がある。
それは、中学生向けのプログラミング教室で感じたことで、
教えるということは、伝える前に対象を深く掘り下げ理解を高めつつ、相手に咀嚼しつつ伝える行為なので、おそらく教える側は教えられる側よりも多くの事を学ぶチャンスである。
つまりは、教える側が何か新しい事に挑戦したいと思った時は、学んだ事(インプット)をすぐに誰かに伝える(アウトプット)する環境があれば、技術の習得にかかる時間が大幅に削減できるということだ。
現に中学生向けのプログラミング教室で採用したJavaScriptは、教室を始める前は得意な言語ではなかったけれども、伝えなければならない環境に追い込まれたら、たくさんの仕様に目を通し、たくさんのコードを書いて、今では好きな言語の一つになった。
というわけで、妻に教える言語はSOY Shopの開発で慣れ親しんでいるPHPではなく、
これから本格的に使っていきたいGo言語にする。
Go言語のようなコンパイラ言語はこれからプログラミングを始める人に向いているのか?
Go言語は他言語に慣れ親しんでいる人に好まれる言語で、初心者に向いているのだろうか?と考えた。
考えれば考える程、Go言語は初心者に向いているなと感じることがあるので、その内容を列挙してみる。
まずは、go buildでスクリプトをコンパイルしつつ、go runでPythonのようなLL言語(軽量プログラミング言語)のように振る舞うことが出来るので、CとLL言語の良いとこどり出来る。
LL言語の開発のしやすさと、コンパイラ言語特有のパソコンの仕組み(システムプログラミング)の領域に踏み込める両方の側面を体感出来る。
これは私自身が初めて触れた言語がPHPで、PHPでは深いところに入りにくかった閉塞感を常に感じていたため、とっつきやすくて深いところに入れるGo言語の特徴は早い段階で役に立つはず。
パソコンを理解する上で、中間コードのアセンブリと最終の機械語に翻訳されたバイナリを早い段階で触れておいた方が絶対に良い。
話は脱線するけれども、学校教育でパソコンの授業が必須化される昨今、親も仕組みを知っておいた方が良いはず。
話は戻って昨年、
Lambda NoteからGoならわかるシステムプログラミングという良書や、
オライリーからインターネットの仕組みをコードレベルで学べるReal World HTTPといった良書が出版されているため、Goでパソコンの仕組みを学ぶ環境も整いつつあると感じている。
続いて、Go言語はgo fmtやgo importによって、協働開発で発生するコードの書き方問題や理解するまでに時間がかかるコードのルールをエディタの方がフォローしてくれるため、余計な事を考える機会が少なく、とっつきにくい内容をおまじないという表現ではなく、そもそも気にしなくて良いと触れなくても済むようになる。
※go fmtはコードを自動整形し、go importはコード内で足りない記述を自動である程度挿入してくれる
コードのお作法等を気にしなくて良いのは本当にありがたい。
意識する箇所が少ないという内容に関して更に触れると、Go言語ではオブジェクト指向を廃止したため、オブジェクト指向という難解な要素が無くても高度な開発ができるようになっている。
このオブジェクト指向の廃止も学ぶべき事の量を減らせるので、退屈な仕様の勉強から早々に抜け出し、はやく実際に動くところが体感できる要因となるはず。
あとはテストの仕組みが簡単というところだろうか。
テストは業務改善のアイディアの宝庫だと捉えているので、テストを介してコンピュータの出来る事を体感できれば良いなと。
Go言語を最初に学ぶ欠点だけれども、Go言語は硬い書き方をするので、コードが冗長化しやすい。
冗長化はコードの記述がわかりやすくなる反面、コードを書くまどろっこしさを感じることがあるかもしれない。
もう一点はオブジェクト指向の廃止で、他言語を学ぶ時に混乱しやすくなるのではないかと。
これら2つの欠点はどちらもプログラミングに触れることを目的とし、もし仕組みや開発に興味を持ったとしてもGo言語と心中する勢いであれば問題ないはず。
さてさて、
Go言語を体感することで、本当に業務は効率化されるのか?
この取り組みによる変化はちょっとした楽しみだ。
2018年8月12日追記
O'Reilly Japan - Go言語でつくるインタプリタ
2018年6月にGo言語で書かれたインタプリタの本が発売された。
インタプリタというのはコンピュータがコードを解読してプログラムを実行する仕組みの一種で、今まではC言語とかJavaで書かれた本が多かった。
Go言語で書かれている為、コードが厳格でわかりやすいし、テストコードもしっかりと書かれているので超がつく程おすすめ。
この流れでOS、コンパイラや暗号関係をGo言語で説明する本が出てくることを楽しみにしている。