プログラマーは何をし、それを他の人に説明する方法は?


おそらく、すべてのプログラマーは、ITに完全に不慣れな人々が彼の職業の本質が何であるかを彼に説明するように頼んだ状況にあったでしょう。 ほとんどの人にとって、「プログラマー」の概念は、メガネとセーターを着た閉じたオタク、または見事な赤い目をした10代のハッカーのいずれかに関連付けられていることがあります。

怖い用語やコードの断片を怖がらせることなくそれについて彼らに伝える方法
カットの下で、私はそのような物語を再現し、プログラミングに関するいくつかの神話を覆します。

-プログラマは何をしますか? 伝えるのはそれほど簡単ではありません...最初に答えてください。たとえば、外科医の職業の本質をどのように簡単に説明できますか?
-外科医は手術を行います。
-はい、素晴らしい説明です! さて、サッカー選手ですか?
-彼はサッカーをします!
-うん、そして外科医は「手術に従事している」。 そして根語がなければ?
-ボールを蹴る?
-それは確かです。 しかし、プログラマーは「プログラムの開発」を除いて何をしますか?
-...
-プログラマーがコードを記述します 特別なプログラミング言語でコンパイルされたプログラムのソースコード。 より正確には、最初に彼はデータの構造を考え、次にこれらの構造を操作するためのアルゴリズムをコンパイルします。そして、それをコードの形で提示します。
-「データ構造」とは何ですか? 彼はコンピューターを操作しませんか、ボタンを押しますか?
-ええと...


神話#1:プログラマーはコンピューターを操作する


プログラマーはコードを書くためにコンピューターをまったく必要としないことを人々に伝えてください。 テストのためにコードの正確性を検証するためにのみ必要です-しかし、コード自体を書いて紙にアルゴリズムを作成することはかなり可能です(ただし、モニター画面でこれを行う方が確かに便利です)。 開発者は、このペーパーにいくつかの指示、コマンド、または特定のデータ(数字、テキスト)のセットを書くだけです。 そして、このセットを実行する人は誰でも-コンピュータ、電話、または特にスマートなロボット-それほど重要ではありません。 プログラマは機械ではなくデータを操作します。

-まあ、大丈夫?
-つまり、プログラマーはマシンに自分がやりたいことを伝えるだけです-彼女はそれをしますか?
-まあ、はい、およそ。
-上司が部下に命令を与えるのと同じように?
-そのように。
-そして、車が何らかの方法でそれをしたい場合は?
-つまり?
「まあ、彼女は何かが好きではないでしょう。」 または単に実行したくない。
-それで、それをすべて明確にしてみましょう...


神話番号2:機械は考えることができる


なんらかの理由で、かなりの数の人がコンピューターに何らかの知性があると本当に考えています。 実際、それは考え方が分からない鉄片のセットにすぎません。 彼らは数値データを保存する方法を知っているだけです。 このような鉄片の一部は消磁されています。つまり、ゼロです。 磁化-ユニット。 さらに、これらの単位を加算および減算して、より複雑な数値を形成することもできます(2進数のシステムは言うまでもありません)。 コンピューター自体は、他の操作方法を知らず、数字を保存して操作するだけです。 これは、プログラマーのコマンドのみを実行する無謀なブロックヘッドです。

-一般に、プログラムのコードはコマンドのセットであり、コンピューターはそれらを愚かに実行します。
-つまり、彼はチーム自体の本質を理解していないのですか? しかし、彼は私が画面に入力したテキストをどのように知覚しますか?
-あなたが自転車に乗ったとき-彼は今彼が前進する必要があることを理解していますか?
-いいえ、しかし、それは起こっています。 そのチェーンは、ペダルの回転をホイールの回転に変換するためです。
-まさに! また、コンピューターは入力されたテキストを一連の数字に変換します。
-どうやって?
-テキストの各文字には、コンピューターが知っている独自の数値コードがあります。 これはエンコーディングと呼ばれます。 たとえば、英語の「a」は数字97でエンコードされ、等号は数字61でエンコードされます。
-したがって、マシンは私たちが彼女に伝えるテキストを理解できますか?
「いいえ、彼女は」理解します」ポイントではありません。 そして、このテキストの保存方法とアクセス方法のみ。
-最初にテキストを入力し、次にコンピューターがそれを文字に分割し、各文字が既に数字として表されていることがわかりますか?
-そうです。 複雑な構造は、 単純な構造の形で提示されます 。これは、機械が「理解」しています。

住宅の建物は何で構成されていますか?
-さて...床から。
-そして、床は何でできていますか? などなど。
-床-壁から。 そして、壁はレンガでできています。 そして、レンガ...
-ここにコンピューターの番号があります-これは家のレンガと同じです。 シンボルは壁です。 個別のオファー-フロア。 そして本は家全体です! しかし、プログラマーはビルダーよりも有利です。
-何?
-ビルダーは床全体を構築することはできません。彼は常にレンガを置くことを余儀なくされています。 たとえある種の頑丈なクレーンで完成した床を建てることができたとしても、家全体や住宅地を建てることはできません。 プログラマーができる! 彼はすでに最終テキストを理解するために機械を「訓練」していたので、実際には、1つのアクションで完成した家を建てるためにクレーンを「訓練」していました。
-つまり、プログラマーはますます複雑なデータ構造を使用できますか?
-はい。 したがって、彼の作品の最初の構成要素は、人間が読めるデータ(テキスト、画像、音声)を、コンピューターによって既に理解されているより単純なデータの組み合わせの形で提示することです。 開発者は、実際に「ゼロから」、人が理解できるものを完全に記述する構造を作成します-そして、この構造が簡単に拡張および変更できるようにします(結局、プログラムはしばしばいくつかの新しい機能を導入する必要があります)。
-ほら! 彼は取り外し可能なパネルからゴムの家を建てていることがわかりました!
-そのようなもの。 ただし、構築する必要があるものだけでなく、そのすべてを構築する方法について説明する必要があります つまり、アルゴリズムを考え出します。 これは彼の作品の2番目のコンポーネントです。
-プログラマーはすべてのアクションのアルゴリズムを思い付きますか?
-まさに。 したがって、多くのアルゴリズムが取得されます。 しかし、彼の仕事は、いくつかのアクションが既に彼によって以前に記述された他のものを含むかもしれないという事実によって促進されます。
「そして、プログラミング言語が彼の助けになりますか?」
-そうでもない...


神話3:アルゴリズムをコンパイルするにはプログラミング言語が必要


いいえ、言語は単なるツールです。 ミュージシャンのギターのように。 ギターを単独で演奏することは名声を保証するものではありません-原則として、人々は通常、音楽自体を賞賛するものであり、弦を素早く明確に引く能力ではありません。 一方、どんなに素晴らしいギタリストを演じても、誰もが悪いギタリストを見るようになることはまずありません。 また、YaPでは、その構文と関連するニュアンスの知識が非常に重要であり、美しく明確なコードを書く能力も重要です。 ただし、アルゴリズムとデータ構造の作成方法がわからない場合、優秀なプログラマーとは言えません。

コンピューターはプログラミング言語を直接理解していません。 前と同様に、彼は一連の「最も簡単な」コマンドの形式で各言語コマンドを提示し(番号を保存し、番号をリセットし、それに追加します)、実行できます。 プログラマーは言語を「理解」し、マシンはそれを実行するだけです。 実際、プログラミング言語は、それと通信するための一連のコマンドです。

-確かに、現在のプログラミング言語の多くには、開発者が既製のアルゴリズムとして使用できるプリコンパイルされたアルゴリズムのセットが既に「含まれています」。 したがって、それにもかかわらず、言語はアルゴリズムのコンパイルを少し簡単にします。
-つまり、あるプログラマーがいくつかのアルゴリズムをコンパイルした場合、他のプログラマーはすぐにそれを使用できますか?
-はい、これは常に起こります。 これが、IT業界がこれほど急速に発展している理由の1つです。 ただし、 新しいアルゴリズムを自分で作成する必要があります。
-そして今すぐ作りましょう!
-簡単。 典型的な例:1000ページの本があるとします。 たとえば、875番目のページで開く必要があります。 どうしますか?
-さて、私は最初から875番目まで走っただけです。
-ええ、あなたは各ページの番号を見なければなりません。 そして、すべてのコーナーが一緒にスタックしている場合を想像してください-それからどれくらいの時間が経ちますか? しかし、3ページだけを整理するだけで十分です!
-どうやって?
-最初に、本の真ん中、つまり500番目のページを選択します。 次に、私は見ていきます:形成された半分のどれに、目的のページが落ちるべきですか?
-二番目に。 それから何?
「同じこと。」 500番目から1000番目までの間隔を再び2つに分割し、中央のページを開きます。 これにより、750番目のページから1000番目のページまでの間隔が発生します。ここで、再び中央のページを選択します。 その数は何ですか?
-750プラス125 ...これは875です!
-なるほど。 わずか3アクション! 中央のページを選択する際にあまり正確ではない場合でも、適切なページをあなたよりもずっと早く見つけることができます。 このアルゴリズムは「二分法」と呼ばれます。 現実には、プログラマははるかに複雑なアルゴリズムを使用しています。
「それを紙に書き留めていただけますか?」
-もちろん。 ペンはどこにありますか?

擬似コード
 :
	
        ( , _);
	
         (_ = _)
                  ;
	
        
                 (_ < _)
                        ( ,      );
                
                        ( ,      );

— , ?
— … , .
— , .
— ?
— , «» (, ?). , «» «» . — .
— ?
— .
— ?
— !



№4: —


, , . , , . . — . , . , , ( ) — ().

, . , , . , . , , : - , . — , , …

— , - , .
— — ?
— , . , - , - . , …
— , !
— .
— , , ?
— , ! ...



:

, . , — , , ;)

Source: https://habr.com/ru/post/J155429/


All Articles