はてなキーワード: トリッキーとは
可読性の高いソースコードが良いコードとされるに至ったのは、一体いつ頃からであっただろうか……。
その結果、何が起こった?
難解だが愉快なスパゲッティコードは悪となった。呆然とさせられるあの遊び心に満ちたトリッキーコードは悪となった。感動のコードゴルフもまた悪手とされた。
プログラミングとしての技巧的なものに取って代わって、より安易なコードを書くことが良いこととされるに至った。よりテクニカルな、たった一行にも知識と労力を要するコードよりも、誰にでも読めるようなコードが良いとされるに至った。
じゃあ、ぼくらプログラマを志すものは、一体何がしたかったんだ? ソフトウェアを作りたかった? 断じて否! あの考え抜かれたコードの中に美と情熱と思想とを感じ取り、それに憧れたんだ。愚直なコードに誰が感動しよう、誰が憧れよう! 誰にでも作れるようなソフトウェアでも構わない、他の誰にも書けないようなあのコードを書いた人々と、そのコードに憧れたんだ。それを解読できる人々に憧れたんだ!
そしたら、
というTBをもらった。
どうやら、無知は恥ずかしい、というタイトルにした方が良かったのかもしれない。
サブタイトルが暗に示すように、対話では論理的である必要は必ずしも無い。
その理由を示す。
しかしながら
だから、論理だけを使って何かを証明することができなくもない。
だけどもだっけどー、通常の対話では完全な証明を与える必用は無く
「説得」という形をとるのだ。
じゃあ、説得とはなんなのか?
人間は外部から情報を与えない場合には、「演繹」という論理ステップしか実行できない。
一方で外部から情報を与えると、「帰納」という論理ステップを実行することができるようになる。
ただし、この「帰納」というのは統計的な正しさしか保証しない。
しかしながら、人間が定理だと信じていることは、全て統計的な正しさしか持っていない。
これによって、件の命題の真が統計的に保証されれば、説得が終了したことになる。
つまり、本来は論理的である必要など無く、
外部からの情報を入れれば、あとは各自で演繹してくれればいいのだ。
もちろん、数学のようにピンポイントな仮定と、トリッキーかつ複雑な論理が必用な場合は別である。
だけれど、そんな複雑な論理構造が通常発生することはまずない。
説得が成功するかどうかは、各自の持つ公理系と、各自の持つ論理能力に依存する。
後者は、馬鹿を相手にする気がないので、私にはどうにもできないが、
前者に対してはわかりやすい説明をすることで、
説得力を増すことができる。
従って、これからはこの目的で、説明文を書くのでよろしく。
だけど、これから用事があるので
続きが読みたかったら、TBくださいね。
http://anond.hatelabo.jp/20070615171101
俺は大学四年まで全くきちんとしたプログラミングをやったことが無くて(大学の講義でJavaの超簡単なのを教わったぐらい)で、卒論でプログラミングをしなくちゃならなくて、そのとき初めて Ruby を触った。
Ruby は OOP ですげーんだぜ、とか一部で云われていた時代で、有名なアプリケーションは tDiary ぐらいしかなかった。はじめはクラスとかも解らずに何が何だか。そのとき tDiary のプラグインはクラス使ってないから簡単に書けるよ、というどこかのチュートリアルをみて見よう見まねで。GD という画像ライブラリを使ったら、サンプルをちょっと弄るだけで画像が作れて面白かったんだ。で、それを日記で公開してみた。今見返すとものすごくしょぼいソース。
そのときたまたま Ruby ハカーの方がそのプラグインをリファクタリングしてくれて、クラスを使って抽象化してくれて、初めて OOP をほんの少しだけ理解して、こうやってクラスって使うんだなぁというのを知った。本当に運が良かった。
その後就職して仕事で php ハカーのすごい先輩にいろいろ教えてもらって php を使って基本的な OOP は理解した(PHP を DIS る人が多いけど、プログラミング初心者には良い言語だと今でも思ってる)。これまた運が良かった。
その後またまた Ruby を使い始めたら今までよくわからなかった部分もするする頭に入ってきてホント面白ろくて没頭して。今では一通りのことは Ruby でできるようになった。
プログラミングが解るなら、Rails のソース(トリッキーなことやりまくってるのでつらいかも。ActiveRecord や ActiveSupport はその中でも解りやすい)を読んで、解らなかったら rubygems で興味のありそうなライブラリのコード読んで、あたりが OOP と Ruby 覚えるには手っ取り早いかも。
今なら Rubyレシピブック 268の技 と Rubyクックブック ―エキスパートのための応用レシピ集 あたり読んでおけば良いんじゃないなぁ。
あと今はてダで Ruby を含む日記を書くともれなく ruby-dev な人たちがキーワードからたどって読んでくれるので、解らないことをつぶやいたりすると結構答えてくれるみたい。のではてダ使って勉強日記とか書くのも良いと思うよ。
とあんまり参考にならないと思うけど書いてみた。なんか目的見つけられて、楽しく覚えていけたら勝ちなんじゃないかな。たぶん。
いくつか考えられるな
まず、if で書いた方が可読性が高い、という考え方。まあでも一行で書いてもすぐわかる以上はよっぽどのアホが入るかも知れないプロジェクトで考慮するようなことでしかなくて、まして短文合戦、トリッキー合戦になってるこの話題においてこの理由を持ち出すのは微妙だな。
次に、Java では一行にまとめる慣例があまり無い、と考えているから。確かに Java の場合、簡単な内容であっても C のマクロほど頻繁には一行にまとめないと思う。そもそも C のマクロみたいに関数へのジャンプのコストが無くなるという利点も無いしね。それでも if ぐらいは削ってもいいと思うが。
まあ元のコードが一行にまとまってないからそのままにしただけで、最後に C のマクロなら一行にするような内容だわな、と思って一文書き足して、コードは書き換えずそのまんま投稿、ってのが一番可能性高いとは思うけど。
こういうの書くのはお寒いかもだが、あれは半分ネタで半分本気です。増田は滅多に使わないけど、いろいろ意見が聞けて良い。それはともかく
あるあるw自動変数についてはどう名前付けても良いと思います(常識的な範囲で)。
はい。
自分は8タブです。誰がなんと言おうとw三項演算子は使いどころを間違えなければいいんだけどね。自分もJavaScriptを弄くり回していた頃、トリッキーなコードを書きまくってました。
K&Rスタイルですね。
CやC++ではハンガリアン記法は有効だと思いますが、ゆとりプログラマですのでwPython自体はあまり好きじゃないけど、IronPythonはホントに面白い。
新しい行に中括弧を置かないというのは、秀丸のアウトライン解析を利用するためでもあります。でないと正規表現が書けないので。