何でも構いません。
あなたがプログラミングをしていて「理不尽だ」と感じた事を教えて下さい (HTML も含めます)。
例えば、コンパイル前なら完全に動作するにも関わらず、何故だかコンパイルするとエラーを生じてしまうであるとか、
a = b + c と記述したのに、a には b + c どころか z などという考えられない値が…とか、
開発環境として用意されているエディタは何でこんなおかしな仕様なのか、等々。
それが生じた言語やハード、OS も併せて書いて頂けますと幸いです。
※ 但し、依頼者 (クライアント) との間で生じた様な人間的事柄については除かせて下さい
初心者の頃ですが…
PHPで開発をしていて、開発環境なら上手く動くのに本番の環境に持っていくと上手く動かなかった時。
開発環境は本番環境と全く同じに作った筈なのになんで、ってしばらく困っていました。
理由は、開発用サーバ(BSD)→ローカルPC(Windows)→本番用サーバ(BSD)とファイルをコピーする間にパーミッションが書き変わってしまったことでした。
Windowsではパーミッションの概念がちょっと違うのが困ります。
これはありますね~。
私の扱っていたものは金融機関などという大それたものではありませんが、
計算の結果、それがどういう条件で切り捨て/切り上げられるのかについていつも悩まされておりました。
文字コードも厄介ですよね。
全世界の共通語を英語 or 日本語に統一しろっていう位に無理な事も分かるのですが、
その辺りは OS など関係なくひとまとめにしてくれると楽なのにと思ったりもしてしまいます(笑)
perlを良く使うのですが、タイプミス(半角、全角スペースや;:など)や括弧の忘れなど、普通の人間なら、もう少しまともな注意をしてくれそうですが、時々、プログラム全体が可笑しいというような、理不尽な注意しかしてくれないのは結構困りものです。
もしかすると、Perl はそういう所が可愛いのかもしれません!?
といっても、不便っていえば確かに不便ですよね、ええ…(泣)
C#.NETで。
VS上でフォームなどの編集を、グラフィックインターフェイスを通して行っている時は良いのですが、微調整の為に「#region Windows Form Designer generated code」とマークされたコードを少しでも触ると大抵取り返しのつかないエラーに見舞われる。もともと手を入れてはいけないコードだとは分かっていても、グラフィックインターフェイス上からはどうしてもできない変更もあるのに・・・。
iPhone SDK と iPhone Simulator。
シミュレーターと銘打っておきながら、実機とは全くといって良いほど違う動作をするのであまり役に立ちません。
それから、シミュレーターやテスト機で問題なく動作するコードも、配布用にコンパイルしようとするとエラーが出ます。例えば、for(int i=0; i<x; i++)の「int i=0」を前もって定義しておかないといけないなどの厳しい制限が、配布用にはあるそうで。</p>
私は C# と iPhone 関係は触った事がないのですが、こういった珍妙なお話はとても面白く思えます。
はてなにおける質問 & 回答は様々な方が見ている…筈ですから、
きっと経験者の方なら「あるある(^-^)」とか、「え?そうなの?」とか思って下さるのではないでしょうか。
私の知らない世界のお話を伺ってみたかったので、こういった回答はとてもありがたく感じます。
コードそのものではなく、修正依頼が2重化3重化して、結果バグの原因になって怒られること。
こちらは、
> ※ 但し、依頼者 (クライアント) との間で生じた様な人間的事柄については除かせて下さい
に該当してしまう為、今回の回答としては…です。
しかしながら、確かにお気持ちはよくわかります。本当に辛いですよね。
WindowsのAPIで、文字列比較を行なうlstrcmp()というものがあるのですが、これがWin9x系とNT系で動作仕様が異なるためにトラブルになったことがありました。だいぶ昔の話ですが・・・。
大小比較結果から文字列群をソートしていたのですが、同じデータでも9x系とNT系でソート結果が微妙に異なり、その結果データを別のところで「ソート済みである前提」で処理していたため、混在したときに結果がおかしくなったのです。それ以来、自前の全てのプログラムからlstrcmp()を削除しましたw。
Windows API は楽しくもあり、トラブルの原因にもなりますよね。
業務関係のプログラムですとその辺り、何の API なら使っても良いかとか駄目だとか会議が行われたり…。
lstrcmp() を用いた事が無いのですが、なるほどその様な落とし穴があるのですね。
9x 系と NT 系で動作が異なるっていうのもまた珍しいといえば珍しい気がします。
いえ、しかし昔そういった事を他の API でも経験したような気も、
うーん、最近は Windows プログラミングから離れていているのですっかり忘れしまってます、ははは。
変数の値を入れ替えるのに、
tmp = a; a = b; b = tmp;
と3行も書かなきゃいけないのが、理屈としては分かっていても、もやもやした感じだったのが、Perl を始めた頃に
(a, b) = (b, a);
と1行で書けることを知ったときは、ちょっと感動した(^^;
これは「理不尽」ではないので、まるっきり質問の主旨とは違うように思えます。
しかしながら、私はとても感動してしまいした。
ええっ、そうだったのですか、そんな書式があったなんて!?
今回 JULY 様から回答を頂くまで、私もその様な書き方がある事を知りませんでした(^-^;
質問内容とは違うのですが、棚からぼた餅が落ちてきたみたいな感じです。何だかとても嬉しくなってしまいました。
Perl は色々な書き方が可能でそれが柔軟に思えたり、はたまた頭が固くも思えたりもしている今日この頃でした。
全てJavaで経験したこと
(プログラム中の表記ではなく、一般の数学の表記にしていることに注意)
short型の数を足し算すると結果はint型になって返ってくる。(型の制限を超えていなくても。)
まぁ、この辺は仕方ないかもしれない。
同じ理由で、int型で却ってくるらしい。
従って5 / 2 = 2になる。5.0 / 2 = 2.5なので注意。(5.0はdoubleだから。)
doubleをintにキャスト(変換)する際、とにかく「絶対値を小さくする」方に丸めてしまう。
従って (int) 8.3 = 8。数直線を書いてみると何か変なことに気付く。
(int) -8.3 = -9である方がいい。
これらは数学計算用パッケージを使うと大丈夫なんでしょうかねぇ。
プログラムを本当に始めたばかりのころは、バックスラッシュがOSによって出せないことに悩みました。もちろん円マークで代用できるわけですが、参考書によっては載っていたり載っていなかったりします。独学の場合はひっかかる人も多いのではないでしょうか。
=と==の違いくらい空気読んでくれよとperl始めたころはよく思ったものです。
変数の型を定義しなくてもいいのに、数値か文字列かで==かeqを使い分けなければいけないのも最初はわかりませんでした。
・昔、MS-DOSの時代、Cを勉強していた頃感じたのは、Cは文法だけ勉強してもBASICのように実用ソフトは作れないということです。おかげで、ビギナー編、シニア編、応用編で、1組の高い本を3冊も買って勉強しました。
・昔、Cは速いと聞いて使い始めましたが、printfが遅すぎで理不尽さを感じました。後で、友達にフリーのいいライブラリを教えてもらいましたが、vrumputの速さには感動しました。
・昔、Cは速いと言われていたので、Quick BASICで作ったグラフィックソフトを、Cに作りかえてみましたが、あまり速くなりませんでした。後でわかりましたが、いくらCでも、実数計算は遅く、速くするためには、整数化しなけらばならないとのことでした。これに気づくのに1年ぐらいかかりました。
・BASICやC++では、一種類の関数でいいのに、Cでは、引数の型によって関数を変えないといけないこと。
・BASIC系の変数宣言の「dim ~ as ・・・」が、煩わしいです。Cのように、int a,b,c;みたいに、先頭に持ってこれればいいのですが。
・あるIDE付属のエディタの保存文字コードが
自動判別で指定ができないのに自動判別のルールが明記されていない
(ので自分でルールを類推して無駄な文字列を入れる作業が発生)
・4番の方とほぼ同じですが、IDEによる自動生成で「このファイルは修正しないでください」
書いてあるファイルがIDE上から変更できてしまう。個別にメモ帳とかで修正されるなら
ともかく、だったら表示しなければいいのに!
C言語ですが。
よくある話ですがデバッグビルドとリリースビルドで動きが違うことがあるんですよね。
技術的にはコンパイラの最適化がバグってたり(デバッグビルドだと動くけどリリースビルドだと動かない)、または最適化が効きすぎて本来ソース上はバッファオーバーフローを起こすコードがバイナリにしたら起こらなくなってたケース(リリースビルドだと動くけどデバッグビルドだと動かない)なんてのもありました。
最近感じた理不尽なこと紹介です。
http://d.hatena.ne.jp/ku__ra__ge/20081112/p3
かなり意味不明な挙動。
どういう処理で、こういう結果が返ってくるのか理解できない。
http://d.hatena.ne.jp/ku__ra__ge/20081207/p2
IEはよけいなお世話が多いです。
.netから Excel Comオブジェクトを利用するときにExcelを正常に終了させる方法
http://d.hatena.ne.jp/ku__ra__ge/20081104/p1
上記のポストで書いたような処理が必要であること。理由は分からないでもないが開放をユーザが書く必要があるというのはガベージコレクタ装備の言語としてはどうなのか。
(C#4.0で改善されるらしいですが)
EXCEL VBAの仕様についてです。
VBA中でSortメソッドを使うことがあるのですが、これの仕様として
例えば"a"は"a"としてしか判断してくれません。
"A"(半角大文字)、"a"(半角小文字)、"A"(全角大文字)、"a"(全角小文字)
これら全て"a"なので同じ扱いでした。
でも要件によって全て別文字として並べ替えたいことがあります。
なので自分でSORT関数を組んだことがあります。
2回目ですし、微妙に趣旨がずれているかもしれないのでポイントはいりません。
6番の方の回答を見て思い出したのですが、WindowsAPIにバグがあった事です。
ある形式で印刷しようとすると、全然違った形に印刷されてしまいました。
どこをどういじっても指定の形式には印刷できず…
お客さんに頭を下げて仕様を変更して貰ったのですが、なんで自分が悪い訳じゃないのにこんなに謝らなきゃいけないんだろうって思いました。
お客さんにとっても仕様変更が大変だという事情が分かっているから尚更辛かったです。
Visual C++ 2005ですが、各種関数名の最後に"_s"が付いた独自関数が提供されるようになりました。
それは別に良いのですが、"_s"の付いていない、今までの関数を使用すると、コンパイル時に警告が表示されるようになっていました。
言語規格にも入っていない独自関数を使わせる為に警告を出すなんて、MSは何を考えているのかと思いました。
警告を出させなくする方法も用意されているのですが、毎回その為のコードを記述するのも面倒でした。
eclipse2のころですが。CVSがらみで。
.propertiesファイルの日本語を勝手にASCII2BINARYされちゃう。
.CVSの日本語が化ける。
どちらの問題もeclipseの設定をちゃんとすれば解決するのですが、チームでやってると誰かのeclipseがデフォルト設定のままで、一瞬治るけど、またダメになるを繰り返しました。
HTML書いていて、ソースの一部をひとのサイトから拝借した。
本当は半角でかかれていなければいけない部分が全角でかかれていた。
それに気づかずうまく動作せず・・・。
初めまして。
ブラウザによってHTML・CSSの解釈が違ってくる、でしょうか。
あ、JavaScriptも違ってくる場合がありますね。
独自拡張のCSSとかどうでもいいから、
まずはHTML・CSSの挙動を統一してもらいたいです…
あとは携帯でのCSSですかねー…
他のキャリアでは外部スタイルシートが可能なのに、
DoCoMoだけインラインで書かないと駄目でした。
ちょっとしたデザインの変更でも、ページ数が多いと大変でした…
(もしかしたら良い方法があったのでしょうか?)
今は携帯サイト製作に携わっていないので、
現状はわからないのですけど。
C#であるライブラリを使ってソフトを作ったのですが
デバッグモードなら正常に動作したがリリースモードにすると
処理中に落ちてしまいました。
そのライブラリで開いたファイルがつかみっぱなし?になり
処理終了後のファイル削除でアクセスエラーというものでした。
特に言語を限定しないのですが、何も考えずに「12.2 - 12.1 - 0.1」って計算したら誤差ができて 0 にならないです。
(-3.60822483003176e-16ぐらいの数字になりました)
一度経験してしまえば、次からは「もしかして?」と気を付けたりする事もできますが、
納期が切られている様な状況下でこうした事態に遭遇してしまうと困ってしまいますよね。