はてなキーワード: ドメイン駆動設計とは
ドメイン駆動設計はエンジニアにとって重要な概念であり、市場価値の向上につながるとされています。
しかし、一部の企業ではドメイン駆動設計の学習と実践に時間を費やしても給与の上昇にはつながらない場合があります。
本記事では、新しい会社に転職しドメイン駆動設計を学んだエンジニアの給与評価について、実体験をもとに考察します。
私は新しい会社に転職し、参画するプロジェクトでドメイン駆動設計を実践することになりました。
入社後、評価者であるCTOから「ドメイン駆動設計は難しい概念であり、エンジニアとしての評価につながる」と言われました。
それに伴い、2ヶ月ほどの研修期間を使ってドメイン駆動設計の基礎を学び、残りの期間は実際のプロダクト開発に携わりながらドメイン駆動設計を実践しました。
2年目となり初めての査定期間が終了した際、評価者であるCTOに自己評価で給与のUPを希望する評価を提出しました。
しかし、結果としては会社の昇給額の最低ラインにとどまりました。相互評価にて他のメンバーからは高い評価を受けており、評価者が適切な査定を行っていない限り、もっと高い評価を受けるはずだと言われました。
この結果を踏まえると、レベルの高いスキルを社内で学習しても社内的な給与の上昇につながらない場合、転職リスクが増える可能性があります。
市場価値を高めるために時間と労力を費やす一方で、給与評価が見合わないと感じる場合、エンジニアは他の企業に転職する可能性があります。
実体験内では「そもそも難しい概念のため、正しく身につけられること自体が評価に値する」というような事前会話もあったため、期待に反して裏切られた感覚はあります。
ドメイン駆動設計はエンジニアにとって重要な概念ですが、給与の上昇を主眼に置く場合、他のアプローチや概念にも目を向ける必要があることが示唆されます。
一部の企業ではドメイン駆動設計の評価が不十分な場合があり、エンジニアは自身の市場価値を高めるために他の選択肢を模索することも考えられます。
まとめ:
本記事では、ドメイン駆動設計の学習と給与評価の関係性について実体験をもとに考察しました。ドメイン駆動設計は重要な概念ですが、
給与アップを主眼に置く場合、他のアプローチや概念にも目を向ける必要があります。エンジニアとしての成長を追求する一方で、給与アップにつながるバランスの取れたスキルセットを目指すことが重要です。
例えば今回の例でいうと正しくドメイン駆動設計の議論ができるようになったのは2-半年程度と考えられますが、その期間があればAWS資格等も視野に入るため、現在世間では何が評価されやすいかを念頭に置き検討したほうが良いでしょう。
レベルの高いスキルを持つエンジニアに対して適切な給与評価が行われることは、企業とエンジニアの双方にとって重要な要素です。
「共通言語たるドメインモデルを、そのままコードと1対1対応しなければならない、という思い込みや風潮。
既存のWAF(Web Application Framework) の利点を潰してどうする…」
こういう誤った思い込みをエンジニアにさせているのは、ドメイン駆動設計の原典である「エリック・エヴァンスのドメイン駆動設計」が、いかに抽象的な内容で、ある意味では哲学的であったかを、明示するものでは無いか。
プログラムとはメタファーであり、現実を、もしくはそれに準ずる写像的な世界観を、コードに忠実に再現するものでは必ずしも無いと考える。この記事の増田は「過度な抽象化」とも書いているが、プログラムというか、そもそも言語そのものが物事の全てを表象できるものではなく、ある一側面の一イメージしか切り取れない不完全なものだし、それ自体が問題ではない。現実とソフトウェアの溝を、ユーザーとエンジニアの溝を、ドメインとソースコードの溝を、いかにして埋めるかというのが、ドメイン駆動設計の本質だし、その埋め方についてはエリックエバンスは一例を示しているに過ぎない。EntityやValueObjectなど、必要なら使えば良いし、不要なら使わなければ良いのだ。ただし、元々何が問題なのか、問題だったのかという点について、いかにして向き合うかが肝要であり、それは技術論や方法論の話ではない。
ドメイン駆動設計の記事を書いたり、勉強会で発表をしている人間は、原典やそれに付随するドキュメントの内容を、無批判に信奉し、そのようにしなければならないという強迫観念に追われているのではないか。そもそも、本当に理解しているか怪しいし、不安だから教科書の内容にしがみつこうとするのだろう。さらにこの手の連中は、昨今のCQRSやイベントソーシングやマイクロサービスなどとも絡めて話をし出すから、タチが悪い。「ドメイン駆動設計はこの手の技術スタックと相性が良い」という言葉を何度も見かけたが、技術的な方法論はそもそも無関係だったはずだし、そうやって安易に結びつけてしまうから、ユーザーが置き去りになって来たんじゃねーのと、暴言でも吐きたくなる。問題の本質はどこにあったのかを、聖典の内容や、流行り廃りの技術とは切り離して、エンジニアは三思九思すべきだ。
別にこうあらなければならないという法律や決まりは無いし、好きにやれば良い。モデルと1対1にならなければ、分割する事を選択するのも一つの向き合い方だ。ドメイン駆動設計の信者ににゃんにゃん写真でも撮られて、ばら撒くと脅迫されているのであれば勿論話は別だ。恥ずかしい写真を魚拓されたくなければ、とりあえずEntity、ValueObject、Repository、Service(笑)位は最低限、用意するのが身のためだろう。
自分の頭で考えて、自分の責任で判断するという当たり前の事に立ち返りたいものだ。ドメイン駆動設計という盲目的な宗教からいかにして抜け出すかが今後のエンジニアの課題だろう。
追伸
ドメイン駆動設計ってあくまで設計手法っていうかビジネスロジックのモデリングまでが本分だから
システムドメイン(領域)にビジネスドメインで履いていた土足のまま踏み入ってはいけない
※補足追記:基本設計したら詳細設計するけども、そこでビジネスロジックをシステムロジックに翻訳するからコードレベルでは一対一にはならないということ
概念の次元が違うのだから現実に漫画の理屈を持ち込むなっていうレベルの話(ビジネスが漫画レベルという意味ではない)
モデリングによって現行のビジネスの問題を洗い出し、それを課題として解決(仕事を楽に)するのがシステム
それも一回で終わりじゃなくてシステム化したビジネスを再びドメインモデル化して分析、課題をシステムで解決ってサイクルを回していかなくちゃいけない
システム側も細かいこと言えば領域が分かれてるからそれぞれの領域に合わせて駆動方法は変えなきゃうまく回らない。
データレイク周りならデータ駆動型の方が適しているし、逆にアプリケーション側でビジネスやUXを無視してデータ主体で走るのは阿呆の所業だし、
馬鹿の一つ覚えで〇〇駆動設計だの開発だの一本槍でパワープレイするやつが多すぎなんだよ! 適材適所って理解しろよ!
ちゃんと各分野のスペシャリストを雇って意思決定層に組み込んだ方が結果的に時間や金なんかのコストが少なくなるよって話が通じないよね
※追記あり。最後の追記は 2021/04/25 21:40頃※
タイトルの通りのことを思っているけど、顕名のブログで書くと社内で干されるので、増田に書く。社内の心理的安全性がそんなに低い訳ではないけども、潮流が凄いので今は慎重に振る舞いたい。
この記事を見て「キミはDDDのことを誤解している」と思われた方はコメント等で優しく(易しく、ではない)ご指摘願いたい。
※この記事では Web Application を前提とした話になっている。
短く言うならば「DDDの理念は取り入れるが実装は取り入れない」
夜中に投稿したのに多くの方に読んでもらえて嬉しく思います。コメントなどなどありがとうございます。以下、補足です。
あと、素晴らしい引用に感謝したいのですけれども、
「一般的に言えることだが、使っているフレームワークとは争わないこと。 フレームワークと対立してしまった時には、ドメイン駆動設計の基本を保ちながら、 詳細は捨て去る方法を模索すること。」エヴァンス本 p157
https://b.hatena.ne.jp/entry/4701728015809111618/comment/sonota88
例えば、アプリケーションのディレクトリ構造をDDDの用語に合わせたものにするという行為は、ここで言うところの「対立」に相当すると考えています。「基本」すなわち理念だけ存分に私たちのアプリケーションに取り込みたいものです。
少し違う角度の話をすると、初っ端からDDD前提のWAF(frameworkの方)を、できれば静的型付け言語で(←個人的な趣味)、新しく開発してそれを普及させることによって、当該WAFを学んだ人は自然とDDDも身に付いているという文化を作ることには熱い賛同の言葉を贈りたいと思っています。
はてブのホットエントリ(総合)で月内に数多く[あとで読む]タグを集めたエントリ
272あとで/1803users この本がスゴい!2020: わたしが知らないスゴ本は、きっとあなたが読んでいる
257あとで/1367users 鹿児島中央駅から新函館北斗駅まで新幹線の全駅に下車してきたので全力で紹介する_PR【駅メモ!】 | SPOT
247あとで/2110users ぼんくらITエンジニアでもYouTubeとスタサプでTOEIC 900点突破できたので勉強法をまとめていく - だいたいよくわからないブログ
235あとで/1299users 「イラストでわかるDockerとKubernetes」は完全に良書 - Cloud Penguins
222あとで/1463users 売れるアプリにするコツ100個書きます(吐血) - Crieit
203あとで/1011users JavaScriptの基礎知識をGIFアニメで分かりやすく解説 -総まとめ | コリス
192あとで/1373users もしあなたが急にAndroidアプリを業務で作るはめになった場合の選択肢(2021年初頭版) - Qiita
190あとで/959users OAuth認証とは何か?なぜダメなのか - 2020冬 - r-weblife
183あとで/1146users 一人前のプロマネってどんな人? プロジェクトマネジメントのスキルセットとは-誰も教えてくれないプロマネのコツ | Mammoth Project
180あとで/1008users Pythonで仕事をする人のための書籍まとめ2021 - 学習, 業務効率化, アプリ開発からデータサイエンスまで - Lean Baseball
173あとで/1647users 【練習内容公開】イラストを100日練習しました|都路 燕禅|note
170あとで/2469users 僕のしょうもない人生を紹介します - いまトピ
170あとで/1019users 「フリーランス・副業向けサービス カオスマップ2020年完全版」が公開 - Digital Shift Times(デジタル シフト タイムズ) その変革に勇気と希望を
163あとで/1186users 9割の人が知らない再現性の危機 - 本しゃぶり
157あとで/1019users Mac を買ったら必ずやっておきたい初期設定を、全て自動化してみた | ulwlu | Zenn
154あとで/751users CTOの頭の中:技術投資を最適化する|Shin Takeuchi|note
152あとで/1503users 僕らはいつまでUSB Type-Cケーブルを選ぶのに迷うのだろう…もう間違えないための覚え書き - Magnolia Tech
148あとで/2347users 全財産を使って外車買ったら、えらいことになった|岸田 奈美
141あとで/1040users 英語の発音について概説する - Amosapientiam
135あとで/648users 技術選定/アーキテクチャ設計で後悔しないためのガイドライン - Qiita
131あとで/2088users Amazonで「鬼滅の刃」のコミックを買ってしまったのに、どうしても読み始める気になれない。 | Books&Apps
131あとで/1089users ステーキをおいしく焼く理論。料理家・樋口直哉が教える、肉の焼き方「新常識」【保存版】 - ソレドコ
129あとで/855users Webディレクターのスキルツリー - NMY
129あとで/915users Kubernetes 1.20からDockerが非推奨になる理由 - inductor's blog
126あとで/745users Web制作の時短に!2020年の便利オンラインツール・ベスト100選 - PhotoshopVIP
121あとで/880users 【総まとめ】2020年公開のすごいPhotoshopチュートリアル、作り方厳選まとめ - PhotoshopVIP
121あとで/613users ドメイン駆動設計を導入するために転職して最初の3ヶ月でやったこと[DDD] - little hands' lab
121あとで/864users 家で筋トレを続けるための簡単な「仕掛け」を取り入れてみたら、筋トレが楽しくなって習慣化した話 | Fun Pay! | あたらしい自分、はじめよう。楽天カード
120あとで/614users Micro Frontends Architecture Patterns | okmttdhr | Zenn