※思いついたままに書き進めたので読みにくいかもですが暇な時にでも。
入社4〜5年目あたり、オフショア全盛期、俺は開発経験を積むには時間とネタが足りなかった。
いわゆる基本設計というか、そのレベルまで作って、あとはインドにthrow。
catchするのはスパゲティコード。でも寸分の狂いもなく動く。
そんな2年間ほどを過ごしている時期に、30歳になるのに十分な開発経験つめてないことにモヤモヤしていた俺は、「仕事では受け入れと問い合わせばっかで自分でほとんどモノ作ってない」ので、個人開発で不足を補うことを考えた。
何を作るか
競馬をかじり出していた頃だったので、「絶対に負けない予想を自動でやれたら、インデックス投資よりも安定した投資になるんじゃ?」と考えて、「競馬予想ツール」を開発することにした。
※今稼働してるのはV2
どうつくるか
ひとまずファーストリリース(という名目の最初のマイルストーン)を目指すための要件定義、基本設計からです。
- 元の情報はどこから取得すべきか
- 予算内で使えるデータはあるか
- 予想に必要なパラメータは何か
- アルゴリズムは?
- 画面は必要?
- メールつかう?
- インターネットで使えるようにする?
- etc
ここら辺をググりながら調べつつ、電気代以外かからない段階までをファーストリリース時点での目標とします。
ファーストリリース時点
- 自宅のWindows上でのみ動作
- バッチ処理はタスクスケジューラで定期実行
- データ取得元は某大手競馬サイトからスクレイピングする
- 画面は以下を用意
- レースごとの予想ポイントを出す画面
- その日最もポイントの高い馬20選を出す画面
- 仕事にフィードバックするためベースの言語はJava
- 画面開発はJavaScriptの勉強を兼ねてvanilla js、jQuery、vue.js,reactをハイブリッドで活用
- クラウドへのデプロイなどは(一旦)しない
ここまで決まれば、ひとまず金取って製品化することはしないので、自由気ままにコードを書いてはテストをしていくのみです。
ファーストリリースで定義したものはすべてgithub issuesに整理して、さらに作りながら、「これ欲しいな」、「この仕様あるべきやな」、「このバグ直さないと」みたいなものがどんどんでてきますが、どんどんissuesに積んでいきました。
※後付けした「期待される複勝回収率と複勝率を算出する仕様」は今メインで稼働しています。
まとめ
結論から言うと、「開発経験を積む」目的は概ね果たされました。
技術選定&作った仕組みが今の私の仕事でのパフォーマンスに繋がってることは紛れもない事実です。
以下は実際に仕事でも生きた経験
- タスクスケジューラでbatからjarの特定のmainメソッドをキックする
- スクレイピングで情報取得する
- JavaScriptの経験(eventの操作、domの操作など)
- アルゴリズムの設計
- build.gradle
- CI(github workflowなど)
- kanban
- 分からない事を絶対に探し出す能力
- etc
仕事に依存した経験(チームでコミュニケーション取りながらやる、本業のプロダクトに対する機能追加)は仕事でしか得られないかもですが、
わたしのように、
「根本的にコーディング経験が足りない」
「企画〜動くまで」をワンストップで経験できない
のような問題は個人開発で解決できます。
仕事では相談できる先輩や上司がいますが、個人開発ではいないので、全ての問題を自力で解決する必要があるというのも重要なポイントです。
仕事や家庭の責務が高くなる前に、一度取り入れてみると、急成長するはずです。
ちなみに言い忘れましたが、生涯収支マイナス200万円君です。勝ち続けてはいません。。