今までみた絶望的なソースコード [転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2015/04/17(金) 23:00:30.63ID:55USvuES
今井氏:ソースコード公開は、社長のティム(*2)の意向です。彼はバリバリのプログラマーで、初期の「Unreal Engine 1」を
1人で書いた人ですが、若い時に雑誌に載っていたコードを書き写して勉強したそうです。それで今の若い人にも、プロのソー
コードとはこういうものだというのを見せたいという願いがあって、ソースコードを公開しています。本当に今のゲーム業界の
事情を憂いてる1人だと思います。(*2)Epic Gamesの創業者兼CEOであるTim Sweeney氏

出村氏:読みやすいコードですよ。「C++」というのは、黒魔術(高度な計算)が多くなりがちな言語ですが、
そういうこともなく、すっきりしていて目的の機能も探しやすい。解読しやすいコードなので、確かにお手本になると思います。

僕は初代のゲームボーイからプレイステーション 2の頃くらいまでゲームプログラマーだったのですが、ゲームプログラミングでは
必ず数学が出てきます。行列とか三角関数とか。もちろん今でもまったく不要になったわけではありませんが、そういう知識の
重要性は薄れてきていると思います。「Unreal Engine」では特にそうです。
http://game.watch.impress.co.jp/docs/interview/20150417_698349.html

初級者から中級者へ昇格する時期は、ほぼどのようなソースコードでも読める程度にプログラミング言語に精通し、
また偉いプログラマーの提唱したデザインパターンも一通り理解したくらいの時期である。

すると、プログラミング言語の持つあらゆる機能と、偉いプログラマーの提唱するあらゆる技術を使わねばならない
という思い込みが発生する。そしてHello Worldにまで崇高なオブジェクト指向や壮大なデザインパターンを
適用しようとしだすのである。

その結果、
* 大量のクラス
* 迷路のような変数渡し
* 底なしに深いネスト
などといった凄いものが生まれる。また、条件分岐に三項演算子を乱用するなどの症状も多く見受けられる。
最終的には第三者にとって読みにくい保守性の悪いスパゲッティコードが生成されることになる。
http://monobook.org/wiki/%E4%B8%AD%E7%B4%9A%E8%80%85%E7%97%85
2015/11/28(土) 08:03:00.10ID:ozKXYRIx
老害ってほんとうに嫌なものだ。
2015/11/28(土) 12:25:04.44ID:THprgENb
>>551
平時とは違うよ。
それこそ電子化されたもの見りゃいいからね。
電話が復帰したら関西に投げたし。
当日翌日があんな状態になってもちゃんと回っただけいい方だと思うけど。

>>552
古い物を知らん奴が、解決策も無く古い物は良くないと言ってもなんの説得力も無い。
中学生の政治への憤りみたいに見える。
2015/11/28(土) 17:31:18.96ID:hiaEqByC
資産を異なるメディアでバックアップする事と
ソースコードからドキュメントを自動生成する事は完全に別問題なんだけどね
今後者のアプローチとして突っ込みが入ってるのに
なんで災害を強調するの?
2015/11/28(土) 19:20:09.38ID:W/xTcAqm
災害だと体験した人が少ない。

それは「俺にはわかるがお前らにはわからんだろ」
という上から目線をいうことができるということを意味する。

わからんと思うことなら説明するのが筋なんだが、
説明ができないので、別の方法で代用する。

それが「お前らにはわからんだろ」という言葉で
圧力をかけること。そのために災害を強調している。
2015/11/28(土) 22:46:57.94ID:ozKXYRIx
何の根拠もなしに、古いものを知らないと断定出来る才能自体が老害だとは思う。
2015/11/28(土) 22:57:48.59ID:W/xTcAqm
>>555はこういう喩え話でも説明できる。

あるとき若者が戦争についてあれこれ議論しているとする。
戦争について興味が無い人が多い世の中で素晴らしいことだが
そこで老人が現れて一言言う。


「戦争を実体験していないお前らに何がわかる?」


これでもう議論は止まってしまう。わからないのは事実だし
それはどうしようもないこと。その老人に勝つことは出来ない。

これは老人が正しいことを意味するわけじゃない。
例え老人の言うことが100%間違っていたとしても、
「お前らに何がわかる?」と言われれば反論できない。

議論の内容ではなく、その外側から圧力をかけて
黙らせているだけにすぎない。実に便利で姑息な手段だよ。
2015/11/28(土) 23:14:55.87ID:tSvPCfh1
姑息か?
559デフォルトの名無しさん
垢版 |
2015/11/28(土) 23:19:08.72ID:fFSPKhVt
ジジイに叱られて黙る奴w
560デフォルトの名無しさん
垢版 |
2015/11/29(日) 01:31:27.76ID:XQ9qPP+R
ここまで構成管理という言葉なし。

レベル低すぎ。
2015/11/29(日) 08:50:40.60ID:Q4OmYaLr
何で、発作のようにはねっかえって来てるのかわからん。
システムも、アナログな管理でも、管理さえ出来てれば良いよね、ただの運用のための道具、手段だから。
ってだけの話でしょ。

よほどなんか負い目あるの?
2015/11/29(日) 09:27:52.62ID:X6CLD+vb
無駄な労力を使わせているのが問題かと。
2015/11/29(日) 13:49:38.76ID:Q4OmYaLr
無駄じゃ無いじゃん
2015/11/30(月) 15:53:15.93ID:XLc7iLvb
おっ 無駄か無駄じゃないかの水掛け論か?
2015/11/30(月) 16:31:16.32ID:JF8UCarw
ほんとね、理由言わずに無駄っていうやつ、何なんだろうねw
水掛け論始めたいのかってな。
2015/11/30(月) 16:33:31.10ID:JF8UCarw
>>561
> システムも、アナログな管理でも、管理さえ出来てれば良いよね、

管理できるのは最低限で、効率的に管理して
コスト削減するのが、システム化の目的の全てでは?

当たり前すぎて、これだけで論破(笑)出来てしまう気がするが。
2015/11/30(月) 17:26:53.50ID:L/K7X1IT
>>566
その、最低限が業種によって違うよね。
って話してるのに、何言ってるの?
コスト削減、無駄の排除とそれは相反しないよ。
たとえれば、命綱はかける手間が無駄だから省略、作業場所に敷くマットは高いので敷かない、すべてロボットで窓ガラス拭きます!なんて話だよ。

その上で窓ガラス拭くならロボットで良いし、拭けないなら拭けるまで待っても死人が出ないからそれでいいね、って話だし、
災害時用の電波塔なら、拭けないなら拭けるまで待つなんて出来ないんだからいざという時は人が作業できるように体制は保持しようね、って話なんじゃん。

全然ソースコード関係ないけど。
2015/11/30(月) 17:37:12.45ID:JF8UCarw
>>567
じゃあ文句言う対象は俺じゃねーだろ。

「無駄」と言った奴に対して、
最低限は業種によって違う。
無駄じゃないかもしれないだろって
説教たれろよ。

一般論でしか無いし全く無意味な説教だがな。
2015/11/30(月) 17:50:09.32ID:JF8UCarw
管理さえできていればいいよね・・・そこで思考停止
管理できるのは当たり前で、効率的に管理するのが重要・・・思考停止していない。
2015/11/30(月) 19:42:10.76ID:Psvq4v1+
>>568
何をそんなにいきり立ってるの?
明後日のカイゼンかなんかを提案して怒られて拗らせてるの?

>>569
管理さえ出来ていれば良いとしか言いようがないでしょ。
もしアホ揃いで紙運用回す能力もないなら、それは「紙では運用管理出来ない」んだから、管理出来ていない≒何らかのソフトで運用しなければならない、だよね。
まんま同じで、システムだけでは回らないのであれば、それは「システムでは運用管理出来ない」なんだから、紙モノも残さんといかんな、って話じゃん。
何も否定してないのに、アホなの?

全部手段で道具で、目的は「満足に管理して業務を回すこと」だよね。
思考停止でも何でもないよ。
2015/11/30(月) 19:44:53.23ID:JF8UCarw
>>570
> 何をそんなにいきり立ってるの?

俺に言うべきじゃないことを俺に言うからじゃん。

> 明後日のカイゼンかなんかを提案して怒られて拗らせてるの?
お前の思い込みって、ほんと面白いよなw そんなの実経験から思いつくの?w
2015/11/30(月) 19:45:36.33ID:JF8UCarw
>>570
だから管理できるのは最低限だって。

ここから更に効率が良くてコストも低い方法に変えていくの。
2015/11/30(月) 21:27:42.17ID:Psvq4v1+
>>571
俺に言うべきこととかどうでもいいよ。
よっぽど自己評価高いのな。

実体験から思いつくよ。よくこの類のダメ出しはするから。

>>572
何言われてるか理解できなければいいよ。
結果論として無駄に効率が悪くて無駄にコストがかかる運用なんて、その最低限を満たして無いよね、って話。
2015/11/30(月) 22:55:34.80ID:5dGYmvKM
VCS標準化おじさんに原発おじさんに
面白い人がよく集まるスレですね
2015/12/01(火) 09:43:08.58ID:vya/mPuO
導入コストっつーか慣熟期間に一時的に落ちる効率が
導入後に取り返せる見込みがない場合ってあるよな。
太陽光発電システムを数年スパンで丸ごと入れ替える
みたいな、全然元が取れてないパターン。
2015/12/01(火) 17:07:22.23ID:N36zTOa2
俺が正しい
俺だけが理解している
俺の意見が理解できないやつはクソ

という論調の書き込みは読むに値しない
例え正しいことが書いてあったとしてもな
2015/12/01(火) 17:55:19.70ID:d/SZPXKT
>>576
それで、その意見は正しいのかね?
2015/12/01(火) 18:18:42.51ID:N36zTOa2
>>577
正しくないぜ
当然じゃないかハハハ( ´∀`)
579デフォルトの名無しさん
垢版 |
2015/12/03(木) 15:32:59.30ID:i4g9lAHf
hoge[1] = 89123;
hoge[2] = 123;
hoge[3] = 1234;
hoge[4] = 14323;
hoge[5] = 1123;
hoge[6] = 15623;
hoge[7] = 3123;
hoge[8] = 1323;
hoge[9] = 1223;
hoge[10] = 1234;
580デフォルトの名無しさん
垢版 |
2015/12/03(木) 15:33:33.33ID:i4g9lAHf
hoge[1] = 89123;
hoge[2] = 123;
hoge[3] = 1234;
hoge[4] = 14323;
hoge[5] = 1123;
hoge[6] = 15623;
hoge[7] = 3123;
hoge[8] = 1323;
hoge[9] = 1223;
hoge[10] = 1234;
2015/12/03(木) 18:06:22.96ID:xWHq0tVP
あー、これ系のソース書いたことあるわ。
バイナリファイル中のファイル位置、サイズだったか、
固定長電文のフィールド位置だったか。
2015/12/03(木) 18:20:54.04ID:d0OCrfZD
データセットを DataGridView に表示するのに、バインドせずにループで回して代入。
2015/12/04(金) 09:44:59.80ID:pcaxFgNv
>>582
ループしてるならまだ絶望的じゃないな
2015/12/04(金) 10:54:45.80ID:QmIGWywN
データバインドとかここ10年くらいのものだろ
2015/12/04(金) 15:17:07.67ID:prxSfFNA
>>582-583
バインドなしループなしを見たことがある
2015/12/04(金) 16:01:55.05ID:X5G422Yr
>>584
> データバインドとかここ10年くらいのものだろ
いつが最初かしらないけど、Visual Basic 4.0の時代にはあったよ。
1995年発売だから20年前だね。

http://windowsitpro.com/windows/visual-basic-40
http://windowsitpro.com/site-files/windowsitpro.com/files/archive/windowsitpro.com/content/content/2494/screen_01.gif

古くてちゃんとした情報は見つけづらいけど、MSRDC、RDO、DAO、DBGridあたりの
キーワードで調べれば断片的に見つかるはず。

ウェブのGUI技術なんて20年前の歴史を辿ってるだけだからさ。
2015/12/04(金) 16:14:52.25ID:u0bQfuw3
そうだね
588デフォルトの名無しさん
垢版 |
2015/12/04(金) 23:55:01.31ID:wuaQKlp3
#define zero 1
2015/12/05(土) 00:48:19.55ID:mCAwIdXZ
0=Off, 1=On を表すパラメータと、0=On, 1=Off なパラメータが混在していて
どっちがどっちかは列挙型の名前で区別するようになっているのだが
その名前付けが間違っている

enum FLAG_0_IS_OFF { OFF = 0, ON = 1 };
enum FLAG_1_IS_ON { ON = 0, OFF = 1 };
590デフォルトの名無しさん
垢版 |
2015/12/05(土) 11:26:47.51ID:pK0sc289
#define TRUE 1
...
if(hoge == TRUE){...}
591デフォルトの名無しさん
垢版 |
2015/12/05(土) 12:16:35.79ID:vOhmiziG
>>590
if((hoge == hoge) == TRUE)
2015/12/05(土) 12:17:21.84ID:4CEShJeO
なにかを召喚しようとしているとみた。
593デフォルトの名無しさん
垢版 |
2015/12/06(日) 11:01:47.05ID:pIhfFp+J
A4紙ペラ1枚の仕様書兼設計書しかないのに、10万行のソースコード。
2015/12/07(月) 01:49:58.36ID:7ba3d2ub
昔、偽装請...派遣でいった会社で
ありとあらゆる引数が

const boost::shared_ptr<XXX> &val

となっている現場があった。
何かが、狂っていた。
2015/12/07(月) 07:56:35.00ID:RcyQXLEI
開放領域への参照で落ちて地獄のデバッグよりか遥かにまし
2015/12/07(月) 09:53:30.69ID:7ldc1+VM
C++の世界って相変わらず
ごちゃごちゃしてんのなw

動くのに間違いっていうのが多すぎる
2015/12/07(月) 10:15:40.28ID:ybmjRjHL
>>594
銀行だろ
2015/12/07(月) 15:38:41.09ID:KuRdWB2c
>動くのに間違い

ほんそれ
2015/12/08(火) 21:57:19.96ID:uAong+Yo
ループ変数がグローバルにおいてあって、
そのループ変数を使ったfor文の中から呼び出される
各関数内でループ変数がインクリメント・デクリメントされているコードに絶望した覚えがある
2015/12/08(火) 22:39:43.83ID:ofZrfRww
やばいなそれ
それ仕様どおりなん?
2015/12/09(水) 10:07:13.59ID:3EPxHLPC
再帰処理の中で再帰の深さ調べて云々するプログラムにそんなのあったな
2015/12/09(水) 21:23:43.29ID:VkHBWGUX
>>600
コードが仕様だ!

コーディングミスの副作用が絡み合い何故か動いているのだが
書いたやつやめたから誰も手が出せない、なんとかしろという展開。
2015/12/09(水) 22:54:35.69ID:ZwktDk40
 
配列に間違って一つ余計なデータを加える

   +

ループ回数を間違って最後の一つを処理しない

   =

_人人 人人_
> 正常動作 <
 ̄Y^Y^Y^Y ̄
2015/12/10(木) 00:26:28.57ID:ydUpcr2T
境界テストすらしない前提なの
2015/12/10(木) 00:28:09.29ID:Ti4G586p
関数内部の境界テストはしないね。
2015/12/10(木) 09:15:52.53ID:PYxURZ6w
番兵さんを「余計なデータ」と言われた事ならある
2015/12/10(木) 12:17:34.93ID:gg94mj0B
>>603
最後にnull終端が(暗黙に)期待されてるバグありコードで
たまたまメモリが0で埋まってて動いてるソフトが世界中に沢山ある
2015/12/10(木) 12:28:09.15ID:UXNiSsD5
C言語でbssセクションに配置された未初期化変数はzero-fillが保証されている
ことを知らない無能は結構多いよね。
609デフォルトの名無しさん
垢版 |
2015/12/10(木) 12:36:25.02ID:bHHbe/Q2
お前知ってる無能だな
610デフォルトの名無しさん
垢版 |
2015/12/10(木) 13:00:08.77ID:v8EHsCoC
>>606
余計なデータだろう。
番兵はあくまでテクニックだ。
2015/12/10(木) 15:44:51.44ID:Sckq1QsI
>>608
そんなの知らねーが未初期化でReleaseビルドの時だけ発生するバグを埋めるアホはよく見てきた
新人でもはっきり判断できるような可読性高いもの書け
それがプロの最低条件
2015/12/10(木) 15:50:47.73ID:Ti4G586p
正確には「新人でも上級者でもわかる可読性が高いコード」な

新人が簡単に分かったとしても、
上級者が苦労するようなコードは本末転倒。

上級者がこっちのほうがわかりやすくシンプルだと思ってるのに
でも新人はこんな高度なテクニックは知りませんからね。
複雑で冗長になりますが、新人でも知ってるテクニックだけ使いますよ。
というのは大間違い。

わかりやすさの基準は上級者が決める
2015/12/10(木) 15:56:11.47ID:pXSC4Dqg
>>608
俺の使ってたCスタートアップは.bssゼロフィルしてなかった
妥当な理由があったからなんだが、何だかモヤモヤした
2015/12/10(木) 16:01:16.70ID:yNsK6Fxm
bssゼロフィルなんてものを前提にコード書く奴は素人
こういうバカはやっかいなバグをしこたま仕込むタイプ
2015/12/10(木) 16:04:42.64ID:pXSC4Dqg
グローバル変数とかスタティック変数は
初期値を入れてなければゼロが初期値ってのは前提でしょ
2015/12/10(木) 16:36:51.55ID:Ti4G586p
むしろ初期値が決まってない言語のほうが少ない。
2015/12/10(木) 16:42:29.28ID:2ifIvV3l
>>613
そういうのは処理系がエラーを吐けば問題ない
2015/12/10(木) 17:32:31.12ID:iwZgNtxz
前提つーか言語仕様に書いてあるからなあ
2015/12/11(金) 00:36:04.85ID:AA1k5ebD
言語仕様なんて現実の処理系の前じゃ単なるガイドラインにしか過ぎん
620デフォルトの名無しさん
垢版 |
2015/12/13(日) 09:45:48.97ID:+eRy+6gb
言語仕様としてプラットフォーム依存も定義されてるよ
621デフォルトの名無しさん
垢版 |
2015/12/13(日) 20:56:58.02ID:XKUJpg79
1クラスが6000ステップ以上のJavaソースをちらりと見た。
内部クラスを使っているかも知れんが、Javaってもっと細切れに
クラスを作るものかと思っていた。
2015/12/13(日) 20:57:59.03ID:NoovkWNN
Javaだけじゃなくて、どんな言語でも、
クラスがある言語なら細切れにクラスを作るよ。
623デフォルトの名無しさん
垢版 |
2015/12/13(日) 23:37:51.49ID:WlyYs++B
>>621
6000行くらい見ればいいのに。
2015/12/13(日) 23:57:49.37ID:hOFu3SKo
>>621
ダメな例だな
まとまってるから解析は比較的しやすいがテストとなると内部の状態が多すぎてまともなテストできない
クラスは小さいひとつのことに集中し他とはできるだけ疎結合
2015/12/18(金) 21:22:05.47ID:FDwGFOf2
>>621
クラスの責務があやふやなんやな
626デフォルトの名無しさん
垢版 |
2016/01/06(水) 11:59:50.90ID:nQqbz+/u
中級者はトリッキーはコードを好む
これだけは間違いない
2016/01/06(水) 12:29:20.52ID:UK0rI12O
確かに上級者のコードは見やすい。
ロジックは複雑だがコードとしての見やすさ。
628デフォルトの名無しさん
垢版 |
2016/01/06(水) 12:30:26.18ID:Fg9nLK8i
トリッキーを好むのは意識高い系の無能やで
2016/01/06(水) 18:08:14.05ID:/H9q/T9T
中級者と上級者の違いは?
2016/01/06(水) 19:38:59.22ID:yluT1kPN
上級者:バカの相手をしない。馬鹿にかかわらない。
中級者:バカがいると頑張る。
初心者:バカをバカと認識出来ない。
2016/01/07(木) 12:52:08.23ID:z61lpkpg
バカをコケにして楽しむ天才もいるけど
2016/01/07(木) 16:39:58.08ID:Pe5rEwkw
それは中級者のことだな
2016/01/07(木) 17:03:25.06ID:h6IODMw0
上級者は比較的謙虚だよ。
まあ、悟りが入っているからだが。
2016/01/07(木) 19:56:13.36ID:JRHaZSLM
いろいろいる
635デフォルトの名無しさん
垢版 |
2016/01/07(木) 20:47:13.40ID:lRIC4Lm0
上級者をコケにしまくるノイマン
636デフォルトの名無しさん
垢版 |
2016/01/08(金) 15:07:08.09ID:tqKW36Gu
ifもelseも全部一行に詰め込むガイジは死ね
読みにくいんじゃボケ!!!!!!!!!!!!!!
2016/01/08(金) 15:14:42.00ID:yBRKo/VZ
>>636
個人的には、

if(kinoko == stick){

}else{

}

という書き方ではなく、

if(kinoko == stick)
{


}
else
{

}

って書く人は嫌い。
2016/01/08(金) 15:29:13.63ID:d7AXElGo
>>637
それが嫌いだと生きていくの辛いだろ
2016/01/08(金) 15:43:23.58ID:BspTamKY
俺はできるだけ改行しないほうが好きだが、コメントの位置が上手くできないのが悩みどころ

// このコメントはOK
if(){

}else{ // このコメントを先頭にしたいけどelseはこの位置が好き

}
2016/01/08(金) 16:04:25.38ID:phA/d0Uk
こーだろ

if(){
  // 真の場合は・・・する

}else{
  // 偽の場合は・・・する

}
2016/01/08(金) 16:48:23.58ID:OUzXo7qx
>>637
嫌いだけど、 C#ってその形なんだよね
2016/01/08(金) 18:17:24.00ID:/YBx4YCU
設定で変えられますよ。
2016/01/08(金) 20:08:25.88ID:cnaeBvqG
つーか、elseはあまり書くべきでない。

if(){
  // 真の場合は・・・する

}else{
  // 偽の場合は・・・する

}

ではなく、できるだけ

if(){
  // 偽の場合は・・・する
  return;(またはエクセプションをthrow)
}

// 真の処理

という形になるように常に心がける。

if else という書き方が深いネストを作るきっかけになっている事に気づかないと
いつまでたっても、初心者、中級者のまま。
644デフォルトの名無しさん
垢版 |
2016/01/08(金) 20:43:14.71ID:YP1TscYa
一画面で収まるなら別にネストしてていいや。
それ以上はオブジェクト化するかな
645デフォルトの名無しさん
垢版 |
2016/01/08(金) 20:57:13.43ID:KfqZIdgm
>>643 MISRA を否定するのか。是非とも MISRA の連中を説教してやってくれ

MISRA-C ルール 15.5 推奨 関数は、その最後に1つだけの出口を持たなけらばならない
2016/01/08(金) 21:08:22.83ID:BspTamKY
>>643
ifでもelseでも最終的に同じ処理してからリターンしたい場合は?
決め付けるのは自称上級者

途中リターンが見やすいと思った場合は使うしそうでない場合はelseも使う
647デフォルトの名無しさん
垢版 |
2016/01/08(金) 21:14:13.17ID:/AzKcaKs
>>645
C言語ではそっちの方がよかったんかね。
いまって関数単位で単一責務原則を適用して関数が小っちゃくなるから
あまりこだわる必要なさそうだけど。
2016/01/08(金) 21:19:49.24ID:7GZox6yu
話ぶった切るけど今まで見た中で最高に頭沸いてると思ったのはこれ

// 前略

/*
* きっとキミは来ない 独りきりのcarch anything
* silent kill. do ignore.
*/
} catch (Throwable e) {
assert(true, "来ちゃった♪" + e);
}

書いた人は壊れて辞めたらしい
2016/01/08(金) 21:21:27.58ID:cnaeBvqG
>>646

あまり書くべきではない とか できるだけ心がける
という、超初歩的な日本語の意味を理解できない馬鹿がいるとは…
さすが初心者はプログラムだけでなく日本語も不自由と見える。

そう書くのが妥当なら書けばいいに決まってるじゃないか。
2016/01/08(金) 21:25:13.38ID:cnaeBvqG
>>645

世の中のコードが全てCで書かれているとは知らなかった。
そんな世の中なら、さぞ住みにくかろう。
2016/01/08(金) 21:38:36.07ID:RkD3LFtP
客先ですごいお金が絡むシステムがスパゲティコードだったから担当になるまえに怖くて会社辞めた
2016/01/08(金) 21:51:57.46ID:BspTamKY
>>649
常に心がける=できるだけ心がける?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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