/ 最近 .rdf 追記 編集 設定 本棚

脳log[20170212]



2017年02月12日 (日) すごくありそうな話で、それがまた怖い。「SIerの下請け開発者ってレベル低すぎない? - UXエンジニアになりたい人のブログ」■例によって茶々だけを入れますけれど、このループ for (int i = 0; i < (int) ((bigArray.length + 99) /100); i++) に対してこのコメント「配列を100個ずつに分割するコードなんですよ。えええええ。なんだこれ。99っていったいどこから出てきた?しかもこのコード、コメントなしなんですよ?このコードがコメントなしで伝わるコードなわけないだろと」。書き直させたのがこのループ for (int i = 0; i < bigArray.length; i+=100)(x+N-1)/N (ただし 0<=x, 0<N) っていうのは切り捨て除算で端数を切り上げる定型なのであって、書き直し前と後のループの違いは、ループカウンタが分割後の配列のインデックスになってるか分割前の配列のインデックスになってるかであり、どちらに着目しても結局両方のインデックスを使うのだから大差はない。どちらのループも書ける下請けの人の方が上等ですな。■思い出話。この定型を初めて見たのってビットマップ配列を処理するコードでのこと。ビットマップの横幅は4バイトアラインのためパディングが入ることがあって端数を切り上げたものが実際のバイト幅……みたいなことをよっちゃんいかの人(今はひよこ将棋とかやねうら王の人?)の古いサイト(BM98'S ROOMつう)のどこかで読んだと思う(※嘘を書いてたらそれは俺の記憶違い)。■「たとえば、関数を書くとなると、なにをするにしても、int process() { String str; int i, j; ・・・ return 0; } という書式で書きたがる。まるでそういう決まりがあるかのように。ここで、変数str、i、jは処理の最中にどんどん意味合いが変わる。intでは表現できない情報を返す必要がある場合は戻り値はStringになる。複数の情報を返す場合は、Stringの中にカンマ区切りで情報を記載すし、呼び出し側でカンマ分割して復元する、なんてことを平気でやる。構造体ってなんのためにあるか知ってますか。」 Stringを使ってる時点で言い逃れはできない感じだけど、構造体はレジスタに入らないから関数の戻り値にはできないとか、そういう制限のあるコンパイラがあったと思うんだよね。まさしくそういう決まりがあった。変数の使い回しはスタックの節約とか? 一度たたき込まれたことを律儀に守ってるんじゃあないでしょうか。■「for (int i =0; i < length; i++) { } 繰り返しもこう書かなくてはいけないという明確な意思があるようだ。」 eachだ forEachだ mapだ someだ anyだ everyだ reduceだ selectだと目的ごとにメソッドを選ぶのがわかりやすいか、たったひとつの道具(forループ)を使うのがわかりやすいかは見かたにより判断が分かれる。知識レベルが大きく違っていたり平均レベルが低かったりする多人数が理解できる最大公約数的存在がどちらかといえば……。自分の身の丈をよく知っている。■しかしこの節操のなさは擁護できない。「急にモダンなスタイルのコードが出現した場合、それはどっかからのコピペである。」■「要素に対して加工処理を実行します - function elementProcess(elm)」 あかん、笑う。つくづく思うけど、今どきの言語は識別子に大概の Unicode文字が使えるから、低レベルでドメスティックな現場では日本語を使わないとダメよ。しかしそれであっても、母語であっても、理路整然と矛盾のない文章をすべての人間が書けるというわけではないのだけど(それでも英語で書かせるよりはまし)。■「なぜかパラメータ名に10とかShiftJisとかの値が入ってる。この、パラメータ名とそこに入れる値が区別ついてないっていうパターンは驚くことにかなり頻発する。」 園児や発達障害者ではあったと思うけど、こういう間違い方の事例を集めたものが面白そう。自分を例にして間違えたわけではない理由を考えると、パラメータが取り得る値のひとつを代表値として名前に使用することで、その変数の具体的イメージが掴みやすくはなる。変数名を「文字コード」という総称にするより「シフトJIS(など)」とした方が具体的でわかりやすいという傾向があるのでは? 数学者に関する笑い話のようなエピソードを読んだ。「済みませんが,もう少しわかり易く抽象的に説明して頂けませんか」 自分らは数学者ではないので……。■「「有効状態のものだけを取得」したい場合、isEnabledFalseにはなにを指定すれば良いのだろうか。だれにもわからない。多分本人ですらわからないんじゃないか。繰り返して言うけど、頭がおかしいんだとおもいます。」 あかん、腹がよじれる。車の運転だけじゃない。たぶんコンピュータの方が(平均すると)よっぽどましなプログラミングをする。■ところで仁王っていうゲームの実況動画を見ていたら「装備の重さの、上限に対する比率が100%を超えています」というメッセージが出てきていた。日本語に不自由していますか? 「装備の重さが上限を超えています」ではいかんの? ひょっとして 100%、75%、50%とかの数字に意味があるの? ←「上限」というのと「比率」というのがステータス画面で使用されているキーワードだった。じゃあ……まあ……。