長期にわたる、誤ったプログラミングの仮定[終了]


281

私は、ジュニア(そしておそらくシニア)のソフトウェアエンジニアが行った一般的なエラーと不十分な仮定について調査しています。

最終的に修正された、最も長く保持されていた仮定は何でしたか?

たとえば、整数のサイズは標準ではなく、言語とターゲットに依存すると誤解しました。少し恥ずかしいですが、あります。

気さくに; どのような確固たる信念を持っていましたか。また、だいたいどのくらいの期間、想定を維持していましたか。それは、アルゴリズム、言語、プログラミングの概念、テスト、またはプログラミング、プログラミング言語、またはコンピュータサイエンスに関する他のことに関するものです。


回答:


545

長い間、私は他の誰もがすべてのプログラミング概念(設計パターン、最新の新しい言語、計算の複雑さ、ラムダ式など)をこのように熟知していると思っていました。

ブログを読んだり、スタックオーバーフローやプログラミングの本を読んだりすると、すべてのプログラマーが直感的に知っておくべきことについて、曲線の後ろにいるように感じられます。

私は、自分の知識を1人の個人ではなく、多くの人々の集合的知識と効果的に比較していること、そしてそれが誰にとっても非常に高い基準であることに気付きました。現実世界のほとんどのプログラマーは、自分の仕事を行うために必要な知識のキャッシュを持っており、弱点があるか完全に無知な領域がいくつかあります。


68
仰るとおり!それがこの時代の問題です。情報も期待外れです。数週間前にこの発見があり、研究に関して(初めてではないが)すべてを完全に失ったように感じました。IEEE Transactionsで論文を発表する人は、Googleで働いている人、StackOverflowを自慢している人、優れた教授を務めている人、優れたプログラミングブログを書いている人と同じスキルを持っているとは限りません。もちろん、優秀な人は私たちよりも指数関数的にクールですが、あなたが知らないことすべてを知っているわけではありません。だから、冷静さを保ちます。
jbasko 2009年

40
また、それらのブロガーが頭のてっぺんからすべてを書いているわけではないことも理解するのに役立ちます。優れたブロガーは自分のトピックを調査し、投稿を書きながら新しいことを学びます。
JohnFx 2009年

47
私は毎日読んで学ぶ時間がないものについて毎日取りつかれています。それは恐ろしい罪悪感を時々私に残します。
ブラッド

9
@ジルペ:アーメン。私はいくつかの国際会議論文とジャーナルを発表しました。一部の人々の目には、それはクールに聞こえました。論文を発表するのにそれほど労力を必要としないことに気づくまで。私たちは天才ではありません。私たちは他の皆と同じです。私たちは間違いを犯し、がらくたの論文を発表しました。まあ、本物の天才の少数のグループを除いて...
Hao Wooi Lim

4
+1これは私が読んだ良いことです。私だけだと思った。
ランデル

308

その人々は彼らが何を望んでいるかを知っていました。

長い間、私は人々と話し合うと思っていました。彼らは問題やワークフローを説明し、それをコードに入れて自動化しました。それが起こるたびに、彼らが望んでいたと思っていたものが実際には彼らが望んでいたものではないことがわかりました。

編集:私はほとんどのコメントに同意します。これは技術的な回答ではなく、質問者が探していたものではない可能性があります。プログラミングだけに適用されるわけではありません。それは私が長年抱いていた仮定でもないに違いないが、それは私がこれをやってきた10年間で学んだ中で最も印象的なことでした。それは私の側では純粋に初心者だったと確信していますが、私の脳が配線されている方法は、ビジネスの世界に入る前に持っていた教えと経験から、自分が答えたことを実行していると思いました。コードとコンピューターを使って人々の問題を解決できると思います。

この答えは、プログラマーではない人が私が話していることを理解/気遣うことについてのロビンのそれに似ていると思います。それは、ビジネスをアジャイルで反復的でインタラクティブなプロセスとして学ぶことです。それは、プログラミングコードモンキーであることとソフトウェア開発者であることの違いを学ぶことです。それは、この2つに違いがあることと、フィールドで本当に優れているということを理解することです。構文とタイピングの速度だけではありません。

編集:この回答はコミュニティWikiになり、この回答に不満を抱く人々をなだめるようになりました。


9
または、彼らが以前に望んでいたものを見た後に彼らが望むものを変更します。人々は心を変えるのが好きです。私は知っている、私は人です。
J. Polfer、2009年

13
あなたは彼らが望んだものではなく、彼らが求めたものを彼らに与えていました。
ブレントベイズリー2009年

47
なぜ退屈で議論の余地のない回答があまりにも多く投票されているのですか?
nes1983

39
ワオ。誰かが抱擁を必要としているように聞こえます。
bzlm 2009年

24
私の神@人々は不満を言っています、stackoverflow担当者は競争ではありません。回答を楽しんだ場合は賛成票を投じてください。最初に投稿しなかったのは嫉妬しているので、反対票を投じないでください。
ドミトリファルコフ2009年

292

パフォーマンスの問題がプロファイリングなしでどこにあるかを知っている


10
これが時期尚早な最適化が非常に一般的な場所である理由だと思います。
Hao Wooi Lim、

10
+1うわー、誰かが取るに足らない、または主題外の答えを含めました。
マークロジャース

3
時期尚早の最適化に役立つタブレットをいくつか持っています...
AndyM、2009

232

関数/メソッドからの出口点は1つだけにする必要があること。


91
優れた実現。必要に応じて終了します。関数をさらに続行する意味がなくなったらすぐに関数を救済する必要があります。これを行うと、たとえば、メソッドが適切に実行されるために必要な前提条件である、深くネストされた条件を回避することで、複雑さを軽減し、読みやすさを向上できます。使用/最終的なようなメモリ管理とリソース構成を備えた現代の言語では、メソッドの最後まで独断的に続けることは意味がありません。
Triynko、2009年

24
ところで、誰がこれを思いついたのですか?それはプログラミング都市の伝説のようなものです。
ブラッド

49
他の人のコードをデバッグしなければならない人は、これを思いついた人です。
gatorfax 2009年

23
これはよくあることですが、間違った考えは誤解に基づいていると思います。関数を終了するときは、常に同じポイントに戻る必要があります。これは、BASICのように強制しない言語では重要な規則でした。たとえば、この規則は、GOTOではなくGOSUBを使用することを意味していました。メソッドを呼び出すC#やJavaなどの言語では、自動的に行われます。しかし、それは自動であるため、論理的な「1つだけの戻り点」から無意味な「1つだけの出口点」に変化したと思います。
ライアンランディ

35
リソースを手動でリリースする必要があるCなどの言語から。複数の出口点は、リソースをリークする良い機会でした。IMOは、例外を除いて、言語を使用しても意味がありません。出口点がよくわからなくなったり、ステートメントの途中にいることがよくあるからです。-これらの言語では、残っているのは「読みやすい構造」だけです。
peterchen 2009年

228

その非プログラマは私が話していることを理解しています。


243
理解/ケア..
nickf 2009年

8
私はまだこれを時々持っています...少なくとも私の妻は今までにきちんと理解し始めているだろうと思っていました:P
workmad3 '21年

3
親愛なる、私はこれをまだ学んでいないのではないかと恐れています!
thatismatt 2009年

3
ええ、時々私は私の聴衆を忘れて、何もない人々が私に向かって階段を上っている自分の顔を見ると、結局、人々が興味を示すのはいいことです
Petey B

3
これは私の職業に対する最大の不満です。
Andres Jaan Tack

219

そのバグのないソフトウェアが可能でした。


35
+1、ただしNASAがほぼ管理していた
パトリックマクドナルド

55
はい、しかし「ほぼ」は数百万ドルの費用がかかります:)
Jem

15
@Triynkoの「可能性」と@JaredParの「可能性」は同じではありません。理論と実践は理論的には同じかもしれませんが、実際には非常に異なります。
ヴィルヘルムテル2009年

13
@Joseph、問題の一部は、Hello Worldプログラムにバグがないと人々が思うことです。そうではありません。ほとんどは、たとえば、printfのエラーをチェックせず、他の失敗したIO試行を考慮しません。
JaredPar 2009年

9
@RussellH、いいえ。戻り値を指定できませんでした。結果のプロセスはランダムなガベージメモリを返します。
JaredPar

199

そのプライベートメンバー変数は、クラスではなくインスタンスに対してプライベートでした。


192
私はその仮定を...今まで保持していました。
TheMissingLINQ 2009年

9
@ebrown通常は、equals()メソッドを作成するときにのみ役立つ
Dave Webb

12
彼らはRubyです。
マイク・クセラ

17
これは私には普通のことなので、この回答を最初に数回読んでも意味がありませんでした。今、私はRubyを学びたいので、逆に混乱させるかもしれません。:)
jmucchiello 2009年

16
@Kiewicクラス内にmyVarというプライベートメンバー変数がある場合、otherがこのクラスのインスタンスである場合、コード内でother.myVarを直接参照できます。「プライベート」であるため、クラス内でもother.getMyVar()を使用する必要があると思いました。
デイブウェッブ

166

静的なタイピングはキーボードの非常に静止していると思いました。


53
誠実であろうとなかろうと、これは長い一日の仕事の終わりに私を強く笑わせました。:P
オリビエトランブレ

5
良い笑いのための++。私の(技術的でない)夫が思いつくようなものに聞こえます。
jess

11
+1!アヒルのタイピングにもタイピングが必要だと思いました。またはアヒル。または両方。
SqlACID

162

開発を始める前に問題を完全に理解できること。


32
私の友人、これは「問題を完全に理解できること」であるべきです。しかし、それは本当です。そして、明らかに理解することも、受け入れることさえ難しい概念です。
KarlP 2009年

4
問題を「完全に」理解することはできませんが、開発を始める前に、問題をある程度理解する必要があります。bit.ly/kLXgL
OscarRyz

問題を理解するために、開発を始める必要がある場合があります。および/または、問題は開発するほど変化します。
エヴァンプライス

158

スマートピープルは常に私よりもスマートです。

私は間違いを犯したときに本当に打ちのめされ、自己非難の声をよく受けます。私は以前、多くの開発者に畏敬の念を抱いて見ていましたが、多くの開発者はXで私よりも多くのことを知っているので、彼らは私よりも多くのことを知っていると思っていました。

私は経験を積み、より多くの人々に会い続けているので、私はしばしば彼らが特定の主題で私よりも多くを知っていても、必ずしもそうではないことに気づき始めました 私/あなたより賢い

ストーリーの教訓持ち込めるものを過小評価しないでください。


いいね!私は現在、.NET開発について多くのことを本当に知っている同僚と働いています。私は顧客が何を必要としているのかを理解するのが得意であることを理解するのに少し時間をかけました。
トレブ

58
一方で、私は他の人よりも多くを知っています。彼らは別のことを知っているだけであることが判明しました。他の教訓:他の誰かがテーブルにもたらすことができるものを過小評価しないでください。
thursdaysgeek、

1
これが古い「他人にやる」ことです...私は新しいフレーズを作り出しました:Tech bulying〜何かを知っているために優れていると感じ、他の人にそれを知らせて間違える状態。@seealso:smartass。
corlettk 2009年

1
優れた観察-私のバージョンはもっと否定的です。「bozo bitをめくらないでください」とある程度関連しています。
peterchen 2009年

2
あなたは愚かな人々があなたより賢いときだけ心配する必要があります。
ブラッドギルバート

131

長い間、悪いプログラミングは縁で起こったものだと思っていました。私は最近あまり世間知らずではありません。


30
私は、悪いプログラムの1つによって行われるまで、悪いプログラミングは他のプログラマーによってのみ行われると思っていました。今私は正しく物事を行います!(今回は私を信じますよね?)
Jared Updike

2
完全に。私は、「決して起こらない」から「この仕事以外では決して起こらない」から「どこにでも悪いコードがある」まで進んでいます。
ライアンランディ

1
ハッキングは標準です。エンジニアリングは真に有能な人の視野です。ソフトウェアエンジニアに会ったらお知らせします。
corlettk 2009年

3
@corlettk:モンキーコーディングが標準であるということですか?ハッキングとは、私が達成するのにはほど遠い、芸術志向の高い芸術です。
hasen

2
@ハセン:いいえ、ハッキングは、斧を木に巧みに取って、実際の計画のない狂ったパニックで小さな片を削り取り、最終的に木があなたの頭に落ちるまで血まみれの大きな混乱を作り出すことのアナロジーです。「ハック」とは、「商業的な成功を期待して平凡で平凡な仕事を生み出す人」です。コンピュータ分野が「熟練」を意味するように「ハック」を変更したのはなぜか、私にはわからないでしょう。
ローレンスドル

113

できるだけ抽象化する方がいいと思いました。機能が少し絡み合っているので、私はこれで頭がメジャーになりました。

今、私は物事を可能な限りシンプルかつ分離した状態に保つようにしています。抽象化するリファクタリングは、抽象化する方法を予測するよりもはるかに簡単です。

したがって、私はそれらすべてを支配するフレームワークの開発から、仕事を成し遂げる機能のスニペットに移行しました。自分が次の大きなものを開発するのは自分だと単純に思ったときを除いて、決して振り返らないでください。


26
分離=真の抽象化。それ自体の要約は...時期尚早の最適化です。
Jared Updike、

1
これは、パフォーマンスチューニングを行っているときにわかったことと一致しています。複数の抽象化レイヤーを持つ素敵なプログラムが存在する可能性があります。次に、ワークロードが重くなり、常に何がコストになっているのかを推測します...すべての抽象化。コンピュータは、抽象化ではなく命令を実行します。
Mike Dunlavey、2009年

5
抽象化と一般化は強力なツールであり、悲しいことに、単一の実装で抽象ユースケースを一般化するために使用されます。面白いことに、実装を変更する必要があるときはいつでも、抽象化と一般化も変更する必要があります...
KarlP

Jaredに完全に同意します。「シンプルで分離された」状態になった場合は、真の抽象化を実現しています。インターフェースやファクトリーなどに抽象化していない場合、どのようにして分離することができますか?「type = thisの場合はこれを行うか、typeがその場合は別のコードを実行する」をすべて削除しない限り、どうすれば簡単ですか?
Richard Anthony Hein、

こっちも一緒。スパゲッティコードをたくさん作るに、抽象化について学んだと思います。彼らは物事はコードがスパゲッティの場合でも行われ、取得する方法を教えたはずその後、 OOと抽象化についての私達に教えています。
09年

103

その女性はコンピュータープログラマーをセクシーだと思います...


70
一瞬待って???
ÇağdaşTekinの

4
彼、彼、彼、、、オーケー、私はその日の残りのために私の笑顔を保つために何かを探していました。見つけたと思います!!! :)
OscarRyz 2009年

17
「ああ、ベイビー!ええ、 'if'と言って-私にいくつかの例外を投げて..ええ、あなたはそれがどうやって欲しいのか知っている」:P
cwap

5
何?プログラマーは金持ちですか?これはいつ起こりましたか?
フィリップナバラ

3
一部の女性(正しい種類)は、洞察力に富んだインテリジェントな男性に惹かれています。これは、プロトタイプの首ひげとソーセージガットを差し引いたもので、プログラマーのかなり一般的な特性です。自己イメージ/衛生への少しの懸念とエクストリームスポーツの時折のスリル/興奮に振りかけると、あなたは順調です。
エヴァンプライス

100

ソフトウェアの品質が売り上げの増加につながること。常にそうであるとは限りません。


37
ソフトウェアを販売していますか?それはそう1999
。– bzlm 2009年

現在、多くのサブスクリプションベースのWebサイト...
cgp '05 / 5/20

11
マイクロソフトは確かにそれを殺している。
ビルマーティン

これが大好きなので、本当です。
dr。邪悪な

18
私は、私たちのソフトウェアの品質/パフォーマンスを向上する機能としてカウントすることを望む
トム・Leys

82

すべての言語が(ほとんど)平等に作成されていること。

長い間、選択した言語が開発プロセスの難しさとプロジェクトの成功の可能性に大きな違いをもたらさないことを理解していました。これは間違いなく真実ではありません。

仕事に適切な言語を選択することは、他の単一のプロジェクト決定と同じくらい重要/重要です。


13
適切なライブラリを選択することが重要だと思います。ちょうどので、言語やライブラリ間の1対1の対応が...頻繁にありますが起こる
ケビン・モントローズ

7
しかし、2つのプログラミング言語が両方ともチューリング完全である場合、違いは何ですか?どのプログラムもどちらの言語でも作成できます。;)
トカゲに請求

8
どちらの言語を使用するかの決定は、実際にプロジェクトを実装する人よりも重要度が低いです。他の多くのより重要な決定のほんの一例として。
Boris Terzic 2009年

13
BrainFu **はpythonと同じように完全なチューリングです。
09年

9
チューリング完全言語が何らかの形で同等に適用できるということは、よくある誤解です。チューリング完全言語は、チューリングマシンが実行できるすべてを計算できます(また、多くの場合、その逆も含まれます)。パフォーマンスに関する影響はまったくありません。ある言語で線形時間がかかる操作は、別の言語では指数関数的に非常に時間がかかり、両方ともチューリング完全である可能性があります。理論的に計算可能なものと実際に実行可能なものとの間には大きな違いがあります。
TrayMan、2009年

81

コメント/コード比が大きいのは良いことです。

コードは自己文書化する必要があることを理解するのにしばらく時間がかかりました。確かに、ここのコメントは、コードを明確にできない場合や、何かが行われている重要な理由がある場合に役立ちます。ただし、一般的には、変数名の変更にそのコメント時間を費やす方がよいでしょう。よりクリーンで明確になり、コメントがコードと「同期しなくなり」ません。


1
実際のコードに同意ます... javadocコメント(または同等のもの)を除きます。
corlettk 2009年

11
+1、私が10行の関数を記述していた論文を書き始めないでください
wds

これに追加するには、前提条件/事後条件を文書化するよりもassert()ステートメントの方が優れています。.NET 4コードコントラクトも自動的にドキュメントに変換できます。
Robert Fraser

66

そのプログラミングは不可能です。

冗談ではなく、プログラミングを学ぶのは不可能だといつも思っていました。そして、私がコードに近づいたとき、私はそれを理解できませんでした。

それからある日、私はただ座って、いくつかの基本的な初心者向けチュートリアルを読んで、そこから自分の方法で作業しました。そして今日、私はプログラマーとして働いており、そのすべてが大好きです。

加えて、プログラミングは簡単だとは思いません。それは挑戦であり、もっと学ぶことが大好きで、プログラミングの問題を解決することほど楽しいことはありません。


7
アーメン!しかし、ちょっと、屋上からこの眺めを宣言しないでください。私たちはもがプログラミングが楽しいことを知ってほしくないのですが、今はそうですか?;); P
PeterPerháč2009年

9
マスターピーター:彼らが質問をしてここに来たときに私たちの担当者を増やすことが私たちにより多くの飼料を与えるでしょう。
TheTXI 2009年

4
プログラミング正しく行うの難しいと思います。しかし、それはあなたの主張のように思われます。
スティーブS

4
@Olafur:なぜあなたは質問をwikiにしたいが、あなたの答えは欲しくないのですか?
gnovice

2
これは私の経験を正確に反映しています。今すぐ始めたい:P
スキルドリック09年

65

「On Error Resume Next」はある種のエラー処理でした


6
私はあなたを感じます...しかし、vbscript(esp。asp)では、それは利用可能な唯一の「エラー処理」オプションであり、エラーが実際に発生したかどうかの慎重なチェックとかなりの量の祈りが組み合わされていました。
フラットライン

2
うん...それはある種のことです...私たちが逃げるのを喜んでいるだけの種類です
マシュー・ホワイト

6
上手?!しかしそうです。On Error Resume Nextでエラー処理ブロックを開始し、何かを試してから、If(err.number <> 0)then
jpinto3912

これは、try catchに相当する唯一のvbscriptではありませんか?
ジェームズ

-1:これは一種のエラー処理です。それだけではエレガントではありません。
JohnFx 2009年

64

そのプログラミングソフトウェアには、より高度な数学の強力な基盤が必要です。

コーディングを始める前の何年にもわたって、優れたプログラマーになるには、高度な代数、幾何学、微積分学、三角法などが得意である必要があるといつも言われていました。

10年後、8年生ができなかったことを1回だけやらなければなりませんでした。


5
とても本当です。ほとんどの場合、数学の専門家である必要はありません。高度な数学を知る必要があったのは、3Dプログラミングを趣味として行っていたときだけです。実際、実際に高校の3Dプログラミングがきっかけとなって、トリガークラスやプレコールクラスでもっと注意を払うようになりました。それ以外は、通常、非常に基本的な数学で十分です。
スティーブウォーサム

29
あなたは誤解されていたと思います。もちろん、優れたプログラマーになるためには、はるかに高いレベルの数学を使用する必要はありませんが、特定のコンピューターサイエンスの概念を本当に理解して適用するには、8年生以上の数学が必要になります。
hbw 2009年

12
数学の重点は、クリティカルシンキングスキルと問題解決を、毎日のコンピュータプログラミングで使用するものとしてではなく教えることだと思います。
ザック

14
高度な数学を理解するために必要な抽象化の種類は、ソフトウェアを作成するために必要な抽象化と非常に似ています。
OscarRyz、2009年

6
関数型プログラミングの概念は、もしあなたが数学にもっと強い基礎があれば、構文にそれほど怖がらないからといって、はるかに理解しやすいと思います。おなじみのようです。単純な数学関数を使用して、C#の新しい関数型プログラミングの概念を実証するのは間違いでした。一部の人々はそれが複雑すぎるとすぐに宣言しました。
Richard Anthony Hein、

63

その最適化==アセンブリ言語での書き換え。

(BASICからの)アセンブリを最初に本当に理解したとき、コードをより高速に実行する唯一の方法は、アセンブリでコードを書き直すことでした。コンパイラーが最適化に非常に優れていること、特に分岐予測などを備えたCPUを使用する場合、コンパイラーはかなりの時間をかけて理解できるようになるまでにかなりの年数を要しました。また、アルゴリズムの最適化に時間を費やす方が、高水準言語から低水準言語に変換する時間を費やすよりも有利になる可能性があります。また、その時期尚早な最適化はすべての悪の根源です...


8
ピークとポケはあなたの友達です:)
マシュー・ホワイテッド

4
変態!それを裁判官に言ってください!
Shalom Craimer 2009

1
これが複雑性理論の出番です。アセンブリは一般にマイクロ最適化です。アルゴリズムの時間の複雑さを小さくすることで、速度が向上します。
PeteT 2009

@scraimer:ここであなたに会ってファンシー、私はそれを期待したことはなかったでしょう;-)
ロバートS.バーンズ

@マシュー-"ピークとポケはあなたの友達です:)":**私は最初にそれを書きませんでしたね。
FastAl、2010

63
  • 会社の幹部がコードの品質を気にすること。
  • その行が少ないほど良いです。

2
彼らは気にしますが、アーティストのスキルと労働者のスキルを組み合わせる必要があります。アルゴリズムのすべての部分も芸術であるはずがありません。一部はふくよかになるので、「あまり使われていない」ものを再利用してください。古い80/20ルールを思い出してください。プログラムの80%が20%の時間使用されます。したがって、コードの20%に80%を集中させ、その真の芸術を作りましょう!:OP
BerggreenDK 2009年

71
少ない行が良いです!言語としてjavaが嫌いな理由の1つは、何をするにも非常に多くのコード行を必要とすることです。コードの行数が少ないほど、コードの変更が簡単になります。
Claudiu

7
これは、削除する行に応じて、何を削除するかによって異なります。コードがまだ少ない行で読める場合は、それは良いことです。ただし、コードの行数を減らしてコードを悪化させる方法はたくさんあります。
ハームス

2
チェーン化されたメソッド呼び出し7で「行が少ない方が良い」という考え方を遠くまで行った場合を除いて、そのうちの1つがnullポインターをスローしたときに、それが何であったかわかりません。または、非常に多くのアクションを1行に凝縮し、長さが150文字で4つの操作を実行します。これにより、読み取りとデバッグの両方が困難になりますが、実行速度が速くなることも、実行時に使用されるメモリが少なくなることもありません。
トランパスカーク

17
行が)))))で終わり、Lispを作成していない場合、行が少なすぎます。

58

日付の年の要素を2桁で格納することは、全世代の開発者を悩ませた仮定であったと思います。Y2Kに吹き込まれたお金はかなり恐ろしいものでした。


1
これは私が
賛成票を投じる

4
IIRCの一部のシステムは60年代に遡り、70年代はメモリ使用量が少ないため、1桁しか使用していませんでした。「196_」と「197_」がプレプリントされた紙のフォームを見たこともあります。
いくつかの

3
200_のフォームがまだ表示されますが、おそらく201_が印刷されたフォームがいくつかあります。
Macha 2010

5
悲しい部分は... 2038年にUnixがこれで2回目のラウンドを迎える
エヴァン・プライス

4
@ビリーマシンのアーキテクチャが変更されたからといって、データ形式が変更されるわけではありません。int形式で2桁の解像度を格納すると、バイト(8ビット)日付形式になりますが、2kの32ビットハードウェアアーキテクチャマシンのトンに影響しました。これは、低レベルのハードウェア担当者にデータ形式を指定させない理由のもう1つの例にすぎません。彼らは、遠い将来に予定されたSNAFUが存在するであろうという知識で少しをピンチします。
エヴァンプレイス

57

挿入/バブルソート以外のことは、非常に単純なダークマジックでした。


ハハ、家の近くにあるので、私はこれが好きです。n二乗時間よりも速くソートしますか?不可能!
ロス

再帰と分割統治の強い感覚が得られると、単純で明白なほとんどのソートアルゴリズムがどのように見えるかは驚くべきことです。それまではほとんどの人が黒魔術のように感じます。
ブライアン、

74
私はソートアルゴリズムの研究者です!そして、彼らはまだ闇の魔法のように感じています。
SPWorley、2009年

14
私のプログラムには以前、長くて複雑なコード行があり、それを分解したり説明したりする気がなかったので(いくつかの複雑なライティング式でした)、1行にまとめて#define ' dそれはDARK_MAGICKであり、唯一のコメントは、ダークマジックの謎を解明しようとすることに対する警告でした
Alex

2
ボゴソートはそれらすべての中で最も神秘的です。
Alex Beardsley、

50

そのXMLは、真に相互運用性があり、人間が読み取れるデータ形式になります。


7
XMLは万能薬ではありませんが、リレーショナルデータを単一のcsvファイルに圧縮しようとするアプリケーションを定期的に目にした時代には戻りたくありません。
Tony Edgecombe

4
これは相互運用可能な構文です。その構文は、多くの場合、ソリューションの最も重要でない側面です。
Simon Gibbs、

2
+1、ウィッシュリストに小さくて速いものを追加することもできます。
MarkJ 2009年

1
確かに、ドキュメントがないとねじ込まれているcsvと固定長に対する改善。
PeteT 2009

7
データ形式にもたらされた標準化と、文字エンコーディングを正しく処理するためのXMLが大好きです。ただし、XML を使用して時々行われることは嫌いです。
ヨアヒムザウアー

48

そのC ++は、本質的に他のすべての言語よりも優れていました。

これは私が大学で数年前に友人から受け取ったものです。私はそれを恥ずかしいほど長い間持ち歩いていました(今は赤面しています)。それを2年かそこらで働いた後だけ、私は彼らが何であったかの亀裂を見ることができるようになる前でした。

完璧なものはありません。完璧なものはありません。常に改善の余地があります。


5
「より良い」は、あなたに嫌いではないコメントをたくさんもたらします。しかし、私はそれが最も速く実行され、柔軟性があり、ハードルのないものの1つであると思います。また、同じアプリを多かれ少なかれ実行できることがわかっただけで、若者が適切に学習できるようになります。(いくつかの追加のトンまたは2つの発電用石炭が必要ですが)javaまたはC#を使用します。
jpinto3912 2009年

@JP:私は自分の言葉の選択に満足しています:)
Binary Worrier 2009年

ビジネスアプリケーションの世界では、生産性はより重要です。もちろん、c ++が必要である唯一の選択肢がいくつかあります。
Shaw、

7
C ++プログラマーが遭遇する種類の問題は、Cプログラマーが遭遇する問題よりもはるかに複雑であるため、C ++は通常のANSI Cよりも悪いと常に思っていました。
Nosredna 2009年

1
実際、他のどの言語よりも優れている言語はCommon Lispです。C ++は悪くありません。
David Thornley、

47

プログラムを作成することは、クラスで教えられたものとまったく同じだと信じていました...あなたは人々のグループと一緒に座って、問題を乗り越え、解決策を考え出すなどしています。代わりに、現実の世界は「ここにあります私の問題、私はそれを解決する必要があります。」そして10分後に別のものを手に入れ、効率的にソリューションを計画するためのリアルタイムがなくなります。


24
それが人生だと思います。
ロビン・デイ

9
うーん..それはあなたがその会社を救済する時です。..
jpinto3912 2009年

8
@ jpinto3912:いいえ。次の会社も生活の一部になるためです(前のコメントを参照)。
トレブ

42

主流のデザインパターンを考えたCSクラスで導入されたとき、は素晴らしいました。それまでは、趣味として約8年間プログラミングをしていたのですが、優れた抽象概念を作成する方法については、本当によく理解していませんでした。

デザインパターンは魔法のように感じられました。本当にきちんとしたことができます。後で関数型プログラミングを発見し(Mozart / Oz、OCaml、後でScala、Haskell、Clojureを使用して)、言語の表現力が十分ではなかったため、パターンの多くが単なる定型文または複雑さであることがわかりました。

もちろん、ほとんど常に何らかの種類のパターンがありますが、それらは表現力のある言語ではより高いレベルにあります。今はJavaで専門的なコーディングを行っていますが、パターンマッチングや高次関数の代わりに、ビジターやコマンドパターンなどの規則を使用しなければならないときは本当に痛いです。


「言語の表現力が十分ではなかったため、パターンの多くは単なる定型文、または追加の複雑さでした。」表現力は、単に言語に組み込まれた定型コードです。
不明

4
正しくありません。高階関数の場合のように、プログラマーの機能を制限するのではなく、ファーストクラスのものを用意するのはどうですか。Lispは、この美しい例です。
エガガ

38

最初の数年間はプログラミングをしていましたが、1 Kバイトは技術的には1024バイトであり、1000ではありませんでした。データファイルのサイズが予想したものから少しずれているように見えるという事実にいつも少し戸惑いましたあります。


114
ハードドライブメーカーはまだに引っ掛かっていない...
マイケル・マイヤーズ

10
@mmyersハードドライブのマーケティング担当者ですか?または、ドライブは実際にそのように構築されていますか?
インスタントスープ09年

16
ねえ、キビ嫌いをやめて。MeBiとKiBiは少なくともunbambiguobusです。
bzlm 2009年

21
Kiloは1000を意味し、Megaは1000000を意味し、Gigaは1000000000を意味します。問題を引き起こしたのはRAMとOSのメーカーであり、ドライブのメーカーではありません。
マークランサム

39
誰もやらないの?マジ?さて、私はそれをやる... xkcd.com/394
エリック・フォーブス

36

その状態は次のようにチェックされます:

if (condition1 && condition2 && condition3)

不特定の順序で実行されます...


15
どの言語で?C / C ++、Java、Pythonなどの言語は、条件が左から右に評価され、評価がfalseを返す最初の条件で停止することを保証します。これは言語仕様の一部です。他のほとんどの言語でも同じことが保証されると思います。
クリントミラー

44
@クリント:ええ、それで「それは間違っていることが判明しました」。
bzlm 2009年

ええ、これはかっこいいです if(myList!= null && myList.Count> = 0){do stuff();}のような書き方がずっと簡単になります
Zack

4
実際、これは言語に依存し、&はすべての条件を評価します(ショートカットではありません)。そして、多くの人がAn​​dAlso(&&)の代わりにVBでAnd(&)を使用しているのを見てきました
Lucas

2
。。。あなたはルーカスコメント再AndAlsoを使用しない限り、実際にはあまりにもVB.netでクラッシュします
バイナリ心配性

35

私がそれを一人で実行した場合、私のプログラミングはより速く、より良いでしょう。


しかし、おそらくあなたのコードを除いて、ペアプログラミングと同じくらい醜くはできません
Egg

33
それはすべて他人に依存します。=)
JohnFx 2009年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.