設計の勉強
2025/04/12
長年コーディングをしているが、設計というものをうまくできたと実感できたことがない。
以前は小さい組み込みソフトウェアだったので、プログラムがハードウェアに収まり、かつ速度に問題がないようにするのが手一杯だった。
まあ、それでも設計する要素はあったと思うが、そういうのをやる時間というか工数はなかったと思う。
ハードウェア層、ドライバ層、ミドル層、アプリ層、みたいな階層分けはするが、
それは設計なのか? 設計でないことはないが、私が勉強したい内容とは違いそうだ。
が、組み込みソフトウェアのプラットフォームもリッチになってきたし、そもそも今は組み込んでない。
そうなると設計する余裕が出てくるというか、設計に目を向けざるを得ない。
他の人がやった方がうまいだろうから自分は放置していたのだが、
それではいかんよなあ、と思いつつも何を勉強したらいいんだかよくわからん。
こういうアーキテクチャに沿って行くと、ハードウェアよりも人間のためにコーディングしていくことになることが多い。
コード量は増えるけど仕様変更に耐えられるとか、RAM は使うけど考えやすくなるとか。
もっとハードウェアのためにコーディングしようよ!とちょっとだけ思う。
高級言語でコーディングしておきながら何言ってんだってなるんだが、まあそんなものだ。
何の勉強をしたいのか
ソフトウェアの設計と一言でいっても、方面というか種類というか、そもそも何の話をしたいのかが定まっていない。
その辺が勉強していない理由にもなっていると思う。
何を勉強したら何ができるのか分からん、という状況だ。
よく知らないけど、家の設計なども方法論だったり方式だったり家の種類だとか材質とか、なんかいろいろあるに違いない。 それに、地面がしっかりしたところとそうでないところで違ったり、海の近くだとさびやすいとか、環境のことも考慮して設計がいるのだと思う。
地面とか海の近くなどの環境は、組み込みとかモバイルなどに相当すると思う。
これは、私がやることがありそうな環境だけ勉強したい。
例えばウェブサーバーでセキュリティがどうのこうの負荷がどうのこうの、みたいな環境はあんまり勉強したくない。
興味がないというか、自分でやるときはお遊びで作るだけで、
仕事でなら担当しないようにするだけだ。
システム設計だと、そういうのを組み合わせてどういうシステムにするかを設計するのだろうが、
私が今回勉強したいのはそっちではないな。
もうちょっと狭い範囲だ。
デバイスドライバのように特定でしか使わないソフトウェアについては、その特定の状況に合わせるしかない。
それはそれで勉強しないといけないが、「設計を勉強しないと」と思っている範囲からは外れる。
その環境に特化するのだったらよいのだけど、今のところそういうのがないのでね。
そういった意味ではアプリケーション側になるのか。
そうなると私が勉強したいと思っている設計というのは、 汎用的なアプリケーションについてどういう構成にすれば良いのかについての知識、 ということになりそうだ。
まだ曖昧だが、ないよりはましだろう。
いろいろ勉強したいか?
ソフトウェアの設計といっても検索しただけでたくさんある。
いろいろ知っておいて使い分けができるのがよいだろうけど、
そんなに勉強したいかというと、そこまでない。
なんというかねー、設計のことを調べ始めると、なんか説教臭い感じがして嫌になるのよね。。。
いや、私の受け取り方が悪いのはわかっているのだけど、
最初から苦手に思っている勉強を苦手としている文章で説明されていると、それだけで敬遠してしまうのだ。
それと、これは仕方ないのだが、設計のことを紹介しているサイトはいろいろな設計のことを紹介していることが多い。
UART もあるけど I2C や SPI もあるし、みたいことを一気に紹介するので疲れるのだ。
熱意に疲れるといえばよいか。
たぶん設計をもう少し勉強してしまうと「ああ、当時の私はなんてことを書いたんだ」と考えるのかもしれないが、いいんだよ。
いつだってそんなものだ。
痛い目を見たあと、設計をしたことで「よかった」と思えることがあったら理解できるのかもしれん。
クリーンアーキテクチャ
そんな私が唯一名前がついて知っているのが「クリーンアーキテクチャ」だ。
単に仕事でそういうのが出てきただけだが。
Android の推奨アーキテクチャが似ているけどちょっと違う、みたいな感じだったか。
なんかクリーンらしい。
検索してもたくさん出てくるし、クリーンアーキテクチャのそれっぽいところを覚えて、 設計しないといけないことがあったらクリーンアーキテクチャっぽくやって説明して、 それでよければそれでよいし、ダメだったら他の人に考えてもらう、というやり方もあるかもしれん。
ものすごく後ろ向きな考え方だけど、なんかもううるさい人を黙らせるために
よく見かけやすい言葉を使ってしまうというのは、嫌な話だがありがちだと思う。
対等な関係だとそういうこともないのだろうけど、まあ、そうもいかんこともある。
今は暇なので
幸い、今はそういう状況ではないので Rust やら Bitcoin やらの勉強をしているところだ。
そこにソフトウェアの設計も加えたいがどうしたものか、というところ。
やった方がよいし、やって身につくと精神的に楽になるのだけど、苦手意識が強くて何とかできないか、そういう状況だ。
こういうのより先に「リーダブルコード」をちゃんと読み終える方がよいのかもしれん。 この手の本が苦手になったのは、歳を取って頭が固くなったからだと思いたいところだが、 たぶん昔からなのだろうなあ。