web-dev-qa-db-ja.com

プログラマー以外の人に見せて、プログラミングがどのように「見える」かを説明する良い例は何ですか?

先日、私の友人が、プログラミングの際に数字のリストを見ているだけなのか、それがどのように機能するのかを尋ねてきました。私はそれが一般に数学の数式に似ていて、奇妙な英語の単語が投げ込まれていること、そしてそれは一般にほとんどが読みやすいことを説明しようとしました。しかし、それは非常にあいまいな説明であり、プログラマー以外の人にはあまり説明しません。

しかし、良い例となるものについて考えるようになりました。私が彼女のプログラミングや何かを教えたいからではなく、単に彼女にプログラムコードがどのように「見える」のかについての考えを与えるためにです。

そして、それは私が実際に良い例として何が機能するのか疑問に思いました。そして、それは驚くほど難しいことが判明しています。

私の最初の考えは明らかに単純な「Hello World」プログラムでした。しかし、それは本当に何も有用なものを示していません。関数、変数、またはifwhileなどの制御フロー構造を使用して、実際に何かを行うのプログラムを作成する方法は実際には示されていません。それに論理はありません。プログラムは何にも反応しません。

したがって、おそらく素数を計算するようなものは、より良い例でしょう。しかし、繰り返しますが、それはあまりにも理論的で実用的ではないかもしれません...(それは何がいいのでしょうか?「実際の」プログラムを書くことと何が関係しているのでしょうか?)そして、ここにも重要な制御フローロジックはありません。これは単なる一連の数学です。

また、どの言語を使用する必要がありますか?

理想的には、それが非常に「クリーン」な言語である必要はないと思います。しかし、むしろ、それはおそらく構造を明確にするはずです。その場合は、ある程度のノイズとクラッタで問題ない可能性があります。おそらくC++のようなものが実際にPythonよりも良い理由です。明示的な中括弧と型指定子は、プログラムの構造を説明したり、それを強調したりするための明白な「フック」です。 justではなく、ほとんど英語として読み上げることができる単純なステートメントではありません。

しかし、C++を使用すると、まったく奇妙な構文も使用できます。 _std::cout << x_がxの出力に使用されるのはなぜですか? 「通常の」関数呼び出し構文ではないのですか?そしてprintfは、その難解なフォーマット文字列と拡張性の欠如により、あまり良くありません(文字列に_char*_を使用してプログラムを複雑にしますか?または_std::string_を使用しますか?一見不要なs.c_str()を呼び出して、printfで出力できる文字列を取得することで解決しますか?

多分結局、より高いレベルの言語がより良いでしょう。しかし、どれ?なぜ?

プログラミングを教えるためにどの言語/サンプルプログラムを使用するかについて、同様の質問がたくさんあることは知っています。ただし、ここでの要件は異なると思います。プログラミングを教えるとき、私たちは何よりも単純さを求めます。まだ教えられていないことは避けたいです。生徒が画面ですべてを理解できるようにしたいと思います。

私は単純さ自体には興味がありません。しかし、むしろ「アウトサイダー」に「プログラムがどのように見えるか」という考えを与えることにおいて。そして、プログラムは単純ではありません。しかし、彼らはdoは一般的に狂気に対して特定の構造と方法を示します。どの言語/プログラムがそれを最も強調しますか?

編集
これまでのすべての提案に感謝します。皆さんの中には、私が意図したものとはやや異なる見方をしている方もいます。

おそらく例が正しいでしょう。飛行機を飛ばすことはできませんが、コックピットがどのように見えるか、パイロットが飛行中に「何をする」かについては基本的に理解しています。

そして、私は訓練された大工ではありませんが、見たときのこぎりやハンマーを知っています。

しかし、たとえば映画のプログラミングに何か関係がある場合、それは通常、(マトリックスの緑のテキストのように)ゴミで埋められた単なる画面です。普通の人間が実際にできるようなものではないdo。そこには何も認識できません。プログラマーではない人は、それを黒魔術だと思っているだけです。

私は彼女に飛行することやソフトウェアをプログラムすることを教えたくありません。しかし、私は彼女に基本的な参照フレームを与えたいと思います。 「ああ、それがあなたが取り組んでいるものです。だから、画面上のランダムな記号と数字だけではありません」という考えだけです。単純なif-ステートメントを表示するだけでも、Matrixスタイルのランダムなシンボルと数値と比較して啓示になります。

アルゴリズムの説明や疑似コードの使用を提案している人もいますが、それは避けたいものです。 actualコードがどのように見えるかを単純に示すものが欲しいのですが、鋸を見て大工である必要がないのと同じように、のこぎりの基本的な考え方を理解します。使い方。

私が子供の頃、私たちはかつてイタリアで休暇を過ごしました。下りの途中、パイロットが飛行機のコックピットに連れて行ってくれました。もちろん、私は飛行機を飛ばす方法を学びませんでした。しかし、パイロットの世界をのぞいてみました。彼らがどのように飛行機を動かすのか、パイロットが実際に何をしているのかについてのアイデアを得ました。

私がしたいのはそれだけです。私の友人はプログラミングの学習に興味がなく、彼女にソースコードを理解させたくありません。しかし、彼女は私がどのようなツールやエンティティを扱うのか知りたがっていました。画面上でスクロールするのはマトリックススタイルのシンボルですか?純粋な数学?散文形式の英語?

私が伝えたいのは、「仕事をしているときの様子」についての高度な理解です。

71
jalf

あなたの質問に直接答えるためにプログラミングはどのように見えるかで、大規模なアプリケーションの印刷物を見せます。おもちゃのアプリやHaskellのqsortのようなかわいいものは、本当に間違った考えを与えます。

34
anon

ベーシック

10 PRINT "Sara is the best"
20 GOTO 10

更新:私が12歳のとき、いとこ(14歳)が Turbo Pascal 7.0をもたらし、それをコンピューターにインストールしました。
彼は三目並べゲームを最初からプログラミングしました(知っている人のためにBGIモードで)。
プログラムが完全なアプリケーションになるまでどのように進化するかを段階的に監視/観察しました。
それまでは、BASICで文字列を印刷する方法しか知りませんでした:-B

同様のことができます。ペアプログラミング。まあ、実際にはあなたの友達はオブザーバーになりますが、彼女はアイデアを得るでしょう;)

50

存在しない(または、そうだと思われる場合は)存在しない言語を検討して、 疑似コード を使用しないのはなぜですか?私は、あなたが何を達成したいかに応じて、私は思います-私はその人によく知られているタスクの例を考えますが、疑似コードの例に切り分けられます。

プログラマ以外の人に説明するとき、私は一般に「料理」または「レシピ」のアイデアがぴったりだと思います。

私は、彼らにかなり複雑なレシピがあったと想像するように頼みます-例えばカレーライス料理。それから、彼らがそれを調理できるように、彼らが何をしているのか全くわからない人のためにそれを書き留めて書くべきだと私は提案します。

関係する非常に明確ないくつかの段階があります:

  • 仕事のための材料と道具を集めます。
  • 材料を準備します。これは複雑です。例えば。
    • 小さな赤唐辛子を3つゲット。
    • あなたが持っている各赤唐辛子のために、それを約1cm四方の塊に切り刻んでください。
    • 赤ピーマンの塊を後でボウルに入れます。
  • これとは別に、炊飯を続ける間、preprice関数を呼び出して、バックグラウンドで非同期に機能させます。

私はあなたがこれがどこへ向かっているのか見ることができると確信しています...;)

料理とプログラミングには多くの類似点があります(多くのものと同様ですが、家を建てるよりも料理について理解している人が多くなります)。ステージ/類似点(私が見る限り)は次のとおりです。

  • Gathering:(目標を達成し、それらをまとめるために必要なものの宣言)。
  • 準備:材料を切り刻むか、データ接続オブジェクトなどを最初に使用する準備をします。
  • Asynchronous:あるものが進行している間に別のものが進行する能力。
  • 機能:米作り、鶏肉料理、カレー料理はすべて別のプロセスを必要とし、最後にのみmakeCurry(chickenMeat、rice)を使用できます関数。
  • テスト:進行中にビットが不足していないこと、およびすべてがスムーズに進んでいることを確認します。次のステージに移る前にチキンが調理されていることを確認してください。
  • ごみ:完了したら、片付けを確認する必要があります。 ;)
  • ベストプラクティスのプリンシパル:料理のようなことを行うには効率的な方法があり、初心者のプログラマーはコードに加えて学ぶ必要があります-時にはそれは難しいかもしれませんあなたの頭を回します。例えばD.R.Y、ナイフで効率よく切る方法、生の鶏肉を食べない方法;)

基本的に、私はプログラミングを一般的なトピックとして教えることを考えています-あなたがそうするための説得力のある理由がない限り、私は必ずしも言語から教えるわけではありません。代わりに、少なくとも物事がどのように分類されるかについての基本を理解するまで、最初は要約から教えます。そうすれば、モニターとキーボードの前に座った方が楽になるでしょう。

これに対する「正解」は1つではないかもしれません。しかし、私はあなたがおそらくすべてから少しを取ることができるいくつかの本当に良いアイデアを考えています。

40
Amadiere

コンピューターが複雑なタスクを実行できるようにプログラミングが詳細な指示を与えていることを説明します。

2杯のコーヒーを作る方法?

  1. やかんをいっぱいに
  2. お湯をわかす

  3. カップのコーヒー

  4. 水を注ぐ
  5. 砂糖を加える
  6. 牛乳を加える

  7. もう一度3から6を行います

34
jbochi

A junior coder at work

ちょっとこんな感じです。時々。

23
Stephen C

多分誰もがツールよりもコードに集中しすぎているのかもしれません。おそらく、彼女のプロジェクトをIDEで表示するのが最善です。プロジェクトにさまざまなソースファイルが含まれ、データベーススキーマやビジュアルユーザーインターフェイスデザイナなどの図表的なものが含まれる場合もあります。 Visual Studio、Eclipse、またはXcodeは、黒の背景で急速にスクロールする光る緑色のシンボルの多くの人々の精神的なイメージからかなり離れています。

14
Rich

AT&Tアセンブリ言語で書かれた大きなwin32アプリケーションをダウンロードし、メモ帳で彼女に見せて、「ご覧のように、プログラムするのに私のような超人が必要だ」と彼女に伝えるべきだと思います。

12
Carson Myers

プログラマーではない人にとってわかりやすい値をコード化します。私が母にクイックソートをデモンストレーションするとしたら、それは役に立たないでしょう。

その人の興味について尋ねます。たとえば、彼/彼女が証券取引所を利用している場合は、適切なWebページから株価の統計情報を読み取り、Excelシートにコンパイルするスクリプトをハッキングします(csvを使用して、重い脳の損傷を回避します^^)またはおそらく素敵なグラフに。

その人がTwitterを使用している場合は、自分のフォロワーのフォロワーを数えるものなどをコーディングします。

これらのタスクは非常に簡単で、非常に短時間で実行できます。また、プログラマーが使用する基本的なツール(ループ、ライブラリ(すべてのhttp関連のもの)、再帰など)をすでに利用しています。

完了後またはコーディング中(さらに優れている)に、プログラムがどのようにその魔法を実行するかを説明できます。

シンプルに保ち、人間の言葉で話します。メガバイトのコードを見せて、プロトタイプの継承などについて話すと、脅すだけですぐに興味を失います。

9
selfawaresoup

私が給料を持ち込むために何をすべきかについて妻に知らせたい(それは本当の仕事です!私は約束します!私たちは一日中Webを閲覧するだけではありません!)私は彼女と夜にPythonそして、いくつかの基本的な概念を示しました:関数の呼び出し(印刷)、変数の割り当てと読み取り、ifステートメントのしくみ。彼女は教師なので、条件の概念を未就学児での作業に例えました:)

IF you hit Jonny THEN you're in time out OTHERWISE you can have a snack.

いくつかの非常に高いレベルの概念を確認した後、私は彼女にコードを単純な数字推測ゲームに見せて、コードを見ながら彼女にそれをプレイさせました。

# Guessing Game
import random

print("Guess a number between 1 and 100: ")

target = random.randint(1, 100)
guess = 0
guess_count = 1

while guess != target:
    guess_count += 1
    guess = int(input())

    if guess == target:
        print("Correct!")
    if guess < target:
        print("Higher...")
    if guess > target:
        print("Lower...")

print("Congratulations! You guessed the number in " + str(guess_count) + " guesses!")

「インポート」というやや抽象的な概念は別として、これは非常に単純な例であり、画面上で起こっていることを簡単に追跡および「接続」できます。また、実際に興味深いインタラクティブなことは言うまでもありません。私の妻は、コード全体の知識をあまり必要とせずに、全体のコンセプトに少し不思議な経験をしていなかったと思います。

重要なのは、誰かにコードを見てもらい、その結果を並べて表示できるようにすることです。

8
Toji
  1. コンピュータープログラマーはプログラムを記述します。
  2. コンピュータープログラマーはプログラミングをしていませんが、職場の魅力的な女性を悩ませています。

その後:

(ソース: markharrison.net

今:

7
Mark Harrison

[〜#〜] logo [〜#〜] と呼ばれるCLIグラフィックパッケージがあり、 で最もよく知られていますタートルグラフィックスLT 90, RT 105などのコマンドを使用して画面に図形を描画するために使用されます。それが見つかるかどうかを確認してください。中程度の複雑さの何かを試して描画するのは素晴らしい体験です。

ロゴ-ロジック指向のグラフィック指向プログラミング言語。

REPEAT 360 [FD 1 RT 1] -- draws a circle, etc.

logothings または Wikipedia で詳細を参照してください。これには、最新のロゴインタープリターへのリンクもあります。 。

7
anijhaw

私の5歳のとき娘が私に小さな矢印「ロボット」用のプログラムを「開発」させて、彼がボードの左上隅に入るようにする質問を尋ねました。大人にも当てはまると思います。

ただし、この回答の発明については主張しません。

あなたのeditについて:残念ながら、プログラマーは他の人がプログラミングについて持っているアイデアについてあまり知らないでしょう。 ;-)スパイはすべてJames Jamesのハイテクおもちゃを装備していると考えるのと同じくらい、プログラミングはマトリックスのようなグリーンビデオカードの破損だと人々は考えています。そして、彼の仕事に関する映画を見るとき、どんな分野のどんな専門家も通常イライラします。 映画製作者にはわからないから!映画にプログラミングを正しく表現する方法を知っていますか一方、? ;-)

「プログラミングを教えることなくプログラミングを誰かに教える」ための最良のアプローチは、実際には特定のプログラミング言語に関連するものをすべて落とすことです。

代わりに(彼らが実際に興味を持っていると仮定して)、単純な銀行ローンアプリケーションのようなプログラムに関数を実装することを通して彼らに話します(ほとんどの人は、一定の年齢を超えている場合、ある段階でローンに対処する必要がありました)。 、そしてすべての仮定に穴を開けます。

たとえば、ユーザーが負のローン金額を入力するとどうなりますか?ユーザーがローンを購入できない場合はどうなりますか?ローン申し込みはどのようにそれを知るのでしょうか?ローンアプリケーションは、確認する銀行口座と確認する支払い履歴をどのようにして知るのですか(つまり、実際にユーザーは誰ですか)。ユーザーがローン金額フィールドに自分の名前を入力しようとするとどうなりますか?ユーザーが75年以上ローンを借りようとするとどうなりますか?選択肢を使用可能な長さのリストに制限する必要がありますか?

そして最後に:プログラミングはこれらのルールをすべて採用し、コンピューターが理解できる言語でそれらを記述します。これにより、プログラミングはそれらのルールに従います。この時点で、必要だと思われる場合は、単純なコードを取り出して言語全体を確認し、おそらくその言語のルールの1つを記述します。

友達を反応させることができる場合のボーナスポイント:しかし、何かを忘れた場合はどうなりますか?さて、それで私たちはバグを抱えています、そして今あなたはなぜソフトウェアプログラムもバグのないものではないことを知っています:)

あなたが働いているときそれはどのように見えますか?

タイピングのようです。

真面目な話ですが、プログラミングはレゴがテキストのようなもので、大きなレゴハウスを構築するには、適切な穴に適切なペグを接続するだけで、たくさんのテキストを入力する必要がありました。だから私は一般的にそれを説明する方法です。

4
Eugene Efremov

間違いなく、より高いレベルの言語でのグラフィックスまたはウィンドウのいずれかを使用したもの。

どうして?プログラマーではない人は通常、非熟練者でもあります。そのため、ソートの美しさが得られません。ただし、画面に描かれたもの(「見て、ウィンドウ!」、「見て、タイピングがほとんどなく、3Dボックスが回転している!」)を表示すると、不思議に思うかもしれません;)。

4

ソースコードの例だけでは、プログラミングがどのようなものかを理解するのは非常に困難です。

コンピュータが実際に何をしているのかを示すことができれば、Hello Worldの開始に問題はありません。その後、一度に1つの構成を導入できます。それがプログラミングのようなものです-漸進的な変更を行い、結果を確認します。

つまり、Hello Worldプログラムがあります。次に変更します

string Name = getLine();
printf("Hello, %s", name);

次にif構文

printf("Do you like cake?");
string answer = getLine();
if(answer == "yes") {
    printf("Yeay! I like cake too!");
} else if(answer == "no") {
    printf("Filthy cake hating pig!");
}

次に、「はい」または「いいえ」以外の回答を受け取ったときに最後のプログラムが失敗することと、それを修正する方法を示します。

等々。再帰のような深い概念や、実際には機能さえも必要としないと思います。

コンピューターでこれらのさまざまなプログラムの結果を表示できる限り、これに使用するプログラミングはそれほど重要ではありません。 (これらの疑似コードの例はおそらく有効なpythonにかなり近いですが)

4
Breton

ロボット工学はプログラミングを説明するのに最適だと思います。単純で考案された例でも実用的だからです。 Hello Worldに相当するロボット工学や、数字のリストを印刷することは、ロボットを一直線に動かしたり、円を描くように回転させたりする場合があります。プログラマーではない人でも、ロボットが何か便利なことをするためには、まず自分自身を動かして配置する必要があることを理解するのは簡単です。これにより、簡単なプログラム構造とフロー制御を説明できます。

ロボットを前進させたいが、その経路を妨げるものがない場合のみ。次に、それを回転させて再度移動させます。これは基本的なフロー制御を使用する単純なルーチンであり、呼び出す関数は非常に理解しやすいです(プラットフォームに適切な抽象化がある場合)。

グラフィックも機能する可能性があります。 immediateの結果があるもの。誰もが回転する画像やWebアニメーションに慣れているので、jQueryもです。 DOM内で要素をプッシュするなどの工夫された例でも効果はわかりやすく、ほとんどの人はプログラム内のステートメントが何をどのように実行するのかを理解します。

RobocodeやLOGOのようなものはおそらくこれに本当に適しています。

3
Matthew Olenik

alt text
(ソース: wikimedia.org

{
   wait for 6/8;
   play F (5), sustain it for 1/4 and a half;
   play E flat (5), sustain it for 1/8;
   play D flat (5), sustain it for 1/8 and a half;
   play F (4), sustain it for 1/16;
   // ...
}

おそらくメタファーは、composer楽譜を書くことです。composer=の仕事は、音楽を作成する知的活動です。楽譜があると、 composerは何を演奏するかをピアニストに指示しており、彼は正確な指示(メモ、一時停止など)によってそれを行います。「指示」が十分に正確でない場合、ピアニストは演奏します何か違います。

ソフトウェア開発者の仕事は、問題(データの自動処理に関連する問題)を解決する知的活動です。と ソースコード、開発者は伝えています コンピューター 何をすべきか、そして彼は正確な指示によってそれを行います。指示が十分に正確でない場合、コンピューターは何か別のことを行い、問題を正しく解決しません。

3

私は、コンピューターを使用して日常の問題を解決する方法を示す疑似コードで何かを書くだけです。おそらく、特定の食料品のリストを購入するのにどちらのストアが安いかなどを決定します。

2
jball

タイムラプスビデオだけを見せないのはなぜですか スクラムチームの1日

2
akuhn

これがまだオープンであることに驚いて、誰もがまだこの答えを出していないことに驚いています。 (私が思うに、とにかく誰も読むつもりのない40の質問のうちの1つを誤ってスキップした可能性があります。)

あなたの答えはあなたの質問にあります

私が子供の頃、私たちはかつてイタリアで休暇を過ごしました。下りの途中、パイロットが飛行機のコックピットに連れて行ってくれました。もちろん、私は飛行機を飛ばす方法を学びませんでした。しかし、パイロットの世界をのぞいてみました。彼らがどのように飛行機を動かすのか、パイロットが実際に何をしているのかについてのアイデアを得ました。

私がしたいのはそれだけです。

それだけです。 チュートリアル から短い演習を選択します。適度に長いGUIも、追加されたビジュアルのために有益である可能性があります。 (ゲームは長さを少し押しているかもしれません。)そして彼女にあなたにコードを見てもらいましょう。それでおしまい。パイロットの例と同じです。

また、 オンラインREPLの数 もあり、コードの監視がさらに迅速になります。

2
Eva

プログラミングの様子を彼女に見せたいですか?端末をポップして

find / 
2
gb.

プログラマは、コンピュータが実行する命令を記述します。
プログラムを実行すると、コンピュータは実際にそれらの指示に従います。

一例は、パンがパンを焼くためのレシピに従うコックです。 (たとえそれが彼らの頭の中にあったとしても)...それはプログラミングです。私の妻とは異なり、コンピューターは毎回正確にレシピに従います。私の妻は彼女の頭の中でそれをします、そしてそれは毎回異なるが美味しいことがわかります;-)

先に進んでこれをより詳しく教えたい場合、疑似コードは理解しやすいです。

例えば.

IF today's date is the 1st of may then
  print to screen "Happy Birthday"
ELSE
  print to screen "It's not your birthday yet"

擬似コードの美しさは、だれでも理解できるところにあり、これがポイントです。

2
Matt

私はpsuedocodeでいくつかの標準的なアルゴリズムを実行するか(かなり多くのn ^ 2並べ替えアルゴリズムは問題ないはずです。選択並べ替えが好きです。)またはそれらを http:// 99-bottles-of-beerに指定します。 net /

その後、私は人々に99-bottles-of-beer.net B-)を指摘するのが好きです

1
Brian Postow

私は彼にバブルソートを見せると言います。

これは簡単で理解できるトリックであり、正式な言語に変換されます。

それが私たちの仕事です。機械でさえ理解できるように、厳密で正式な言語で私たちのアイデアを表現します。組織設計の設計手順に少し似ています。

1

株価情報を読み取ってExcelスプレッドシートに書き込むような簡単なコードを作成します。これは数分で十分に簡単であり、技術的でないタイプは実用的な価値があるとすぐに感心します。

1
ennuikiller

アリス カーネギーメロンで開発されました。

アリスは革新的な3Dプログラミング環境で、ストーリーを伝えたり、インタラクティブゲームをプレイしたり、ビデオをWebで共有したりするためのアニメーションを簡単に作成できます。アリスは入門用コンピューティングの教育ツールです。 3Dグラフィックスとドラッグアンドドロップインターフェイスを使用して、より魅力的でイライラのない最初のプログラミングエクスペリエンスを促進します。

1
Robert Paulson

私は「ロッカールームの問題」でイントロプログラミングをやる気にしたいと思います(たとえば、100のロッカールーム、最初は閉じています。人2は偶数番号のすべてを入力して開きます。番号が3で割り切れるロッカー、人物4が入り、人物100が入るまで、番号が4の倍数であるロッカーの場合などです。質問は、どのロッカーが閉じられたままですか?もちろん、これには初等数学の解があります(完全な四角形だけが開いたままです)が、イントロプログラミングには良い練習だと思います。

1
dsantos

私の通常の選択は、データベースから顧客レコードのセットを取得することです。 Visual StudioでC#とLINQを使用すると、Webページを作成して「Northwind」データベースの顧客をグリッドにダンプするのに、最大で10分程度かかります。嬉しいことに、「顧客リスト」はほとんど誰でも理解できるものです。

1
Cylon Cat

疑似コード:

function dealWithPerson(person){
    if(ILike(person)){
        getCookie().giveTo(person);
    }
    else{
        person.tell("You shall receive no cookies!");
    }
}

dealWithPerson(Person.fromName("Nick"));
dealWithPerson(Person.fromName("John"));

これは、Cのような構文で関数、オブジェクト指向、および文字列の概念を示しています(Cのような構文と言うとき、私は奇妙な文字を指します)。
また、コードを再利用する方法も示しています。これは疑似コードですが、この構文を受け入れた言語があったとしても驚かないことに注意してください(おそらくJavaScriptではこれが許可されていますか?)。

この例をループに適応させることもできます。これがその人にプログラムがどのように見えるかを示すのに役立つことを願っています(これは現実的な構文であり、比較的理解しやすいためです)。

1
luiscubal

完全に彼女の興味のレベル(またはあなたの興味のレベルher)に依存します。ほとんどの人はその質問を怠惰な会話として尋ね、本当に知りたくありません。

プログラミングはアルゴリズム(「一杯のコーヒーを作る方法」など)を超えるだけでなく、基本的には数学にも根ざしています。ほとんどの人は、数学的用語(「関数」とは何ですか?)の微妙な使い方にすぐに気が付くでしょう。

プログラミングを本当に教えるためには、自分自身の最初のプログラミング経験、最初のプログラミングの先生、最初のプログラミング言語を振り返ることが役立つ場合があります。どのように学びましたか?あなたが学んでいたとき、あなたはすでにあなたの心にどのようなスキル(すなわち、微積分)を持っていますか?変数とは何か、なぜ3種類のループがあるのか​​を理解したい動機は何ですか?

言語的に:pythonなどを使用します。本当に高レベルで、中かっこで囲まない方が良いでしょう。

1
Seth

Jalf、

通常、最も効果的に機能するのは、その人がすでに慣れているものを示すことです。

ファイルを選択して印刷することは、ほとんどの人にとってなじみ深いことです。

そのため、ファイルを要求する小さなコードを表示して、それに対して何かを行うことができます。非常に短くても、プログラムがどのように構築されているかを示すことができます。

そのようなコードの一部は以下を示します:全体的な構造フロー変数とステートメントの使用API​​の使用

1
Klinger

私は長年プログラミングを教えてきましたが、物事を説明するために必要な方法の数はあなたが持っている学生の数と等しいことがわかりました。しかし、ほとんどの場合機能する1つの方法は次のとおりです。

  1. 簡単なアプリケーションのロジックの流れを示したフローチャートを提示する
  2. 説明を完全な人間の言語で記述します(例:英語)
  3. 各命令をプログラミング言語で使用される省略形に省略します
  4. 教育目的のために、BasicやPascalなどのそれほど暗号化されていない言語を選択します

すべてのコードは単に自然言語の省略形です。完全な英語で書かれているほとんどのプログラムは取るに足らないようです。

良いアルゴリズムに関しては、それはまた別の話です。多くのコンピュータサイエンスコースがアルゴリズムを教えたり、それをブラッシュアップしないことを見るのは悲しいことです。

1

私は Greenfoot を検討します。子供たちがプログラミングを学ぶことを目的としていますが、グラフィックはおそらく読者がコードを「アクション」に関連付けるのに役立ちます。 これはGreenfootに関する記事です 私の同僚による。

1
Michael Easter

私はこのタスクを何度も行ってきました。答えは簡単で、それはあなたが子供たちと何をするかです。 ゲームをする

プレイできるゲームはおそらくたくさんあると思いますが、私が遭遇した最高のゲームは「Guess the Number」です。あなたはゲームをプレイし、彼らはそれを理解します。次に、彼らはbinary searchと呼ばれる処理を実行したことを伝え、多くの問題を解決します。次にshow themその関数のいくつかのCまたはBASICコード。構造はが基本的に理解しているため彼らがコードをほとんど読み取ることができるアルゴリズムであるほど単純です。 (ギリシャ語が100%の場合、コーディングスタイルに問題がある可能性があります。)

Cはおそらく全体的な構造に適しています。いくつかのgotoをBASICに詰め込むことができれば完璧です。ジャンプはプログラミングの中心であり、ジャンプをコードで実際に確認できることは理解に優れています。アセンブリは、初心者には難解な構文で乱雑です。また、C以上の高レベルの言語では、さまざまな種類の構文の内部にジャンプが隠されることがよくあります。

BASIC、C、およびLISPの両方のプリントアウトをスローして、それらが異なる言語であることを伝えるのがさらに良いかもしれません同じことをさまざまな方法で表現しようとします、そして実際のプログラマーは多くの異なることをさまざまな方法で考えます。そして、実行してプリントアウトを作成することが単純な説明ではあまりにも困難である場合は、単に名刺を作成してくださいプリントアウトのお財布に入れて。コメントを削除すると、1枚のカードに簡単に収まります。

1
Black

私はクイックソートに投票します。これはバブルソートよりもエレガントで、理解も簡単です。

qsort [] = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)
0
Rich

表示 [〜#〜] r [〜#〜] の基本、Cよりも理解しやすく、meanやsqrtなどの多くの組み込み関数があり、少なくともRの代入記号は " <-"

0
ilhan

引用Steven C. McConnell、彼の素晴らしい本からCode Complete、Ch.2彼ソフトウェアのメタファーについて語る

紛らわしいメタファーの豊富さは、ソフトウェア開発を中心に成長しています。

  • フレッド・ブルックス氏は、ソフトウェアの作成は農業、狼男の狩猟、タールピットでの恐竜の溺死に似ていると述べています(1995)。
  • デビッド・グリーズは、それは科学だと言っています(1981)。
  • ドナルド・クヌースはそれは芸術だと言っています(1998)。
  • ワッツ・ハンフリーは、それはプロセスだと言っています(1989)。
  • P.J.プラウガーとケントベックは、まるで車を運転しているようなものだと言っています(Plauger 1993、Beck 2000)。
  • Alistair Cockburnは、これはゲームだと述べています(2001)。
  • エリック・レイモンドはそれがバザール(2000)のようだと言います。
  • ポールヘッケルは、まるで白雪姫と七人の小人(1994)を撮影するようなものだと言います。
0
medopal

私は、10行未満のコードで、1つの比較的単純な関数を人に紹介します。構文にあまり重点を置かないでください。それが何をすることになっていることに焦点を当て、それを行うためにとるステップ。また、いくつかのトレードオフ(速度とスペース、エラーをチェックするかどうかなど)について少し触れてください。

次に、示したのはプログラム全体の0.01%であることを説明します。そして、あなたの時間の90%がものを書くことに費やされていないが、ものを読んでそれがうまくいかない理由を理解しようとするのに費やされていないことを説明してください。

0

私の妻はプログラミングとコンピュータについてまったく何も知りません。しかし、私が説明するとき、彼女はコンピュータが完全に頭脳がなく、説明に従うだけであることを理解しました。これらの命令は、プログラミング言語で定義および制御できます。基本的には、プログラミング言語を使用して何をすべきかをコンピュータに伝えます。これは、コンピューターが(直接)直接理解する言語です。

長い話になるかもしれませんが、良いデモ例はcalc.exe(またはOSが使用している計算プログラム)のような計算機です。すべてのプログラマーは、「内部で」何をしているのかを理解しやすい言語で説明できる必要があります(コンピューターに聞いて、どのボタンが押されたか、それらの値をどうするかを覚えておく必要があることを伝えます)。また、自分の言語でそれを実証しようとすることを検討することもできます。そうすれば、結局、理解しやすくなります。少なくとも、それは私の妻を助けました(私は;)と思います)。

0
BalusC