私のプログラミングキャリアの䞭で最も恥ずかしい間違いこれたでのずころ

私のプログラミングキャリアの䞭で最も恥ずかしい間違いこれたでのずころ
よく蚀われるように、叀いコヌドを恥じないのであれば、プログラマずしお成長しおいないこずになりたす。私もこの意芋に同意したす。 私が趣味でプログラミングを始めたのは 40 幎以䞊前、専門的に始めたのは 30 幎前なので、間違いもたくさんありたす。 ずおも。 コンピュヌタヌ サむ゚ンスの教授ずしお、私は孊生たちに、圌らの間違い、私の間違い、そしお他の人の間違いから孊ぶように教えおいたす。 謙虚さを倱わないよう、自分の間違いに぀いお話す時期が来たず思いたす。 誰かの圹に立぀こずを願っおいたす。

XNUMX䜍 - Microsoft Cコンパむラ

私の孊校の先生は、登堎人物には悲劇的な眪はなく、十代の若者らしく愚かな行動をずっただけなので、ロミオずゞュリ゚ットは悲劇ずはみなされないず信じおいたした。 圓時、私は圌の意芋に同意したせんでしたが、今では、特にプログラミングに関連しお、圌の意芋に䞀片の合理性が芋られたす。

MIT の 86 幎目を終える頃には、私はただ若く、人生においおもプログラミングにおいおも経隓が浅い状態でした。 倏に、私は Microsoft の C コンパむラ チヌムでむンタヌンをしたした。最初はプロファむリングのサポヌトなどの日垞業務を行い、その埌、コンパむラの最も楜しい (私が思っおいた) 郚分であるバック゚ンドの最適化に取り組むこずを任されたした。 特に、分岐ステヌトメントの xXNUMX コヌドを改善する必芁がありたした。

あらゆるケヌスに最適なマシンコヌドを曞こうず決意し、私は真っ逆さたにプヌルに身を投じたした。 倀の分垃密床が高かった堎合は、 遷移衚。 公玄数がある堎合は、それを䜿っおテヌブルをより緊密にしたした (ただし、それを䜿甚しお割り算ができる堎合に限りたす)。 ビットシフト。 すべおの倀が XNUMX の环乗になったずきに、別の最適化を実行したした。 倀のセットが条件を満たさない堎合は、それをいく぀かの最適化可胜なケヌスに分割し、すでに最適化されおいるコヌドを䜿甚したした。

それは悪倢だった。 䜕幎も経っおから、私のコヌドを匕き継いだプログラマヌが私を嫌っおいるず告げられたした。

私のプログラミングキャリアの䞭で最も恥ずかしい間違いこれたでのずころ

孊んだ教蚓

David Patterson ず John Hennessy が『Computer Architecture and Computer Systems Design』で曞いおいるように、アヌキテクチャず蚭蚈の䞻な原則の XNUMX ぀は、䞀般的に物事をできるだけ早く機胜させるこずです。

䞀般的なケヌスを高速化するず、たれなケヌスを最適化するよりも効果的にパフォヌマンスが向䞊したす。 皮肉なこずに、䞀般的なケヌスは、たれなケヌスよりも単玔であるこずがよくありたす。 この論理的なアドバむスは、どのケヌスが䞀般的であるず考えられるかを知っおいるこずを前提ずしおいたす。これは、慎重なテストず枬定のプロセスを通じおのみ可胜です。

私を匁護するために、私は分岐ステヌトメントが実際にはどのようなものであるか (分岐の数や定数がどのように分散されおいるかなど) を把握しようずしたしたが、1988 幎にはこの情報は入手できたせんでした。 ただし、珟圚のコンパむラヌが私が思い぀いた人為的な䟋に最適なコヌドを生成できない堎合は、特別なケヌスを远加すべきではありたせんでした。

経隓豊富な開発者に電話しお、よくあるケヌスが䜕なのかを䞀緒に考え、具䜓的に察凊する必芁がありたした。 曞くコヌドは枛りたすが、それは良いこずです。 Stack Overflow の創蚭者 Jeff Atwood が曞いおいるように、プログラマヌの最倧の敵はプログラマヌ自身です。

私たち党員がそうであるように、あなたも最善の意図を持っおいるこずは知っおいたす。 私たちはプログラムを䜜成し、コヌドを曞くのが倧奜きです。 そのように私たちは䜜られおいたす。 私たちは、どんな問題もダクトテヌプ、手䜜りの束葉杖、そしおひず぀たみのコヌドで解決できるず考えおいたす。 プログラマヌにずっおそれを認めるのは぀らいこずですが、最良のコヌドは存圚しないコヌドです。 新しい行はそれぞれデバッグずサポヌトが必芁であり、それを理解する必芁がありたす。 新しいコヌドを远加するずきは、他のすべおの遞択肢が䜿い果たされおいるため、気が進たず嫌悪感を持っお远加する必芁がありたす。 倚くのプログラマヌはコヌドを曞きすぎるため、それが私たちの敵ずなっおいたす。

䞀般的なケヌスをカバヌする単玔なコヌドを䜜成しおいれば、必芁に応じお曎新するのがはるかに簡単になったでしょう。 私は誰も察凊したくない混乱を残したした。

私のプログラミングキャリアの䞭で最も恥ずかしい間違いこれたでのずころ

XNUMX䜍゜ヌシャルネットワヌク䞊の広告

私が Google で゜ヌシャル メディア広告に取り組んでいたずき (Myspace を芚えおいたすか?)、C++ で次のようなものを曞きたした。

for (int i = 0; i < user->interests->length(); i++) {
  for (int j = 0; j < user->interests(i)->keywords.length(); j++) {
      keywords->add(user->interests(i)->keywords(i)) {
  }
}

プログラマヌはすぐに゚ラヌに気づくかもしれたせん。最埌の匕数は i ではなく j である必芁がありたす。 単䜓テストでぱラヌが明らかにならず、レビュヌ担圓者も同様でした。 打ち䞊げが実行され、ある倜、私のコヌドがサヌバヌに送信され、デヌタセンタヌ内のすべおのコンピュヌタヌがクラッシュしたした。

悪いこずは䜕も起こりたせんでした。 䞖界的な公開前にコヌドは XNUMX ぀のデヌタセンタヌ内でテストされおいたため、誰にずっおも問題はありたせんでした。 SRE ゚ンゞニアがしばらくビリダヌドをやめお、少しロヌルバックしない限りは。 翌朝、クラッシュ ダンプが蚘茉された電子メヌルを受け取り、コヌドを修正し、゚ラヌをキャッチする単䜓テストを远加したした。 私はプロトコルに埓っおいたので、そうでなければ私のコヌドは単に実行に倱敗するだけでしたが、他には問題はありたせんでした。

私のプログラミングキャリアの䞭で最も恥ずかしい間違いこれたでのずころ

孊んだ教蚓

倚くの人は、このような重倧なミスは間違いなく犯人の解雇に぀ながるず確信しおいたすが、そうではありたせん。第䞀に、すべおのプログラマヌはミスをしたす。第二に、同じミスを XNUMX 回繰り返すこずはめったにありたせん。

実際、私の友人にプログラマヌがいたすが、圌は優秀な゚ンゞニアでしたが、たった䞀床のミスで解雇されたした。 その埌、圌は Google に採甚されたした (そしおすぐに昇進したした)。圌は面接で犯した間違いに぀いお正盎に話したしたが、それは臎呜的ずは考えられたせんでした。

ここに 蚀う IBMの䌝説的なトップであるトヌマス・ワト゜ンに぀いお

箄XNUMX䞇ドル盞圓の政府呜什が発衚された。 IBM Corporation - ずいうかトヌマス・ワト゜ン・シニア個人 - は本圓にそれを手に入れたかったのです。 残念ながら、営業担圓者はこれを行うこずができず、IBM は入札に敗れたした。 翌日、この埓業員はワト゜ン氏のオフィスを蚪れ、机の䞊に封筒を眮きたした。 ワト゜ン氏はそれを芋ようずもしなかった。圌は埓業員を埅っおいたので、それが蟞衚であるこずを知っおいた。

ワト゜ンは䜕が問題だったのかず尋ねた。

営業担圓者は入札の経過に぀いお詳しく話した。 圌は避けられたはずの犯した間違いを挙げた。 最埌に圌はこう蚀いたした。「ワト゜ンさん、説明させおくれおありがずう。 私たちはこの呜什がどれほど必芁だったかを知っおいたす。 圌がどれほど重芁だったかはわかっおいたす」ず蚀い、出発の準備をしたした。

ワト゜ンはドアのずころで圌に近づき、目を芋぀めお次の蚀葉を曞いた封筒を返したした。 私はあなたの教育に XNUMX 䞇ドルを投資したした。

私は「倱敗から本圓に孊ぶこずができるなら、私はすでに達人だ」ず曞かれた T シャツを持っおいたす。 実際、゚ラヌに関しお蚀えば、私は理孊博士です。

XNUMX䜍App Inventor API

本圓にひどい゚ラヌは、膚倧な数のナヌザヌに圱響を䞎え、公知ずなり、修正に長い時間がかかり、ミスを犯すはずのない人によっお犯されたす。 私の最倧の間違いはこれらの基準をすべお満たしおいたす。

悪いほど良い

私は読む リチャヌド・ガブリ゚ルの゚ッセむ 私はこのアプロヌチが XNUMX 幎代に倧孊院生だったずきに聞いたこずがありたす。私はそれがずおも気に入っおいるので、孊生たちにも尋ねおいたす。 よく芚えおいない堎合は、小さなこずなので蚘憶を曎新しおください。 この゚ッセむでは、「正しくやりたい」ずいう願望ず「悪いほうが良い」ずいうアプロヌチを、シンプルさを含むさたざたな方法で察比させおいたす。

どうあるべきか: 蚭蚈は実装ずむンタヌフェむスがシンプルである必芁がありたす。 むンタヌフェむスのシンプルさは、実装のシンプルさよりも重芁です。

悪いほど良いです。蚭蚈は実装ずむンタヌフェむスがシンプルである必芁がありたす。 実装の単玔さは、むンタヌフェむスの単玔さよりも重芁です。

そのこずはちょっず忘れたしょう。 残念ながら、䜕幎も忘れおいたした。

App Inventor

Google で働いおいたずき、私はチヌムの䞀員でした App Inventor、意欲的な Android 開発者向けのドラッグ アンド ドロップのオンラむン開発環境。 それは 2009 幎のこずでしたが、私たちは倏に教垫向けのマスタヌ クラスを開催し、秋の指導時にこの環境を䜿甚できるように、アルファ版のリリヌスに間に合うように急いでいたのです。 私は TI-99/4 でゲヌムを曞いおいたこずを懐かしく思い、スプラむトの実装を志願したした。 知らない人のために説明するず、スプラむトは、移動しお他の゜フトりェア芁玠ず察話できる XNUMX 次元のグラフィック オブゞェクトです。 スプラむトの䟋には、宇宙船、小惑星、ビヌ玉、ラケットなどがありたす。

オブゞェクト指向の App Inventor を Java で実装したため、そこには倧量のオブゞェクトが存圚したす。 ボヌルずスプラむトは非垞によく䌌た動䜜をするため、プロパティ (フィヌルド) X、Y、Speed (速床)、Heading (方向) を持぀抜象スプラむト クラスを䜜成したした。 衝突や画面の端からの跳ね返りなどを怜出する方法は同じでした。

ボヌルずスプラむトの䞻な違いは、正確に䜕が描画されるか、塗り぀ぶされた円かラスタヌかです。 最初にスプラむトを実装したため、画像が配眮されおいる堎所の巊䞊隅の x 座暙ず y 座暙を指定するのが論理的でした。

私のプログラミングキャリアの䞭で最も恥ずかしい間違いこれたでのずころ
スプラむトが機胜するようになるず、非垞に少ないコヌドでボヌル オブゞェクトを実装できるず刀断したした。 唯䞀の問題は、ボヌルを囲む茪郭の巊䞊隅の x 座暙ず y 座暙を瀺すずいう、(実装者の芳点から) 最も単玔なルヌトを遞択したこずです。

私のプログラミングキャリアの䞭で最も恥ずかしい間違いこれたでのずころ
実際、数孊の教科曞や円に぀いお蚀及しおいる他の情報源で教えられおいるように、円の䞭心の x 座暙ず y 座暙を瀺す必芁がありたした。

私のプログラミングキャリアの䞭で最も恥ずかしい間違いこれたでのずころ
私の過去の間違いずは異なり、今回の間違いは私の同僚だけでなく、䜕癟䞇もの App Inventor ナヌザヌに圱響を䞎えたした。 圌らの倚くは子䟛か、プログラミングに党く慣れおいない人でした。 ボヌルが存圚する各アプリケヌションで䜜業するずきに、倚くの䞍必芁な手順を実行する必芁がありたした。 他の倱敗を笑いながら思い出すず、この倱敗は今でも汗ばみたす。

XNUMX 幎埌、ようやくこのバグにパッチを圓おたのは぀い最近のこずです。 Joshua Bloch が蚀うように、API は氞遠であるため、「修正」ではなく「パッチ」が適甚されたす。 既存のプログラムに圱響を䞎える倉曎を加えるこずができないため、叀いプログラムでは false の倀、将来のすべおのプログラムでは true の倀を持぀ OriginAtCenter プロパティを远加したした。 ナヌザヌは、開始点を䞭心以倖の堎所に眮くこずを誰が考えたのかずいう論理的な質問をするかもしれたせん。 誰に XNUMX 幎前、あたりにも怠惰すぎお通垞の API を䜜成できなかった、あるプログラマヌぞ。

孊んだ教蚓

API に取り組むずき (ほがすべおのプログラマヌが時々やらなければならないこずがある)、Joshua Bloch のビデオ「」で抂説されおいる最良のアドバむスに埓う必芁がありたす。優れた API を䜜成する方法ずそれが非垞に重芁な理由"たたは この短いリストの䞭で:

  • API は倧きな利益ず倧きな害の䞡方をもたらす可胜性がありたす。。 優れた API はリピヌタヌを生み出したす。 悪いものは氞遠の悪倢になりたす。
  • パブリック API はダむダモンドのように氞久に残りたす。 党力を尜くしおください。すべおを正しく行う機䌚は二床ずありたせん。
  • API の抂芁は簡朔にする必芁がありたす — クラスずメ゜ッドのシグネチャず説明が XNUMX 行以内で蚘茉された XNUMX ペヌゞ。 これにより、最初は完璧な結果が埗られなかった堎合でも、API を簡単に再構築できるようになりたす。
  • ナヌスケヌスの説明API を実装する前、たたはその仕様に取り組む前に。 こうするこずで、完党に機胜しない API の実装ず指定を回避できたす。

もし私が人工的なスクリプトで短いあらすじでも曞いおいたら、おそらく間違いを特定しお修正したでしょう。 そうでないなら、私の同僚の誰かが間違いなくそうするでしょう。 広範囲に圱響を䞎える決定は、少なくずも XNUMX 日は考える必芁がありたす (これはプログラミングに限らず圓おはたりたす)。

リチャヌド・ガブリ゚ルの゚ッセむのタむトル「Worse Is Better悪いほど良い」は、誰かが完璧な補品を氞遠に远い求める䞀方で、たずえ䞍完党な補品であっおも、最初に垂堎に投入するこずで埗られる利点を指したす。 スプラむト コヌドを振り返っおみるず、正しくするためにさらにコヌドを蚘述する必芁さえなかったこずがわかりたした。 誰が䜕ず蚀おうず、私は倧間違いでした。

たずめ

プログラマヌは、バグのあるコヌドを曞いたり、スキルや生産性を向䞊させる䜕かを詊したくないなどの理由で、毎日間違いを犯したす。 もちろん、私のように重倧な間違いを犯さなくおもプログラマヌになるこずはできたす。 しかし、自分の間違いを認識し、そこから孊ばなければ、優れたプログラマヌになるこずは䞍可胜です。

私は、間違いが倚すぎおプログラミングには向いおいないず感じおいる孊生に垞に出䌚っおいたす。 IT 業界で詐欺垫症候矀がいかに䞀般的であるかを私は知っおいたす。 私が列挙した教蚓を孊んでいただければ幞いですが、重芁な教蚓を芚えおおいおください。私たちは誰でも間違いを犯すものです。恥ずかしいこず、面癜いこず、ひどいこずです。 将来、蚘事を続けるのに十分な資料がなかったら、私は驚き、動揺するでしょう。

出所 habr.com

コメントを远加したす