X



なぜ「staticおじさん」は叩かれたのか?
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2019/02/08(金) 15:18:48.58ID:pS5scTjj
staticおじさん(読み:すたてぃっくおじさん)とは、2010年に@ITに「実はオブジェクト指向ってしっくりこないんです![1]」
と投稿して炎上したおじさんのことである。

staticおじさんが爆誕した2010年ごろのIT土方界隈ではJavaを中心としたオブジェクト指向が主流であり
「なんでもかんでもオブジェクト指向」という風潮があった。

このためstaticおじさんは多勢に無勢でボロクソに叩かれる結果となり、さらにはプログラミングそのものの
話を飛び出してオブジェクト指向推進派による学歴差別などに発展したすえに無事炎上した。

それからわずか数年後、staticおじさんの主張に「極力static変数は使わない」「関数ポインタを多用する」
というコーディング規約を加えた「関数型プログラミング」がJavaScript界隈を中心に爆発的に流行し、
その流れに乗るかたちでこれら規約を半ば強制する仕様の「関数型プログラミング言語」も多数登場するなど
世界的に一大ブームになった。

ちなみにstaticおじさんの主張と非常に酷似したものが、staticおじさんの登場より遥か昔、インターネットを
支える中核技術である「IP」のRFC(仕様書)にも「階層化の有害性」として書かれていたりする。
また、海外でも同様の主張を面白おかしく書いた「Bjarne Stroustrup インタビュー」なる怪文書が出回り、
こちらも大炎上した。

https://monobook.org/wiki/%E3%82%B9%E3%82%BF%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%81%8A%E3%81%98%E3%81%95%E3%82%93
0086デフォルトの名無しさん
垢版 |
2019/02/12(火) 13:06:24.87ID:eC1lEXzI
高階関数なんてありふれてるだろ。
それを偉そうにとは?
使ったことないの?
0087デフォルトの名無しさん
垢版 |
2019/02/12(火) 13:12:41.50ID:1MzWJDZP
プログラミングは経験つめば抽象的な概念を使って具体的な整理がしっかりできる世界だろ。
0090デフォルトの名無しさん
垢版 |
2019/02/12(火) 17:08:04.63ID:wp1a6nq7
>>84 出世するためにプログラミングしてるの?
だとしたら手段と目的を履き違えてるよ
そうでないのなら「出世するプログラム」でも書いて世の中に出したら良いw
0094デフォルトの名無しさん
垢版 |
2019/02/12(火) 20:04:05.06ID:g6CslLMJ
テストコードちゃんと書く奴ならstatic変数もオブジェクト指向も
ある点で問題あることは理解できるもんだが。
そういう意味では関数型のが有害性は低いか。
たまに何でもかんでも再帰で書こうとして逆に可読性低くする馬鹿もいるが。
0096デフォルトの名無しさん
垢版 |
2019/02/13(水) 01:37:44.19ID:WxhWOV7/
さんざんメソッド移動して最後のメソッドでreturnだけして値返すだけなのにたどり着くと殺意が湧く
0098デフォルトの名無しさん
垢版 |
2019/02/13(水) 01:47:04.99ID:wIurVPBj
関数型の話をすると
関数書けない言語なんてあるんですかねと返されたことを思い出す
0100>>82
垢版 |
2019/02/13(水) 22:33:19.44ID:1YO06rir
>>83
ま、その通りだよな。
「public static宣言した共有変数」なんて、
オブジェクト間のメッセージパッシングができないアホ
(別名「オブジェクト指向もできなければ関数型でもないただのウンコード量産機」)
が頼ろうとする手段の最たるものだからな。
0101デフォルトの名無しさん
垢版 |
2019/02/14(木) 07:14:01.74ID:zYy89We+
また今日もValueHolderモデル使わないで直にget/setやるうんこちゃんと仲良くコード書かなきゃ
はぁまじはぁ
0102デフォルトの名無しさん
垢版 |
2019/02/15(金) 22:52:26.99ID:9C1FU27E
勘違いしてるやつ多いけど
statucおじさんはJavaじゃなくてC#だぞ
Javaプログラマのryoasaiがハッスルしただけで
0104デフォルトの名無しさん
垢版 |
2019/02/16(土) 17:24:45.57ID:mbQsd5u7
Classあれば全部オブジェクト指向
0105デフォルトの名無しさん
垢版 |
2019/02/16(土) 17:27:47.39ID:3/SZoFmm
Cで構造体を引き回して管理するタイプのライブラリはオブジェクト思考と言えるだろうか?
0106デフォルトの名無しさん
垢版 |
2019/02/16(土) 18:51:28.96ID:LE6s3aZE
XWindowライブラリは一般にはオブジェクト指向だと言われとる。
どこまでシンタックスでカプセル化対応するか、どこまで動的なものにするかってのが
議論の分かれ目じゃないかね。
0107デフォルトの名無しさん
垢版 |
2019/02/16(土) 19:03:53.77ID:PhVDH7kZ
違うだろ
Cの構造体と糞みたいに長い名前のXwindow関数群がいやだから
オブジェクト指向に移行したんだろ
0108デフォルトの名無しさん
垢版 |
2019/02/17(日) 01:27:10.00ID:O/E0SKNM
>>107
そんなしょうもない理由じゃねーわ。
だからオブジェクト指向論者とは関わりたくねーんだわ。
0110デフォルトの名無しさん
垢版 |
2019/02/17(日) 03:07:42.86ID:xp57qVrW
ハンドラに関数ポインタ持たせて、でその関数の変数にハンドラのポインタを渡しておけばさすがにオブジェクト指向と言えるか?
こうなるとハンドラじゃなくてthisとかselfって呼びたくなるな。
0112デフォルトの名無しさん
垢版 |
2019/02/17(日) 10:00:29.48ID:7SCgo2EY
オブジェクト指向ならメソッド名などのメンバー名があいまいでもエディタである程度関数名がでてくる
構造体+グローバル関数だとアホみたいに出てくる候補から選ばなくてはならない

昔はその候補すら出ないので正確な名前が必要だった
だから分厚い辞書みたいな本や紙の束を持ってプログラムしていた
それでもミスする
コンパイルエラーでそんな関数ないよって言われてばかり
0113デフォルトの名無しさん
垢版 |
2019/02/17(日) 10:07:41.57ID:zowSdywj
設計書の機能一覧のどこのメソッドなのそれ?

これがわからないとどんなに高機能になってもゴミ
マイクロソフトはofficeとvisualstudioの統合を早急に行うべき
0114デフォルトの名無しさん
垢版 |
2019/02/17(日) 10:10:56.31ID:7SCgo2EY
昔は紙の束やノートや本をもってコードを書いていたんだよ
冗談抜きで
その本は洋書だた
教授の本棚から借りてくるの
0116デフォルトの名無しさん
垢版 |
2019/02/17(日) 10:20:39.56ID:7SCgo2EY
メソッド名が○○createなのか○○Createなのかcreate○○なのかCreate○○なのかcreates○○なのかCreates○○なのか
Cだと○○creatという線もある

○○.create最強すぎる
0120デフォルトの名無しさん
垢版 |
2019/02/17(日) 12:09:58.01ID:p5ummUd3
仮想関数技術でstatic関数みたいにできなかったっけ?
staticも静的占有修飾子という名称を聞いたことあるだけで
あんまくわしく知らない。違うところのファイルも仮想関数
使うとstaticとおんなじようにできるんじゃなかったっけ?
0122デフォルトの名無しさん
垢版 |
2019/02/17(日) 16:24:01.33ID:stWHtwS7
algol60で新しく導入された従来の構文とは直交(orthogomal)する
ブロック(block)構文内で計算した結果を保存するために
一緒に導入されたのが占有修飾子own。だけれども実装に
あたっては仕様が曖昧で動的、静的、中間解釈と三通りに
解釈があって大論争。最終的にownの解釈は静的(static)
です、でstaticになった。
Simulaとかはそもそもブロック(block)の計算結果を捨てる
からいかんのだ、であんまりプログラマーになじみのない
例を題材に並列化をといてたりするからクラスベースのOOには
staticは実は固有の用語だね。
0123デフォルトの名無しさん
垢版 |
2019/02/22(金) 13:18:21.26ID:1Zm4d6fz
クラスがあればstaticなんて不要だよな。
逆にクラスが無いならstatic使うしか無い。
0127デフォルトの名無しさん
垢版 |
2019/02/22(金) 19:54:20.58ID:1Zm4d6fz
リソース競合怖いならセマフォで排他すりゃいいしな。
待たせたいなら待たせればいいし。
0129デフォルトの名無しさん
垢版 |
2019/02/25(月) 23:03:39.42ID:TP8zPbuZ
シングルトンってどこで使うんだ?インスタンスを直接生成させたくないならManager使えばいいじゃん
0131デフォルトの名無しさん
垢版 |
2019/02/25(月) 23:38:46.23ID:g2jQN+TN
トンチンカンだったらすまんけど、例えばオーディオ操作するクラスとかはシングルトンだった。オーディオAPIを複数のインスタンスから叩かれてどうなるかよくわからないし。
0132デフォルトの名無しさん
垢版 |
2019/02/25(月) 23:40:53.63ID:g2jQN+TN
>>131だけど正確にはCでシングルトン的な実装をしてた。classとか紛らわしい言葉使ってすまない。
0133デフォルトの名無しさん
垢版 |
2019/02/26(火) 10:45:40.21ID:UuxN6/HJ
Cならむしろシングルトンがデフォルトだろ。
あれで別オブジェクト同時に動かすには工夫が要るからな。
0134デフォルトの名無しさん
垢版 |
2019/02/26(火) 12:57:09.88ID:4VLeDBYT
例えばタイマー機能を持つライブラリなんかはいろんなスレッドで別々に使用したくなるから別オブジェクトで同時に動かしたりするな。別オブジェクトというか別ハンドラ構造体だが。
0135デフォルトの名無しさん
垢版 |
2019/02/26(火) 15:41:32.58ID:e2/fBDmS
シングルトンをどう作るor使うって、言語によってあまりにも違いすぎるから一般化無理だろw
0136デフォルトの名無しさん
垢版 |
2019/02/26(火) 18:02:58.64ID:eD4jaKNG
役割は言語関係ないだろ
0137デフォルトの名無しさん
垢版 |
2019/02/26(火) 19:58:36.33ID:tR5x62Pi
結局どこでインスタンス生成するかを決めきれてないところがシングルトンが必要になる理由で
それは設計を見直すっていうのが根本的な治療な訳だ。
0138デフォルトの名無しさん
垢版 |
2019/02/26(火) 20:25:46.94ID:a57A2wmx
>>137
言いたいことはわかるが、「起きてはいけないことは起こらないようにする」ということを好むプログラマーがいて、彼らが作ったのがシングルトンなんじゃないの?
だからシングルトンが必要なわけでもないし治療が必要なわけでもない。
0140デフォルトの名無しさん
垢版 |
2019/02/26(火) 20:48:30.10ID:W0wJxBNy
シングルトンの話題か、はいはい。

Singleton何が悪いの?
https://qiita.com/mo12ino/items/abf2e31e34278ebea42c

Why is Singleton considered an anti-pattern?
https://stackoverflow.com/questions/12755539/why-is-singleton-considered-an-anti-pattern

When Singleton Becomes an Anti-Pattern
https://dzone.com/articles/singleton-anti-pattern

Singleton is not an anti-pattern
https://medium.com/@piotr.chmielowski/singleton-is-not-an-anti-pattern-51392c3e508e

Singleton Anti-Pattern
https://www.michaelsafyan.com/tech/design/patterns/singleton
0141デフォルトの名無しさん
垢版 |
2019/02/26(火) 21:49:06.18ID:AvMGpFJx
シングルトンの話題がここまで伸びるとは・・・
まあ実際使わんからな。

正規表現をstaticにするのは悪い考えだろうか?
更に言えばstatic constなら問題無い?
0143デフォルトの名無しさん
垢版 |
2019/02/27(水) 00:27:53.77ID:wn5rL22a
シングルトンと書いて"どこでもドア"と呼ぶ
0144デフォルトの名無しさん
垢版 |
2019/02/27(水) 08:19:37.48ID:6ZXfG+VB
読み書きできるデータがどこでもドアなのは怖いけど副作用のないメソッドがどこでもドアなのはありがたい
0146デフォルトの名無しさん
垢版 |
2019/02/27(水) 17:50:25.07ID:OHGiEJmI
シングルトンにしてはいけないものをシングルトンにする輩がそこそこいるからな
0147デフォルトの名無しさん
垢版 |
2019/02/27(水) 18:43:11.68ID:6a6tMlMF
readは別にスコープをそこまで気にせんでもいいがwriteはあかんな。
シングルトンの問題とstaticおじさんの問題は本質的には同じ。
0148デフォルトの名無しさん
垢版 |
2019/02/28(木) 18:19:05.20ID:4caMtz9v
やっとstaticおじさんの記事見つけた。面白いな、これ。「本物のプログラマは...」ほどじゃないけど、よく煽れてる。
0149デフォルトの名無しさん
垢版 |
2019/02/28(木) 18:51:23.07ID:IByT54N8
> プログラムのアルゴリズムとは無関係のものである。
これは何となくわかるな。
むかし、LALRパーサジェネレータ書いたことがあって、最初OOPで書いたんだけど、あまりにも冗長になったので、ドラゴンブックに載ってるような古典で書いたら、もの凄くわかりやすくなった。
0152デフォルトの名無しさん
垢版 |
2019/03/01(金) 20:23:46.44ID:USDimQm3
害悪はDBの正規化おじさんのが上逝ってる。
0156デフォルトの名無しさん
垢版 |
2019/03/01(金) 20:50:19.05ID:P8UuTZRK
構造としては完全に正規化したほうがいいのに、実際には弊害が多いってことは、DBMS側の問題のような気がするのだが。
正規化しまくっても実用に耐えられるだけの速度が出せればいい。
0157デフォルトの名無しさん
垢版 |
2019/03/01(金) 21:28:27.41ID:Y8fj+4tW
「構造としては完全に正規化したほうがいい」これがダウトだから速度が出ないんだろうが。
joinのコストなんてどう頑張っても限界があるわ。
0159デフォルトの名無しさん
垢版 |
2019/03/02(土) 07:50:23.86ID:66qf4QbX
>>157
完全に正規化してると人間にとって都合がよい。
速度が出せないのは機械の都合。
0160デフォルトの名無しさん
垢版 |
2019/03/02(土) 08:55:41.65ID:bakyLAA5
>>159
正規化してると人間にとって把握しやすいのはわかるがそれこそ人間の都合。
速度が出ないのは論理的必然。
という捉え方のが俺はしっくりくる。
0162デフォルトの名無しさん
垢版 |
2019/03/02(土) 10:16:35.03ID:GZ5C2Het
下手に正規化しすぎると例えば3年前のデータを見たら現在の名称が表示されて大混乱、とかよくある
0163デフォルトの名無しさん
垢版 |
2019/03/02(土) 10:40:50.67ID:Ebyn5USS
正規化おじさんはoracleのオプティマイザに100%の信頼置いてんのか?
いちいちヒント書くの非効率なんだが
0169デフォルトの名無しさん
垢版 |
2019/03/02(土) 19:00:27.27ID:bakyLAA5
>>168
なかなか際どいとこだね。
分散実行するならいかんとは思うけどそこまでやるかという気もする。
0170デフォルトの名無しさん
垢版 |
2019/03/02(土) 20:29:04.43ID:y8OJKCt/
>>169
俺はアンチシングルトンおじさんなんだけど、loggerだけはいいパターン見つかんなくて妥協して使ってるんだよねぇ
あとはシステム内で共有するパラメータとかも妥協的に

なんかいい手法あるかね?
0171デフォルトの名無しさん
垢版 |
2019/03/02(土) 20:53:27.86ID:bakyLAA5
>>170
パラメータについては引数なりクラスメンバなりで渡した方が良いとは思う(システム内で変更があるなら)
loggerについて言い訳を用意するならば、基本的な動作は追記であって変更でないから
致命的な問題になりにくいというものはあるかも。
0172デフォルトの名無しさん
垢版 |
2019/03/02(土) 21:03:35.11ID:GZ5C2Het
ただ追記するだけのロガーなら確かにシングルトンである必要はあんまないわな
わざわざ別インスタンスを生成する理由も同様にないから、つまりそんなに悩むほど重要な問題じゃない
0174デフォルトの名無しさん
垢版 |
2019/03/02(土) 21:29:24.61ID:hY2yNhzf
自分、ないしは自社で使うだけならシングルトンである必要はないんだろうけど、ライブラリとして公開するようなものなら間違った使い方をされることもありうるからシングルトンにしておきたくなったりしない?
0175デフォルトの名無しさん
垢版 |
2019/03/02(土) 22:56:52.47ID:y8OJKCt/
>>171
やっぱ引数になるよねぇ

そうすると扱いやすくはなるんだけど、深い依存メソッドまでパラメータ届けるのがどうしても嫌になっちゃう
0178デフォルトの名無しさん
垢版 |
2019/03/02(土) 23:48:01.36ID:KQCFitL1
>>163
普通信頼置かない。そもそも機械的にオプティマイズできてそれが最善で
あるなら人間いらなくなる。
ただ機械的オプティマイザーを超える方法がわからないが
0179デフォルトの名無しさん
垢版 |
2019/03/02(土) 23:51:49.69ID:KQCFitL1
今日は2019年3月2日だ。
DBによって日付が違うと動作不良を起こすがありゃなんでだ?
0181デフォルトの名無しさん
垢版 |
2019/03/03(日) 11:25:14.70ID:BbxzBxVK
>>175
ある程度の大きさのクラスを用意するとかかね。
それを継承して使いまわすとか。。
あんま大きすぎるとstatic変数やglobal変数と変わらんしあんまり良くないかな。
後はそれでも引数で渡しまくる。
実際cのプロジェクトで全ての関数はロガーを引数にするってなところもあった。
これはこれで確かにモジュラリティーは高くはなる。が面倒でもある。
0185デフォルトの名無しさん
垢版 |
2019/03/03(日) 20:04:38.79ID:miTn84+l
炭になってくれればいいんだけど、生焼けのままゾンビとして何年も残り続けるからタチが悪い
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況