by Ryosuke Sekido
1 :ノチラ ★ 2018/04/27(金) 21:01:14.39 ID:CAP_USER.net
命名規則に関連するクソコード
クラス名、メソッド名、変数名などのネーミングを誤るとクソコード認定されてしまいます。会社やプロジェクトごとに多少のルールの違いはあるにせよ、どこに行っても漏れなくクソコード認定されてしまうネーミングパターンのご紹介です。

ネーミングが「記号+番号」
クラス名や変数名はわかりやすい名称にしましょう。ネーミングを見て内容を推測できるようになっていることが重要です。「記号+番号」ではそれを見るだけでは何のプログラムであるかを推測することは不可能です。

ネーミングに日本語、英語、ローマ字が混在
プロジェクトによってクラス名や変数名のネーミングルールは異なりますので、何がダメだというわけではありませんが、自由すぎるネーミングを行うのはやめましょう。きちんとプロジェクトでルールを統一することは重要です。

またにクラス名や変数名に日本語を使用することは言語仕様上可能とはなっておりますが、アルファベットを使うことが慣習となっていることと、日本語だとIDEの補完機能がうまく機能しないことがあって非効率化の原因となりますので、避けた方が無難です。

ネーミングにスペルミスがある
ネーミングでスペルミスがあると、後でソースコードから文字列で該当箇所を検索する時に検索にヒットせず、改修漏れの原因にもなります。正しいスペルと間違ったスペルが混在していたりするともう最悪です。スペルミスのないように気をつけましょう。

ネーミングに個人名が使われている
ネーミングはプログラムの中身がわかるような名前にするという観点からも、プログラムの中に自分の名前にすることは適切ではないのでやめましょう。

またソースコードレビューの時に思いがけず恥ずかしい思いをすることになるかもしれません。私は新人の時に「yonemura.sh」という名前で自分用に作ったシェルが他社に買い取られることになってしまい、他の会社のエンジニア20名くらいの前で「よねむらシェルとは・・・」と説明会で大きな声で読み上げるはめになって大変恥ずかしい思いをしたことがあります。

個人で使うプログラムでもプログラムの中身を表した無難なネーミングにしておくことを強くお勧めします。

ネーミングに番号やアルファベットの連番が使われている
クラスや変数のネーミングに、1からの連番やaからの連番を使うと、クラスや変数の中身を推測することが不可能になってしまうのでやめましょう。こういうことをすると後でそのプログラムをメンテナンスする人に、一々プログラムの処理を細かく解析することを強いることとなり、「このクソコード書いたやつまじで氏ね」と言われてしまいますのでやめましょう。

可読性に関連するクソコード
プログラムは後でメンテナンスするためにも、読みやすく書くことが非常に重要です。処理の内容だけ見ると読みやすくても読みにくくても実行される内容は同じかもしれませんが、読みやすいソースコードは改修の工数を下げますし、バグが混入するリスクも下げてくれます。

ネストが異様に深い
ソースコードの中にネストが何重にもなっている箇所があると可読性を下げてしまいます。ネストを何重まで許可するかはプロジェクトによって異なりますが、個人的には3重か4重くらいまでにおさまるようにコーディングするよう心がけていました。

これとセットで「1行の文字数は80文字まで」みたいなコーディング規約があるとさらにカオスな感じになってきます。ネストが10階層+1行80文字までとか、考えただけでも嫌になりますね。

インデントがずれている
今どきエディタが良い感じにインデントしてくれるのに、まさかインデントがずれているソースコードなんて存在しないと信じたいところですが、昔作られたソースコードだとそういう化石みたいなクソコードにお目にかかることはあるようですね。

カッコの閉じ位置のインデントがズレていたりすると、著しく可読性を下げますし、コードの解析を誤るリスクも増えてしまいます。こういうことをすると漏れなくクソコード認定されてしまうでしょう。

1つのメソッドが異様に長い
たまに1つのメソッドが異様に長いソースコードにお目にかかることがあります。私の個人的な感想だと某国にオフショア開発に出されてウミガメのように日本に帰ってきたソースコードにそういうメソッド分割の概念が消失してしまったかのようなソースコードが多いように思います。

1つのメソッドの長さが数千行にも及ぶような男前なソースコードにバグが混入してしまい、解析及び改修をしなければならなくなった時には絶望するしかありませんね。(後略)

https://axia.co.jp/2018-04-27



3 :名刺は切らしておりまして 2018/04/27(金) 21:13:21.93 ID:qtGcbreb.net
今まで見た一番難解だったプログラムは、
GOTO文でデータ部にジャンプして、そのデータ部が実はマシン語だったケース。



8 :名刺は切らしておりまして 2018/04/27(金) 21:30:27.54 ID:XTLjeLcx.net
>>3
おう、すごいな。
プロテクト外し対策だな。



4 :名刺は切らしておりまして 2018/04/27(金) 21:15:13.35 ID:SkldR2qv.net
1行目がGOTO文なBASICプログラム


75 :名刺は切らしておりまして 2018/04/27(金) 23:14:47.49 ID:263TKDwb.net
>>4
Pascal風に先に関数(サブルーチン)書いて、最後にメインルーチンってのが流行ったことはある。


100 :名刺は切らしておりまして 2018/04/28(土) 00:33:39.85 ID:7z+dj0w6.net
>>4
インタプリタ型BASICで、GOSUBで飛ばすサブルーチンを先頭付近に持っていって、
高速化するテクニック。


101 :名刺は切らしておりまして 2018/04/28(土) 00:36:34.68 ID:WXw+c5H7.net
>>100
行番号が小さい方が速いとか馬鹿馬鹿しい時代あったなw


120 :名刺は切らしておりまして 2018/04/28(土) 02:11:31.84 ID:LSjs9KYj.net
>>101
変数名の文字数が少ない方が早いとかもあった気がする



11 :名刺は切らしておりまして 2018/04/27(金) 21:31:56.80 ID:uRrJsrIr.net
漢なら数万行のスパゲッティ!


17 :名刺は切らしておりまして 2018/04/27(金) 21:52:01.28 ID:pP7lOXRp.net
スミマセン、クソこーど作ってしまった自覚はあります



19 :名刺は切らしておりまして 2018/04/27(金) 21:54:13.20 ID:CX7M9vnn.net
>私は新人の時に「yonemura.sh」という名前で自分用に作ったシェルが
>他社に買い取られることになってしまい


おいしいシチュエーションじゃん
仕事回ってくるかもよw



20 :名刺は切らしておりまして 2018/04/27(金) 21:54:26.53 ID:3Lb6XxPG.net
スペルミスは問題ないよ
全てがミスで統一されていれば



216 :名刺は切らしておりまして 2018/04/28(土) 13:16:13.03 ID:vujfdOXp.net
>>20
そういう余計なローカルルールを持つこと事態が糞だと気づけよ



29 :名刺は切らしておりまして 2018/04/27(金) 22:03:41.61 ID:sfHmltPT.net
//よく分からないけどこれで動く


33 :名刺は切らしておりまして 2018/04/27(金) 22:07:00.24 ID:V6Hm029K.net
初期化と言いつつメインの処理が半分ぐらい入ってたりとか
勝手に余計な事してたりするのが一番困る



37 :名刺は切らしておりまして 2018/04/27(金) 22:10:03.10 ID:sfHmltPT.net
//ループここから
・・・
//ループここから
・・・
//ループここから
・・・
//ループここまで
・・・
//ループここまで
・・・
//ループここまで

なおインデントなし
頭おかしくなるでほんま




38 :名刺は切らしておりまして 2018/04/27(金) 22:11:46.44 ID:lCBOv6HT.net
A君: とにかくコードが汚くて読みづらい。注意しても「動けば何でもいい」と言ってきれいに書こうという気持ちさえない。

B君: とにかくコードがきれいで読みやすい。同僚の書くコードに対して「そんな書き方じゃダメ」と言って細かく注意して指導してくる。

同僚にしたくないのはどっち??



49 :名刺は切らしておりまして 2018/04/27(金) 22:17:46.39 ID:k4YVJksD.net
>>38
B君だな。
コードのレビュー担当させるわ。

A君はウィザード級の仕事ができるかが分岐点。


149 :名刺は切らしておりまして 2018/04/28(土) 07:57:09.96 ID:mkrCgmc5.net
>>38
A嫌い。Bはカチーンとくるけど、クソコード書かないなら受け入れろ。


198 :名刺は切らしておりまして 2018/04/28(土) 11:42:30.44 ID:H0tOtl5l.net
>>38
A君とB君をペアでやらせる


227 :名刺は切らしておりまして 2018/04/28(土) 14:06:28.82 ID:9V0zlg7R.net
>>198
それ喧嘩になるだろw
Bの方がブチ切れそう


200 :名刺は切らしておりまして 2018/04/28(土) 11:48:18.45 ID:XuVNkchh.net
>>198
ウチはそれをやったけど、結局Aの方がブチ切れただけで何らAの改善はなかったよ
そしてリーマンショックで整理統合されてAは営業に回されてた。
Bの言い方も悪かったんだが、客観的にみてBのいう事は正しいので、それを受入れる度量と指摘された問題点を問題として理解できる脳みそがなかったって事でリストラされたよ



45 :名刺は切らしておりまして 2018/04/27(金) 22:15:25.72 ID:03j96pSE.net
組み込み系だが
どうせみんな糞コード
綺麗なコードなんて見た事ねーよ



46 :名刺は切らしておりまして 2018/04/27(金) 22:16:40.07 ID:ja8lHTmO.net
値切る相手には糞コード書いてメンテで稼ぐ作戦だろ



57 :名刺は切らしておりまして 2018/04/27(金) 22:33:12.52 ID:ckuDMDPo.net
スパゲッティは、現代的なIDEで見ると意外と追いやすい
一番追いづらいのは、意識高い系が書いたコード
ここになぜそのパターンをここに当てはめた?
ただただデザインパターンを使いたいだけの奴が多すぎる



64 :名刺は切らしておりまして 2018/04/27(金) 22:45:18.01 ID:cVMy5Ye6.net
if文を全て三項演算子で済ます。


68 :名刺は切らしておりまして 2018/04/27(金) 22:54:56.50 ID:SPGoPAJs.net
>>64
三項演算子便利?だろ:はぁなめてんのか?しめんぞ:勘弁してやる



84 :名刺は切らしておりまして 2018/04/27(金) 23:27:42.30 ID:qV+WN/ky.net
どっかのN○○とかいう会社の規約や実際のコーディングが、アンチパターンだらけで、今時よくこんなものを売りつけているなと感心したことがある。コードだけじゃなくRDBの物理名も可読性最悪のロット番号名だらけだし。
システムを買う客の立場からみても全く付加価値にならない作業を大量にさせる減点主義ネチネチ系のマイクロマネジメントだったが、プロジェクトはしっかりと炎上してたし。
SIの頂点ってショボイんだろうなと偏見と先入観を持っていたが、その通りだった。
次の東芝はここだろう。



204 :名刺は切らしておりまして 2018/04/28(土) 12:18:36.93 ID:wNHVxMJK.net
>>84
マジかよ最悪だなNHK



95 :名刺は切らしておりまして 2018/04/28(土) 00:14:35.92 ID:K0egFwTd.net
昔の友人が関数名とかに
oneechannnooppai とかつけるやついたなぁ・・・・



174 :名刺は切らしておりまして 2018/04/28(土) 09:52:12.03 ID:3I51DRoh.net
>>95
mikan、ringo、bananaを使っているやつはこの前見たよ



98 :名刺は切らしておりまして 2018/04/28(土) 00:23:43.80 ID:Hgf6ZlsB.net
低レベルの分かりにくいものを抽象化隠蔽化することで発展してきた今時の言語で、わざわざ状態をビットで管理しようとする先祖帰りオジサン


103 :名刺は切らしておりまして 2018/04/28(土) 00:58:58.48 ID:aPk9fETH.net
型推論は言語仕様そのものがクソ。


104 :名刺は切らしておりまして 2018/04/28(土) 01:01:28.52 ID:hGs4G+GM.net
AからZの1文字の変数名しか使えなかったあのころが懐かしい



105 :名刺は切らしておりまして 2018/04/28(土) 01:03:41.11 ID:eqLHgnvo.net
C#で戻り値を使わず全部refで処理してる
理解に苦しむ



106 :名刺は切らしておりまして 2018/04/28(土) 01:10:44.20 ID:AkMHGfyn.net
>>105
cでポインター慣れしてる人の書きがちなコード
若しくはリソース少ない中での最適化コード(リソース少ないとこでC#はそもそも使わんか)



113 :名刺は切らしておりまして 2018/04/28(土) 01:42:23.51 ID:ksqex9PZ.net
大抵オブジェクト指向設計を正しく理解できていない上に、
何か1つ, 2つの言語しか習得していない(習得する気がない)人だと、
品質の低いコードを書く、というより品質が低いということを理解していない



116 :名刺は切らしておりまして 2018/04/28(土) 01:55:00.86 ID:nejpxY1Z.net
ソフトウェア開発には規律と統制が必要だ。
決められたルールを全員で守る必要がある。
プロジェクトに一人でも頭の悪い奴や無責任なやつがいたら破綻する。
だから大半のプロジェクトはグダグダなのだ。

ソフトウェア開発に天才はいらない。それはむしろ有害。
必要なのは一握りのそれなりに優秀なやつらと、大勢の真面目な歯車。
天才は地味な仕事を真面目にコツコツやれないだろうからね。




133 :名刺は切らしておりまして 2018/04/28(土) 04:08:46.21 ID:rNrYlU53.net
クライアントとしては、安くて、ちゃんと動いて、納期守ってくれれば
コードが汚かろうが、そんなことはどうでもいいんだよ



135 :名刺は切らしておりまして 2018/04/28(土) 04:20:24.43 ID:VyMbTErz.net
>>133
一般的なプログラムは書いたらお終いではなく、デバッグしたり、
数年後に変更したりしますので・・・。



138 :名刺は切らしておりまして 2018/04/28(土) 05:03:20.58 ID:B/C71iR5.net
昔のコード見ることで歴史感やプログラマーの感覚を知ることも大事だろ思う
必ずしもスレで言ってることだ正しいとは思えなくなる事もある

ネーミングはプログラマーのセンスだしあだ名みたいなネーミングでアメリカのコード見てカッコイイなと思ったこともある
プログラム構造も限りある各種リソース内で有効利用するべく例外的にわかりにくくなることもある

自分の経験からだとメンテしやすいからとかいって全体や詳細機能を疎かにしたまま
修正することで発生するバグの発覚や特定の難しさが困難になることもあげておきたい



140 :名刺は切らしておりまして 2018/04/28(土) 06:43:15.71 ID:n/ISlhhu.net
オープンソースの仮想通貨もコードを見ると開発の能力がわかる
新興のパンプだけの通貨は本当にクソコード




153 :名刺は切らしておりまして 2018/04/28(土) 08:15:04.86 ID:0jc2x/XL.net
画面に通知もしないし、ログも吐かない。
単に例外の握り潰しを意図して記述されたtry-catch。
全てのメソッドでそれやって客に納品したとか平気でのたまう人に会ったことがあるなー



169 :名刺は切らしておりまして 2018/04/28(土) 09:33:25.44 ID:XuVNkchh.net
>>153
ウチに出入りして業者のソースコードもそんな感じ
確実にtry/catchの悪用だよ

try/catchで例外もみ消すと、自分の想定していた以外のことが起こっても
プログラムが何も騒がないからわからないんだよね。
で市場に出してから不具合連発なんだけど理由がわからないという惨事になる。



155 :名刺は切らしておりまして 2018/04/28(土) 08:30:54.11 ID:0jc2x/XL.net
ネクタイしめて、プログラミングを製造と呼ぶところは大概ヒドイ。
クソコード以前にクソアーキテクチャと、隠しきれず随所から滲み出ているプログラミングへの見下しから物事ははじまっている。



168 :名刺は切らしておりまして 2018/04/28(土) 09:30:31.43 ID:r+Aq4lze.net
SQL一発で済むものをわざわざカーソル作って繰り返し処理してるの見て
最初、なにしてんだろこれ?って理解できなかった。



186 :名刺は切らしておりまして 2018/04/28(土) 10:36:43.61 ID:GmUR9BoC.net
>>168
そういうのあるよね
SQLで一発で済むのをプログラムで二次元配列に入れてひたすらループして集計してるってのがあったわ


245 :名刺は切らしておりまして 2018/04/28(土) 16:42:43.51 ID:NYPyA2x/.net
>>186
RDBの負荷が重い時にはやらざるを得ない場合あるんだぜ
index張ってないとかなめてるのかって思うけどinsert updateの負荷がやばいとかコメントに書いてあると泣ける



179 :名刺は切らしておりまして 2018/04/28(土) 10:05:42.64 ID:tI5NdJu9.net
カーニハンスタイル派とオールマンスタイル派でもめたりしたのも昔の話だなー


194 :名刺は切らしておりまして 2018/04/28(土) 11:11:55.26 ID:HtuH0Ciw.net
ただ動くだけのプログラムなんて猿でも書けるからな。
他人も理解できるように設計できるかが人間様と猿の違い。




217 :名刺は切らしておりまして 2018/04/28(土) 13:18:26.31 ID:5YsjTPZL.net
メンバーのスキルレベルを揃えるのがとても重要。

普通に書いたのを初心者が全然分からん毎回解説とかかんべんしてほしいし、
一人だけ超絶技巧な奴が難解数学パズルのようなメンテ不能なのを書いては自慢するのもやめてほしい。





(´・ω・`) ここで使ってるまとめツール(自作)もクソコードですわ… 自分しか使ってないからいいけど


はじめてのプログラミング (学研まんが入門シリーズ)
学研プラス (2017-06-29)
売り上げランキング: 110,180

元スレ: http://anago.2ch.sc/test/read.cgi/bizplus/1524830474/