良いプログラミングメタファーとは何ですか?[閉まっている]


30

私は非プログラマーにプログラミングとは何かを説明することに言及しています。この質問を作成する前に、必ず同様の質問を検索しましたが、見つけた少数の質問は質問をかわすように見えたので、メタファーやアナロジーを具体的に見てみたいと思います。個人的には、比phorや類推を使用することで、技術的な何かを誰かに説明する方が簡単だと感じています。

私がこれに興味を持っている理由は、多くの人が毎日プログラマーの仕事に出くわしているからです。しかし、平均的な人にプログラマーが何であるかを尋ねると、彼らは本当に知りません。これは、誤解の特定の状況につながります(例:「[...]しかし、私はあなたがコンピューターが得意だと思った!」)

私は本当に最高のものを見つけたいです。私のキャリアの選択について誰かに簡単に説明できるようにしたいと思います。もちろん、少なくとも一般的なアイデア。

私は個人的にはしっかりしたものを持っていませんが、私はそれについて長い間考えており、通常はコンピューターが理解する言語を知っているため、コンピューターに何をすべきかを伝えることができる「言語」のメタファーに引き寄せられました私たちの問題を解決するために、それらを「教える」。

例えば:

代替現実では、人工知能を備えたヒューマノイドロボットが存在し、一部の人々は英語のバリエーションである共通言語を介してそれらと通信できることを想像してください。ロボットと通信できるこれらの人々は、特定の問題の解決方法や、家事のような特定のタスクを実行する方法を教えることができます。

まあ、そのようなロボットはまだ存在していませんが、私たちの時代のプログラマーはそれらの人々と似ていますが、ロボットと通信する代わりに、コンピューターと通信します。プログラマーは、この「共通言語」を使用して作成したソフトウェアを使用して、特定のタスクの実行方法や特定の問題の解決方法をコンピューターに「教え」ます。

プログラマーとこの「共通言語」は、電子メール、ウェブサイト、ビデオゲーム、ワードプロセッサ、スマートフォン(簡単に言うと)、および私たちが日常的に使用する他の多くのものを提供します。

私はプログラミングを王座などに置くつもりはありません。それは私が思いつく限りの最高の比metaです。

誰かがこの問題に何らかの問題を見つけると確信しています。おそらく少し不自然かもしれませんが、それがこの質問をしている理由です。


プログラミング言語の学習は、外国語の学習にやや似ていると思います。ただし、コンピュータープログラミングの行為は、話したり書いたりする一般的な行為とは大きく異なります。コンピュータプログラミングには、少なくとも、精度、革新性、集中力、創造性、組織化、永続性、厳密なロジックが必要です。
アミ

私はよく知られている「しかし、あなたはコンピュータが得意だと思っていた」に対抗したいと思うでしょう。犯罪現場」または何か。
deltreme

プログラマーが何をするのかだけを説明してみませんか?道路、ロボット、ビルディングブロックに関するこのような話はすべて、馬鹿げています。株式仲買人に彼らが何をしているのか聞いたら、ギャンブルの逸話は聞きたくありません。形成外科医に彼らが何をしているのか聞いたら、芸術的才能(または何でも)について聞きたくない-事実を述べてください!
カークブロードハースト

回答:


43

どこかを運転する方法について、詳細な手順をステップごとに記述する必要があるようなものです。しかし、通常、「渋滞が発生した場合」や「ターンレーンでトラックが故障した場合」などの緊急事態対応計画を追加する必要があります。

時には、さらに深く潜り、どちらの側を走行するか、赤信号で何をするかなどの道路のルールを説明する必要があります。また、ハンドルやアクセルペダルの動作を正確に説明する必要がある場合もあります。

そして、通常、すべてを詳細に説明したら、顧客は「ホバークラフトを運転する人のために働く必要がある場合を除き、完璧です」と言います。


ハハ、私はこれが本当に好きです。
ホルヘイスラエルペニャ

14
私のホバークラフトはうなぎだらけです!

3
または、あなたはただそれをプロローグすることができます:これはあなたが車に乗っている、これはあなたの目的地です、これは事故です。
biziclop

いいえ、通常は「完璧ですが、本当に家が欲しかった...」に変わります。しかしあなたの類推が大好きです:)
jmq

3
非常によく似ています。また、車は、あなたが伝えたとおりのことをする人によって運転されますが、自分で判断する常識や能力はありません。
ボブマーフィー

20

私は非常に非常に愚かなマシンのために、非常に非常に詳細な指示を書きます。


17

私は祖母に優しいメタファー「私たちは編み物のレシピを書く」を使用しています。

根拠:

  • 編みはかなり単純な機械的プロセスであり、基本的には、詳細な指示に従って正確に何かを引き出す必要があります。
  • ほとんどの編み方は複数のサイズ用です。これにより、ifステートメントと数学とループが得られます。
  • 怒っている祖母の軍隊がバギーのセーターを持って来ると、レシピでエラーを見つけることができます!

私の意見では非常に良い比phor。
ポールネイサン

編みがチューリング完了のように聞こえます:)
バギ

14

あまり良いアナロジーではありませんが、人々が機械を修理するように私に言うとき、私は「私は車を設計する人です。私は整備士ではありません!」と言います。


4
「私はローディではなくミュージシャンです!」
EricSchaefer

@エリック:より詩的な:)
マシュー・M.

1
@Eric-もっと「私は作曲家であり、ローディーではありません」。
Steve314

もともと私はエレクトロニクスのラインに沿って何かを考えていました:「シンセサイザーをはんだ付けすることはできますが、音楽を再生することはできません」が、これはおそらくもっと広く役立つでしょう: 」
naught101

12

子供の頃、私はプログラミングの非常に良い説明を読みました。それはロボットに学校に行くような日常的なタスクを行う方法を教えるようなものです。だから、「学校に行け!」と言うことができますが、それがどうやって分からないのか。だから、「外に出て、左に行き、学校に行くまで歩き続け、左に行き、入って、座って」と言います。しかし、道があります!そのため、「道路で停止し、交通がないことを確認し、道路を横断し、歩き続ける」ように、中央のどこかに指示する必要があります。ドアはどうですか?そこで、「学校のドアが開いているかどうかを確認します。開いていない場合は開いてください」と追加します。そこで。最終的には、ロボットに自分で学校に行く方法を伝えることができるプログラムがあります。

これは、ロゴと非常にきれいに一致し、複雑な形状を作成するために、まさにこの方法でカメに指示します。


10

プログラミングはチョコレートの箱のようなものです。探しているものがすぐに見つかることもありますが、ほとんどの場合、多くの試行錯誤が必要です。時々ココナッツを手に入れます。

トラフィックが点灯します。車は動いているか停止しています。1つの信号機のセットアップは簡単に想像できますが、別の信号機を追加するとどうなりますか?3分の1はどうですか?街全体はどうですか?輸送システムは数千のストップライトで構成され、各ストップライト自体はシンプルですが、全体として見ると複雑なシステムになります。これらの信号機の1つが誤動作したり、わずか数秒で消灯した場合、システム全体が混乱します。すべてが同期していれば、乗車を楽しむだけです。

動機上のスピーカーは、人々の動機、夢、アイデアのパズルのロックを解除するキーを検索します。それぞれの状況、人はそれぞれ異なります。過去に機能していたものは、今では適切ではないかもしれません。キーを再利用できる場合もありますが、個人に合わせて調整する必要があります。それ以外の場合は、キーを新しく作成する必要があります。最もやりがいがあるのは、その人のロックが解除され、外に出て世界を征服するのを見たときです。最も壊滅的なのは、身近に感じても、潜在能力を解き放つことができない場合です。

探偵小説探偵がゆっくり手がかりを検索し、証拠を集めることによって、彼のケースを構築し、。整然と、賢く、正確に、その日に勝ちます。ずさんで、無知で、怠zyな人は事件を運命づけます。最終的に、作品は仲間のju審員の前に立つか、落ちるでしょう。

スロットマシン。すべてのコインを入れてレバーを引きます。時々あなたは大きく勝ち、時には何時間もそこに座って何も起こりません。他の誰かが何気なく歩き回り、レバーを一度引いて大当たりを勝ち取る場合もあります。

音楽。1つのメモは簡単ですが、メジャーはより複雑です。完全な曲には、多くの音符を含む多くの小節があります。1つのメモがオフの場合、パフォーマンス全体が台無しになる可能性があります。すべてのノートが完全に配信されると、パフォーマンスはバックグラウンドにフェードインし、音楽のみが存在します。


ヌガー。ヌガーを取得します。
ティムウィリスクロフト

6

何に対しても最高の比phorはそれ自身です。異なるものは、何らかの精度を失います。したがって、最適な比metaを選択するかどうかは、具体的にはプログラミングについて何をキャプチャするかによって異なります。ここでコーディングのメタファーについて多くの回答がありますので、開発プロセス全体の古典的なメタファーで答えます。

ビル建設

この比phorの最も一般的な側面は、物理的なアーキテクトがソフトウェアアーキテクトにやや似ていることです。他にもいくつかの類似点があります。

  • 変更は、早く作成するほど安くなります。つまり、今すぐ紙の上で1行、またはセメントで10トン移動できます。
  • 適切な計画のない建物は崩壊する傾向があります
  • ビルダーは、クライアントが望むものを実装しようとします。クライアントが建物の外観を正確に記述していない場合(または通信に他の障害がある場合)、変更するには費用がかかります。
  • 曲げることのできない物理法則があります。100フィート幅の第1ストーリー上に300フィート幅の第2ストーリーを構築できないように、堅牢なサブシステムYなしでは機能Xを構築できません。

もちろん、他の比phorと同様に、制限があります。それに関するいくつかの欠陥:

  • 建物は1回限りの使用です。どこかにそれを構築し、そこにとどまります。ゼロの追加コストで、100万の異なるニーズを持つ100万の異なるユーザーに100万回コピーすることはできません。
  • 建物はソフトウェアよりもかなり不変です。
  • 建築資材のコストとの明確な類推はありません。コードの行にかかる費用は無料です。コードを作成するのにかかる時間だけにお金がかかります。
  • ソフトウェアを使用して(要求者に応じて)可能になるインクリメンタルアーキテクチャは、一度設計してからビルドする建設では不可能です。

したがって、他の類推のように、それはあなたが説明しようとしているものに依存します。いずれかの比overに過度に依存することには注意してください。さもないと、顧客は彼の新しい給​​与システムに対する固定資産税がどうなるのか疑問に思うようになります。


それだけ、キッチンのドアの位置がずれていても、屋根は爆発しません。ハウスは堅牢ですが、ソフトウェアはカードハウスと同じくらい堅固です。暗黙的および明示的なルール(モデル)がやがて非常に複雑になるため、それを避けることはできません。
KarlP

青写真をコピーできます!新しいジャグジーに25m ^ 2を追加するなど、いつでも建物を拡張できます!
ゾロモン

類推の欠陥は、実際には、材料/場所の1倍の使用と実際/仮想の性質ではありません(各ビルドは一意です)。建物の例えにある本当の欠陥は、建物の問題に対する動的な振る舞いが障壁であることです。アクティビティが外部のスペースおよびアクティビティから保護されるスペースを提供します。ソフトウェアの「問題」の動的な振る舞いは、データの処理です。
Huperniketes

このブログ投稿の冒頭の良い説明:orestis.gr/blog/2010/11/06/why-i-bill-hourly私は自分の「メタファー」の質問を書くつもりでしたが、それを見つけて答えを見つけました私が与えるものに最も似ています。
トッドウィリアムソン

6

音楽、特にジャズ音楽の作成のようなソフトウェア開発のクリス・マクマホンのアナロジーが大好きです。

これは、エラ・フィッツジェラルドとカウント・ベイシーが歌「ワン・オクロック・ジャンプ」をやっているところです。歌は12小節のブルースで、これはUIを備えたデータベースアプリに相当するジャズです。つまり、すべてのプログラマーがUIを備えたデータベースアプリを構築したように、すべてのアメリカ人ミュージシャンは12小節のブルースを演奏しました。それは、カウント・ベイシーからジミ・ヘンドリックス、ラモーンズまで、多くの多くの歌が掛けられているフレームワークです。

この特定のビデオは、アジャイルプラクティスの優れた例です。声とピアノが互いにどのように影響するかを聞いてください。これはペアプログラミングによく似ており、TDDによく似ています。音声は何かをします。ピアノが反応する; ピアノは何かをします。音声が応答します。そして、アイコンタクトに注意してください。これらの人々は、瞬間から瞬間に何が起こっているかを強く意識しています。楽譜はありません(BDUF)。彼らは、優れたソフトウェア開発のように、集中力とスキルを必要とする活動に関与しています。彼らはまた、優れたソフトウェア開発が請求書を支払う人々のニーズを認識すべきであるのと同様に、聴衆がいることを明確に認識しています。

以下は、彼が議論しているブログ投稿へのリンクです。http//chrismcmahonsblog.blogspot.com/2007/05/example-of-analogy-monks-vs-music.html


1
ちょうど音楽の比phorを投稿しようとしていました(私は作曲の修士号を取得しています)が、クリスの話は私よりも上手くカバーしています
アラン

5

私はプログラミングを心のないゾンビ制御することと呼ぶことがあります。まとめ、私のブログの記事を、それについて:

  • ゾンビのように、私たちが操作するコンピューターは非常に馬鹿です。指示が詳細でない限り、何かをするように指示するのは難しい
  • ゾンビは攻撃的であり、指示の細かい部分を見逃した場合、クリーチャーを未処理のままにしておくと、周囲のすべてを破壊する可能性があります。コンピューターについても同様です。指示に詳細がないと、プログラムがクラッシュしてデータが破壊される可能性があります。
  • ゾンビを制御したい場合、魔法を知っている必要があります。プログラミングでも同じです。
  • 脳を持つ人々が1か所に集まるほど、より多くのコンピューターを所有できるようになります。脳はコンピューターを引き付けるようです-ゾンビを引き付けるのと同じ方法です。

小さいLEDが私を見ていると寝るのが心配です
...-Xeoncross

5

プログラミングは、レゴで物を作るようなものです。

  • 大きなものを作るためにたくさんの小さなビットをくっつけている
  • 小さなビットには、限られた数の形状とサイズがあります
  • 小さいものは特定の方法でしか合わない
  • このようなもので遊ぶのはとても楽しいです

5

コンピューターのプログラミングは子供を育てるようなものです...

  • 誰もがそれを行う正しい方法に同意しない
  • それは夜にあなたを維持します
  • あなたが言うことは決してしない
  • トピックについて何冊の本を読んだとしても、その本を読みに行くと、何をしているのかわからない気がします。
  • しばらくすると、怠zyになる傾向があります
  • 将来的には大きな利益を期待していますが、寿命が尽きるまで維持する必要があります
  • あなたが望んでいたほどきれいで、賢く、安全ではありません
  • 後で振り返ると、一体何を考えていたのだろう
  • それがあなたを引き起こしたすべてのストレスにもかかわらず、あなたはとにかくそれを愛しています。

主な違いは、誰かがソースコードを盗むと動揺することですが、私たちは誰かが子供を手から離してくれることをしばしば喜んでいます。


4

プログラミングは、工場や組立ラインを構築するようなものです。

自動生産ライン

ソフトウェアは、コンピューター内に存在する機械または組立ラインと考えてください。一部の原材料とコンポーネントは機械に供給され、一連の手順に従ってそれらを最終製品に加工します。これらの手順は、特定の順序で特定のパラメーターセット(時間、温度、距離など)に対して特定の操作を実行するように設定されています。実行する操作の詳細が正しくない場合、機械のセンサーが正しく較正されていない場合、または一部の原材料またはコンポーネントが期待される品質基準内にない場合、操作の結果が変わる可能性があり、製品は判明しません予想通り。

このような機械は、その操作と許容可能な入力が非常に硬直しています。機械は、設計者の知性や現在の動作環境に疑問を投げかけません。指示されている限り、手順に従い続けます。原材料やコンポーネントの変更が後の操作で起こったことに劇的な影響を与える可能性がある場合でも、マシンはその手順を実行します。プロセスを見直して、目的の結果を補正して生成するために手順の変更が必要かどうかを確認する必要があります。製品の設計または構成を変更するには、実行する操作またはその順序を大幅に変更する必要がある場合があります。生産担当者は、業務間の望ましくない影響を減らすために可能な限り業務を分離することの重要性をすぐに学びましたが、処理が行われるときに、コンポーネントが含まれている条件について多くの仮定が行われます。異なるオペレーティング環境で最終製品がユーザーの手に渡るまで検出されない可能性のある仮定。


3

速い馬鹿が書かれたエッセイを必要とする数学のクラスを渡すのを助けます。


2

コンピュータープログラミングは、ボードのサイズ、プレイするピースの量、およびそれらのピースを管理するルールがゲームの進行とともにサイズと複雑さが増すチェスのゲームをプレイするようなものです。



1

CS /プログラミングクラスの新入生は、実際には非プログラミングユーザーのようです。ロボットの例は良いです。

80年代に、ロゴ、カレル(または同様のプログラミング環境)を使用して、ユーザーがプログラミングを学び、タイプライターを備えたテレビの代わりにロボットのようにコンピューターを見て、多くのことを助けました。これらのツールは、中学校や高校で一般的に使用されています。

その実用的なプログラミングは、学生がコンピューター関連ではない場合でも、問題解決スキルを習得するのに役立ちました!!!

または、たとえ学生がプログラマーにならなかったとしても。

一部の大学および大学も、初年度のコースでこれらのツールを適用しました。

多くの高校がなぜロゴとカレルを教えるのをやめるのだろうか...


1

Mythical Man-MonthのFred Brooksのアナロジーが好きです。プログラミングは魔法を演奏するようなものです。

詩人の言葉とは異なり、プログラム構成は、移動して機能するという意味で本物であり、構成自体とは別の目に見える出力を生成します。結果を印刷し、絵を描き、音を出し、腕を動かします。神話と伝説の魔法は私たちの時代に実現しました。キーボードに正しい呪文を入力すると、ディスプレイ画面が生き生きと表示され、今までになかったものや不可能なものが表示されます。...

(1)正しく実行する必要があります。この点でも、コンピューターは神話や伝説の魔法に似ています。呪文の1つのキャラクター、1つのポーズが厳密に正しい形式ではない場合、魔法は機能しません。人間は完全であることには慣れておらず、人間の活動の一部がそれを要求することはほとんどありません。完璧さの要件に適応することは、プログラミングを学ぶことの最も難しい部分だと思います。


1

「[...]しかし、あなたはコンピューターが得意だと思った!」

これは通常、オタクをtrickしてコンピューターを修正しようとする試みです(あなたはそれらを間違っていることを証明する衝動を感じますか?)。私の標準的な答え:
私はプログラマーです。それは自動車エンジニアのようなものです-彼はおそらくあなたのブレーキを修正する方法を知らないでしょう'72 Trabant、そして彼が知っていれば確かにそれをしないでしょう。メカニックがそうするでしょう!



0

プログラミングは、大量の力を行使するようなものです。コンピューターには、好きなことをさせることができます。あなたの想像力と投資する時間の長さによってのみ制限されます。

プログラマーは家のメーカーのようなものです。私たちが作った家についてのすべてを伝えることができます。しかし、私たちが偶然道路を通り過ぎている偶然の家を尋ねると、おそらく私たちはあまり知らないでしょう。ただし、その家で何かを追加したり変更したりする必要がある場合は、所有者が許可すればそれを実現できます。


0

プログラミングに関する Chris Crawfordの古い記事の1つで、彼は複雑なプログラムを官僚主義に例え、メモをやり取りすることで通信する複数の機関を持ちました。ソフトウェア開発を説明するとき、それが非常に有用な隠phorであることがわかりました。


0

私は通常、プログラミングをジグソーパズルと同一視しています。

新しいプロジェクトを作成するためには、たくさんのピースがあり、そのうちのいくつかはこのイメージに属していません。また、パズルが完成したときのプレビューはありません。ただし、サイズと一般的な色はわかっているため、推定は可能ですが、必ずしも正確ではありません。

既存のプロジェクトを修正するために-猫がやってきて、完成したパズルの塊を叩き落としました。少し時間がかかりますが、フレームワークは既に存在しているので、それほど悪くないはずです(変更の必要性に応じて)。

また、進捗状況の説明にも役立ちます。私の最近のプロジェクトの1つで、ある時点でそれをどのように説明すればいいのか疑問に思っていました。内側のピースの場合、半分を少し超えるように、ボーダーピースが行われます。残っているものはすべて互いに独立しています。今私がしなければならないことは、ギャップを埋めることです。


-1

悲しいことですが、プログラミングは、その方法を学ぶことによってのみ理解できる作品です。

プログラミングにはいくつかの異なるレベルの知覚があり、異なる側面とは異なります。

低レベルでは、「非常に非常に物の言えないマシンのために、非常に非常に詳細な指示を書く」ことです。

次のレベルでは、複雑さに対処しています。作業を簡素化するための新しいメタファーの作成。高等数学のように。

さまざまな側面から、バージョン管理、自己文書化コード、プロジェクト構築、テストなどの補助技術の使用。

反対側から、その構築「ユーザー」インターフェース(文字通りではなく、APIもUIを意味します)、起こり得るエラー(ユーザー、データ、またはそれ自体によって行われます)を予測し、エラーに対応します。

そして最後に。

プログラミングのメタファーは文学です。最初にアルファベットを学ぶ必要があります。しかし、これで小説を書くことは始まりません。

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