初心者プログラマを支援するときに適切な語彙


9

私は初心者のプログラマーを比較的頻繁に助けています。彼らが尋ねたときに彼らのコードが機能しない理由を説明し、解決策などを提案します。私が支援している人々は、Javaの1年次の学位レベルのモジュールからプログラミングの正式な教育を受けていますが、彼らとうまくコミュニケーションをとることができないように感じます。

たとえば、関数を記述しても、なぜそれが実行されないのか理解できず、関数を呼び出すのを忘れたことに気付かない場合があります。私のようなフレーズを使用した場合"(make a) call (to) the function/it""pass it the.."、私は空白のルックスを取得します。

私の通常のプロセスは、コード内で言語から関数を呼び出す場所を見つけ、この他の関数を呼び出すのと同じ方法で独自の関数を呼び出すことができることを伝えることです。時にはそれも空白の外観になります。

初心者プログラマを支援するのにより適した(より良い?)語彙は他にありますか?それともコミュニケーションの問題ではないのですか?


5
スプレッドシートのユーザーは、関数を呼び出す方法を知っています。多くは自分で書くことができます。ここに根本的に何か問題があります。
JeffO 2012

@JeffO私は何かがおかしいと感じていましたが、そのモジュールとそれらの人々に疑いの恩恵を与えたいと思っていました
Andy Hunt

7
待って、何?あなたが働いているプログラマーは、「関数を呼び出す」ことと引数を渡すことの意味がわかりませんか?これは、絵を描いたり、猫や犬を含む隠喩を使用したりせずにできるのと同じくらい基本です。これはコミュニケーションの問題にとどまらず、残念ながら知識不足の問題かもしれません。私はあなたの質問を読み直しました、そして彼らは基本的に入門レベルのコースをとったようです、そしてそれだけですか?
wkl 2012

3
@AndyBursh:そのような学生はどうやってそれを2年目にしたのですか?彼らが試験に合格せず、ソフトウェア開発以外の仕事を選ぶことを願っています。
Doc Brown、

3
おそらく、靴下の人形が役立つでしょう
MattDavey 2012

回答:


15

彼らは最終的に適切な用語を学ばなければならないでしょう。

それらを正しく使用し、空を見つめるときはいつでも説明してください。正しい信号を送ってみてください。理解できないことについて質問してもかまいません。愚かな質問は、質問しないことだけです。


2
私はあなたがロードしたものとほぼ同じ応答を投稿しようとしていました。:) +1
トムスクワイアーズ

説明をレベルまで下げるのではなく、レベルを上げてください。
ベント

2

一般に

人があなたを理解していない場合、2つの選択肢があります。

  1. 人が知っているかどうかに応じて語彙を適応させ、

  2. 彼女が理解していない用語をその人に説明してください。

最初のケースは、その人が技術的な語彙をかなりよく知っているが、十分ではないか、ドメイン内にない場合にうまく機能します。

たとえば、C#またはJavaでメソッドという用語を使用すると、他の言語を使用することが多い人はこの用語を理解できません。その後、C#やJavaに、ということを説明します方法は、我々は通常呼んでいるものを参照している機能(Cでたとえば)、およびというというようなAのものが存在しない関数は C#やJavaで。でPHP、例えば、方法および機能の両方が存在し、異なる意味を有します。その違いが人にとって苦痛である場合は、簡単にするために関数について説明します

あなたの正確なケースでは、あなたは最初のものをほとんど選択することができません:「関数への呼び出しをする」は、より簡単な方法で再公式化することができません。通話は通話です。これをもっと単純化することはできません。

これは、2番目の方法を選択する必要があることを意味します。各専門用語をその人に説明します。

  1. 基本的な概念と用語に非常によく機能する辞書またはWikipediaをユーザーに示します。

    よく使われる用語にこれを選びます。たとえば、ポリモーフィズムとは何か、または共分散と逆分散とは何かを理解するために、ウィキペディアを読むように勧めます。これらの用語はすでに非常によく説明されているので、ここでホイールを再発明する必要はありません。

  2. またはあなた自身の言葉で説明してください

    これは、コンテキストに固有の用語や、幅広い定義を受け入れる用語に選択します。たとえば、ウィキペディアは、マイクロソフトのクラウドコンピューティングのビジョンを理解するのにあまり役立ちません。私は、Windows Azureアプリケーションで作業する人に、クラウドとは何かについて説明したいと思います。

あなたの特定のケースでは

あなたが話している人々は、プログラミングで使用される最も基本的な概念や用語を欠いています。彼らはまったくコミュニケーションをとることができないため、この中核となる語彙を学ぶことなく続けることはできません。彼らはプログラミングやブログに関する本を読むことができず、同僚の話を聞くこともできず、実際に質問することさえできません。 Stack Exchangeのウェブサイト。何を求めているのか誰も理解できないため。

あなたの場合、適切な語彙を探すのではなく、数日または数週間かけて、いくつかのコアプログラミングの概念と一般的に使用される用語を教えます。数日後は、「絵を描いて、猫や犬の隠喩を使う」ことを常に必要とせずに、話しかけることができます。


1

関数の代わりに、サブルーチンから始めます。プログラムは命令の単なるリストであり、コンピュータに何かを行う方法を伝えるレシピであることを伝えます。そして、それは次々に命令を実行している(いくつかのステップを並行して実行する可能性がありますが、それについては後で詳しく説明します)。

私たちはいつも何度も何度もそれを書き留めていた場合、それはひどいだろうので、私たちは一度だけそれらを書いて、それから「小さなプログラム」を作るので、いくつかのタスクは、かなり一般的で反復されている- サブルーチンで再利用することができ、プログラムの他の部分。複数回実行できるようにするために、プログラムでわかりやすい名前を付けています。そして、この「小さなプログラム」をより大きなプログラムの一部として実行したいときに、その名前で呼び出すことで、その名前を使用できます。

サブルーチンを呼び出すことは、そのタスクの実行方法を知っている悪魔をその悪魔の名前呼び出すことと似ています。プログラムでその特定のタスクを実行する場合は、「アルゴスという名前の悪魔を呼び出す」と書くと、デーモンが表示され、私たちに指示されたとおりにタスクが実行されます。ジョブ。

悪魔は追加の情報を必要とする場合があり、それがないと実行するタスクや、私たちが本当に望んでいることを決定できません。たとえば、悪魔が城を建設することになっている場合、彼はそれをどこに建設することになっているのか、またはどのくらい大きいのかなどを知る必要があるかもしれません。これらは悪魔に渡される引数です...つまり、サブルーチンは次のようになりますパラメータ化

パラメータは、タスクを実行するために欠落しているが必須の情報です。それらは、サブルーチンが実行できることを少しずつ変更します。これらは、実行する前に埋める必要があるレシピの空白のスロットのようなものです。

一方、引数は、これらのパラメーターに提供する実際の情報(値)です。

並列実行については、このように考えることができます。プログラムを実行している誰か(または何か)が常に存在します(命令のリスト)。それは別の人間(「コンピュータ」はかつて計算を実行していた人の名前であったことをご存知でしたか)、または機械です。プログラムは単なる命令のリストであり、それ自体では機能しません。計算プロセスを行う誰かまたは何かがなければならない(リストからこれらのアクションを実行します)。また、これらのアクションを並行して実行できる場合もあります。リストのコピーを複数のユーザーに配布し、お互いに中断したり、中断したりしない限り、リストのさまざまなタスクをそれぞれに実行させることができます他の誰かの仕事の結果を待たなければならない。それはあなたにとってマルチスレッドです;)

差として機能するサブルーチン(とも呼ばれる手順)、通常の違いは、関数は、特定の計算するために呼び出されることがあるが、その実行結果として返す手順は楽しみのためだけに実行されている。)AKAその「副作用」–リストから実行される操作のために。

ただし、プロシージャまたは関数を呼び出すと最初に問題が発生する場合は、かつて一般的だった別の用語、ジャンプを使用できます。サブルーチンにジャンプすることができます。つまり、現在実行中の処理をすべて停止し、タスクを実行するために、リストの別の場所(または別のリスト)-サブルーチン-に「ジャンプ」します。次に、終了すると「ジャンプバック」します。つまり、中断された場所に戻り、前のタスクを続行できます。呼び出しとジャンプの違いは、今あなたが悪魔であるということです。

ここで誰かが言及したメソッド、または一部の言語が「関数を持たず、メソッドのみ」という事実については、メソッド関数であるため、それは完全に正しくはありません。– それらの特別な種類:これらは、オブジェクト内にカプセル化された情報を取得したり、それらを操作したりするために使用される関数です。それらは「それらのデータを操作する方法」です。名前は、オブジェクト指向のパラダイムに由来し、データはオブジェクトで囲まれており、「メソッド」と呼ばれる特別な関数によってのみ直接操作することはできません。

メソッドは他の点で特別です。つまり、操作/呼び出される特定のオブジェクト(「this」オブジェクト)を知っている必要があります。そのため、通常、メソッドには、それが呼び出されたオブジェクトに関する情報(「this」ポインター)を格納する追加の非表示パラメーターが用意されています。これは関数の呼び出し方法を少し複雑にしますが、プログラマーが何をしているのかを理解している限り、プログラマーが気にする必要のない「実装の詳細」です。

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