Go言語とQtで給与明細の計算機を作ってみたで記載した通り、
今年の四月からプログラミングの勉強をはじめ、
ちょうど半年が経過したところで、
Go言語とQtでGUIアプリケーションの税金計算のアプリを公開した。
実際に書いたコードはGitHubで管理して、
下記のURLから開発したコードを確認することができる。
https://github.com/ryoko-saito/payslip_on_restaurant_biz
https://github.com/ryoko-saito/tax_withholding
開発中は「私はプログラミングに向いていない」と何度も言ってたが、
要件定義から設計を経て、開発から公開までの一連を経験した後は前向きになったところを見ると、
大変だけれども、
最後までやりきる以上の経験はないだろうな
と感じた。
有り難かったのが、
実際に書いたコードを読んでくださったのか?
therecipe/qt 製。スゴイ。 https://t.co/0Kpgx4dpWw
— のぼのぼ☂️ (@nobonobo) 2018年11月7日
上記のように面識のない現役のプログラマから一言スゴイとTwitterでツイートしてくださったのが大変有り難かったです。
このツイートは妻共々非常に励みになった。
パソコンを使う作業員のイラスト(女性) | かわいいフリー素材集 いらすとや
そもそもの妻にプログラミンを体験してもらう背景というのが下記の記事にまとまっていて、
事務を希望される女性こそがプログラミングのスキルを取得すべきだという持論から、
最初の一人として妻に付き合ってもらったというのが背景です。
伝えるということは自身を見直す機会でもあるわけで、
慣れない言語を人に教えるというのは、
自分自身に対しても非常に価値のある体験になった。
前々から中学生向けにプログラミングを教えている。
妻と中学生の両方に言えることとして、
プログラミングというものはとりあえず動かせるという段階に至るまえの下積みが長くて、
自分で作った感が得られるような段階に到達するまでに数カ月必要になる。
更に数学的な要素も多いため、
慣れればいつか出来るようになるでは乗り越えられない壁がいくつかある。
例えば関数周りはなんとなくの理解では使うことができない。
自身が理解できなければ使えると言えないといった優等生的な意識があると
その意識が邪魔をして苦手意識が増すということも何度もあった。
プログラミングの熟練者にとって当たり前の感覚として、
先人の知恵は上手に拝借するということで、
難しい処理は先人の偉大なプログラマのプロダクトであるライブラリ(関数群)を上手く活用する
ということが頻繁にあるから、
その人らの設計図に従って適宜関数を拝借するということをするけれども、
先人の知恵を拝借すると自分が行ったと言えずに先人のアイディアに圧倒されて
(思いつくことができない)自分はプログラミングに向いていないと嘆いてしまうことがよく見られた。
先人の良いアイディアを上手に活用するのは大事な資質だと思う。
アイディアを活用するために丁寧に読みまとめるという資質も得られる。
先人の偉大なアイディアを触れることこそ楽しいと感じることが出来れば、
プログラミングに限らず、何かを習得する速さは格段に上がるのだろうな。
この話の延長で、
誰かのコードを真似して試す時に習得が速い人の特徴として、
真似する時に少しでもコードを書いたら実行を繰り返し、
ほんのちょっとでも動いたことに感動していた。
逆に、
真似をする時に小さい段階で確認せずに一気に進める癖がある人だと、
試しても動かない、問題個所が見つからない、どうしていいかわからない
という状況に陥ってテンションが下がることが多々見られた。
所謂、小さく試して確認ということも習得を速くする要因なのだろう。
妻に触れてもらった言語はGoというGoogleが開発したもので、
非常にシンプルな言語仕様にも関わらず、強力な実行力をもつ言語だが、
初心者向けの本というものがないというデメリットがある。
妻に教えるのとは別に
中学生向けにJavaScriptを教えているが、
JavaScriptよりもGoの方が圧倒的に教える量が少なかった。
妻にGoを選んだ理由は下記の記事でまとめている。
中学生向けにJavaScriptを選んだ理由は下記の記事でまとめている。
少ないと感じたところが、
goimportsとgofmtというコードの入力支援ツールが充実していて、
所謂、開発者同士がよく揉めるコードのお作法をすべて上記のツールが解決してくれ、
改行やタブといった記述の細かいルールを一切触れずに進めることができた。
※他言語にもあるけれども、Goは設定が圧倒的に楽だった
gofmt - The Go Programming Language
繰り返しのコードは、
他言語であれば、forの他にdo-whileやforeachがあるところを、
Goではforで統一されていることも迷わせずに済んだ。
教えたものではないけれども、
Goのユニットテストの簡単さはテスト以上にQtでの開発で大変有り難かった。
Qt | Cross-platform software development for embedded & desktop
Qtというのは様々なOS向けにGUIアプリを開発出来るフレームワークのことで、
一つのコードでWindowsだけでなく、LinuxやMac向けにアプリが作れる。
※GUIはデスクトップにあるようなアイコンをクリックするとネット関係なしに起動するアプリのこと
様々なOS向けにアプリが作れるのは良いのだけれども、
コンパイル(アプリとして起動する準備)を行う際の時間が非常に長く、
コードを少し修正しては動作を確認という開発の流れでは非常にしんどい。
なんとかQtのコンパイルの回数を減らしつつ開発を進めることができないだろうか?
とGoの標準機能であるテストで開発を進めてみた。
税金の計算周りのコードは別のパッケージとして切り出し、
計算用の関数を設けて、
動作の確認はGo標準のテストで行う。
これにより、アプリ全体のコンパイルの必要がなくなり、
Qt関係なく何度も動作を高速に確認することが出来るようになった。
https://github.com/ryoko-saito/tax_withholding
Go言語でQtのドキュメントがほとんど無かった為、
私がQtのドキュメントを調べて、それを妻が読んで開発を進めるという手順をとった。
調査の際のコードもすべてGItHubで公開することで、
途中段階でも成果物を晒す大事さも伝えられたかな?と思っている。
https://github.com/ryoko-saito/qt_on_golang
実際、妻がプログラミングに触れてどのような影響を受けたか?
それは現時点ではわからず、
しばらくしたら何らかの良い影響があるかもしれない。
その時を楽しみに
しばらくはプログラミングで日常業務の自動化に触れていってもらう予定で考えている。
最後に再び妻にプログラミングを教えようとした動機について記載されている記事を載せておく。