「世界一IQの低い」ソースコード 118
ストーリー by hylom
定期的に出てくる酷いコードの話題 部門より
定期的に出てくる酷いコードの話題 部門より
Twitterに投稿された、「世界一IQの低いソースコード」が話題になっている。
このコードは書籍にサンプルコードとして掲載されたもので、延々とif~else文が続くというもの。とはいえ、プログラミングの初心者が書きそうなコードではある。
Twitterに投稿された、「世界一IQの低いソースコード」が話題になっている。
このコードは書籍にサンプルコードとして掲載されたもので、延々とif~else文が続くというもの。とはいえ、プログラミングの初心者が書きそうなコードではある。
目つきのヤバい少年がナイフをシュッ・シュッと振り回しながら街を徘徊している情景が目に浮かんだ -- あるセキュリティ専門家
手抜きのできない奴はプログラムをやるべきではない (スコア:4, 興味深い)
とはいうものの,プログラム自体,
2KB~8KBぐらいのBASICから始めてるから
無駄で冗長なものが許せないだけなのか。
プログラムの初心者に教えることは
「ラクをしろ」
「ロジックにデータを混ぜんな,外に出せ」
「サブルーチンでうまく使い回せるように(関数はまあ,後だ)」
ぐらいなもん。
まあ,else if を3回ぐらい繰り返したあたりで,
「もっと良い手があるんじゃないか」と考えることができなければ,
日曜プログラマすら向いてないような。
とはいえ,小学6年生にArduinoをどう教えるか,
と入門書もどきを作る羽目になっていて,その辺の信念も揺らいではいるがw
(ラクに教えるなら,Arrayとかは抜きにしたほうが早いから)
Re:手抜きのできない奴はプログラムをやるべきではない (スコア:2)
深い意味はない(自分語りだと思うなら無視しろよw)。
短いソースを書くことが善,ってこと自体が
昔の限られたリソースで育ったからかなあ,と。
Re:手抜きのできない奴はプログラムをやるべきではない (スコア:2)
メンテも込みで「ラク」を目指せると吉。
でも,それはさすがに初心者に無理。
デバッグの段階で「こりゃダメだ」と一度経験すれば,多少は気を付けるというか。
メンテしにくいコードといえば,件のサンプルコードがまさにそれっすよね。
Re:手抜きのできない奴はプログラムをやるべきではない (スコア:2)
まあ,コピペで済ませるなら,
せめて筋のよいものをコピペしたいよね。
(ツイートで言ってたリフレクション使った奴とか)
入門書でelse ifがエンドレスしたコードを
「アリ」として紹介するのは害悪以外の何者でもないですねえ。
真似されたら困るなあ。
Re:手抜きのできない奴はプログラムをやるべきではない (スコア:2)
行数も稼げるし時間もそれなりに経過してゆくから、これこそが楽して給料をもらう手法。だったりして
システム開発に従事して11年目 (スコア:3)
Re:システム開発に従事して11年目 (スコア:2)
擁護するつもりは毛頭ないが (スコア:2)
初心者向けならこれでいいんじゃないかね?
イベントクラスやらAPI使えばラクだけど初心者にはそこからまず説明しないといけないわけだし
古い本ならバージョンごとのことを考えるとイベントが用意されていないときのことも考えてローテクで泥臭い手法で実装するなんてことは別に珍しくもないわけだし。
# ちなみにハゲではありません
# が、将来にわたってハゲでない保証もありません
羅列よりもスペースがあるべき所に無い方が気になる… (スコア:2)
最近の人はK&Rとか読まないんだろうね。
このコーディングスタイルは気持ち悪くて、ソース整形ツールで直したくなる。
昔メンテしたコード (スコア:2)
Xのイベント処理が延々3000行以上(もしかしたら、もっとだったかも。)。(X toolkitは使われず、全部Xlib)
違う会社の人が書いたコードのため、「もう捨てましょう」とも言えず…
あ、当然、まともに動きませんでしたよ。どうしてもって部分を、修正してお茶を濁しました。
のけぞる本 (スコア:2)
のけぞる本リストに追加しておいたら初学者の人の参考になるんじゃないですかね
もしかして高速化のため? (スコア:1)
最適化の期待できないVMで高速に動かすためのテクニックだったりして。(たぶん過去の遺物だと思うけど)
# 組込機器のjavaでリフレクション使って怒られた経験から。
notice : I ignore an anonymous contribution.
Re:もしかして高速化のため? (スコア:2)
それにしたって、「自動生成されたコードがこうなってました」ならまだしも、こんなの手で打ち込むとかありえないでしょ。
Re: (スコア:0)
最近はCD-ROMが添付されたり記載されたURLからダウンロードできたりしないのか?
Re:もしかして高速化のため? (スコア:1)
ちなみに現在(API12(Android 3.1)以降)は、標準で変換できるKeyEvent#keyCodeToStringという専用メソッドが用意されてるので、それなりに需要はあったのかなーと
http://developer.android.com/reference/android/view/KeyEvent.html#keyC... [android.com]
予想通り (スコア:1)
予想通り小飼がtwitterコメントに湧いてて笑った
Re: (スコア:0)
twitterコメント?
基礎から (スコア:1)
Re: (スコア:0)
Android SDK関係ねえし
もしかしてエンドレスエイト (スコア:1)
「プログラム」の初心者向けということなら、まず if else の羅列を見せてうんざりさせてから switch を教えるというのはありだと思う。
大昔、私が初めて「プログラム」という仕掛けを知った時の本(多分ブルーバックス)での BASICの説明がこんな調子だった、多方向分岐も条件ループも IF文とGOTO文だけのプログラムで動きを示してから、ON だの FOR だのそれぞれの構文を示していた。
Re:もしかしてエンドレスエイト (スコア:2)
ややズレますが、switch文 という話だと、『単純に置き換えていい』と思わせちゃっていいのかな? と:
Stringとかオブジェクト類 だと、ちょっと意図と変わりますよね (中身でなく、同一インスタンスかどうか の比較だから)。
こういう状況で 文字列比較したいわー というとき よくありますけど、
Javaのswitchだと その周りの理由で 正しく中身の比較 にならなかったと思います。
//まあ、『==』をまんま置き換えてるだけなので、Javaの『==』の仕様ですが。
//JavaScriptだと 比較とか型とか適当だから 勝手に合わせて 中身の比較にしてくれたりしたような。
比較周りの話で教えるべき かもしれませんけど、意外とswitch あんまり簡単でもないよなー、と。
//数ページずらー が ないわー;とは思います(;^ω^)
Re:もしかしてエンドレスエイト (スコア:1)
>「プログラム」の初心者向けということなら、まず if else の羅列を見せてうんざりさせてから switch を教えるというのはありだと思う。
それでも3回繰り返したらわかりそうっすね。
Re:もしかしてエンドレスエイト (スコア:1)
なるほど
だからsync; sync; syncと3回繰り返すんですね(多分違う)
Re:もしかしてエンドレスエイト (スコア:1)
そして "halt"へ
Re:もしかしてエンドレスエイト (スコア:1)
2回までは理由あります。
1回目のsyncがブロッキングコールなので、2回目が走るときは1回目が終わってることが保証されたはず。
3回目の理由は知りません。おまじない?
#これ、特定の実装に依存して「3回」じゃないのかなぁ?
#STOP-A sync は書き込み終わるまで帰ってこなかったような
文句を言う資格のある奴はより良い案を出した奴だけだ。 (スコア:1)
Re:文句を言う資格のある奴はより良い案を出した奴だけだ。 (スコア:1)
> 2行で書けた ^^/
だが待って欲しい。
それを2行と言うなら、原典は1つのif文だから1行ではないだろうか。
keyCodeがsignedで負値だった場合への対応とか、想定外の値をとった場合の対応が必要そう。
8bitの時は全パターン網羅しておくのも大した手間じゃなかったが、
16bit以上で網羅は・・やったことはあるんだけどw
Re:文句を言う資格のある奴はより良い案を出した奴だけだ。 (スコア:1)
Eclipse: 129個のエラーがあります。
svn-init() {
svnadmin create .svnrepo
svn checkout file://$PWD/.svnrepo .
}
Re:文句を言う資格のある奴はより良い案を出した奴だけだ。 (スコア:1)
疑問 (スコア:1)
このソースをコンパイルすると、ちゃんと最適化したコードをはいてくれるのだろうか?
ここは (スコア:0)
AndroidX.hを作るしかないですね :)
# ってNDKで組むわけではないだろうに・・・
リフレクション(笑) (スコア:0)
それ以前の問題だから(笑)
Re: (スコア:0)
湧いてる連中もIQ低すぎだな
Re: (スコア:0)
全体を見たわけではないがおそらく
記述するのも不要なレベル
これだけではなんとも (スコア:0)
読者がこの段階ではまだ本当の初心者で、テーブルなんかを導入する前にとりあえず動くものを出して慣れさせているのかもしれない
処理は明確だから、書籍で4ページも費やしていること以外はそんなに悪くないような気もする
Re:これだけではなんとも (スコア:2)
もしかしたら、写経とかそういう修業の一環なのかもしれない。
打ち込む作業は写経だったのですね (スコア:2)
ソースコードを打ち込む作業は写経だったのですね。
1982年当時「はるみのゲーム・ライブラリー」PC-8001版 BASICをコツコツ写経しましたよ。
ところで今は21世紀なのに復刻!はるみのゲーム・ライブラリー(P8版) [applion.jp]が
iPhone用アプリ(400円)として販売中です。お笑いネタとして400円出す人もいるかもしれない。
(当時BASICのプログラムを「ソースコード」と呼んでいなかった気もしますが記憶あやふや)
Re:打ち込む作業は写経だったのですね (スコア:1)
昔、友達がX68000を持っていてゲームを何本も持っているがユーティリティは何もない状態だったんで
「X68000のユーティリティを集めた本を売ってるよ」と言ったところ、
「あれって自分で打ち込まなくちゃ(写経)ならないんだろう?」との返事で
「いや、FDが付いてるんでそこからコピーするだけだよ」ってことで導入させたことがあります。
らじゃったのだ
2軍のファンタジスタ
Re:打ち込む作業は写経だったのですね (スコア:1)
すげー、芸夢狂人さんとか思い出したけど、あちらだと版権絡みそう。
#kanimiso って誰が作ったゲームか忘れたけど面白かった。
Re:これだけではなんとも (スコア:1)
16進ダンプを延々入力してたI/O読者には遠く及ばない。
Re:これだけではなんとも (スコア:1)
確かにアレは写経異常じゃなくて以上だ。
でも、チェックサムがあるだけDQ2復活の呪文よりはましかもね。
#むやみにオフトピ
Re:これだけではなんとも (スコア:1)
あれ、あったっけ?
復活できなくて悔しかったあの夜・・・
Re:これだけではなんとも (スコア:1)
Re:これだけではなんとも (スコア:1)
>書籍で4ページも費やしていること以外は
テーブルを使わないということじゃなくて、サンプルコードとしてこげなものに4ページをも費やしたこと自体が問題ということじゃあ。
(1ページや2ページならともかく)
Re:これだけではなんとも (スコア:3, すばらしい洞察)
Amazonで調べて見たところ、件の書籍はこれですよね。
⇒ http://www.amazon.co.jp/%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E5%AD%A6%... [amazon.co.jp]
# ダウンロードサイトの方は、こちらでしょうか。
# ⇒ http://www.ks-pro.org/Home/candr-android [ks-pro.org]
表紙のイメージ(2枚目の方)で『開発環境の構築から配布までを、具体的なサンプルの作成
を通じて開発手順を解説』とあるので、少なくとも利用する言語については知識があること
を前提としていると考えて差し支えはないでしょう。
したがって『if-elseだと面倒なので、switch-caseとかテーブルを使いましょう』等の言語
に関する説明を行う意味や必要が無いので、『単に著者が普段書いているものを出した』と
考える方が自然だと思います。
# わざわざ書く必要があると思っているならば、それはそれで別の意味で問題ですが。
これを踏まえると、『著者が(Javaを含め何かを)理解できていない』『著者が人にものを教
えられるほどの実力(プログラミング含む)がない』にも関わらず、Androidの話題性に便乗
して書いたとしか、私には思えません。
むろん、編集は書籍の専門家であり、コンピュータの専門家ではない方が自然だと思います
ので、中身の検証は期待できないでしょうし。
# 他の書籍でもこの様な事を見かける事がありますが、Cで言えば『`#include '
# はおなじない』とか、中身を理解出来ていないか、きちんと説明できないのに書いている
# ようなものを平気で出しているのと同じ…と言う事では?
Re:これだけではなんとも (スコア:1)
この人フォローしてますが、フリーランスで他社で新人研修したりもしてるみたいなので、(教材として)初学者向けの本を買ってみることはおかしくないです。
Re:だめなコード見てどうこういうのではなく (スコア:1)
> 優れたコードを見て感じ入るほうがよくないですかね?
優れたコードを見て感じ入るってのは、達人への道なんだよね。そうじゃない人は優れたコードのどこが凄いのかが全く分からない。そして世の中、そうじゃない人が大多数だったりする訳だ。
Re:だめなコード見てどうこういうのではなく (スコア:1)
まあtwitterだからなんだこりゃと思った感情を何も考えずにそのまま書いたんだろうけど
とはいえそういうなにげないコメントから人間性とか考え方が透けて見えてきちゃうところが
バカ発見器と言われるところですな
Re:だめなコード見てどうこういうのではなく (スコア:2)
Twitterでもコメント(発信者にRT)したんだけど、Amazonの☆2のレビュー見たらもっとひどいことが書いてあったんだな・ω・
http://www.amazon.co.jp/product-reviews/4863540450/ie=UTF8&filterB... [amazon.co.jp]
『Android開発にあたって購入したが、リフレクションを使えば10行程度で書けるコードを
6ページにまたがるelse ifの山で記述したサンプルコードを見た瞬間に投げ捨てた。』
『実際に読んでいくと、一つ一つのつながりが無く
何をどうしたら、こうなるのかというのが、全くと言って良いほど解らない本でした。』
『本書内での加速度に対する記述(理解)が一貫して誤っている
(加速度センサーに関するコーディングの間違いではなく、加速度という物理量の次元や、極基本的な物理的意味を一貫して誤解して記述されている)。
力学の教科書ではないとはいえ、これは別の意味で大問題である』
『既存スケジュールを上書きして登録してしまう、割と大き目のバグ。
サンプルコードにかなり痛いバグが残っているのは、この手の書籍にとっては致命的だと思います。』
逆を突き詰めた珍書ですねw (スコア:2)
あれ,そんなにひどかったっけ(棒)
まあ,少年時代,手に入れたわけですが,
実践できなくて,「ああ,おれは駄目なんだ」と悩んだことすらありますw
純真ですね。今だったら叩きつけてると思います。