ライブができないミュージシャンのように感じることもあります。プログラミングはかなりクールなスキルであり、非常に広い世界ですが、その多くは「カメラを外して」、つまり観客から離れたオフィスで頭の中で行われます。
もちろん、他のプログラマーとプログラミングについて話すことができ、ピアプログラミングがあり、人々に示すことができるものを作成することができますが、プログラマー以外の人にあなたが何をするか、またはどのようにしたかを説明することになると仕事での1日は、ちょっとトリッキーです。
どのようにしてあなたの人生の非プログラマーにあなたが何をしているのかを理解させますか?
注:この質問はクライアントの期待を管理することに関するものだったため、これは 非プログラマに開発プロセスを理解させる の繰り返しではありません。
三つの言葉:
dumb it down
プログラミングは複雑です。それを理解するには多くの作業が必要です。そしてプログラミングの喜びはさらに微妙です。
私の成功などを他の人(つまり家族)に伝えるには、より一般的なレベルでコミュニケーションする必要があります。プログラミングを通常の現実世界のものと比較してください。
(つまり、ダッシュボードと座席を備えた車へのオブジェクト、および...)
通常の日常の概念よりも複雑な、聴衆が理解しているものを使用できるので、聴衆について何かを知っているとさらに良いです。
たとえば、妻は学校の先生だったので、ソフトウェア開発プロセスの一部を、彼女が使用しなければならなかった教育プロセスと比較できます。それは非常に役立ちます。
しかし、最終的には、さらに単純化し、単純化し、さらに単純化する必要があります。それでも、優れたユニットテストを備えた巧妙に作成されたクラスがいかにクールであるかを誰かに理解させることは困難です。 :)
私も試しません。それらが少なくともプログラミングの基本的な理解を持っているのに十分に技術志向でないならば、私は彼らに詳細で退屈するつもりです。通常、「私はWebサイトを作成する」または「Xを実行するためのコンピュータプログラムを書く」などの非常に高いレベルを使用します。
兄のロブにそのことを聞いてもらいました。 (彼は、子供向けの本、美術館のインテリアなどのアーティストおよびイラストレーターです。)
私はそれを彼に見せることで説明しようとした ハリー・ポーターのリレー・コンピューター 、それはコンピューターとプログラミングの本質をガットフィールのような方法で捉えていると思うので。
それは彼が欲しかったものではなかった、そして私はちょっとイライラした。
後になって初めて、本当の問題が何であるかがわかりました。私はこのオスカーワイルドの引用を思い出しました:
実際には、文明には奴隷が必要です。ギリシャ人はそこにかなり正しかった。醜い、恐ろしい、面白くない仕事をする奴隷がいない限り、文化と熟考はほとんど不可能になります。人間の奴隷制は間違っており、不安で、意気消沈します。機械的奴隷制、機械の奴隷制では、世界の未来が左右されます。
エンジニアとして私をワクワクさせるのは、機械的なスレーブを構築していることです。私は子供の頃、ダムを小川に置き、水車で電気を作りたかったので、私のために何かをすることができましたが、見ました。車のエンジンにはカムシャフトがあります。それは実際には原始的なプログラムです。必要なときにバルブを開閉しますので、実行する必要はありません。
アーティストの世界は完全に異なります。目を閉じて、ベートーベンの交響曲第9番の奏法を聞くと、移動します。あなたはそれに完全な注意を払わなければならず、それが終わったとき、あなたはそれを待ち望んでいます。フランクロイドライトの傑作家、フォーリングウォーターを訪れると、あなたは輸送されます。正直なところ、誰がそこに住むことができるのかわかりません。どこで混乱を起こすことができますか?それはあなたを完全に捕らえます。それは建築の交響曲です。
アートはあなたのためにあなたに何かをしません、それは何かにあなたをします。
私は自分がしていることにアートを見つけようとしました。見れば美しさはありますが、見なければなりません。それが私たちをつなぐものでした。
問題解決の観点から説明しようと思います。私は問題を解決するためにコンピュータープログラムを使用することを選択します。そうすることで、解決しようとしている問題の観点から、自分が何をしたかについて話し合うことができます。彼らがそれを理解したら、プログラミングを介してそれを解決するためのジャンプはそれほど遠くなく、通常は技術者以外のタイプによって行うことができます。
ストーリーを伝えます。自分の仕事に焦点を当てるのではなく、同僚との関係について、自分が何をするときにどう感じるか、どのように情熱を傾けているのか、または退屈しているのかに焦点を当ててください。
この目的のための私の2つの主な類似点は、レシピと大規模な官僚です。それが私がこのQAで説明したものです: 15歳の人にプログラミングを説明するのに30分
私はレシピのアナロジーを何度も使用して、プログラミングとは、従うと具体的で予測可能な結果が得られる厳密な一連の命令を記述することを説明しています。
ほとんどの人はレシピのアナロジーを超えて本当に理解する必要がないので、私は実際には官僚のアナロジーを数回だけ使用しましたが、どちらの時代もその人にとって非常に明るいものでした。彼らはプログラミングがすべてのコード行の完全なリコールを意味すると考えていたようです(たとえば、「このようなくだらないメモリがある場合、どのようにコンピューターをプログラムすることができますか?」)。しかし、それは本当に一緒に動作する多くの自己完結型モジュールを構築することに関するものですより大きな目標を達成するために。プログラムのモジュールは、大企業の部門のようなものです。自己完結型のユニットで、ほとんどが全体の一部を処理し、メモを通じて他の部門と通信します。
コード自体ではなく、コードの背後にあるアイデアの観点から何かを説明すると、私は最も反応が得られると思います。私はすべての専門用語を取り除き、プログラミング関連の用語に言及するのを避け、アイデアと実際に何が行われているのかについて話します完了。
たとえば、最近、スパムフィルターのしくみを説明しようとしました。スパムで一般的に見られる単語とスパムでは見られない単語の記録が保持されると私は言った。この記録は、既知のスパムメールと非スパムメールを使用して作成されています。その後、新しいメールが届くたびに、スパムのように見える単語の数(つまり、スパムの単語の記録で発生)とスパムでないように見える単語の数を確認します。スパム単語が多すぎる場合、それはおそらくスパムであり、そのためスパムビンに送信されます。私が話していた非技術系の人々は、その考えをかなり順守していました。
メタファー
多くの場合、私はそれをプログラムとしてまったく説明しません。類似した相互関係を持つ完全に異なる概念として表現しようとします。
それはプログラムを視覚化することをもっと面白くし、時にはそれを私が新しい見方でそれを見るのに役立ちます。
電流と電圧について話すことで、電気を使ったことがない人に電気について説明しませんか?さらに、いくつかの概念を、超高機能コンピュータプロセスが魔法のようにそれらを実現するかのように説明するのは楽しいです。小さな物語の想像力は、コンピュータが実際にどれほど冷たく、合理的であるかの現実として、彼らを傷つけません。
私は同様の質問に回答しました 詳細には ですが、要点は「プログラミングは工場や組立ラインの構築のようなものです」です。
プログラミングしていない多くの人々は、プログラマーが何千ものコード行を視覚的に検索して誤ったコンマを探し、バグを退屈に探すことに多くの時間を費やしていると信じているようです。だから私はまずこれが事実ではないことを彼らに保証します、そしてもしそうであったなら、私はそれで完全に絶望的でしょう。
コンピュータプログラミングと料理本を書くことをよく比較します。クックブックは人々のための一連の指示であり、コンピュータプログラムはコンピュータのための一連の指示です。一部のプログラムはクックブックよりもはるかに複雑であり、プログラムはより頻繁に変更されますが、構造にはいくつかの類似点があります。クックブックにソースを作るための指示の7つのコピーが含まれていて、レシピを変更する必要がある場合、誰かがそれらすべてのコピーを見つけてすべて修正する必要があります。
いい例えは、工場を建てることだと思います。ほとんどの人が「How it's Made」のようなものを見たことがあります。そこでは、いくつかのアイテムがさまざまなコンベヤーベルトや機械を介してシャッフルされ、できれば最終的に完成品が出てきます。私はそのようなものを構築することを人々に伝えますが、物理的なアイテムを扱う物理的な工場ではなく、それらは仮想であり、データを扱うのです。もちろん、これはあらゆる種類のプログラミングにとって良いアナロジーではありませんが、複雑さの良いアイデアを提供し、多くの種類のアプリケーションを並行して実行すると思います。
エキゾチックな粒子と反時間のある奇妙な宇宙に住んでいた場合、それを家を建てるのと比較します。
あなたは本当にクールな家のアイデアを持っているので、それがどのように見えるかの大まかなスケッチを作成し、どのように進めるかについての一般的な計画を持っています。あなたは金物屋に行き、壁を作るためにいくつかの木材を購入しますが、地面がでこぼこしているので倒れ続けます。セメントを購入して土台を固めても、セメントが乾燥せず、その理由を理解できません。金物屋に戻って理由を尋ねると、従業員は緊張状態になります。使用したセメントが1989年の秋に開発されたと言うまで、8つの異なる金物店に行きますが、1989年の冬に物件を購入したため、互換性がなく、最新の2013.1.1セメントを販売しています。基礎を築くために戻って、そうするとすぐにセメントが消えます。今回はすべての従業員が緊張状態になるので、家をググると、かつて核実験サイトだったことがわかります。次に、土壌に対する核実験の影響をグーグルで調べて、それがフリーラジカルを引き起こすことを見つけます。あなたはそれをググって電磁放射、それからフェルミオン、それからボソン、それから弦理論、そして猫についての何かを研究し始めます。あなたは多くの時間を浪費したのであきらめたくないので、ボトルを強く叩きました。あなたは遅く帰宅し、妻と彼女の子供たちがあなたの時間を費やしているので彼女が家を建てることができない理由であると主張して、あなたの妻に怒りを払います... ほぼ家を完成させる。なぜ最初に家を建てたかったのかさえわからない。
あなたは本当にあなたの技術を実際に共有することはできません-あなたの仕事の見出しだけを他の人と共有してください
しかし、あなたができることは、あなたのクラフトを共有する代わりに、あなたと同じクラフトにいる人々とあなたの人生を共有することです:
私は通常、それがどのように行われるかについて話しませんが、むしろ作品の特徴です。
私は通常、それが信じられないほど複雑であり、非常に複雑であるため、1人の人が何が起こっているのかを正確に完全に理解し始めることはできないと強調します。おそらく、相互作用するさまざまなパーツ(フレームワークを介した電子機器)を30年間勉強する必要があり、さらにコードのアクティブな行ごとに約1時間かかるでしょう。それは、最新バージョンを破壊する別の10年です。
もう1つの重要な部分は、数千、おそらく数百万の人々が生活を豊かにするためにそれを使用できるほど柔軟なもの、ユニークなもの(少なくとも詳細には)、およびあなたが多くから学んだものを作成することがいかに報われるかです。
この時点で誰も私の靴下を口に詰め込んでいない場合、私はアプリケーションを喜んでデモンストレーションし、関連する少し複雑さと可能な柔軟性を示します。
他の15の答えに対する別の見方として...
私の仕事(プログラミング)の詳細を説明するのではなく、仕事が解決するsolutionsに焦点を合わせようとします。コンパイラや何かを書いているのでない限り、それは通常非プログラミングドメインです。その場合、なぜそれが役立つのかを説明する必要があります。
そうすることで、複雑な性質であり、それが「現実の世界」とどのように関連しているのかを人々が理解しやすくなります。
類推として、中世の鍛冶屋として、私はおそらく敵を切り刻むために剣を作ることを説明します(地元の居酒屋の女性に)、鋼を焼き固め、特定の角度と力でそれをハンマーで打つ方法ではありません(ただし、彼らが聞く)。うまくいけば、彼女は敵をバラバラにハッキングすることが有用(...)であり、実行するのが難しい(鋼鉄の不足、装甲の敵、煙の多い職場など)可能性があることを理解しているため、複雑なタスクを実行することに対する理解を得ることができます。
(つまり、アンビルをキャストすることはコンパイラーを作成することと同等であり、それらが何に使用されるかを説明する必要があります...)
交響曲や数学的論文や小説を書く以外に、プログラミングがこのレベルの複雑さと複雑さを持つタスク/構造に取り組む唯一のチャンスであることを伝えます。もちろん、まともなWebアプリが歴史的な傑作であると言っているわけではありませんが、人々がこのようなレベルで毎日あなたの心を使うようになれば、彼らは「それを手に入れます」。多くの仕事は価値があり、高額ですが、何度も何度も繰り返される、かなり単純な手続き型のタスクになります。
少なくとも、それが私の見方です。私は間違っている可能性があります。