トップページunix
1001コメント277KB

バッドノウハウについて語るスレ

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。NGNG
バッドノウハウについてあれこれ語りましょう。例えばUNIXにおけるバッドノウハウの事例を
あげるもよし、「お前、バッドノウハウって言いたいだけちゃうんかと」と異議を唱えるのも
よし、あるいは「ハッドノウハウとどう向き合うべきか?」という話をするのもよいのでは
ないかと思います。

バッドノウハウの定義などについては>>2以降で
0389名無しさん@お腹いっぱい。NGNG
>>388
今からでも遅くない。やり直せ。たかだか1万字ぐらいじゃないか。
0390名無しさん@お腹いっぱい。NGNG
1万字もねーよ

3000字も覚えてりゃ日常生活では十分
書き順に至っては1000字くらい覚えているだけでいいんでねーの?
それくらい覚えてりゃある程度予測できるし。

ま、ワシは覚えてないけどな_| ̄|○
0391名無しさん@お腹いっぱい。NGNG
>368
dd if=/dev/atchi of=/dev/kotchi bs=1024 skip=26
0392名無しさん@お腹いっぱい。NGNG
Excelにだって、Wordにだって、PowerPointにだって“バッドノウハウ”が
山ほどあるじゃん。

Outlook Expressにだってたくさんあるぞ。
自動プレビューは切っておけとかさ。

Windows Serverのシステム管理なんてバッドノウハウだらけ。
Win+R mmc Enter とか使ったことある?
0393名無しさん@お腹いっぱい。NGNG
スルーされたのが悲しくて自分でレスしてるのはバッドノウハウ。
0394名無しさん@お腹いっぱい。NGNG
>>390
俺なんか、感じを手で書くことすらバッドノウハウ(という感覚)だと思ってたぜ!
もちろん、今となっては大航海だけどな!(IMEと電子辞書が手放せない)
0395名無しさん@お腹いっぱい。NGNG
>>391
>dd if=/dev/atchi of=/dev/kotchi bs=1024 skip=26

-a
-abc
abc
-a XXX
-a=XXX
--foo
--foo=XXX
foo=XXX

これで全部かな?
0396名無しさん@お腹いっぱい。NGNG
>>390
なんだ。
たった3000か。
Javaのクラスライブラリを覚えるよりはずっと楽そうだな。
0397名無しさん@お腹いっぱい。NGNG
> なんだ。
> たった3000か。
どういう感心の仕方ですか?
0398名無しさん@お腹いっぱい。NGNG
Win32 APIすべて覚えるよりかは楽です。



ハッ!ここはUNIX板・・・
0399名無しさん@お腹いっぱい。NGNG
>>392
結局、「UNIXはバッドノウハウだらけ、Windowsは分かりやすい」って
言ってる人は、両方とも分かってないってことでファイナルアンサー?
0400名無しさん@お腹いっぱい。NGNG
漢字の筆順の話は笑ったけど、なかなかいい例かも知れんな。
試しに冗談で外人に漢字を書かせてみると分かるが、彼らは
漢字を図形として捉えて似せて書こうとするから、筆順なんてあった
もんじゃない。彼らにとっては筆順なんてバッドノウハウだろう。
最終的に字として見えればいいんだ、筆順なんて本質的じゃないものを
なんで覚えなきゃならないんだ、バッドノウハウだ、ということに
なるだろうな。もちろん、これはバッドノウハウ派をちゃかして
いってるんだけど。

でも、我々は、筆順というのは、書きやすさ見た目の美しさのために
長い時間をかけてそうなったものだということを知っている。
もちろん、筆で書くか、鉛筆で書くか、とかによっても違うだろうし、
草書とかもあるからな、一概には言えんかも知れんが。
いずれにせよ、グッドノウハウといっていいだろう。

バッドノウハウ派ってのはそういった背景を見ようとしないし、
考えようとしないんだな。とにかくバッドノウハウと感じた段階で思考停止する。
バッドノウハウという概念はキャッチーだけどチープでシャロウと
誰かが言ってたけど、それにつきてるような気がするよ。
0401名無しさん@お腹いっぱい。NGNG
てゆーかさー、要はグッドとバッドっていう二元的価値観で
物事を判断できるっていうところがそもそも根本的な勘違いだろ。
0402名無しさん@お腹いっぱい。NGNG
筆順で例えるのであれば、
(1) 「左」と「右」は筆順が違う
(2) しかも正しい筆順じゃないとその字として認識してもらえない
みたいになってしまう場合に、バッドノウハウと呼べるのではないかと思っています
恣意的な制約がかかる場合です

正しい筆順が、大抵の場合は字を書くときの手の自然な動きに沿っているのは
否定しませんが、その筆順が正しいとされる理由はそれだけではないですよね?

利用者がチープでシャロウであることを想定しなければならないシステムというものも
この世の中にはある訳ですし、
「これは意味のない制約(==バットノウハウ)だ」と利用者に思わせてしまった時点で
開発者側の落度あるいは怠慢、という考え方もありでしょう
すべてのシステムに当てはまるとは思いませんが
0403名無しさん@お腹いっぱい。NGNG
馬鹿は二元論と中庸という二元論しか主張しない。
賢者は語らず。

漏れは当然、馬鹿。
0404名無しさん@お腹いっぱい。NGNG
「心」と「必」は字形は似ているが筆順が全然違う。これバッドノウハウ。
0405名無しさん@お腹いっぱい。NGNG
漢字の書き順って教えたほうがよいが強制はしない、程度のものだと
昔の文部省の学習指導要領に書いてたような気がした。
むかーし塾講師してたころの記憶だから当てにならないけど。
0406名無しさん@お腹いっぱい。NGNG
漢字の書き順か……左ぎっちょのわたしはつらかったなあ……
0407名無しさん@お腹いっぱい。NGNG
右から左に書く言語ってなんだっけ?
左利きの人間となんか関係ある?
0408名無しさん@お腹いっぱい。NGNG
>>407
語本日
0409名無しさん@お腹いっぱい。NGNG
たしかアラビア語とかそうではなかったっけ。
http://www.arabiago.com/arabic/kihon/
ググって見たけど数字は左から右とあるようだ。
# こういう分野でもemacsって需要あるんだろうか。

>>406
漏れは右利きだけど、右から左に線を引くのはたしかに大変かも。
そういうこと?
0410名無しさん@お腹いっぱい。NGNG
ヘブライ語
0411名無しさん@お腹いっぱい。NGNG
まぁ書き順それ自体で盛り上がっても仕方無いから
書き順→マクロ展開の順番

で話を置き換えて見るとコンピュータでも起こり得る話だよなと。
0412名無しさん@お腹いっぱい。NGNG
typedefと#defineはどうして逆なのか?
0413名無しさん@お腹いっぱい。NGNG
>>412
#defineが先にあって、typedefは記憶クラスだからかな?

そういえばアルファベットって書き順あったけ?
Aを書くとき、最初左下から上、右下といくんだが、これは間違ってる?
0414名無しさん@お腹いっぱい。NGNG
ヘブライ、アラビア語が右→左なのは、
のみを左手で持って右手ハンマーで打つのにやりやすいかららしいね。
0415名無しさん@お腹いっぱい。NGNG
製図用の書き順ってのは高校の時に習ったな
普段書くときの書き順はどうだったかな……
0416名無しさん@お腹いっぱい。NGNG
>>412
typedefは#defineの逆ってわけじゃない。つか、

typedef int (*pf)(void);

これの逆ってなに?

#defineを処理するのはプリプロセッサで、
typedefを処理するのはコンパイラ。

コンパイラのパーサを流用してつけてみた機能が
typedefなんだと思ってる(けどほんとのとこはどうかしらない)。

で、これバッドノウハウというほどのものかな。
Cでいうなら宣言の複雑怪奇さの方がずっとバッドノウハウに思える。
0417名無しさん@お腹いっぱい。NGNG
>typedef int (*pf)(void);

これってバッドノウハウじゃない?
typedef int (*)(void) pf;
とやるのが良さそうだけど。
0418名無しさん@お腹いっぱい。NGNG
>>417
うん。だからそれを含めて

> Cでいうなら宣言の複雑怪奇さの方がずっとバッドノウハウに思える。

と書いた。
0419名無しさん@お腹いっぱい。NGNG
もうちょっと補足しとかんとわけわからんな。

#defineとtypedefの似たような使い方があって、
その書き方が違ってるのがバッドノウハウというのであれば、
そんなのよりもっととんでもない怪物の宣言というものがあるよ、
と言いたいのでした。
0420名無しさん@お腹いっぱい。NGNG
>>419
まあ、Cに関しては言い始めたらきりがないか。
21世紀中には素晴らしい、まったく異なるシンタックスの
言語が出てくるでしょ。それに期待。
0421名無しさん@お腹いっぱい。NGNG
C++はバッドノウハウの宝庫
0422名無しさん@お腹いっぱい。NGNG
>>420
> >>419
> まあ、Cに関しては言い始めたらきりがないか。
> 21世紀中には素晴らしい、まったく異なるシンタックスの
> 言語が出てくるでしょ。それに期待。

「シンタックス」はあって欲しいのか……
0423名無しさん@お腹いっぱい。NGNG
でも最近の情報工学の停滞ぶりからすると、
100年後もshit!を連発しながらC,C++使ってそうな気がする。
0424名無しさん@お腹いっぱい。NGNG
いや、工学が停滞というよりも業界の停滞か。
まあどっちでもいいな。飯が食えればバッド
だろうがなんだろうが関係ない。
0425名無しさん@お腹いっぱい。NGNG
>>423
exciteのテキスト翻訳で
shit
shit!
shit!!
shit!!!
shit!!!!
shit!!!!!
を翻訳してみたまえ。
0426名無しさん@お腹いっぱい。NGNG
今のところCを越える言語って出て来てないからなぁ…
仕様を微調整しながらこの先も生き続けるんじゃなかろうか
0427名無しさん@お腹いっぱい。NGNG
>>417
> >typedef int (*pf)(void);
> これってバッドノウハウじゃない?
いや。typedefはその型を実際に使用(宣言)する時と同じ書式
で行なう、とわかりやすい規則がはっきり決まってる。それ
を知らないとバッドノウハウに見えるかも知れないけど、そ
れはむしろ勉強不足だ。
0428名無しさん@お腹いっぱい。NGNG
>typedefはその型を実際に使用(宣言)する時と同じ書式
>で行なう、とわかりやすい規則がはっきり決まってる
へえ、そうなんですか。でも↑これがバッドノウハウだっていう
可能性もあるんじゃないですか?
0429名無しさん@お腹いっぱい。NGNG
LISP: 括弧だらけなのがバッドノウハウのもと。
Smalltalk: クラスライブラリがバッドノウハウ。
Java: Write Once, Run Anywareというバッドノウハウが有名。
C#: Microsoftの迷走ぶりがバッドノウハウのもと。
Perl, Ruby, Python: 似たような言語がいっぱいあること自体がバッドノウハウ。
関数型言語: バッドノウハウは存在しない。なぜなら理解できる人が居ないから。
Prolog: もう使われてないので関係ない。
0430名無しさん@お腹いっぱい。NGNG
純粋な人工言語は人間には取り扱えないって事かな。
0431名無しさん@お腹いっぱい。NGNG
>>429
Algol W, Pascal, Modula, Modula-2, Oberon:
作者の見切りorあきらめの早さがバッドノウハウ。
0432名無しさん@お腹いっぱい。NGNG
>>428
> へえ、そうなんですか。でも↑これがバッドノウハウだっていう
> 可能性もあるんじゃないですか?
文法もロクに知らずにプログラミング言語を使おうとするのが間違い。
0433名無しさん@お腹いっぱい。NGNG
Cの型宣言は腐ってるだろ。俺、いまだにsignal(3)のプロトタイプ宣言理解できないし。
0434名無しさん@お腹いっぱい。NGNG
>>433
それは「腐っている」んじゃなくて「面倒」って言うんだよ。
「腐っている」とは別の話だ。
0435名無しさん@お腹いっぱい。NGNG
>>433
英語で読め。日本語だと読める訳ないだろあんなもん。
0436名無しさん@お腹いっぱい。NGNG
でもCの型宣言は作者(カーニハン)自身がダメだって言ってなかった?
0437名無しさん@お腹いっぱい。NGNG
>>433
> Cの型宣言は腐ってるだろ。俺、いまだにsignal(3)のプロトタイプ宣言理解できないし。

typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);

これのどこが難しいんだ?なんてね。
0438名無しさん@お腹いっぱい。NGNG
業界に広まってあちこちに登場する手法>グッドノウハウ
広まらないで終わったローカルな手法>バッドノウハウ

よって、S式はバッドノウハウ。
それもキング・オブ・バッドノウハウ。
これほど長いあいだ試され続け、数多くの信者と宣教師を
生み出し、それでもなお広まらずに終わった手法も珍しい。
0439名無しさん@お腹いっぱい。NGNG
>>438 終わってないですよ。
0440名無しさん@お腹いっぱい。NGNG
hjkl > バッドノウハウ
c-b, c-n, c-p, c-f > グッドノウハウ
なのか?
0441名無しさん@お腹いっぱい。NGNG
終ってないってば
0442名無しさん@お腹いっぱい。NGNG
正規表現はグッドノウハウ? それともバッドノウハウ?
0443名無しさん@お腹いっぱい。NGNG
ASCIIで無理矢理って部分があるからバッドノウハウだな。
コード拡張すれば良かったのに。
0444名無しさん@お腹いっぱい。NGNG
M式を駆逐したS式であるわけだが、
それでもまだだめだということなのだろうか……
0445名無しさん@お腹いっぱい。NGNG
>>432
おれのCに対する知識はおいとくとして、
その矢印がバッドノウハウだってことはどうなんですか?
最近のJavaやC#を見る限り、明らかにバッドノウハウだと
思うけど。
0446名無しさん@お腹いっぱい。NGNG
そもそもプリプロセッサがバッドノウハウの塊。
0447名無しさん@お腹いっぱい。NGNG
TeX はバッドノウハウか?
http://d.hatena.ne.jp/apkz/20040311#p4
0448名無しさん@お腹いっぱい。NGNG
char[] str;
void(*)(int) signal(int signum, void(*)(int) sighandler);
これの方が直感的に綺麗と感じると思うけどどうだろう。
0449名無しさん@お腹いっぱい。NGNG
分ってると思うけどchar[256] str;ね。
やっぱり識別子は綺麗に別れてたほうが絶対に見やすいと思うね。
0450名無しさん@お腹いっぱい。NGNG
他の言語使ってりゃいいじゃん。
0451名無しさん@お腹いっぱい。NGNG
先生!これもバッドノウハウでしょうか?
ttp://www.pro.or.jp/~fuji/computerbooks/c/c.modula2.html
0452名無しさん@お腹いっぱい。NGNG
>>447
そこのリンク先。
組版ルールの複雑さとは関係なく、それを記述するための言語仕様の汚さが
TeX がバッドノウハウと言われる理由だと思うのだが、
この人はわかってるのかしらん。なんなんだよあの四則演算は。

だからこそ LaTeX やら EJB やらのクサいものにフタをするマクロ集を使うわけだし、
これらですらグッドラッパーになりえてないだろう。
0453名無しさん@お腹いっぱい。NGNG
EJB って何よ。EWB だ。
0454名無しさん@お腹いっぱい。NGNG
EJBもJSPもバッドノウハウ。
0455名無しさん@お腹いっぱい。NGNG
>>447
> http://d.hatena.ne.jp/apkz/20040311#p4
「Chicago Rule」には萎えるな。「組版ルール」とか、すっとんきょなこと書
いてるし。実際にManualを手にとって読んだこともなく書いてるのがありあり
とわかる。所詮「バッドノウハウ」と騒いでるのは教祖も含めてこの程度か。
0456名無しさん@お腹いっぱい。NGNG
>>433
C の型宣言は、俺も腐ってると思うけどなぁ。変数だけなら右から
左に読めば意味が通るんだが、関数ポインタがからむと右に行ったり
左に行ったりする必要があるし、まして

 自分自身を返す関数

が記述できないあたり根本的に ad hoc な設計という感じがする。
0457名無しさん@お腹いっぱい。NGNG
>>456
それぐらいなら相互再帰でいいんじゃないの?
0458名無しさん@お腹いっぱい。NGNG
>>456
記述できるけど関数を返せないというだけなのでは?
0459名無しさん@お腹いっぱい。NGNG
457だがとんちんかんなレスしてるな。失礼。
0460名無しさん@お腹いっぱい。NGNG
458だけどよく考えたら記述できないね。
0461名無しさん@お腹いっぱい。NGNG
再帰的な型宣言ってのはこんな感じ?
typedef func (*func)(func);
もしくは上で挙げられてる改良C構文に従えば
typedef func (*)(func) func;
0462名無しさん@お腹いっぱい。NGNG
>>456
ad-hocじゃないって。設計だってきちんとしてるんだよ。コンパイラが簡単に
なるように変数宣言の構文をそのまま型宣言にも使ったのさ。パーサが同じで
すむからね。

そのために見にくくなってるんだけど、同じ見難さは変数宣言のときにだって
あるわけで、演算子の優先順位とかは最低わかってないと混乱する。でも、他
の言語だって演算子の優先順位とかleft/right associativeかどうか、なんか
は理解してないと、つまらないミスは避けられないよ。
0463名無しさん@お腹いっぱい。NGNG
>>462
> コンパイラが簡単になるように変数宣言の構文をそのまま型宣言にも
> 使ったのさ。
当時の計算機環境・開発者がかけられる手間を前提とすると「うまい工夫」
だと思うが、今になってみると……という一例だと思われ。計算機や開発者
に対して最適化された設計は、往々にしてユーザに対しては最適化されない
定めにある。
0464名無しさん@お腹いっぱい。NGNG
教祖さま?
0465名無しさん@お腹いっぱい。NGNG
461みたいなのを許しちゃうと宣言と定義の境界線が
あいまいになりそうだし、言語的にも処理系も難しくなる。
(っていうかポインタのある言語でそれは可能なのかな?)
そういうのは否定しておいて、void*でやり取りするように
するってのは、C的で正しいと思うね。素人は。
0466名無しさん@お腹いっぱい。NGNG
staticをどうにかしてくだちい。
0467名無しさん@お腹いっぱい。NGNG
>>463
> だと思うが、今になってみると……という一例だと思われ。計算機や開発者
30年近くも前の設計をつかまえて何あたりまえのこと言ってんだよ、ボケ。
ANSI Cの最初の規格化がはじまったのだって既に20年前だ。
0468名無しさん@お腹いっぱい。NGNG
Cだけが低レベルな処理を記述できるとは思わないけど、
例えば、MLなんかの最高級な型システムを持つ言語とかって
Cだと人為的に意識されてコード中に記述されてる部分まで、
処理系が賢くならなければならないわけだけど、そういうのって
今の処理系できてるの?
アドホックなCを批判することは誰にでも出来るけど、
代わりのものを用意するってのは並大抵のことじゃないよね。
Cと同程度の表現力しかない言語なら、結局C,C++に落ち着くだろうし。
0469名無しさん@お腹いっぱい。NGNG
>>465
関数ポインタと変数ポインタの間でキャストしちゃダメだよ。

大抵の処理系だと変数ポインタと関数ポインタは同じサイズ
だから問題ないけど、C++ の多重継承・仮想継承・仮想関数
が絡むと、致命的にまずいことになる。
0470名無しさん@お腹いっぱい。NGNG
>>467
落ち着けよ。別に「C の型宣言腐ってる」と言われたところで、
467 の人格否定されてるわけじゃないんだし。

歴史的事情があるのは重々承知してるし、代替もないから俺も
今でも C/C++ 使って仕事してるわけで。ただ、これから言語を
設計してくれと言われたら (というか仕事でスクリプト言語
書いてるけど)、俺は C の型宣言は採用しないという程度の話だ。
0471名無しさん@お腹いっぱい。NGNG
470の書く型宣言仕様ってどんなの?
0472名無しさん@お腹いっぱい。NGNG
>30年近くも前の設計をつかまえて何あたりまえのこと言ってんだよ、ボケ。
>ANSI Cの最初の規格化がはじまったのだって既に20年前だ。

この例で言えば、20年も経ってるのにまだCが生きていることが問題だということだ。

つまり、ソフトウェアは一般的に言って当初の想像よりもはるかに長生きするため
このような問題は必然的に生ずると言える。
0473名無しさん@お腹いっぱい。NGNG
Cのかわりなるもんが無いんだからしかたあるまい。
Cじゃなくてもいい奴にはJavaとかC++使ってるんだからそれでよかろう。
0474名無しさん@お腹いっぱい。NGNG
>>473
C++ だと C の問題を全て引きずってるから、解決しないような気が。
Java と並べるなら C# かねぇ。
0475名無しさん@お腹いっぱい。NGNG
>>463=472?
とりとめのない文章をどうにかしてよ。
「定めにある」とか「生ずると言える」とかは分かったから、言いたいことは何なの?
煽りじゃなくて疑問。
0476463=469=470=474NGNG
>>473
> 463=472?
違うけど。
0477名無しさん@お腹いっぱい。NGNG
型って、論理的にすればするほど分かりにくくなる傾向があるから、
色々仕方無いんじゃないの?関数型言語はともかく、Cみたいな言語では、
typedef int (*pf)(void);
typedef int (*)(void) pf;
の2候補よりいい方法って思い付かんよ。
0478名無しさん@お腹いっぱい。NGNG
バッドノウハウ以下の議論になってるな。
0479名無しさん@お腹いっぱい。NGNG
つか板違い。
0480名無しさん@お腹いっぱい。NGNG
Pascalで書かれたUNIXってないの?
0481名無しさん@お腹いっぱい。NGNG
>>468
>Cと同程度の表現力しかない言語なら、結局C,C++に落ち着くだろうし。
そして、(代替物の出来にかかわらず)↑の様になってしまうのがバッドノウハウなわけで…
0482名無しさん@お腹いっぱい。NGNG
ちょっと待て、「バッドノウハウ」って単語を本気で使ってる奴が混じってるのか?
0483名無しさん@お腹いっぱい。NGNG
>>482
混じってない。
0484名無しさん@お腹いっぱい。NGNG
>>477
そんな無理して関数宣言と同じにしなくても、専用構文用意すれば良いじゃん。
同じようにしなければいけないと思ってしまうことが、バッドノウハウのもと。

たとえば、int hogehoge(char *, int)なら
typedef func<int>(char *, int) *pf;
とか関数が多言語風に、
typedef (char *, int) -> int *pf;
とか。
0485名無しさん@お腹いっぱい。NGNG
>>484
本気で言ってる?
0486名無しさん@お腹いっぱい。NGNG
Cが置き換えるとしたら、それはOSを書き代えるぐらいの
勢いがないとムリポ。宗教改革があるまでラテン語が使われた
わけだし。いやラテン語のどこに問題があったかは知らないけど。
0487名無しさん@お腹いっぱい。NGNG
>>484
ちょっと話が逸れるが、最近の C++ 処理系だと

 boost::function<int (char*, int)> f;

とか書けるよね。
0488名無しさん@お腹いっぱい。NGNG
>>486
OSじゃすまないだろ。
ハードウェアが非ノイマン型にならないかぎり
Cは置き換えられない。


そして織田信長の出番がッッッ!!!
■ このスレッドは過去ログ倉庫に格納されています