「非機能要件」を含む日記 RSS

はてなキーワード: 非機能要件とは

2025-07-21

ネット選挙を導入したらどうなるかを解説

選挙の度に「エストニアみたいにネット投票導入すればよいのに」という声が出るので、実際にエストニアで起きたことをベース日本ならどうなるか、を列挙するよ。

1.老人の投票率が上がるが、全体投票率は上がらない、ということは?

これは実際にエストニアで起きた事象

・65歳以上の老人の投票率は向上

しかし、全体ではネット投票導入前と比べて投票率有意な向上は見られない。例えば国政選挙投票率ネット投票導入前の1990年代から60%前半をずっと継続

→つまり、老人以外の投票率は低下。「投票所行く体力が無くてのお」と言ってる老人だけが得をする、シルバー民主主義促進ツールに過ぎないのが実態

2.「何度もやり直し可能」な仕組みは「不本意投票の抑止」にはならない

分かりやすい事例で言うと、投票締め切り10分前に一斉に人を集めて「さあ今から◯◯さんに投票を始めてください。まずはログインから…」ということをやられたらお手上げだ。もうやり直すには時間がない。

他にも、特定候補に「最終的に投票する」ように強制して実行させる手法はいくらでも思いつく。エストニアでどうなってるかは知らないが。

3. 締め切り間際に投票が集中してサーバが落ちる

エストニアネット投票の数は30万人くらいしかない。日本有権者は1億人だ。仮にその半分の5000万人がネット投票するとしたら…普通に鯖落ちして開票が開始できない状況に陥る。桁が2つ違うと求められる非機能要件根本的に違ってくるから

結論

エストニア以外の国がネット投票を導入しないのには理由がある。少なくともシルバー民主主義を加速させてしまうことは認識すべきだろう。

2025-06-28

LLMはエンジニア仕事を奪うのか?否、仕事抽象度を「Why」の次元

序文コード蒸発する時代と、それでも残る「Why」という名の問い

2025年私たちソフトウェア開発の歴史的な転換点に立っている。大規模言語モデル(LLM)の進化は、GitHub Copilotのようなコード補完ツールに始まり、今や「何を作りたいか」を自然言語で伝えるだけで、アプリケーションの雛形が数分で生成される時代現実のものとしつつある。この光景を目の当たりにした多くのプログラマが、漠然とした、しかし確かな不安を抱いているだろう。「私たち仕事は、いずれAIに奪われるのではないか」と。

この問いに対する私の答えは、半分はYesであり、もう半分はNoだ。より正確に言えば、プログラマ仕事本質が、歴史上かつてないレベル抽象化され、その役割が再定義されるのだ。私たちは、コードを「書く」作業から解放される一方で、これまで以上に高度な思考要求されることになる。

本稿では、プログラミング歴史を「How(いかに作るか)」から「What(何を作るか)」への移行として捉え直し、LLMがこの流れをいかに加速させるかを論じる。そして、その先にある、AIには決して代替できない、人間ならではの競争優位性、すなわちWhy(なぜ作るのか)」を定義し、記述する能力重要性について深く考察していく。これは、単なる未来予測ではない。今を生きるすべてのソフトウェアエンジニアにとっての、生存戦略提示である

第1章:プログラミング歴史的変遷 ― HowからWhatへの長い道のり

LLMの登場を特異点として捉える前に、我々が立っている場所を正確に知る必要がある。ソフトウェア開発の歴史は、常に「抽象化」との戦いであった。そしてその歴史は、プログラマの関心が「How」から「What」へと徐々に移り変わっていくプロセスとして描くことができる。

1-1. 手続き時代:Howを記述することに終始した黎明期

コンピュータ黎明期プログラミングとは、計算機理解できる命令(How)を、一行一行、丹念に記述する作業のものであった。アセンブリ言語や初期のFORTRANCOBOLといった言語は、ハードウェアの制約を強く受けており、プログラマメモリ管理プロセッサ動作といった、極めて物理層に近いレベルでの「How」を意識する必要があった。

この時代テストもまた、「How」に強く束縛されていた。書かれた手続きが、意図した通りに順番に実行されるか、特定入力に対して期待された計算結果を返すか。テストの関心事は、あくまで「手続きの正しさ」の検証にあった。ビジネスロジック実装の詳細が密結合し、コード特定の処理手順を記述した、硬直的な塊となっていた。

1-2. テスト駆動した振る舞いへの注目:Whatへの小さな一歩

風向きが変わり始めたのは、ソフトウェアの規模が拡大し、その複雑性が人間認知能力を超え始めた頃だ。1990年代後半から2000年代にかけて提唱されたエクストリーム・プログラミングXP)の中で、テスト駆動開発(TDD)という考え方が登場する。

TDD本質は、単なるテスト手法改善ではない。それは、プログラミングパラダイム根底から覆す思想だった。TDDは、「まずテストを書く」ことを強制することで、プログラマ意識を「これから実装するコード(How)」から「そのコードが満たすべき振る舞い(What)」へと強制的に転換させたのだ。

テストはもはや、書かれたコードの後追いで正しさを検証する作業ではない。それは、これから作られるべきソフトウェアの「仕様書」であり、「振る舞いの宣言」となった。例えば、「ユーザーログインボタンクリックしたら、ダッシュボード画面に遷移する」というテストコードは、具体的な実装方法(`onClick`イベントハンドラの中で`window.location.href`を書き換える、など)には一切言及しない。それはただ、達成されるべき「What」を記述しているだけだ。

この思想は、ビヘイビア駆動開発(BDD)へと発展し、`Given-When-Then`といった、より自然言語に近い形式ソフトウェアの振る舞いを記述するスタイルを生み出した。プログラマだけでなく、プロダクトマネージャービジネスアナリストといった非技術者をも巻き込み、「What」を共通言語として定義する試みが本格化したのである

1-3. 宣言プログラミングの台頭とフレームワーク役割

TDD/BDDによってプログラマ意識が「What」に向かい始めると、コードのものもまた、宣言的なスタイルへと進化していく。この変化を劇的に加速させたのが、モダンフレームワーク存在だ。

Reactを例に考えてみよう。Reactが登場する前、フロントエンド開発はjQuery代表されるように、DOMを直接操作する命令的なコード(How)の連続だった。「このボタンクリックされたら、この要素のテキストを書き換え、あちらの要素を非表示にする」といった具合だ。

しかし、Reactは「UIとは、ある状態state)に対する純粋写像である」という宣言的なモデル提示した。プログラマがやるべきことは、UI状態(`state`)と、その状態がどのように見えるか(JSXによるコンポーネント)を宣言することだけだ。状態が変更された際に、DOMをどのように効率的更新するかという面倒な「How」の部分は、Reactの仮想DOM差分検出アルゴリズムがすべて隠蔽してくれる。プログラマは「What(UIのあるべき姿)」を記述するだけでよくなったのだ。

この「WhatからHowへの変換」は、様々な領域で見られる。

これらのフレームワークツールは、いわば特定の制約下における、WhatからHowへの高性能な変換器」として機能してきた。プログラマは、フレームワークが課す「お作法」や「制約」を受け入れることで、退屈で間違いの多い「How」の記述から解放され、より本質的な「What」の定義に集中できるようになった。我々が「生産性が高い」と感じる開発体験は、この優れた変換器の恩恵に他ならない。

現状は、この歴史的変遷の延長線上にある。プログラマ仕事は、手続き記述する職人から、振る舞いを定義し、それを実現するための最適な「変換器(フレームワーク)」を選択・設定するアーキテクトへと、その重心を移してきたのだ。

第2章:LLMがもたらす究極のパラダイムシフト ― 汎用変換器の誕生

フレームワークがもたらした「WhatからHowへ」の潮流は、LLMの登場によって、未曾有のスケールで加速されようとしている。フレームワークが「特定領域に特化した変換器」であったのに対し、LLMは「あらゆる領域対応可能な、究極の汎用変換器」としてのポテンシャルを秘めているからだ。

2-1. フレームワークの制約を超えて

前章で述べたように、ReactやTerraformといったフレームワークは、その恩恵と引き換えに、私たち特定の「制約」を課してきた。Reactを使うならコンポーネントベース思考し、状態管理作法に従う必要がある。Terraformを使うなら、そのエコシステムとHCLの流儀を受け入れなければならない。これらの制約は、WhatからHowへの変換を自動化するための「レール」であり、私たちはそのレールの上を走ることで効率を得てきた。

しかし、LLMはこの前提を覆す。LLMは、特定フレームワーク言語知識を事前に学習しているが、その利用において絶対的な制約を課すわけではない。私たちは、より自由形式で「What」を伝えることができる。

例えば、こうだ。

ユーザー認証機能付きのシンプルブログアプリを作ってほしい。フロントエンドはReactとTypeScriptUIコンポーネントはMUIを使う。バックエンドNode.jsExpressで、データベースPostgreSQLユーザーGoogleアカウントログインでき、新しい記事作成編集、削除できる。記事にはマークダウン記法が使えて、画像アップロードできるようにしてほしい。

この要求(What)は、特定フレームワーク流儀に則ったものではない。複数技術スタックを横断し、機能要求自然言語で並べただけのものであるしかし、現在のLLM、特にGPT-4oやそれに類するモデルは、このレベル要求からディレクトリ構造設定ファイルAPIエンドポイントフロントエンドコンポーネントに至るまで、驚くほど具体的なコード(How)を生成することができる。

これは、フレームワークが担ってきた「WhatからHowへの変換」が、特定のレールから解き放たれ、より広範で柔軟な領域へと拡張されたことを意味する。これまで自動化が難しかった、あるいは特定フレームワーク存在しなかったニッチ領域や、複数技術を組み合わせる複雑なシステム構築においても、AIによる宣言プログラミング恩恵を受けられる時代が始まろうとしているのだ。

2-2. 「What」の解像度がすべてを決める世界

LLMという汎用変換器の登場により、プログラマ生産性は、いかに質の高いWhatをLLMに伝えられるか」に直結するようになる。これは、俗に「プロンプトエンジニアリング」と呼ばれるスキルだが、その本質は、ソフトウェア開発における「要求定義」そのものである

質の高い「What」とは何か。それは、曖昧性がなく、網羅的で、矛盾のない要求である

これらは、優秀なソフトウェアエンジニアが、プロダクトマネージャーデザイナーとの対話を通じて、日常的に行ってきた思考プロセスのものではないだろうか。LLMの登場は、この思考プロセスを、より明確に、よりテキストベースで「記述」する能力を求める。私たちの頭の中にあった暗黙的な仕様が、LLMへの入力プロンプト)という形で、明示的に言語化されることを要求するのだ。

やがて、ほとんどのプログラミング作業は、この「Whatの記述」に収束していくだろう。TDDテストコードという形式で「What」を記述したように、私たち自然言語や、より構造化された要求記述言語を用いて、AIに対して「What」を宣言することになる。コード(How)は、その宣言から自動生成される中間生成物に過ぎなくなる。まさに、コード蒸発していく未来である

第3章:それでもAIには決められない ― 「Why」の不在という致命的な欠陥

「What」を伝えれば「How」が手に入る。この魔法のような世界の到来を前に、私たちは一つの重大な問いに直面する。それは、「そのWhatからHowへの変換は、本当に一意に決まるのか?」という問いだ。

答えは、明確にNoである

ある「What(要求)」を実現するための「How(実装)」は、無数に存在する。そして、どの「How」を選択すべきかを決定するためには、単純な機能要求(What)だけでは情報が全く足りない。そこには、必ずWhy(なぜそう作るのか)」という、背景、文脈、そしてトレードオフ考慮必要不可欠となる。

3-1. トレードオフの海に溺れるLLM

簡単な例を考えてみよう。「1億件のユーザーデータを格納し、ユーザーIDで高速に検索できるシステム」という「What」をLLMに与えたとする。LLMは、どのような「How」を提案するだろうか。

これらの選択肢は、どれも「What」を満たしている。しかし、その特性は全く異なる。案Aは多くのエンジニアにとって馴染み深く開発が容易だが、10億、100億件へのスケールは難しいかもしれない。案Bはスケール性に優れるが、厳密なトランザクション管理は苦手だ。案Cは高速だが、運用コストシステムの複雑性が増す。案Dは安価だが、検索速度は他に劣る。

LLMは、これらの選択肢をリストアップすることはできるだろう。しかし、このプロジェクトにとって最適な選択肢はどれかを、自信を持って決定することはできない。なぜなら、その決定には、LLMが与えられていない「Why」の情報必要からだ。

これらの「Why」こそが、無数に存在する「How」の中から、ただ一つの「正解」を選び出すための羅針盤なのである。そしてこの「Why」は、ビジネス目標組織文化ユーザーの期待、技術的な制約といった、極めて人間的で、文脈依存的な情報の中にしか存在しない。

3-2. エンジニアが暗黙的に行ってきた「Why」に基づく意思決定

ここで重要なのはこれまでもエンジニアは、この「Why」に基づく意思決定を、意識的あるいは無意識的に行ってきたという事実だ。

私たち技術選定を行うとき、単に「流行っているから」という理由だけでReactを選ぶわけではない。「SPA(Single Page Application)にすることでユーザー体験を向上させたい(Why)」、「コンポーネント指向の開発によって長期的な保守性を確保したい(Why)」、「Reactエンジニア採用市場が活発だからWhy)」といった、様々な「 Permalink | 記事への反応(0) | 17:09

LLMはエンジニア仕事を奪うのか?否、仕事抽象度を「Why」の次元

序文コード蒸発する時代と、それでも残る「Why」という名の問い

2025年私たちソフトウェア開発の歴史的な転換点に立っている。大規模言語モデル(LLM)の進化は、GitHub Copilotのようなコード補完ツールに始まり、今や「何を作りたいか」を自然言語で伝えるだけで、アプリケーションの雛形が数分で生成される時代現実のものとしつつある。この光景を目の当たりにした多くのプログラマが、漠然とした、しかし確かな不安を抱いているだろう。「私たち仕事は、いずれAIに奪われるのではないか」と。

この問いに対する私の答えは、半分はYesであり、もう半分はNoだ。より正確に言えば、プログラマ仕事本質が、歴史上かつてないレベル抽象化され、その役割が再定義されるのだ。私たちは、コードを「書く」作業から解放される一方で、これまで以上に高度な思考要求されることになる。

本稿では、プログラミング歴史を「How(いかに作るか)」から「What(何を作るか)」への移行として捉え直し、LLMがこの流れをいかに加速させるかを論じる。そして、その先にある、AIには決して代替できない、人間ならではの競争優位性、すなわちWhy(なぜ作るのか)」を定義し、記述する能力重要性について深く考察していく。これは、単なる未来予測ではない。今を生きるすべてのソフトウェアエンジニアにとっての、生存戦略提示である

第1章:プログラミング歴史的変遷 ― HowからWhatへの長い道のり

LLMの登場を特異点として捉える前に、我々が立っている場所を正確に知る必要がある。ソフトウェア開発の歴史は、常に「抽象化」との戦いであった。そしてその歴史は、プログラマの関心が「How」から「What」へと徐々に移り変わっていくプロセスとして描くことができる。

1-1. 手続き時代:Howを記述することに終始した黎明期

コンピュータ黎明期プログラミングとは、計算機理解できる命令(How)を、一行一行、丹念に記述する作業のものであった。アセンブリ言語や初期のFORTRANCOBOLといった言語は、ハードウェアの制約を強く受けており、プログラマメモリ管理プロセッサ動作といった、極めて物理層に近いレベルでの「How」を意識する必要があった。

この時代テストもまた、「How」に強く束縛されていた。書かれた手続きが、意図した通りに順番に実行されるか、特定入力に対して期待された計算結果を返すか。テストの関心事は、あくまで「手続きの正しさ」の検証にあった。ビジネスロジック実装の詳細が密結合し、コード特定の処理手順を記述した、硬直的な塊となっていた。

1-2. テスト駆動した振る舞いへの注目:Whatへの小さな一歩

風向きが変わり始めたのは、ソフトウェアの規模が拡大し、その複雑性が人間認知能力を超え始めた頃だ。1990年代後半から2000年代にかけて提唱されたエクストリーム・プログラミングXP)の中で、テスト駆動開発(TDD)という考え方が登場する。

TDD本質は、単なるテスト手法改善ではない。それは、プログラミングパラダイム根底から覆す思想だった。TDDは、「まずテストを書く」ことを強制することで、プログラマ意識を「これから実装するコード(How)」から「そのコードが満たすべき振る舞い(What)」へと強制的に転換させたのだ。

テストはもはや、書かれたコードの後追いで正しさを検証する作業ではない。それは、これから作られるべきソフトウェアの「仕様書」であり、「振る舞いの宣言」となった。例えば、「ユーザーログインボタンクリックしたら、ダッシュボード画面に遷移する」というテストコードは、具体的な実装方法(`onClick`イベントハンドラの中で`window.location.href`を書き換える、など)には一切言及しない。それはただ、達成されるべき「What」を記述しているだけだ。

この思想は、ビヘイビア駆動開発(BDD)へと発展し、`Given-When-Then`といった、より自然言語に近い形式ソフトウェアの振る舞いを記述するスタイルを生み出した。プログラマだけでなく、プロダクトマネージャービジネスアナリストといった非技術者をも巻き込み、「What」を共通言語として定義する試みが本格化したのである

1-3. 宣言プログラミングの台頭とフレームワーク役割

TDD/BDDによってプログラマ意識が「What」に向かい始めると、コードのものもまた、宣言的なスタイルへと進化していく。この変化を劇的に加速させたのが、モダンフレームワーク存在だ。

Reactを例に考えてみよう。Reactが登場する前、フロントエンド開発はjQuery代表されるように、DOMを直接操作する命令的なコード(How)の連続だった。「このボタンクリックされたら、この要素のテキストを書き換え、あちらの要素を非表示にする」といった具合だ。

しかし、Reactは「UIとは、ある状態state)に対する純粋写像である」という宣言的なモデル提示した。プログラマがやるべきことは、UI状態(`state`)と、その状態がどのように見えるか(JSXによるコンポーネント)を宣言することだけだ。状態が変更された際に、DOMをどのように効率的更新するかという面倒な「How」の部分は、Reactの仮想DOM差分検出アルゴリズムがすべて隠蔽してくれる。プログラマは「What(UIのあるべき姿)」を記述するだけでよくなったのだ。

この「WhatからHowへの変換」は、様々な領域で見られる。

これらのフレームワークツールは、いわば特定の制約下における、WhatからHowへの高性能な変換器」として機能してきた。プログラマは、フレームワークが課す「お作法」や「制約」を受け入れることで、退屈で間違いの多い「How」の記述から解放され、より本質的な「What」の定義に集中できるようになった。我々が「生産性が高い」と感じる開発体験は、この優れた変換器の恩恵に他ならない。

現状は、この歴史的変遷の延長線上にある。プログラマ仕事は、手続き記述する職人から、振る舞いを定義し、それを実現するための最適な「変換器(フレームワーク)」を選択・設定するアーキテクトへと、その重心を移してきたのだ。

第2章:LLMがもたらす究極のパラダイムシフト ― 汎用変換器の誕生

フレームワークがもたらした「WhatからHowへ」の潮流は、LLMの登場によって、未曾有のスケールで加速されようとしている。フレームワークが「特定領域に特化した変換器」であったのに対し、LLMは「あらゆる領域対応可能な、究極の汎用変換器」としてのポテンシャルを秘めているからだ。

2-1. フレームワークの制約を超えて

前章で述べたように、ReactやTerraformといったフレームワークは、その恩恵と引き換えに、私たち特定の「制約」を課してきた。Reactを使うならコンポーネントベース思考し、状態管理作法に従う必要がある。Terraformを使うなら、そのエコシステムとHCLの流儀を受け入れなければならない。これらの制約は、WhatからHowへの変換を自動化するための「レール」であり、私たちはそのレールの上を走ることで効率を得てきた。

しかし、LLMはこの前提を覆す。LLMは、特定フレームワーク言語知識を事前に学習しているが、その利用において絶対的な制約を課すわけではない。私たちは、より自由形式で「What」を伝えることができる。

例えば、こうだ。

ユーザー認証機能付きのシンプルブログアプリを作ってほしい。フロントエンドはReactとTypeScriptUIコンポーネントはMUIを使う。バックエンドNode.jsExpressで、データベースPostgreSQLユーザーGoogleアカウントログインでき、新しい記事作成編集、削除できる。記事にはマークダウン記法が使えて、画像アップロードできるようにしてほしい。

この要求(What)は、特定フレームワーク流儀に則ったものではない。複数技術スタックを横断し、機能要求自然言語で並べただけのものであるしかし、現在のLLM、特にGPT-4oやそれに類するモデルは、このレベル要求からディレクトリ構造設定ファイルAPIエンドポイントフロントエンドコンポーネントに至るまで、驚くほど具体的なコード(How)を生成することができる。

これは、フレームワークが担ってきた「WhatからHowへの変換」が、特定のレールから解き放たれ、より広範で柔軟な領域へと拡張されたことを意味する。これまで自動化が難しかった、あるいは特定フレームワーク存在しなかったニッチ領域や、複数技術を組み合わせる複雑なシステム構築においても、AIによる宣言プログラミング恩恵を受けられる時代が始まろうとしているのだ。

2-2. 「What」の解像度がすべてを決める世界

LLMという汎用変換器の登場により、プログラマ生産性は、いかに質の高いWhatをLLMに伝えられるか」に直結するようになる。これは、俗に「プロンプトエンジニアリング」と呼ばれるスキルだが、その本質は、ソフトウェア開発における「要求定義」そのものである

質の高い「What」とは何か。それは、曖昧性がなく、網羅的で、矛盾のない要求である

これらは、優秀なソフトウェアエンジニアが、プロダクトマネージャーデザイナーとの対話を通じて、日常的に行ってきた思考プロセスのものではないだろうか。LLMの登場は、この思考プロセスを、より明確に、よりテキストベースで「記述」する能力を求める。私たちの頭の中にあった暗黙的な仕様が、LLMへの入力プロンプト)という形で、明示的に言語化されることを要求するのだ。

やがて、ほとんどのプログラミング作業は、この「Whatの記述」に収束していくだろう。TDDテストコードという形式で「What」を記述したように、私たち自然言語や、より構造化された要求記述言語を用いて、AIに対して「What」を宣言することになる。コード(How)は、その宣言から自動生成される中間生成物に過ぎなくなる。まさに、コード蒸発していく未来である

第3章:それでもAIには決められない ― 「Why」の不在という致命的な欠陥

「What」を伝えれば「How」が手に入る。この魔法のような世界の到来を前に、私たちは一つの重大な問いに直面する。それは、「そのWhatからHowへの変換は、本当に一意に決まるのか?」という問いだ。

答えは、明確にNoである

ある「What(要求)」を実現するための「How(実装)」は、無数に存在する。そして、どの「How」を選択すべきかを決定するためには、単純な機能要求(What)だけでは情報が全く足りない。そこには、必ずWhy(なぜそう作るのか)」という、背景、文脈、そしてトレードオフ考慮必要不可欠となる。

3-1. トレードオフの海に溺れるLLM

簡単な例を考えてみよう。「1億件のユーザーデータを格納し、ユーザーIDで高速に検索できるシステム」という「What」をLLMに与えたとする。LLMは、どのような「How」を提案するだろうか。

これらの選択肢は、どれも「What」を満たしている。しかし、その特性は全く異なる。案Aは多くのエンジニアにとって馴染み深く開発が容易だが、10億、100億件へのスケールは難しいかもしれない。案Bはスケール性に優れるが、厳密なトランザクション管理は苦手だ。案Cは高速だが、運用コストシステムの複雑性が増す。案Dは安価だが、検索速度は他に劣る。

LLMは、これらの選択肢をリストアップすることはできるだろう。しかし、このプロジェクトにとって最適な選択肢はどれかを、自信を持って決定することはできない。なぜなら、その決定には、LLMが与えられていない「Why」の情報必要からだ。

これらの「Why」こそが、無数に存在する「How」の中から、ただ一つの「正解」を選び出すための羅針盤なのである。そしてこの「Why」は、ビジネス目標組織文化ユーザーの期待、技術的な制約といった、極めて人間的で、文脈依存的な情報の中にしか存在しない。

3-2. エンジニアが暗黙的に行ってきた「Why」に基づく意思決定

ここで重要なのはこれまでもエンジニアは、この「Why」に基づく意思決定を、意識的あるいは無意識的に行ってきたという事実だ。

私たち技術選定を行うとき、単に「流行っているから」という理由だけでReactを選ぶわけではない。「SPA(Single Page Application)にすることでユーザー体験を向上させたい(Why)」、「コンポーネント指向の開発によって長期的な保守性を確保したい(Why)」、「Reactエンジニア採用市場が活発だからWhy)」といった、様々な「 Permalink | 記事への反応(0) | 17:09

2025-06-15

機械を介して、現実に触れている気がする

ボトルシップ感覚

生身の人間なら数ミリ秒レスポンスが早いはず

そういう奴は強い

ブレまくってるだけでも分岐予測非機能要件を満たさなくなる

周りが、何をしたいんだと訝っている間に、残像を見ている間に、やりたいことをやっている

インサイダー取引しほうだいだ

2025-06-02

anond:20250602222720

戦略という言葉が、仰る通りデザインパターンゲーム理論の両方で使われる用語であることは事実です。

しかし、それぞれの分野における「戦略」の使われ方には、明確な違いと、ある種の共通点があります

デザインパターンにおける「戦略Strategy)」

デザインパターンにおける「戦略Strategy)」は、振る舞いに関するデザインパターンの一つです。

目的: 複数アルゴリズムや振る舞いをカプセル化し、クライアントから独立して交換可能にする。つまり、同じ問題解決するための異なる方法を、実行時に切り替えられるようにする。

特徴: 共通インターフェース戦略インターフェース)を定義し、具体的な戦略クラスがそれを実装します。コンテキストストラテジーを利用するクラス)は、このインターフェースを通じて具体的な戦略クラスとやり取りします。クライアントは、実行時に使用する戦略コンテキストに設定することで、振る舞いを変更できます

例: 税金計算方法複数ある場合(標準税率、軽減税率など)、支払い方法複数ある場合クレジットカード銀行振込、電子マネーなど)など。

ゲーム理論における「戦略

ゲーム理論における「戦略」は、プレイヤーゲームにおいて取る行動の計画を指します。

目的: 自身の利得を最大化するため、他のプレイヤーの行動を考慮に入れながら、どのような行動を取るかを決定する。

特徴:純粋戦略 (Pure Strategy): ある状況で特定の行動を一つだけ選ぶ計画。混合戦略 (Mixed Strategy): ある状況で複数の行動を確率的に選ぶ計画プレイヤーは、他のプレイヤー戦略可能な結果を予測し、自身戦略を決定します。ナッシュ均衡など、安定した戦略の組み合わせが分析されます

例: 囚人のジレンマじゃんけん企業間価格競争など。

共通点と相違点

共通点:

選択肢の中から最適なもの選択する:** どちらの分野の「戦略」も、複数選択肢の中から、ある目的を達成するために最適な行動や方法選択するという点で共通しています

柔軟性: デザインパターンでは、異なるアルゴリズムを柔軟に切り替えることを可能にし、ゲーム理論では、状況に応じて最適な行動を柔軟に選択することを可能します。

相違点:

目的が異なる:デザインパターン:主にソフトウェア設計実装において、変更容易性、拡張性、再利用性といった非機能要件を向上させることを目的します。ゲーム理論: 主に意思決定分析において、複数合理的アクター相互作用する状況で、各アクターがどのような行動を取るべきかを予測分析することを目的します。

主体が異なる:デザインパターン:開発者が、ソフトウェアの振る舞いを構造化するために使用します。ゲーム理論:プレイヤー意思決定者)が、自身の利得を最大化するために採用する行動計画であり、また分析者がプレイヤーの行動を分析するために使用します。

相互作用の有無:デザインパターン: 基本的に、戦略パターンを利用するコンテキスト戦略クラスの間には直接的な競争駆け引きはありません。単に振る舞いを切り替えるだけです。ゲーム理論: 複数プレイヤー存在し、各プレイヤーの利得が他のプレイヤーの行動に依存するという、相互作用駆け引き本質です。

結論として、戦略という言葉は、それぞれの分野で異なる文脈目的使用されていますが、どちらも「目的達成のための選択」という根源的な意味合いを持っています。したがって、戦略デザインパターンゲーム理論の両方で使われる用語であるという認識は正しいです。

2025-03-18

anond:20250318113053

まれねえよ別に

自動運転システム動かしたら航続距離10分の1になりますとかタダのバカじゃん

電力を食いすぎない仕組みで十分な判断率をカバーできることが当然の非機能要件であって、スパコン積んだら完璧自動運転実装できましたとか研究室レベルでもできたと言えないからそんなもんは

2025-03-07

お疲れ様

今の社会で円滑に生きるための非機能要件が、早く機能要件になるといいね

そしたら実装できるのかな。

2024-10-15

anond:20241015112447

んはーーーーー泣きそう

から見捨てるつもりのクズシステム仕様書をだれかがだしてくれだって

バーカバーカ!

おまえがつくるのはつたないながらも現状からなにしてほしいかなんとか伝わる要件定義!!!

非機能要件もなあ!

2024-09-26

anond:20240926164209

まあ4つ目はわいもわからんけど

3つ目はそういうふわっとしたところも要件定義的に決められる能力を問いたい。機能要件だけでなく・非機能要件納期リソーススコープことまで突っ込んで聞いてくるようなら「おー」ってなる。

2024-07-19

anond:20240719174440

あらゆる案件非機能要件を達成できるだけの学習ソースを用意できる組織存在しないと思うんだよね。

世界大企業連合組んでも無理じゃないかな。

2024-01-10

anond:20240110195854

サーバーとやりとりして、データベース更新して、取得した値を反映して・・・って、もう何度もやってきたことでしょ。

何度もやってるCRUDを何度も同じように繰り返すだけの仕事をしているプログラマは、素早くタスクを終わらせても振られる仕事が増えるだけで給与が増えないため、生産性を上げる理由がない

一方、生産性を上げることが収入増につながるプログラマは、非機能要件に合わせたチューニングアルゴリズムの考案/改良など、都度都度やることが変わる仕事をしているので、同じことばかりしているわけではない

2023-11-08

anond:20231108152323

コードの書けない人が設計をする事例は、現場によっては存在するかもしれませんが、それはあまり望ましい状況ではないと思いますコードの書けない人が設計をすると、以下のような問題が起こりやすいと考えられます

以上のように、コードの書けない人が設計をすることは、システム開発において多くのリスクを伴いますコードの書けない人が設計をすることを避けるためには、以下のような対策が考えられます

コードの書けない人が設計をすることは、現場の状況によっては避けられないことかもしれませんが、できるだけコードの書ける人に設計を任せることが望ましいと思いますコードの書けない人は、コードの書ける人と協力したり、ローコード開発などの手法活用したりして、コードの書き方や技術知識を身につけることが大切だと思います

2023-10-15

anond:20231015004709

それ、多分勘違いしてるわ

非機能要件込みの話をされてるはずだぞ

2023-08-19

anond:20230819095529

入出力だけテスト通過すればOK業界は震えてるかもしれんが

非機能要件が多ければ多いほど使い物にならんよ

 

コード生成に関してはあってもなくても生産性変わらん(むしろ下がる可能性もある)レベルのことしか現状は実現できてないから、

道具として使いこなすのが云々って論はあまり現実に即してないね。 

よって、生成済みモデルで何かをする人は現状求められてないし役に立たない。

  

強化学習エンジニアは異常検知とかで潰しが効きそうなイメージはある。

2022-11-30

anond:20221129085814

そら、業務要件ヒアリングして要件定義インフラアーキテクチャが居て整備された環境ミドルウェアがあった上でプログラミングするだけならできるだろうけど、

対象とする企業に見合ったインフラ設計して、非機能要件踏まえてミドル含めて提案するってのはできないだろ?

インフラエンジニアがいないと仕事できないって分かってるんだから、その程度だと思えよ。

2022-10-13

anond:20221013230553

Kintoneか、懐かしいなあ。

大型クライアントに過密スケジュールカスタマイズ無茶振りされた思い出が蘇る。

メインの案件とサブの案件も抱えてる中で、JSでどれくらいカスタマイズできるかとかそれで機能要件はともかく非機能要件満たすかとかサードパーティアプリ使うのはどうかとかああ色々調査したけどこれダメっぽいわ代替提案してみようかとか、もう何回徹夜たか

二度とやりたくない。○通はマジでEvil

下手にアドバイスするべきじゃないね。ご指摘ありがとうございます

2021-11-12

サラリーマンとしては仕事自体は順調じゃない方がいいよな

インフラにありがちだと思うけどトラブルが起きて初めて存在認識される節があって、マッチポンプか否かにかかわらず何かしらのトラブルが起きてその解決をすることで仕事の成果が可視化される。マインスタートにすること意識されるようになり、それゆえゼロに戻した時の振れ幅が大きいと錯覚される。

問題を起こさないことがプロ仕事として評価されるべきなんだけど要件の時点で問題が起きないことが前提となってるので別に完成したところで振り幅は少ない。

不良がたまにみせる優しさが相対的に高く評価されるのと同じアレね。

当事者としてはトラブルないほうがはるかにいいのでテスト非機能要件には気を配ってるがそれが評価されづらいというのは体験としてあるけどこれはビジネス側と現場間にある大きな価値観の分断なんだろうね。

2021-02-17

アプリエンジニアインフラエンジニアで同じ給与基準なの納得できない

AndroidとかiOSアプリエンジニアと、インフラとかSREとかやってるエンジニアが同じ会社でも同列の給与基準で扱われるのモヤモヤする。

明らかにスコープ難易度が違うと思うんだよね。インフラのほうが覚えること多いし、非機能要件の複雑さとかで職の難易度が違う感じがする

2020-08-15

anond:20200815035750

組織問題だよなぁ。

機能要件は満たしているものの、セキュリティ流量制御障害対応などの非機能要件がキチンと洗い出せて居ないんだと思う。

2020-08-02

[]2020年7月はてブあとで読むトップ30リスト

はてブホットエントリ(総合)で月内に数多く[あとで読む]タグを集めたエントリ



あとで読むタグの数は去年の水準に戻ったように見える。

AWSによるクラウド入門」が2つ入っているのは?s=09というパラメータが付いているのと付いていないとので割れたせい。

筋トレとか睡眠とか健康関連がちらほら。

2019-06-09

anond:20190608215207

分散させると何かと大変じゃない?ネットワークの設定とかマシン側の設定とか、自動化したとしても初期設定は絶対手間でしょ。

ライセンスとかベンダに払う保守費とかもかさむだろうし、スループットめっちゃ上げたい、可用性めっちゃ高めたい、とかの特別事情がなければ1台でいいと思う。

というか「コスパ」ってなんだよ。非機能要件、明確にした方がいいと思う。

2018-06-02

anond:20180602233243

まあそれも分かる

RoRに興味があったり、プロダクトに対して熱意があったりすれば、非機能要件もそりゃ大事にしたいよね

ただそこが致命的に合わんのだなあ

2017-07-10

日本IT業界

ただ未来がないと喚いても仕方がないので、IT業界に来た若者向けに言いたい事。

受託開発でも何でもいいんだけど、

言われた事だけをこなす技術者にはならないで欲しい。

これは、言われなくても察しろとかそういう話ではなくて、

渡された仕様書設計書を見て

もっとこうしたらいいんじゃないか?」

もっと良い方法があるんじゃないか?」

というのを常に考えて欲しい。

それと、案件に参加したならば

何か一つでいいので、

俺が考えたイカす機能というか、

要求仕様には無いけどサービスでやってやったぜというのを組み込んで頂きたい。

機能要件に関わるところでそれをやるとちょっと揉めることもあるので、

非機能要件で、使い心地を向上させる部分に、エゴを埋め込んでいくのがまずはオススメ

こんなの作ってみました!どうすか!?やばないですか!? と見せると

先輩や上司技術に明るければ、きっと嬉しいはず。

そのまま客先に持っていくことはできないかもしれないけど、

こいつ・・・やるな・・!ってなるはず。

そして、そういうのを後輩が持ってくるようなチームは、仕事が楽しくなる。

楽しく仕事をしていると、なんだかんだでクオリティもあがる。

自分の考えが埋め込まれシステムには、愛着も沸く。

言われた事だけをひたすら実装するプログラマにはならないでほしい。

ソフトウェア開発ってほんとはもっと楽しいものなんだと信じている。

2015-11-04

横には広がらなかったデキない俺の話

一口IT土方と言っても色々な仕事があるが、その中でもブラックという悪名大元になっている、開発の仕事新卒から手がけて10年になったタイミングで、上司から「人の上に立つキャリアに行かないなら、技術者として横への広がりを」と勧められ(加えて開発の仕事あんまり取れない事情もあり)、そこから数年ほど運用チームの一員として業務をやってきたが・・・俺にはこの仕事センスがまるっきり無いことが判明しただけに終わった。

というか、今はもう運用という仕事に対して憎悪感情しか沸かない。心底嫌気が差ししまった。

以下、色々向いていなかった系の主張メインの言い訳


俺が長く手がけた開発は必ずゴールがあり、それを踏まえた細部への落し込みの段取り仕事の核となる。そしてこの段取りを進める忙しさが常にあり、上手く行かなくなった時はブラック激務が待っていると。

一方の運用は、開発と比べたら桁違いにヒマで、しかもゴールがない。しかし、その緩やかな時間の中で日々業務改善に頭を巡らせ、より上手い回し方を工夫することが肝要である

まず俺は、この時間感覚仕事感覚の違いに、結局どうしても慣れなかった。ヒマに任せてひたすら惰眠を貪ってしまい、働かないオッサンに成り果ててていた。

多分このまま行ったら、給料泥棒としていずれ切られるだろう。


それから、今時のシステムにはサーバスイッチのみならず、大小様々なアプライアンスが含まれる。それもアプライアンスが基幹装置だったりすることは全く珍しくないので、こいつらの監視は非常に重要なのだ・・・俺はこのアプライアンスというやつに全く興味が持てなかった。

真面目な運用者なら仕組みや機能を率先して調べ、業務改善や次期システム提案に噛ませるなんてするんだろうけど、俺の場合「よくわからんブラックボックスで、でもなんかよろしくやってんだね、じゃあそれでいいんじゃね?」程度にしか思えず、出来れば障害の1つも起きないなら無視したいものだった。

これはもう運用者としては致命的にダメセンスだろう。開発で例えるなら「ミドルウェアに興味ない」とか「クラスライブラリフレームワークに興味ない」と言っているようなものである


うそう、開発と運用の違いと言ったら、確実に対立するポイントがある。

それは非機能要件の取り扱い。

開発にとって非機能要件というのは「障害発生時の検証用や、機能要件の異常系処理など、恙無くシステムを動かすのに最低限必要な仕組み以外は手を出したくないもの」だったりする。基本的に手を入れ始めたらキリがないので、やればやるほど仕事が増えてしまうのに、それに見合ったカネも時間も用意されていないことが多い(というかそんな見積もりを客に出すのは無理)からである

一方の運用にとっては「機能要件は満たせていて当たり前で、その上で特に障害時の対応を中心とした非機能要件はきちんと作られるべきものであるシステムトラブルで矢面に立つの運用者であり、そこで手も足も出なければ存在意義を問われるのだから当然だろう。

このように非機能要件だけ取っても、同じシステム屋なのに見ているポイントが全く違う。

それらが積もり積もった結果、開発から見た運用

「正直気にしたって仕方ないような細かいところまで質問してきて、いちいちこっちの回答を言質に取って、その上で文句ばっかり付けてくる面倒な奴ら」

となるし、運用から見た開発は

「いつも中途半端なモノを作り逃げし、いざという時も要領を得ない曖昧なことしか言えない、信用出来ない奴ら」

となる。

こういう、ともすれば対立の原因になる認識の違いを踏まえ、身も心も運用者になることが、俺にはできなかったと言ってもいい。


というわけで、これから俺はまた開発に戻る。

「流しのオッサンコーダー」として半年~1年単位現場を点々とすることになると思うが、何年も椅子に座ってログを眺めているようで眺めていないよりは会社に貢献できるだろう。

或いは若手開発者育成という名の、ブラック環境に飲まれないノウハウとか、「ハイリスクノーリターン」を避けるサバイバル術伝授とかやってもいいかなーと思っている。若手をOJTで潰すのは許せないので。

この場合、「この人にはどういう言い方をしたら通じるのか」という問題が今以上に重要になるだろうけど、それくらいは受けて立たないとという感じ。

2015-08-22

SEことば

SEの私の言葉意味

追記歓迎

言葉意味
議事録気が変わる前の意見
非機能要件実装するかは気分次第
確認しておきます今日は帰ります
オブジェクト指向オ○ニー
偉い人の意見パルプンテ
ちょっとした仕様変更ザキ
客先担当者の急な交代ザラキ
要件定義から見直しザラキーマ
確定した仕様幻想
WBSSはサグラダファミリア
キーマン鬱病になりにくいことがわかってる人
ベストプラクティスモジュール化されてません
増員導入教育で作業が止まる
それは新しい方法ですね問題がおきたらお前が対応しろ
操作手順書唯一多少参考になる設計ドキュメント
備考最も重要考慮事項
XXはリスク問題が起きる(起きてる)けど俺は知りません
試験エビデンス誰も見ないけど一番手間のかかるもの
ペアコーディング今日だるいから流すわ
すべての入力パターンを網羅したテスト1ケース0.1秒で実行しても宇宙が終わるほうが早い
フレームワークバグ仕様です
カバレッジ100%不具合だらけですがコンパイルエラーはありません
トレードオフこの仕事やるのと休日出勤どっちがいい?
動きます完成度10%
一部のエラー処理がまだ完成度20%
誰かの独自フレームワークお前はしぬ
会社独自フレームワークみんなしぬ
ログイン ユーザー登録
ようこそ ゲスト さん