プログラミング言語を勉強していることを両親に説明するにはどうすればよいですか?


64

現在、コンピューターサイエンスの修士号を取得しています。プログラミング言語、特に型システムに興味があります。私はこの分野の研究に興味を持ち、次の学期にこのテーマの博士号を取得します。

さて、ここに本当の質問があります。コンピューターサイエンスや関連分野の知識がまったくない人に、私が(したい)ことをどうやって説明できるのでしょうか。

タイトルは、私が自分のしていることを両親や友人などに説明することさえできないという事実から来ています。ええ、「全体のポイントはソフトウェア開発者がより良いソフトウェアを書くのを助けることです」と言うことができますが、私はそれが本当に役に立つとは思いません。私は中世の人にとって自動車整備士だと言っているように感じます。彼らは単に私が何を話しているのか知らず、それを改善する方法は言うまでもありません。

誰も現実世界と良い類似性を持っていますか?「a-ha」の瞬間を引き起こす啓発的な例は?コンピューターサイエンス(または学術)の経験がない60歳以上に、短くてシンプルなコードスニペットを実際に見せるべきですか?その場合、どの言語を使用すればよいですか?ここの誰かが同様の問題に直面しましたか?


コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
DW

3
パネルを正しく理解していれば、この質問には下票と1つ以上のクローズフラグが付けられました。私がそれを改善できるようにコメントを残すことを検討してください。私はしばらくここに潜んでいましたが、このサイトに積極的に参加するのはこれが初めてであり、いくつかのポリシーに精通していないかもしれません。
-effeffe


1
この質問が特定の問題に関連する質問よりも多く投票される理由がわかりません。これはより便利です。この質問はばかげており、ばかげて投票されました。信じられない!
-nbro

2
@nbro質問について何がばかげているのかわかりません。また、特定の質問が他の質問よりも「有用」であるとどのように判断したかわかりません。
-effeffe

回答:


59

数分あれば、ほとんどの人は紙に2桁の3桁の数字を足し算する方法を知っています。、それを行うためにそれらを求める(あるいは彼らが持っていたならば、彼らは可能性があることを認めざるを得)、彼らは念入りにこの作業を行うことを承認してもらう:場合は、この数が9より大きい場合、その後、等々キャリーを追加し、。彼らが何をするかについて与えたこの記述はアルゴリズムのです

これがアルゴリズムという言葉を人々に教える方法であり、私の経験ではこれが最良の例です。次に、コンピューターが実行しなければならないより複雑なタスクがあることを想像できるため、これらのアルゴリズムをコンピューターに供給するための明確な言語が必要であることを説明できます。プログラミング言語は急増しています。人々は自分の考えを異なった方法で表現しているため、あなたは間違いを犯しにくいようにこれらの言語を設計する方法を研究しています。

これは非常に認識可能な状況です。ほとんどの人は、使用するコンピューターがプログラムを実行している、またはそれらのプログラムが人間が書いたソースコードである、またはコンピューターがソースコードを「読み取る」ことができる、または算術に関連付けられた計算のみがコンピューターであるという概念を持ちません(データの移動、およびネットワーキングなど)を行います。

私の研究は量子コンピューティングであるため、人々が私に何をするかを尋ねるとき、私はそれを説明しようとはしません。その代わりに、私は量子物理学が存在することを説明しようとします(彼らは通常シュレディンガーの猫と一度に2つの場所にあるものを聞いたことがあります)、そしてこの奇妙な物理学のために、より高速な計算が可能になるかもしれません。

私の目標は、自分が入った時よりももう少し知識が豊富になったと感じさせることです。これは、私の特定の研究の質問を説明するよりもはるかに価値があると思います。


27
カードのデッキを並べ替えることも、アルゴリズムの概念を導入する簡単な方法です。
モーウェン

2
@Morwennそれは本当です!私たちが日常生活で実行する多くのアルゴリズムがあります!カードの処理はアルゴリズムであり、トラフィックには多くのアルゴリズムの側面がありますが、それらはイベントベースであり必須ではありませんが、自動操縦で行うときの調理はアルゴリズムです。私が追加が好きな理由は、全員が小学校で同じアルゴリズムを学んだのに対し、数字のリストを並べ替えるには、人々の戦略が異なり、彼らは系統的ではない:彼らは近くの、隣接する数字のパターンを見つけようとし、誰もが知っているわけではないとにかく持っていることになっているカードのデッキを注文します(スペードの前にハートですか?)
Lieuwe Vinkhuijzen

個人的に量子コンピューティングについて尋ねられたとき、私は物理学を完全に避ける傾向がありますが、一般的なアイデアを与えようとします(量子コンピューターは良くも速くも動作しないが、通常のコンピューターの範囲外の方法で単純に計算を行うことができる)。彼らがその方法を尋ねると、基本的にはほとんどのアルゴリズムがそうであるSIMD処理(並列入力データの指数関数サイズにアクセスするのに十分な線形リソース)の単純化されたビューに満足する傾向があります。
ヴィー

単なるカードを超えることができます。私は最近、クイックソートのバリアントを使用して、基本的な挿入ソートには多すぎるため、考えずに整理しなければならない書類のスタックをソートしていることに気付きました。
JAB

@JABすごい!しかし、おそらくあなたはすでに心の奥底でQuicksortを知っています。加算と並べ替えを説明する利点は、誰もが同じ加算アルゴリズムを持っていることですが、一般的な並べ替えアルゴリズムを持っている素人はいません。一方で、それは利点かもしれません!さまざまなアルゴリズムについて説明します。これは、csの外で数学的なことを考えている人と話をするときに取るルートであり、同じタスクの異なる時間バウンドで異なるアルゴリズムの概念を理解し、下限が難しい理由です。
リューウェヴィンクハイゼン16年

18

私はこのようなものを試してみます:

プログラマは何をすべきかをコンピューターに伝えることができます。そのためには、プログラミング言語を使用する必要があります。これは、コンピューターと人間の両方が理解できる言語です。たとえば、Word文書を編集してキーを押すと、コンピューターは押した文字を表示します。これは、プログラマーが次のようなプログラムを作成したためです。ユーザーが「A」を押した場合、ドキュメントに「A」を入力します。ユーザーが「B」を押した場合、「B」をドキュメントに挿入します。コンピューターは、プログラマーが書いたプログラムの規則に従うだけです。

今では、プログラマーが間違えて愚かなルールを書くことがあります。とにかく、コンピューターは愚かなルールに従うことを試みますが、悪いルールに従うと、何か悪いことが起こります。たとえば、Word文書を編集しているときに、突然すべてがフリーズし、コンピューターが反応しなくなることがあります。これは、Microsoftの一部のプログラマーが不完全なプログラムを作成したためかもしれません。

私の仕事は、他のプログラムといくつかの数学を使用して、そのような間違いや他の間違いがないかプログラムをチェックする方法を発明することです。基本的な考え方は、プログラムを実際に実行せずに実行したときに何が起こるかを予測する方法を理解することです。

もちろん、研究であるため、一度にすべてではなく、この側面のほんの一部に取り組んでいますが、それは私たちが達成しようとしていることの全体像です。

私は自分の分野(ドメイン固有の言語)で同様のスタイルの説明を使用していますが、「ああ、あなたはコンピュータ科学者であり、私は決してやることができなかったので、立ち去って話をやめることができました」あなたに」問題。重要なのは、この場合のWord文書のように、他の人が関係できる例に達するまで、最初の数文を取り出すことです。会計士向けのExcelや上司向けのPowerpoint、ゲーマー向けのコンピューターゲーム、Webブラウザーなど、他の人に特別なケースを提供するためのボーナスポイント。

この表面的なレベルに留まる必要はないことに注意してください。あなた(および他の人!)たとえば、「私の現在のプロジェクトでは、昨年発明したものが実際に機能することを数学的に証明しようとしています。つまり、プログラムが本当に意味するもの、プログラムが意味するものを慎重に定義する必要があります。予測が実際に正しいことを示すことができます」。


12

ほとんどの人はレシピを理解しています。指示に従えば、まともな食事が得られます。ただし、指示に従うのが難しい場合があります。たとえば、perogiesを作成しているとき、次のような指示があります。おばあちゃんのポーランドPerogiesから単語ごとに取ったものです。

ペロギーを調理するには:軽く塩水を入れた大きな鍋を沸騰させます。一度に1つのペロギーをドロップします。彼らは上に浮かぶときに行われます。沸騰しすぎないでください。スロットスプーンで取り外します。

うわぁ。おばあちゃんの親切なアドバイスを見てみましょう。一度に1つずつ落としてください ...だから、彼らはポットにいる時間の長さがそれぞれ異なります。とった。それらは上に浮いた時に行われます。さて、「彼ら」はいくつですか?登場するたびにキャッチしますか?80%が最上部に浮いてからすべてを取得するのを待ちますか?これは非常に不正確です。沸騰しすぎないでください。彼らがあまりにも長くないように、彼らが水浸しになろうとしているときに測定するにはどうすればよいですか?5つが同時にトップに表示される場合、それらすべてを取得する時間はありますか?

そして、私を信じて、私は私の時代に多くのペロギーを台無しにしました。これは、ペロギー料理人が以前に遭遇したことのある深刻な問題です。しかし、最も基本的な分析でさえも出てくるこれらの問題にもかかわらず、人々はこのまったく同じ方法を使用してまだペロギーを作ることができます。しかし、より多くのペロギーのバッチを成功させ、失敗するペロギーのバッチを減らすためにできることはありますか?

誰かがレシピをより信頼性の高いものにすることに特化した場合、それは壮大ではないでしょうか?「perogiesをパイプライン処理して、水面から飛び出したり外したりできる」と言った人。または「私たちはもちろん安全なペロギーに特別な染料を追加することができます。それはそれらに異なる色合いを与え、最も暗いものを最初に出すことを知っています。このレシピを取り、潜在的な問題を修正できる専門家が必要です。世界中のペロギー料理人の生活が楽になり、犬に与えられる水浸しのパスタポテトの塊が少なくなります。

プログラマーも常にレシピに従います。しかし、時々、彼らが使用する機器、彼らが使用する指示、および彼らが使用する解釈は、彼らが望む豪華な食事を作るために一緒にならない。ありがたいことに、プログラマの生活をより生産的にすることに専念する人々がいます。あなたの場合、プログラマーが使用するツールの1つである言語に特化して、それらを改善しようとしています。


7

これを私がお母さんに説明しようとする(試す)方法は次のとおりです。

プログラミング言語は、コンピューターに指示を提供するために人々によって使用されます。コンピューターが行うことはすべて、プログラマーがプログラミング言語で作成したコンピューターコードを介して行われます。

したがって、たとえば、ボタンを押したときにTVチャンネルを変更したい場合、これを行うにはプログラミング言語でコードを記述する必要があります。同じことは、ラップトップ、スマートフォン、その他の操作にコンピューターが関与するすべての場合に発生します。

プログラマーがすべてのプログラムを作成するために使用できる単一のプログラミング言語があるように思えるかもしれません。しかし、これは事実ではありません。すべての異なる種類のアプリケーションには、異なるプログラミング言語が存在します。

Webサイトの構築に使用されるものもあれば、ラップトップアプリケーション(Microsoft Wordなど)の構築に使用されるものもあります。

多くの異なるプログラミング言語が存在する理由の1つは、一部のタスクが他のタスクよりも一部のタスクにより適しているためです。別の理由は、いくつかの言語が異なるコンピューターで使用されるように設計されていることです。そのため、スマートフォン用に作成されたコードを常にラップトップで実行できるとは限りません。また、一部のプログラマーは多くの言語でプログラミングでき、多くは新しい言語をすぐに習得できるか、または習得しますが、どのプログラマーも一部の言語を他の言語よりもよく理解します。

したがって、プログラミング言語は、コンピューターを機能させる重要なテクノロジーの1つです。適切に設計されたプログラミング言語は、プログラマの生産性を大幅に向上させることができます。また、セキュリティを向上させ、プログラミングエラー、バグ、および欠陥を減らすこともできます。

そして基本的に、これは私が研究していることです。プログラミング言語のさまざまな部分はプログラマの生産性にどのように影響しますか?特定の言語のどの部分がWebサイトのコードを書くのに適していますか?一部の言語が他の言語よりも人気があるのはなぜですか?

これらの質問は難解で、平均的な人の日常生活からはかけ離れているように思えるかもしれませんが、その反対は真実です。プログラミング言語の研究は、コンピューターを使用する製品やサービスにとって不可欠です。そして今日、それはほぼすべてを意味します;)


7

あなたの最善の策は、人間の言語との類推を形成することです。

プログラミング言語は、コンピューターに指示を提供するために使用されます。人間の言語は、アイデアを他の人々に伝え、自分の考えを形成するのに役立ちます。サピア・ウォーフの仮説は、あなたが使用している言語は、あなたの思考に影響を与えることを言います。(Sapir-Whorf仮説がどの程度真実であるかは議論されていますが、プログラミング言語を議論するときに真実であると受け入れることができます。

多種多様な人間の言語があり、一部はエキゾチックであると考えられる機能を備えています。例えば:

  • 一部の言語では、すべての陳述で証拠性を示す必要があります:陳述があなた自身の経験、あなた自身の推論、伝聞、推測などによるものかどうか
  • 一部の言語は、凝集によって巨大な単語を形成します。各単語は、その文法的な役割に関する多くの情報をエンコードするように大幅に変更される場合があります。 他の言語では単語をほとんど変更せず、その情報を表現するために単語の順序や助詞に依存します。
  • 言語の語彙サイズは異なります。一部の言語には、円周のみで翻訳できる単語があります(例:엄친아)。一部の言語には、他の言語が借用するほど優れた素晴らしい表現があります(例:Schadenfreude)。
  • 一部の言語には左/右の概念がありません。すべてを北/南/東/西で表現する必要があります。
  • 一部の言語には数字がありません。言語は、一般的な色名の数も異なります。
  • 言語は音韻論が異なります。たとえば、音節のレートはさまざまで、日本人は多くの単純な音節を使用する傾向がありますが、中国語は遅いですが、情報をトーンでエンコードします。
  • 言語は情報密度が異なります。中国語-英語-フランス語の翻訳を見ると、中国語版は紙の上で非常にコンパクトであり、フランス語がほとんどのスペースを占めることがわかります。
  • 英語などの一部の言語は無差別です。他の言語から単語を自由に借用して英語にすることができます。フランス語のような他の言語には、変化に抵抗する標準化機関があります。たとえば、アイスランド語は本質的に保守的です。

客観的に言えば、最高の言語はありますか?答えはあなたが何をしようとしているかに依存するかもしれません。

  • ラジオでひそかに通信しようとしているなら、ナバホがいいでしょう。(お気に入りの「書き込み専用」言語に言及してください。)
  • 将来の世代に警告を書き込もうとしており、碑文が今から数千年後に理解可能でなければならない場合は、中国語を使用することもできます(話者の数が多く、書記体系が安定しているため)英語(過去千年にわたって劇的に変化しましたが、非常に広く知られています)。(CとJavaScriptはおそらく「永久に」存続します。)
  • 同音異義語の多い中国人は、恥ずかしがり屋です。(Perlの詩)
  • おそらく中立性が重要です。その場合は、エスペラントを選択できます。(Javaは移植可能に設計されていますが、Cはそうではありません。)
  • 考えを完全に正確に表現する必要があるかもしれませんが、自然言語では十分ではありません。あなたはイスクイルに頼らなければならない
  • 文化的な違いが大きく、特定の単語との文化的な意味合いがあるため、一部の言語ペア(アラビア語と英語など)間の翻訳は非常に難しい場合があります。同様に、一部のアイデアは特定のコンピューター言語では簡単に表現できません。これは、概念が存在しないためです(末尾再帰など)。

最終的には、コンピューター上のすべてが機械語に翻訳されますが、仕事に適した言語を選択すると、ソフトウェアの生産性、信頼性、パフォーマンス、俊敏性に大きく影響する可能性があります。「深刻な」プロジェクトにはAdaやJavaのような拘束ジャケット言語を、最大のホイップティチュードには RubyまたはPerlを選択します。データベースを照会する場合、SQLは通常の言語です。独自のCコードを書くのはばかげています。

これらのアナロジーに基づいて、関数プログラミング、型安全性、型推論などのアイデアを数時間説明できると確信しています。


1
これの難点の1つは、一部の人々は自分の自然言語について実際に反映したことがないことです。そのため、言語の例は、プログラミング言語の概念と同じくらい、一部の人々にとっては理解しにくいかもしれません。その人が(少なくとも)バイリンガルであることを知っている場合、見込みはおそらくもっと良いでしょう
。...-TextGeek

@TextGeek英語の中にも、方言があります。人々は二重否定や前置詞で終わる文のような言語規則について議論します。言語は常に進化し、時には物議を醸すような方法で進化します。テキストメッセージの人気により、新しい略語が登場しました。アメリカ英語では、接尾辞「-gate」を追加することで、名詞をスキャンダルに変えることができます。言語の革新と多様性を理解するためにバイリンガルである必要はないと思います。
200_success

3
  • コンピュータ言語は、おおまかに人間の言語に関係しています。標準/共通/共有語を使用します。数千の人間の言語があり、一部は機能していませんが、他の言語はアクティブであり、その語彙と用法は時間とともに絶えず進化しています。一部の人々は、以前は表現できなかった概念を表現するために、新しい便利な言葉を作成します。コンピュータ言語と人間の言語の別の重複する側面は文法です。英語などの一部の言語には、非常に複雑な文法があります。すべての異なる時制とそれらを支配する複雑なルールを考慮してください。他の言語には同じ時制がありません。別の相関関係は品詞との関係ですカテゴリ、たとえば名詞、動詞、副詞、形容詞など、これらはコンピュータ言語のタイプにやや似ています。これまで考慮されていなかった品詞カテゴリの異なる新しい言語を作成したり、異なる言語からの品詞の新しい組み合わせを使用して新しい言語を作成したりすることを想像してください。そのため、言語学はコンピューターサイエンス、たとえばチョムスキーの言語理論のespと関連していることに注意してください。

  • ソフトウェアとハ​​ードウェアは、多くの場合、エンジンマシンに関連しており、この名前が付けられています。複雑な24時間365日体制の生産システムを変更しようとすることは、飛行中に飛行機のエンジンを変更するようなものだという古いソフトウェアの例えがあります。また、ジェットエンジンは非常に複雑であり、交換可能な部品の非常に正確な仕様を伴うことに注意してくださいそして、ここではハードウェアを制御するコンピューター言語に類似しています。ジェットエンジンの構築方法を正確に記述するドキュメントの複雑さをすべて想像してください。すべての部品、それらの構築方法、それらの組み合わせ、それらの組み立て方法など。それらは、正確なフォーマット/構造/従来のルールを使用して、エンジニアによって作成/コンパイルされます。ソフトウェアはこれに多少似ています。

  • 機械、科学や数学の教育や子供なしで誰もが基本的な考え方との多くの側面を理解することができますチューリングマシンを!素晴らしい創造。チューリングはタイプライターやテレタイプマシンに触発されたのではないかと疑われています。状態テーブルを記述し、乗算を計算するサンプル状態テーブルを見せることができます。また、チューリングマシンのyoutubeアニメーションを見て、乗算のような基本的な計算を計算することができます。状態テーブルは、計算や文字通りできることを伝え決める言語を、そして入力が文字通り呼ばれていることを言葉。実際、チューリングマシンは言語の単語を受け入れます次に、両方に乗算を計算する2つの状態テーブルがあるが、一方は他方よりもはるかに高速または効率的であり、調査にはより良い状態テーブルの概念を見つける必要があることを伝えます。状態テーブルを効果的に構築する方法を理解するには、大きな状態テーブルの内容を要約するプログラミング言語が必要です。コンパイラは、大状態テーブルにプログラミング言語で書かれたコードに変換します。

  • ソートアルゴリズムは、コンピューターサイエンスへの優れた入門レベルのメタファーです。一つは異なるで見ることができる命令のリスト別名アルゴリズム各ソートについて。バブルソートと挿入ソートの違いを知ることができ、1組のカードを使用できます。さまざまな命令セットに焦点を当て、厳密な構文などを持ち、基本的な共通性/構造を持つ条件付きロジック、ループ、変数などを含む数学ステートメントと同じくらい正確な非常に正確な言語で記述する必要があると考えます、この正確な仕様の技術はコンピューター言語に関するものであることを説明する、およびいくつかの異なる言語が同じアルゴリズムを生成する可能性がありますが、これらの言語には非常に詳細に研究されているいくつかの微妙な文体のバリエーションがあるなど


1
なぜこれをダウン投票するのですか?多くの洞察があると思います。すべての点に同意することはできませんが、ここには多くの可能性があります。+1
effeffe

3

あなたは単に「私はコンピューターを仕事に教える人たちを助けている」と言う

アイデアは、プログラマーがコンピューターにプログラムを使って何かをすることを教え、あなたがそれらを手伝っていることです。彼らはすでにコンピューターについて少し知っていることを前提に機能すると思う。


「私はそれは、彼らがすでにコンピュータについて少し知っていると仮定すると仕事になると思う」あなたは慎重に私の答えを読めば、あなたは主な問題は、私はコンピュータが実際にどのように動作するかの手掛かりを持っていない人に何をすべきかを説明されていることがわかります:全体のポイントです。
effeffe

@effeffe:しかし、彼らはコンピューターの存在を知っていますか?そして、彼らは、自分でコンピュータを知らずに使用したことがなくても、「プログラム」、「アプリケーション」、または「アプリ」と呼ばれるものがあるという考えを持っている可能性があります。したがって、簡単にするために、プログラミングとは(特に)コンピューターが従うことができる指示を書き留めてアプリを作成することです。当然、プログラミングの詳細や改善方法を理解するには多くの時間と指示が必要になりますが、コンピューターやプログラムが時間の経過とともに良くなることを知っていれば、少なくともコンピューターについては少し知っています。
スティーブジェソップ

3

比較を使いたくない場合、Lieuweが提起した「アルゴリズム」はアイデアを伝えるのに非常に良いと思いますが、人間とコンピューターの間の誤解を減らしたいと言えます。結局のところ、あなたは言語を扱っており、それは人間にとって非常に基本的なものだと思います。それでは、コンピュータのふりをして、話をしたいだけの別の心になりませんか?

人間はコンピューターを作成したので、コンピューターの心の仕組みを知っています。しかし、コンピューターは通常、私たちの心がどのように機能するかを「知りません」。(または、私たちの実際の意図は、多くのサイクルにわたってコードのうろこに幸せに生きる、複雑で細かく作成されたバグを書くことでした;))誤解の可能性を減らします。それがあなたのすることです。もちろん、スペルチェックや文法のような類推は、この文脈では大歓迎です。


3

以下に、役に立つと思われる2つの類似点を示します。

  • 私の仕事は、楽譜の新しいアプローチを模索するようなものです。)主要な記譜システムは非常に洗練されていますが、作曲家、演奏者の時間/労力/エラーを減らす代替手段を検討したり、不格好なものや主要なシステムで表現できないものを許可したりすること、またはさまざまな種類の思考を促進するだけで、新しい構図につながります。(これにより、新しいものを採用するよう人々を説得することが課題の1つであることを理解しやすくなります。)

  • 私は業界の人々のためにより良いツールを設計するのを手伝っています。製造業の人々がコードレスドリル、レーザーカッター、3Dプリンター(いずれも60年前には存在していなかった)などの革新によって支援されているように、ソフトウェア開発業界の人々は、より強力で、より正確で、より堅牢な、または使いやすいプログラミング言語とその機能。


2

まあ、ほとんどの場合、言語を勉強する理由があります-その理由を使用してください。例えば:

私はコンピューターとそのアプリケーションをより安く、使いやすく、より安全にしようとしています。

それが彼らの注意をそそる何かであるならば、少し深く行ってください、しかし推論距離を忘れないでください-ほとんどの人々は学生の既存の経験と知識からあまりにも遠い何かを説明するのに大きな問題を抱えています。

言語はコンピューターのはしごの下にあります。説明しようとしている人々は、アルゴリズムが何であるかを知らないでしょう。十分穏やかに行けば何でも説明できますが、「プログラミング言語RnD」のような「深い」ものを説明したい場合は、多くのレイヤーを通過する準備ができています。あなたが説明している人々がすでに数学をうまく処理している場合、それは役立ちますが、それはコンピュータの知識と同じくらいまれです:)

類推で簡単に行きます。彼らは助けているように聞こえますが、私の経験からすると、たとえあなたが彼らが大きな助けだと思っていても、通常は混乱を増します。プログラミング言語は弁護士が話すようなものですが、実際にはプログラミングと弁護士の両方をまだ理解していない人にとってはあまり役に立ちません。追加のヘルプが本当に必要な場合、例は十分に機能しますが、説明している人(および正確に研究していること)にそれらを収容する必要があります

ゼロで除算できない方法を知っていますか?私は、コンピューターがゼロで除算しようとさえしないようにしているので、誰かがミスをしてもクラッシュしないようにしています。


▲段階的で穏やかなアプローチを提案するため。
PJTraill

1

最高のアナロジーは、あなたが話している人に合わせたものだと思います。彼らは画家ですか?あなたがやっていることは、より良いブラシを作る方法の理論を探求することと同等であるかを議論してください。この分野だけが600年ではなく60歳です!馬術家?長年にわたるタスク固有の馬靴の開発と比較してください。

彼らが本当にもっとよく理解したいなら、私がそれを説明する一番好きな方法は、納税申告書の記入と各行の指示について話すことです。20歳以上のほとんどの人がIRS Form 1040を使用した経験があり、記入したこれらのボックスは変数の割り当てについて話すのに非常によく対応しています。それから私は、ソフトウェアが1分間に約20億に相当することを指摘します(構成された数ですが、それは意味を成します)。コンピューター言語を勉強している場合、より良い指示が実際に重要である理由を人々が理解しやすい=)

それでも彼らが興味を持っているように思えるなら、これは私がフロー制御を説明しようとし始めているポイントについてです。通常、Form 1040のフロー制御についての議論が終わる頃には、彼らは興奮し始め、私のアイデアを政府に売却したかどうかを尋ね始めます!

私は組み込みシステムについてよく話します。そのため、時々フォーム1040の類推を一塊のパン(または500)を調理するロボットとマージします。通常はうまく機能しますが、何らかの理由でIRS税務フォームから口に良い味を残すものを作ることは、一部の人々にとっては非常に難しいストレッチです。


1

あなたの両親はある種のコンピューターを持っています。おそらく1つではなく、多数です。デスクトップコンピューター、ラップトップ、電話、またはiPadがあります。そうでない場合は、洗濯機、ビデオ記録、DVDプレーヤー、またはコンピューターを内蔵したものがあります。

そうでない場合は、「申し訳ありませんが、あなたはなんとかコンピューターなしで完全に生活できました。ですから、私が何をしているのかを説明することはできません。しかし、世界は変わりつつあります。私は何をしているのか知っています。」

彼らが何らかのコンピューターを持っている場合、あなたはこう言います:「これはコンピューターであり、魔法で動くだけではありません。賢い男や女があなたのコンピューターに働き方を教えるプログラムを書いたからです。これらの賢い男性と女性は本当に大変で、私がやっていることは、彼らが仕事を楽にするのを助けることです。」


-1

しばらく前に、コンピューターの経験がほとんどない、またはまったくない人でも簡単に理解できるプログラミングの良い例えは、編み物のレシピを書くことだと思いました。

優れた編みレシピには、同じ命令リストにいくつかのサイズが含まれており、ループとifステートメントを提供します。編まない人には読めません。エラーが含まれていると、パターンがずれたり、余分なスリーブができてしまいます。間違ったセーターに基づいてレシピが間違っていた場所を見つけて修正するのは、レシピ作成者としてあなた次第です。

その後、「私は、レシピが編み物のために異なっているかを見てかぎ針編み、Nålebindingと類似しています」と(あなたが実際に何のための類推見つける必要がXに学習の例を使用することができませんが)。


質問者はプログラミングを勉強していません。彼らはプログラミング言語の設計を研究しています。
デビッドリチャービー

@DavidRicherbyこれが、レシピがさまざまなタイプの手仕事をどのように見えるかを見て、OPの例を使用することを提案した理由です。明らかにこれらは非常に異なっています。
トールビョーンラヴンアンデルセン

-1

魔法です!

技術的なバックグラウンドを持たない人々がソフトウェア/プログラムを書く/ソフトウェアエンジニアリングを行うことの意味を問わないとき、私は彼らにそれが本当は何であるかを教えます:魔法。魔術師は特定のタスクを実行するために難解な言語で呪文を唱え、杖を振ると魔法のようなことが起こります。私は難解な言語で特定の呪文を呪い、マウスを小刻みに振ると、魔法のようなことが起こります(それらが関係する限り)。

納得できない場合は、スマートフォンの電源を入れて、実際にどのように機能するかを教えてほしいと頼みました。彼らは通常「私は知らない、ただそうする。私はボタンを押すと何かが起こる」と言う。それから私は彼らに言います:「はい、正確に、しかし、私は本当に何が起こっているかを知っています、そしてそれは基本的にハリー・ポッターが彼の杖を振って「ホーカス・ポーカス」と言っているのと同じです」これは完全に正当な説明だと思います。

ハリー・ポッターが誰なのか、彼が何をするのか、そして何が彼を特別なものにするのかをほとんど誰もが知っています(少なくとも彼は魔術師であり、魔法で強力なことをすることができます)。魔術師は魔法をさらに強力にするために新しい言語で呪文を書く必要があることを説明することができますが、それは真実からそれほど遠くありません。お気に入りの消費者デバイスでさらに素晴らしい魔法を作成できる、さらに強力なウィザードの世代を支援するために、より強力な魔法書を作成するプロセスを研究していることを伝えることができます。誰もが感謝しています。

壮大な失敗

それが失敗した場合、私はレシピの例に戻ります。ソリューションの不均一性は少なくとも人々に猫の皮をむく(またはケーキを焼く)複数の方法があることを教えており、これはプログラミングを行うものの一部ですトリッキー。また、CPUとしての立場に人を配置し、時には理解できないかもしれない指示に従うことにも役立ちます(ほとんどの人は、重曹とベーキングパウダーの違いと、レシピにどちらが含まれるのかを知らないでしょう)。

行き止まり

数学を例として使用するのは好きではありません。数学を行うには、ステップの目的を理解する必要があるからです。盲目的に指示に従うことで、あまり数学を行うことはできません(そうすることもできますが、通常は人間がそれを学ぶ方法ではありません)。素人が理解するには技術的すぎるため、例として並べ替えが好きではありません。並べ替えの例を評価できる人と話をしているのであれば、おそらく彼らは既にプログラミングが何であるかをある程度知っており、おそらく自分で試したことがあるでしょう。


1
これが質問とどう関係するのかわかりません。具体的には、質問は型理論を一般人に説明する方法を尋ねることであり、型理論数学です。
デビッドリチャービー

おそらく悲しいことに、おそらくそうではないかもしれませんが、一般的にプログラミングは、世界人口の99 +%にとって閉じられた本です。私は何年もの間、プログラマー以外の人にプログラミングを理解させようとしてかなりの時間を費やしましたが、成功しませんでした。さまざまな型システムの複雑さと珍味を説明することは、それらの同じ人々に素粒子素粒子物理学を説明することに似ています。そして、それは大丈夫です-彼らはそれを理解する必要はなく、おそらく彼らはそれを理解していないことを気にしません。それで十分です。:
ボブジャービス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.