「オブジェクト」を含む日記 RSS

はてなキーワード: オブジェクトとは

2024-02-21

[] 数学は量子物理学と同様に観察者問題がある

量子力学における観測問題についてはよく知られるように、人間主観性が量子実験の結果に重要役割果たしている。

ドイツ物理学者ヴェルナー・ハイゼンベルクによる有名な引用がある。

私たちが観察するのは現実のものではなく、私たち質問方法さらされた現実です。」

例えば有名なダブルスリット実験では、スリットの後ろに検出器を置かなければ電子は波として現れるが、検出器を置くと粒子として表示される。

したがって実験プロトコル選択は、観察する行動パターンに影響する。これにより、一人称視点物理学の不可欠な部分になる。

さて、数学にも一人称視点余地はあるか。一見すると、答えは「いいえ」のように見える。

ヒルベルトが言ったように、数学は「信頼性真実の模範」のようである

それはすべての科学の中で最も客観的であり、数学者は数学的真理の確実性と時代を超越した性質に誇りを持っている。

ピタゴラスが生きていなかったら、他の誰かが同じ定理発見しただろう。

さら定理は、発見時と同じように、今日の誰にとっても同じことを意味し、文化、育成、宗教性別、肌の色に関係なく、今から2,500年後にすべての人に同じ意味があると言える。

さて、ピタゴラス定理は、平面上のユークリッド幾何学の枠組みに保持される直角三角形に関する数学声明であるしかし、ピタゴラス定理は、非ユークリッド幾何学の枠組みでは真実ではない。

何が起こっているのか?

この質問に答えるには、数学定理証明することの意味をより詳しく調べる必要がある。

定理真空中には存在しない。数学者が正式システムと呼ぶもの存在する。正式システムには、独自正式言語付属している。

まりアルファベット単語文法は、意味があると考えられる文章を構築することを可能にする。

ユークリッド幾何学正式システムの一例である

その言語には、「点」や「線」などの単語と、「点pは線Lに属する」などの文章が含まれる。

次に正式システムのすべての文のうち、有効または真実である規定した文を区別する。これらは定理である

それらは2つのステップで構築されれる。まず、最初定理証明なしで有効である宣言する定理選択する必要がある。これらは公理と呼ばれる。

これらは正式システムの種を構成する。

公理から演繹は、すべての数学コンピュータで実行可能な印象を生む。しかし、その印象は間違っている。

公理選択されると、正式システム定理構成するもの曖昧さがないのは事実である

これは実際にコンピュータプログラムできる客観的な部分である

例えば平面のユークリッド幾何学と球の非ユークリッド幾何学は、5つの公理のうちの1つだけで異なる。他の4つは同じである

しかしこの1つの公理(有名な「ユークリッドの5番目の仮定」)はすべてを変える。

ユークリッド幾何学定理は、非ユークリッド幾何学定理ではなく、その逆も同様。

数学者はどのように公理を選ぶのか。

ユークリッド幾何学非ユークリッド幾何学場合、答えは明確である。これは、単に説明したいもの対応している。

平面の幾何学であれば前者。球の幾何学であれば後者

数学は広大であり、どのように公理選択するかという問題は、数学の基礎に深く行くと、はるかに感動的になる。

過去100年間、数学集合論に基づいてきた。

すべての数学オブジェクトは、いくつかの追加構造を備えたセットと呼ばれるものであるということだ。

たとえば自然数のセット1,2,3,4,...は加算と乗算の演算を備えている。

一般的なセットとは、数学で正しく定義されたことがない。

集合論特定正式システムによって記述される。Ernst ZermeloとAbraham Fraenkelと、選択公理と呼ばれる公理の1つに敬意を表して、ZFCと呼ばれる。

今日数学者は、すべての数学を支える集合論正式システムとしてZFCを受け入れている。

しかし、自分自身を有限主義者と呼ぶ少数の数学者がいる。

彼らは、無限公理と呼ばれるZFCの公理の1つを含めることを拒否する。

言い換えれば、有限主義者正式システムは、無限公理のないZFCである

無限大の公理は、自然数の集合1,2,3,4,...が存在すると述べている。すべての自然数に対してより大きな数があるという声明(「ポテンシャル無限大」と呼ばれる)よりもはるかに強い声明である

有限主義者は、自然数リストは決して終わらないことに同意するが、いつでも自然数の集合の有限の部分集合のみを考慮することに限定する。

彼らは一度にまとめたすべての自然数の合計が実在することを受け入れることを拒否する。

したがって、彼らはZFCから無限公理を削除する。

この公理を取り除くと、有限主義者証明できる定理はかなり少なくなる。

正式システム判断し、どちらを選択するかを決定することができるいくつかの客観的基準...なんてものはない。

主観的には、選ぶのは簡単である

時間空間を超越した何かを象徴しているので無限大が大好きだ」と言えば無限大の公理を受け入れることができる。

ゲーデルの第二不完全性定理は、十分に洗練された正式システム(ZFC等)は、自身一貫性証明することができないと述べている。

数学者は、今日のすべての数学の基礎であるZFCが確固たる基盤にあるかどうかを実際に知らない。

そしておそらく、決して知ることはない。

なぜなら、ゲーデルの第二の不完全性定理によって、より多くの公理を追加することによってZFCから得られた「より大きな」正式システムにおけるZFCの一貫性証明することしかできなかったから。

一貫性証明する唯一の方法は、さらに大きな正式システム作成することだけだ。

数学を行うためにどの公理選択すべきかについて、実際には客観的基準がないことを示唆している。

要するに、数学者が主観的に選んでいるというわけである自由意志に任せて。

公理のための主観的基準というのは、より豊かで、より多様で、より実りある数学に導くものを選ぶという人は多い。

これは自然主義と呼ぶ哲学者ペネロペ・マディが提唱する立場に近い。

自分自身制限する必要がないので、無限公理を受け入れる。

特定公理のセットを選択する行為は、量子物理学特定実験を設定する行為に似ている。

それには固有の選択肢があり、観察者を絵に導く。

これが、一人称視点とそれに伴う自由数学において正当な場所を取る方法である

2024-02-19

[] モジュール

コードを簡潔に保つにはモジュール化が必須であるしかし同じモジュール関係のない機能が含まれていたりすると混乱の元になる。

モジュール内の関数機能的関連性は凝集度という。

一方で、関数というのは引数の細かな仕様依存せずに、汎用的に呼び出せた方が何かと好都合だ。引数になんらかのオブジェクトを渡し、そのオブジェクトしか持ち得ないような特殊情報で処理を行なったりすると、関数オブジェクトが互いに依存しあってしまう。

これはモジュールの結合度と呼ぶ。

高い凝集度、低い結合度によってモジュールを作れば、保守性は上がる。

さらモジュール内では、公開する必要のない関数はprotectedまたはprivateにするべきだ。

そのためにはモジュールが公開すべき関数についてインターフェイスを作り、公開関数に対するユニットテストを書いておくのが良いだろう。

2024-02-10

継承ダメっていう話ってオブジェクト指向オブジェクトを物と思ってるのが諸悪の根源で、オブジェクトは物のことだと思ってるから物を継承させたがる。DigitalClock extends Clockとか。

継承は、というか正確にはオーバーライド機能だけど、インスタンス化したクラスが何であるのかで実際に実行される処理が変わるわけだからインスタンス化したクラスが条件になってる条件分岐みたいなもので、ifとかswitchで同じ条件が何度もプログラムに登場するのを消す目的使用するのが継承の正しい使い方だと思う。

2024-02-08

パクリじゃないけどゲームとしてオリジナリティがあるわけでもない

anond:20240207085106 の続き

 

意外なほど反応ついてたけど読まず返事せず続ける。というか言いたいことの1割も書いてないので返事してたら続けられない。

読み返しててアズレンとブルアカが混ざっててどっちの話だかわからなくなってるが、すまん。

 

神バハだって当時すごい盛り上がって楽しかっただろというのは自分もそうですはい

三目並べだって楽しめれば別にゲームとして欠陥あっても関係ないというのもその通り。

 

この場合ゲームデザインとして実際のゲーム内容とゲームルックが嚙み合ってないのが、よろしくないと感じる理由になる。

まり、なんか雰囲気ドルフロに似てるなあという類似が、ゲーム性質からくるのではないと考えるからだ。

ゲームジャンルが同じだと見た目が同じになるのはむしろ当たり前。ファイアーエムブレムラングリッサーが見た目が似てると言って怒るのは…譬えが悪かった。

艦これアズールレーンでいうと、艦これジャンルけが難しいオリジナルジャンルだがああいゲームで、アーケード艦これは3Dのアクションゲームアズールレーンは2Dシューティングアズレンアーケード艦これルックにあえて似せる必要特にない。が、実際、なんかそれっぽくなってしまってる。

パクリではない。キャラクター独自の2Dに落とし込んであるし、ゲームシステムも違う。別物である

ただ、軍艦モチーフのヒット作の後追いで出た軍艦モチーフゲームゲーム画面の全体のルックが、ゲームシステム上の要請によるものでなく、なんとなく似てる。

おそらくは、参考にしました、ということだろう。

アズレン場合、一番近いのは二次創作同人ゲーだと思う。キャプテン翼やおい同人誌を商業向けに絶愛にしました、みたいな…譬えが悪いか

気にする奴は気にするが、気にしないやつは気にしない、ただネタ元へのリスペクトは本当にあるんか? と思いたくなるような微妙な感じだ。

この場合、似てるから悪いのではなく、似てないことが気持ち悪さの原因になっている。別にネタ元のニュアンスをあえて残す必要がないのに残ってしまってるのが、単なる素材として雑に扱ってるんだろうなと感じるのである自分は。

 

ブルアカでも、同様の、パクリではないけど…を感じ取ってしまう。

基本的ゲームシステムは生煮えである。2Dキャラがちょこまかと動きまわり、いろんなアクションを取るところが一番のセールスポイントであるのは間違いないが、それを使ってゲームシステムとしてうまくできてるかというと、見た目がちょっと豪華になっただけというのが正直なとこだろう。

プレイヤー操作可能範囲ゲーム画面のルックがうまく繋がってない。範囲攻撃範囲指定ぐらいだろうか。回避指示はごく少数の特定キャラしか使えないし。AIオートにすると本当に頭が悪すぎるのでスキル使用プレイヤー操作するしかないのだが、正直、ここまでオートが使い物にならない理由がわからないぐらい使えなさすぎる。なんとかゲームっぽさを演出しようとして、プレイヤーのやることを無理やり残すためにオートをあえて役立たずにしたのではないかと疑っている。

美少女が実銃で銃撃する動作を頑張って作ろうという熱意は凄くある。あるが、ゲームにはならなかった。

銃と美少女という組み合わせだけが先行してて、後が続かなかった。

 

さて2D銃撃部分ではグラフィックが先行してゲームデザインが追い付かなかったという話なのだが、そうなると気になるのが「もう一方のゲーム画面」であるフロアマップ

メインと銘打ったステージで見れるのだが、これは完全に、まったく、寸分の違いもなくドルフロそのまま。ユニットの動かしかたまで同じだし、マップ上のオブジェクトも似てる。

で、これがまた、ゲームとしては意味が全くない。

 

ドルフロでは、マップゲーム中心部分として機能していた。最初に見ると艦これ海域マップみたいに見えるが上手くアレンジしてあって、要は戦術シミュレーションマップの簡略化した形だ。ゲームデザインとしての中心部分なので先に進むほどマップが大きくなり難易度が上がり、そのうちスマホだとマップを見ることすら不可能みたいなことになり(ゲーム公式PCエミュでのプレイを推奨してたぐらい)、ライトユーザーが引くぐらいなことになるのだが、そのぐらいゲームとしての意味ちゃんとあった。

ブルアカでのマップは、ドルフロの凶悪マップ反面教師としたのだろう、基本的戦術シムみたいなことは一切ない。というかやらせてくれない。代わりにボタン押しギミックがやたら増えた。

結果、マップはあっても、実際のユニットの移動ルートは実質1つだけ、というのが現在のブルアカマップである。この部分はトライアンドエラー運営の用意した正解を引くパズルみたいなもので、プレイヤーのやれることはほぼない。こうなってくると、マップ攻略はほぼ作業しかなく、こんなことやらせ戦闘だけ抜き出して置いておけばいいだろ、という気分になってくる。

書いてみて思ったが、自分ドルフロとブルアカを対比してしまうのは、かなりの部分ここだと思った。ドルフロは艦これフォロワーとして作られたがゲーム部分は独自性が強く、艦これから受け継いだように見える部分でも自作品に合わせるように作り変えてあり、ゲームルックゲームデザインの間に乖離がない。ブルアカドルフロから全く変えずに完コピしたが、(おそらくソシャゲとして楽に遊べるようにするためにという思惑もあって)その完コピした部分はゲームとしての機能を失い煩雑なだけの盲腸となってしまってる(かといってマップをなくすのも微妙かもしれない。先述したように2Dキャラ銃撃部分はプレイヤーがやることがあるように見えて少ない、基本的キャラを愛でるためのパートだ。形骸化してるとはいえマップをなくしてしまうと、ただでも少ないゲームっぽさがさらに失われてしまうことになる)

ドルフロと同じなことについて「真似した」以外の理由が思い浮かばなくなってしまっている。このへんの真似っぽさは「銃と美少女」というセールス部分からは外れたとこなので雑にやっつけちゃったんだろうが、ここがあるからこそ、「銃と美少女の組み合わせなんて過去いくらでも前例がある、別にドルフロは関係ない」と言いづらくなっている。ゲームシステムとしての合理性がありプレイヤーゲーム体験としてうまく昇華させていれば、同じジャンルから似てるだけと言えてたはずだ。

自分がブルアカゲームデザインが雑なのが、単に雑であるよりあかんとこだと思う理由は、上記となる。

 

まだまだ続きます

見た通り基本お気持ち表明なのでそのように。

 

続き https://anond.hatelabo.jp/20240213200258

2024-01-23

anond:20240123161225

これだから3Dオブジェクトコピペゲーをなんとも思わず消費するSteamユーザーは嫌いなんだ

ゲームってのはパン作りのように粉からこねて自分で作ってこそクリエイター思想が反映されるってもんだ

アセットひとつだって世界観構成する重要なパーツなんだ

それすらこだわる気がないのに、見栄えのするゲームを手抜きで量産していくことに、意味はあるのか!

それは最終的に、人がゲームから受けるセンス・オブ・ワンダーを損ね、薄味なゲーム文化体験を推進してしまうことになる

ゲームにおけるQoLが下がればゲームという産業それ自体パチンコのようなものに成り下がってしまうおそれがある!

事実買い切りからという紛い物の安心感のために、クリエイターたちの血と汗が数百円で安売りセールされる地獄がそこにあるだろ!

そういう環境を作ってるのはあんたらだ! そうなれば作り手もいかに手抜きしつつ一発当てるかしか考えなくなる! ソシャゲと同じだろ!!

同じ2Dスプライトドットキャラ、聞いたことあるBGMを使いまわすようなRPGツクールゲーばかりになった世の中を想像してみろ!

それはDLsiteでは現実になってるが、同人からこそ許されてるもんだろ

企業として多くの人が連携してものづくりをするなら、そんな域にとどまってコピペゲーで満足する志じゃいかん!

正しくスケールを大きくしていかないと、生き残れんぞ!バズ頼みの一発屋になるな!俺が言いたいのはそれだけだ!!

2024-01-22

anond:20240122111105

適切な粒度関数を分割しとけば生産性上がるけどね。

module_name.pyみたいなモジュールごとにファイル分割して、インターフェイスだけ公開してその他はdef _funcみたいにprotected(or private)にしとく。

でも「共通性がありそうだから共通関数にする」はアンチパターンだな。たまたま共通してただけの場合分岐コードが増えて共通関数保守コストが上がる。

あとありがちなのは、php開発者関数分割しないですべてメインコードにべた書きするケース。こういうのはやめないと保守が大変。

とっておきのクズがやりがちなのは、神オブジェクトを作るとかだな。Userクラスフィールド関係する機能が多いからといって、コンポジションなどによるクラス分割をせずにユーザークラスにあらゆるフィールドメソッドを追加して、さらに進むとユーザーとは無関係機能も含めすべてをユーザークラス定義するアフォ。こうなってしまったら、後から修正するのが難しくなる。

先に手を打つことが、プログラマーの素質「怠惰」につながるのであり、面倒臭いといって後回しにするのは美徳でもなんでもない。

2024-01-15

ingressオーバークロックハックがクソつまら

ingressを離れた諸氏は知らないだろうが、最近ingressには、OVER CLOCK HACKなるものがある。簡単にいえば3D版グリフハックだ。

お馴染みのグリフが3DARオブジェクト上に表示されるので、それを解読・記憶して2Dのグリフを入力する。

そうすると、正解率に応じてとんでもない量のアイテムがもらえるというミニゲームだ。

私は元々ingressのグリフハックが好きで、グリフとそれらを組み合わせた頻出熟語(例:human + civilization)や、LV8のグリフハックのパターン(例:create + pure + future + human + civilization)も結構覚えてる。

しかし、そんなグリフハック好きな私でも、OC HACKだけは無理だ。

  • 3Dになって表示されるグリフがぐちゃぐちゃ過ぎて、全く解読できない(strongとか、他に似たグリフがないやつくらいしか、ぱっと見で分からない)
  • 解読が難しいくせに、制限時間が短すぎる
  • 出題されるグリフを観察するためにARオブジェクトを設置しないといけないのだが、それが画面外のどこかに飛んでいって、そもそもグリフを解読する段階にすらたどり着けない
  • そのさらに前段階として、ARオブジェクトを設置するために周囲をカメラスキャンする必要があるのだが、その精度が低く、よく失敗する(一応失敗してもOCHACKには挑戦できる)


難易度が高いからこそリソースが沢山もらえるってことなんだろうが、ミニゲームとしての完成度が低過ぎて、やっててストレスしかまらない。本当につまらん。

実装前にまともにテストしたのかを疑うくらいのクソゲーだ。

2024-01-11

マイクラグラフィック過小評価され過ぎてる

ドットを取り入れた独自3D表現により広大な世界を描いているのだ

オブジェクトがカクカクであっても解像度は高く細部まで描かれており(環境にもよるが)、美麗と言っていいだろう。ドット=低クオリティではない

anond:20240111115848

2024-01-08

anond:20240108104207

そういう事よ

奴らにとって女とは手に入らない事がほぼ確なすっぱいすっぱいぶどうなわけで一生触れられないまま人生を終える

そのへんに湧いてくるただのリスクはらんだオブジェクトと見る他がなくなってるんだ

2024-01-07

でもぶっちゃけ被災地観光旅行してみたいよな

石川能登は冷やかしどころかボランティアすら断るほどインフラが壊滅していて、現地入りした人が色々と叩かれてるけど、ぶっちゃけSNSにあげるかどうかは別として震災直後の現地を観光してみたいって気持ちはある

311とき東北津波で街が流されていて壊滅した瓦礫ばかりである意味圧巻だったようだが、残念なことにそれを見ることなく終わってしまった

なお、そこから1年後に現地入りしてもまだ瓦礫が残っていて被災地としての風情があった(意訳)と知人が言っていたけどね

例の奇跡の一本松とかは今は立派な観光名所になってるがあれはただのレプリカで、本物は震災直後の数週間でしか見れなかった(塩害で死んだので)

岩手大槌町では建物上に乗り上げた船とか風光明媚オブジェクトもあったがあえなく解体されたんだが、むしろあいうの残しておけば観光地として生きながらえて過疎地にならずすんだはず

まだ産まれてないが阪神・淡路大震災崩壊した高速道路とかああいうのもさっさと解体撤去されたけど、ああいう非現実的ものを見れた人が羨ましい

石川被災地は風情のある古民家が多いしプチ京都みたいな町並みだったが、それが倒壊しまくってる姿は、まさに東京大空襲関東大震災とき東京彷彿とさせてくれるのではないか

これは見たい・・・是非とも見てみたい・・・そういう思いがムクムクと元旦からこみあげてくる

というので連休はまだまだ続くので、被災地入りしてみようかなと思っている

今は関西の某所に住んでいるが、石川首都である金沢ほとんど無傷でインフラは生きているので、そこまで車や公共交通機関で行ったあとあとは自転車あたりで能登半島まで行ってみたい

例の倒壊した輪島塗の五島屋とか特に立ち入り制限されてないらしいから真っ先に見て写真とってこようと思う

でも炎上はしないだろうね

インスタとかTikTokアップロードしないんだから、そこが今の若者リテラシーの違いよ

2024-01-03

anond:20240102230512

PS3メモリが少ないかテクスチャ解像度オブジェクト数が当時でも全然足りてなかったでしょ

綺麗さだけではなく、グラフィック表現出来る事にまだ限界があった

2023-12-25

let hello = {hello: "hello"};

let bye = hello.hello;

hello.hello = "aaa";

console.log(bye); helloが表示

↑わかる。helloの値とそれに伴い参照が変わってもbyeの参照は以前"hello"を指してるから

let hello = {hello: "hello"};

let bye = hello;

hello.hello = "aaa";

console.log(bye.hello);aaaが表示

↑わかったようなわからんような…これ以上オブジェクトネストした者同士の代入の組み合わせされるといよいよ理解が追い付かなくなる

2023-12-17

プログラミング初心者です。以下のコードの誤りはなんですか

僕はプログラミング歴2週間の初心者です。キーと値を入力できるデータベースを作っています

以下のコードを実行してデータを追加し続けると、一定サイズを超えるとエラーが出てしまうみたいです。

理想は、データが追加された後にサイズが足りなくなったら動的に自動拡大されることです。

もし詳しい人がいたらご教示お願い致します。

import sys
import os
import mmap
import hashlib

def h(x):
    return int(hashlib.sha512(x.encode()).hexdigest(), 16)

def create_db(filename):
    with open(filename, 'wb') as f:
        f.write(b'\0' * 1024 * 1024)  # 1MBの空ファイル作成

def set_key(filename, key, value):
    with open(filename, 'r+b') as f:
        mm = mmap.mmap(f.fileno(), 0)
        pos = h(key) % mm.size()
        while mm[pos:pos+1] != b'\0':
            pos = (pos + 1) % mm.size()
            if pos == h(key) % mm.size():
                f.seek(0, os.SEEK_END)
                f.write(b'\0' * mm.size())  # ファイルサイズを2倍にする
                mm = mmap.mmap(f.fileno(), f.tell())  # ファイルサイズを反映させる
                pos = h(key) % mm.size()  # ハッシュ値を再計算する
        data = key + '\0' + value + '\0'
        data = data.encode()
        mm[pos:pos+len(data)] = data
        mm.close()  # mmapオブジェクトを閉じる

def get_key(filename, key):
    with open(filename, 'r+b') as f:
        mm = mmap.mmap(f.fileno(), 0)
        pos = h(key) % mm.size()
        while mm[pos:pos+1] != b'\0':
            end = mm.find(b'\0', pos, mm.size())  # 第2引数と第3引数指定する
            if end == -1:
                end = mm.size()
            if mm[pos:end].decode() == key:
                pos = end + 1
                end = mm.find(b'\0', pos, mm.size())  # 第2引数と第3引数指定する
                if end == -1:
                    end = mm.size()
                value = mm[pos:end].decode()
                mm.close()  # mmapオブジェクトを閉じる
                return value
            pos = (pos + 1) % mm.size()
            if pos == h(key) % mm.size():
                break
        mm.close()  # mmapオブジェクトを閉じる
        return None

def main():
    cmd = sys.argv[1]
    if cmd == 'create':
        create_db(sys.argv[2])
    elif cmd == 'set':
        set_key(sys.argv[2], sys.argv[3], sys.argv[4])
    elif cmd == 'get':
        print(get_key(sys.argv[2], sys.argv[3]))

if __name__ == '__main__':
    main()
 

2023-12-09

anond:20231209153114

職場を変わったのは5年前だけど、普通にエンジニアレベルが高いのでゴッドオブジェクトもなければ1万行の関数もなくて仕事は超楽だよ

最短時間理解可能コードとは

コードを書く上で重要なことは?という質問に対して、アスペならば「実行できること」と答えるだろう。

当たり前なことしか言っていない。「実行できること」という文からは全く有益な知見を得られない。

実行できることは重要性ではなく、必要性である重要性とは、必要なことをすべてやった上でなおやる価値のあることを意味する。

そう考えた時に私がよく思うのは「最短時間理解可能であることが重要であると思うわけである

しかしここに宗教がある。そもそも人間物事理解するプロセスは人それぞれである

私は一度、関数モジュールで適切に分離するためのリファクタリングというものを行ったことがある。

というのも、一つの関数に万を超える行が書かれていたため、上司リファクタリング命令したためである

具体的詳細はprivateメソッドに、公開する必要のあるものはpublicメソッドに移した。

そして当初働いていた職場での反応はどうだったかというと、「スパゲッティコード」だというのだ。

スパゲッティコード?一つの関数に万を超える行があるほうがスパゲッティだと普通は思うだろう。

ところが、彼らの脳内では、「常にコードの詳細が見えていなければ気がすまない」という、カプセル化無視する思想で動いていたため、関数化すると関数の最下層まで辿らないと気がすまないらしかったのである

このようにして、教育の無い人間コードの読み方もカプセル化も知らないので、非生産的方法が最短の方法になってしまうのである

コードを最短で理解するためにはどうするのか。基礎知識教育された集団の中に身を置くのがまず先決である

例えばcalc_monthly_salary_yen(Person p)という行が存在した時、いちいちcalc_monthly_salary_yenの中身を常に見に行くような人たちはダメだ。

人間データ入力すれば円単位で月の給料計算してくれるんだろう」とざっくりと自然言語的に読み進められる人たちでなければ「最短理解」は難しい。

まり最短理解するためのコードを書いた時に、それが本当に最短理解されるためには事前の教養必要なのである

教養のないところに生産性はない。悪いことは言わない。ゴッドオブジェクト管理するような会社からは逃げ出せ。

anond:20231209113841

うまい返しが思い浮かばないのでギャグスルーして🥸

bingちゃんやChatGPTは強烈な欧米中心主義かつその文脈での能力主義だぞ

なのでそこ批判すると神学的な話に必ずなるね(神が人の行動を評価する云々、神と運は別のオブジェクト云々)

2023-12-08

Tracer Bullet Development

開発手法でしっくり来てるのがAndy HuntさんのTracer Bullet Developmentで、開発の方向性を示すのに試作を作る方法

1. 主要なシステム オブジェクト定義UIサーバーロジックビットデータベース抽象化レイヤー等。

2. システム オブジェクトを介したデータ フロー定義

3. データフローを実現するために API とその戻り値コーディング

4. 単体テスト使用して API の予想される使用法を文書化。

5. 各 API必要な量の既定のデータ (別名、ダミー データ、偽のデータハードコーディングされたデータ) を追加して、API が「実行」されるようにする。

6. あらかじめ用意されたデータを実際の機能に段階的に置き換える。

7. コードリファクタリングし、システム オブジェクトを調整し、完了するまでこれを続ける。

実用上最小限の実装というプラクティスにも似ているが、ステークホルダーに動くサンプルを素早く見せられるのがポイント

2023-11-30

anond:20231130120810

"Null Pointer"

ポインタープログラム上の変数と思えばよい)が具体的なメモリ領域を指示していない事じゃ。

実際にはそれを原因として発生する例外想定外エラーみたいな物)である NullPointer Exception を指すことが多い。

ある変数が示すオブジェクトに何かさせようと思ったら、

その変数が何のメモリ領域も指示していなかったので「何かさせようとする」事自体が失敗しました、という感じ。

2023-11-16

anond:20231116115013

お前のいう通り書いたったわ(C#だが)。

非常に稚拙コードで悪いが。

八百万の神スーパークラスがある場合

//宇宙
namespace Universe
{
    //あらゆる神の根底存在する唯一神とその司る運(スーパークラス)
    public class GodLuck
    {
        public string Name { get; }   //神の名前
        public string Power { get; }  //神の力
        public string Plan { get; }   //神の計画
        public string Factor { get; } //運の要因

        public GodLuck(string name, string power, string plan, string factor)
        {
            Name = name;     //神の名前
            Power = power;   //神の力
            Plan = plan;     //神の計画
            Factor = factor; //運の要因
        }

        //神が何かを創造するメソッド
        public void Create(string thing)
        {
            Console.WriteLine($"{Name} created {thing}.");
        }

        //神が何かに対して支配や介入をするメソッド
        public void Control(string thing, string action)
        {
            Console.WriteLine($"{Name} {action} {thing}.");
        }

        //運が何かに対して影響を与えるメソッド
        public void Affect(string thing, string outcome)
        {
            Console.WriteLine($"{Name} affected {thing} and the outcome was {outcome}.");
        }
    }

    //恵比須様
    public class EbisuSama : GodLuck
    {
        public EbisuSama()
            : base("恵比須様",
                   "商売繁盛や五穀豊穣の力",
                   "人々に幸せを与える計画",
                   "商売繁盛や五穀豊穣の要因")
        {
        }

        //作物を守る
        public void Save(string crops)
        {
            Control(crops, "守る");
        }

        //人間成功させる
        public void MakeSuccessful(string person)
        {
            Affect(person, "成功");
        }
    }
}

↓IGodLuckというインターフェース実装した場合

(大いなる力を別のクラス移譲したくなったが、神と大いなる力は同一のオブジェクトという要件があるからやめた)

//宇宙
namespace Universe
{
    //神の振る舞いを定義したインターフェイス
    public interface IGodLuck
    {
        public string Name { get; }
        public string Power { get; }
        public string Plan { get; }
        public string Factor { get; }

        //神が何かを創造するメソッド
        public void Create(string thing);

        //神が何かに対して支配や介入をするメソッド
        public void Control(string thing, string action);

        //運が何かに対して影響を与えるメソッド
        public void Affect(string thing, string outcome);
    }

    //恵比須様
    public class EbisuSama : IGodLuck
    {
        public string Name { get; }   //神の名前
        public string Power { get; }  //神の力
        public string Plan { get; }   //神の計画
        public string Factor { get; } //運の要因

        public EbisuSama()
        {
            Name = "恵比須様";                   //神の名前
            Power = "商売繁盛や五穀豊穣の力";    //神の力
            Plan = "人々に幸せを与える計画";     //神の計画
            Factor = "商売繁盛や五穀豊穣の要因"; //運の要因
        }

        //神が何かを創造するメソッド
        public void Create(string thing)
        {
            Console.WriteLine($"{Name} created {thing}.");
        }

        //神が何かに対して支配や介入をするメソッド
        public void Control(string thing, string action)
        {
            Console.WriteLine($"{Name} {action} {thing}.");
        }

        //運が何かに対して影響を与えるメソッド
        public void Affect(string thing, string outcome)
        {
            Console.WriteLine($"{Name} affected {thing} and the outcome was {outcome}.");
        }

        //物を守る
        public void Save(string thing)
        {
            Control(thing, "守る");
        }

        //人間成功させる
        public void MakeSuccessful(string person)
        {
            Affect(person, "成功");
        }
    }
}

オブジェクト

馬鹿オブジェクト指向をやると一つのクラスに全部の機能を突っ込んだりする

そういう状態になったものを神クラスといい、インスタンス化したものは神オブジェクトという

以前、そういう状態に陥った現場仕事をしていた

EchsSee(仮)という謎のクラスに全機能が詰め込まれていた

最初HTMLの表示をデバイスごとに振り分けるヘルパークラスしかなかったが、馬鹿が「便利だから」などといって無関係フィールドメソッドをどんどんEchsSeeに詰め込んだ

EchsSeeは高頻度に更新される上に、更新による失敗が全システムに影響を与えたため、開発者は「EchsSee触るの怖いんですよね」などと言うようになった

ログイン ユーザー登録
ようこそ ゲスト さん