Pythonスキルの習得

独学でのプログラミング学習で、障害となる壁6選と解決方法 後編

独学でのプログラミング学習で、障害となる壁6選と解決方法_後編
フリー素材ぱくたそ(www.pakutaso.com)
本記事は、
独学でのプログラミング学習で、障害となる壁6選と解決方法 前編
独学でのプログラミング学習で、障害となる壁6選と解決方法 中編
の続編になっています。

6つ目の壁 解決方法

私はドメイン駆動による設計が本当にしっくり来ました。この方法を使うと、ドメイン領域(そのソフトが何の問題を解決したいのか、その領域(分野とか業界とか仕事の範囲とか))に、より注意を向ける事ができるようになります。

従来の方法でも、DB等のインフラ、UI、ビジネスロジックを分離して、どこにどのコードを書くかをある程度は明確化できますが、私の場合、新機能を追加する度に、コードがごちゃごちゃして来る傾向にありました。

しかしこの方法を使うと、よりどこにコードを書くべきか明確化でき、機能追加が楽になりました。何よりも、作成しているソフトの重要な部分が何なのか、嫌でも認識する事ができ、終始そこを考え続けられるメリットがあります。(従来は、画面のデザインとか、DBの構造とか、そっちに意識が行き過ぎていました。)

昔からこの方法がいいと直感で感じていましたが、いかんせん難しすぎて、どう勉強したらいいか分からない状態が続いて来ました。

もしドメイン駆動を勉強される方は、まずは実装の方法から習得するのがお勧めです。
比較的新しい本ですが、下記本はドメイン駆動の実装が学習できる本です。

私はコードの書き方を時間をかけて、断片的に情報を収集する形で習得していきましたが、この本で網羅的に学習する事ができます。振り返ると、どうしてもドメイン駆動を習得したかったのですが、上級編の教材は難し過ぎてよく分からず、セミナーでの学習では、理解はできるがもう一つ内容が足らない感じでした。

実装方法が一通り紹介されていて、ユニットテストも多分に触れた内容になっています。また、どのクラスにどの機能を入れるべきかも、多く言及されています。夢中で読ませて頂きました。(楽しくて、正月に喫茶店に行って、一気に最後まで読んでしまいました。)

具体的な実装を知らずにドメイン駆動設計の概念から入ってしまうと、いつもふわふわ浮いた感じになってしまいます。不思議な事に、実装を知ってから概念を再勉強すると、理解が本当にできるようになります。

しかし、こういう概念を思いつく人は、本当に天才だなーと痛感します。

私がプログラム言語を1から作ったとしたら、作りたいシステムにどんな機能が必要か分析して、その機能を実現するためだけの、手続き型のプログラム構造になってしまうと思います。しかしそれでは限界があると判断し、作りたい機能をオブジェクトに分解し、そのオブジェクトの関係性にて機能を実現させるというオブジェクト指向を考え出した人類は見事です。さらに、オブジェクトはどうあるべきか、オブジェクトの関係がどうあるべきかを突き詰めた(私にはそう見える)このドメイン駆動設計は、本当にしびれる世界です。

このドメイン駆動のデメリットですが、コードを書くまでに時間を要してしまいます。設計時のUMLモデルが作りたいものを表現できているかどうか、ずっと睨み合っている感じがします(なんか、いつもしっくり来ない・・)。よって簡単なソフトの場合、使うべきかどうか悩んでしまいます。(簡単なコードのつもりが、だんだん機能追加になっていき、後悔する羽目に・・・という事を考えてしまいます。) 

最後に

長々と文章を書いてしまいましたが、独学でのプログラミング学習は本当にしんどいです。振り返ると、「今のままじゃダメなのは分かっているけど、次、何をしたら勉強したらいいか分からない」という状態が年々も何年も続いて来ました。(早く師匠をみつけろよ! と昔の自分に言いたくなります。)

でもしんどくても続けられたのは、プログラムが動いた時の感動は何回味わっても心地いいからだと思っています。また私がサボっていても、一回作ったコードが動き続けてくれるのがいいです。(株取引、FX、ビットコインのアルゴを自作して動かしていますが、彼等を見ていると本当、そう感じてしまいます。この自作アルゴをいつか記事にしたいと思っています。)

お断りですが、私はチームでソフトを作るというのが、ハッカソンに参加した経験くらいしかなく、圧倒的にそのスキルが足りていません。SlackやGithubなんかを使って開発するのにも慣れていますが、チームプレイが当然の仕事となると、全然スキルが不足していると思っています。

その上で本記事が、少しでも参考になればいいなと思っています。
最後まで読んで頂き、ありがとうございました。