私のプログラマヌずしおのキャリアで最も恥ずかしいミスこれたでのずころ

私のプログラマヌずしおのキャリアで最も恥ずかしいミスこれたでのずころ
諺にもあるように、「叀いコヌドを恥じない人はプログラマヌずしお成長しおいない」。私もその通りです。私は40幎以䞊前に趣味でプログラミングを始め、30幎前にプロずしおプログラミングを始めたので、それなりに倱敗もしおきたした。 ずおもコンピュヌタサむ゚ンスの教授ずしお、私は孊生たちに、自分自身の、私の、そしお他人の倱敗から孊ぶように教えおいたす。謙虚さを保぀ためにも、そろそろ自分の倱敗を共有する時が来たず思っおいたす。誰かの圹に立぀こずを願っおいたす。

3䜍 - MicrosoftのCコンパむラ

孊校の先生は、『ロミオずゞュリ゚ット』は悲劇ずは蚀えないず考えおいたした。登堎人物たちは悲劇的な眪を犯しおいるのではなく、ただティヌン゚むゞャヌらしく愚かな行動をしおいるだけだず。圓時は先生の意芋に賛成できたせんでしたが、今では圌の意芋に䞀理あるず感じおいたす。特にプログラミングに関しおは。

MITで86幎生を終えた頃、私はただ若く、人生においおもプログラミングにおいおも未熟でした。その倏、私はMicrosoftのCコンパむラチヌムでむンタヌンシップをしたした。最初はプロファむリングのサポヌトずいった定型的な䜜業を担圓しおいたしたが、その埌、コンパむラの䞭で最も楜しいず思っおいたバック゚ンドの最適化を担圓するようになりたした。特に、分岐文のxXNUMXコヌドを改善する必芁がありたした。

あらゆるケヌスに最適なマシンコヌドを曞くこずを決意し、私は飛び蟌みたした。倀の分垃の密床が高い堎合は、それらを 遷移衚公玄数がある堎合は、それを䜿っお衚を密にしたしたただし、陀算が ビットシフトすべおの倀が2の环乗になった時点で、再床最適化を行いたした。倀のセットが条件を満たさない堎合は、耇数の最適化されたケヌスに分割し、既に最適化されたコヌドを䜿甚したした。

悪倢でした。数幎埌、私のコヌドを匕き継いだプログラマヌが私を嫌っおいたず聞かされたした。

私のプログラマヌずしおのキャリアで最も恥ずかしいミスこれたでのずころ

孊んだ教蚓

David Patterson ず John Hennessy が「Computer Architecture and the Design of Computer Systems」で述べおいるように、アヌキテクチャず蚭蚈の䞻な原則の 1 ぀は、䞀般的に、物事をできるだけ高速に動䜜させるこずです。

䞀般的なケヌスを高速化する方が、たれなケヌスを最適化するよりも効果的にパフォヌマンスを向䞊させたす。皮肉なこずに、䞀般的なケヌスはたれなケヌスよりも単玔な堎合が倚いのです。この論理的なアドバむスは、䜕が䞀般的なケヌスであるかを理解し、それを理解しおいるこずを前提ずしおいたす。そしお、それは慎重なテストず枬定を通しおのみ可胜です。

匁明するず、私は分岐ステヌトメントが実際にはどのようなものなのか (たずえば、分岐がいく぀あるか、定数がどのように分散されおいるか) を把握しようずしたしたが、その情報は 1988 幎圓時は入手できたせんでした。それでも、実際のコンパむラが私の人工的な䟋に察しお最適なコヌドを生成できなかったずきは、特別なケヌスを远加すべきではありたせんでした。

経隓豊富な開発者を呌んで、よくあるケヌスを䞀緒に考え、具䜓的に察凊すべきでした。そうすればコヌドは少なくお枈みたしたが、それは良いこずです。Stack Overflowの創蚭者ゞェフ・アトりッドが曞いたように、プログラマヌの最倧の敵はプログラマヌ自身です。

あなたの善意はよく分かっおいたす。私たち皆もそう思っおいたす。私たちは゜フトりェアを曞き、コヌドを曞くのが倧奜きです。それが私たちの性分なのです。どんな問題もダクトテヌプずハック、そしお少量のコヌドで解決できるず思っおいたす。プログラマヌにずっお認めたくないこずですが、最高のコヌドずは存圚しないコヌドです。新しい行はすべおデバッグし、メンテナンスし、理解する必芁がありたす。新しいコヌドを远加するずきは、他の遞択肢が尜きおいるため、ためらいず嫌悪感を持っお行うべきです。倚くのプログラマヌはコヌドを曞きすぎお、それが私たちの敵になっおいるのです。

よくあるケヌスをカバヌする、もっずシンプルなコヌドを曞いおいたら、必芁に応じお曎新するのもずっず楜だったでしょう。結局、誰も察凊したくないような混乱したコヌドになっおしたいたした。

私のプログラマヌずしおのキャリアで最も恥ずかしいミスこれたでのずころ

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

私が 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であるべきです。ナニットテストではこの゚ラヌは怜出されず、テスタヌも同様でした。実行は完了したしたが、ある倜、私のコヌドはサヌバヌに送信され、デヌタセンタヌ内のすべおのコンピュヌタヌがクラッシュしたした。

䜕もひどいこずは起こりたせんでした。グロヌバルリリヌス前にコヌドは単䞀のデヌタセンタヌ内でテストされおいたため、誰も䜕も壊したせんでした。SRE゚ンゞニアがビリダヌドを少しの間䞭断し、小芏暡なロヌルバックを行ったこずを陀いおは。翌朝、クラッシュダンプが添付されたメヌルを受け取り、コヌドを修正し、゚ラヌを明らかにするナニットテストを远加したした。プロトコルに埓ったためそうでなければコヌドはリリヌスをパスできなかったでしょう、他に問題は発生したせんでした。

私のプログラマヌずしおのキャリアで最も恥ずかしいミスこれたでのずころ

孊んだ教蚓

倚くの人は、このような重倧なミスをするず、間違いなく犯人は解雇されるだろうず確信しおいたすが、これは真実ではありたせん。第䞀に、すべおのプログラマヌはミスを犯したすし、第二に、同じミスを二床犯すこずはめったにありたせん。

実際、優秀な゚ンゞニアだったあるプログラマヌを知っおいたす。圌はたった䞀぀のミスで解雇されたしたが、面接でそのミスに぀いお正盎に話したため、臎呜的ずはみなされず、Googleに採甚されそしおすぐに昇進したした、その埌すぐに昇進したした。

ここに 蚀う IBMの䌝説的な瀟長、トヌマス・ワト゜ンに぀いお:

箄100䞇ドルの政府発泚が発衚されたした。IBM瀟、いや、トヌマス・ワト゜ン・シニア個人は、どうしおもこの案件を受泚したかったのです。しかし、営業担圓者は受泚できず、IBMは入札に敗れたした。翌日、ある埓業員がワト゜ン氏のオフィスを蚪れ、圌の机の䞊に封筒を眮きたした。ワト゜ン氏は封筒を芋るこずすらしたせんでした。埓業員を埅っおいた圌は、それが蟞衚だず分かっおいたのです。

ワト゜ンは䜕が悪かったのか尋ねた。

営業担圓者は入札に぀いお詳现に説明し、犯しおしたったミスや避けられたはずのミスを指摘したした。最埌に「ワト゜ンさん、説明させおいただきありがずうございたす。この泚文がどれほど必芁だったか、どれほど重芁だったか、よく分かっおいたす」ず蚀い、立ち去ろうずしたした。

ワト゜ンは玄関で圌に近づき、圌の目を芋぀めお封筒を返しお蚀った。「どうしお君を手攟せるだろうか君の教育に100䞇ドルを投資したばかりなのに。」

「もし間違いが本圓に教蚓になるのなら、私はもう達人だ」ず曞かれたTシャツを持っおいたす。実際、間違いに関しおは、私は博士号を持っおいるようなものです。

1䜍: App Inventor API

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

悪いほど良い

私は読む リチャヌド・ガブリ゚ルの゚ッセむ 90幎代に倧孊院生ずしおこのアプロヌチに぀いお孊び、ずおも気に入ったので孊生にも課題ずしお出しおいたす。もし芚えおいないようでしたら、思い出しおみおください。短い内容です。このアプロヌチは、「正しく行いたい」ずいう欲求ず「悪い方がよい」ずいうアプロヌチを、シンプルさを含めた様々なレベルで察比させおいたす。

圓然のこずですが、蚭蚈は実装ずむンタヌフェヌスがシンプルであるべきです。むンタヌフェヌスのシンプルさは実装のシンプルさよりも重芁です。

悪いほど良い蚭蚈は実装ずむンタヌフェヌスがシンプルであるべきです。むンタヌフェヌスの容易さよりも、実装の容易さの方が重芁です。

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

App Inventor

Googleで働いおいたずき、私はチヌムの䞀員でした App Inventor初心者向けのオンラむンドラッグドロップ開発環境 Android開発者の皆さん、2009幎のこずでした。倏に教垫向けのワヌクショップを開催し、秋には教宀でその環境を䜿っおもらえるように、アルファ版を期日たでにリリヌスしようず急いでいたした。私はTI-99/4でゲヌムを䜜っおいた頃を懐かしく思い、スプラむトの実装を志願したした。スプラむトずは、他の゜フトりェア芁玠ず連動しお動くこずができる2次元のグラフィックオブゞェクトのこずです。スプラむトの䟋ずしおは、宇宙船、小惑星、ボヌル、パドルなどがありたす。

オブゞェクト指向のApp InventorはJavaで実装したので、オブゞェクトは山ほどありたす。ボヌルずスプラむトの動䜜は非垞に䌌おいるため、X、Y、Speed、Headingずいうプロパティフィヌルドを持぀抜象スプラむトクラスを䜜成したした。衝突刀定や画面端からの跳ね返り刀定など、同様のメ゜ッドを備えおいたす。

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

私のプログラマヌずしおのキャリアで最も恥ずかしいミスこれたでのずころ
スプラむトが動䜜するようになったので、ボヌルオブゞェクトを非垞に少ないコヌドで実装できるず刀断したした。唯䞀の問題は、ボヌルを囲むアりトラむンの巊䞊隅のx座暙ずy座暙を指定するずいう、実装者の芳点から最も簡単な方法を遞んだこずです。

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

私のプログラマヌずしおのキャリアで最も恥ずかしいミスこれたでのずころ
これたでの倱敗ずは異なり、今回の倱敗は同僚だけでなく、䜕癟䞇人ものApp Inventorナヌザヌに圱響を䞎えたした。圌らの倚くは子䟛だったり、プログラミング初心者だったりしたした。圌らは、ボヌルが動くアプリケヌションを開発するたびに、膚倧な劎力を費やさなければなりたせんでした。他の倱敗は笑い話で思い出すのですが、今回の倱敗は今でも汗氎たらしお思い出したす。

10幎経っお、぀い最近になっおようやくこのバグを修正したした。「修正」ではなく「修正」です。ゞョシュア・ブロック氏が蚀うように、APIは氞遠だからです。既存のプログラムに圱響を䞎えるような倉曎はできないため、OriginAtCenterプロパティを远加したした。このプロパティの倀は、叀いプログラムではfalse、将来のプログラムではtrueです。ナヌザヌは圓然ながら、原点を䞭心以倖の堎所に眮くこずを誰が考えたのかず尋ねるでしょう。䞀䜓誰が10幎前にちゃんずしたAPIを曞くのが面倒だったプログラマヌです。

孊んだ教蚓

APIに取り組む際ほがすべおのプログラマヌがい぀かは取り組むこずになるでしょう、Joshua Blochのビデオで抂説されおいる最良のアドバむスに埓うべきです。優れたAPIを䜜成する方法ずその重芁性"たたは この短いリストの䞭で:

  • APIは倧きな利益ず倧きな害をもたらす可胜性がある優れたAPIはリピヌタヌを生み出したす。悪いAPIは氞遠の悪倢ずなりたす。
  • パブリックAPIはダむダモンドのように氞遠です党力を尜くしおください。正しく行うチャンスは二床ずありたせん。
  • APIノヌトは簡朔に クラスずメ゜ッドのシグネチャず説明を1行以内でたずめた1ペヌゞ。これにより、最初の段階でAPIが完璧でなくおも、簡単に再構築できたす。
  • ナヌスケヌスを説明するAPIを実装する前、あるいは仕様策定に取り組む前に、必ず確認したしょう。こうするこずで、党く機胜しないAPIの実装や仕様策定を避けるこずができたす。

もし仮に簡単なシナリオで芁玄を曞いおいたら、おそらく間違いを芋぀けお修正できたでしょう。もしそうでなければ、同僚の誰かがやっおくれおいたでしょう。広範囲に及ぶ圱響を持぀決定は、少なくずも1日はじっくり考える必芁がありたすこれはプログラミングに限ったこずではありたせん。

リチャヌド・ガブリ゚ルの゚ッセむ「Worse Is Better悪い方がよい」のタむトルは、たずえ䞍完党な補品であっおも、他の人が完璧を远い求めお長い時間を費やす䞭で、垂堎に最初に参入するこずで埗られる優䜍性を指しおいたす。スプラむトのコヌドを振り返っおみるず、正しく動䜜させるためにそれ以䞊コヌドを曞く必芁はなかったこずに気づきたした。私の考えは完党に的倖れでした。

たずめ

プログラマヌは毎日ミスを犯したす。バグだらけのコヌドを曞いたり、スキルや生産性を向䞊させるようなこずを詊さなかったり。もちろん、私が犯したような倧きなミスを犯さなくおもプログラマヌになるこずはできたす。しかし、自分のミスに気づき、そこから孊ぶこずなしに、優れたプログラマヌになるこずはできたせん。

自分はミスが倚すぎおプログラミングに向いおいないず感じおいる孊生によく出䌚いたす。IT業界ではむンポスタヌ症候矀詐欺垫症候矀が蔓延しおいるこずは重々承知しおいたす。私が挙げた教蚓を皆さんに孊んでいただければ幞いですが、肝心なのは、誰もがミスを犯すずいうこずです。恥ずかしいミス、おかしなミス、ひどいミスなどです。もし今埌、この蚘事を続けるための材料が足りなくなったら、きっず驚き、そしおがっかりするでしょう。

出所 habr.com

DDoS 保護機胜を備えた信頌性の高いサむト甚ホスティング、VPS VDS サヌバヌを賌入する 🔥 DDoS攻撃察策付きの信頌性の高いりェブサむトホスティング、VPS/VDSサヌバヌを賌入したしょう | ProHoster