コンピューターとプログラマーが互いに話す方法の非技術的な説明ICHI.PROコンピューターとプログラマーが互いに話す方法の非技術的な説明UnsplashのHiteshChoudharyによる写真ある時点でテクノロジーに携わっている場合は、テクノロジー以外の人に自分が何をしているのかを説明する必要があります。その「マトリックスのようなもの」(ターミナル)であなたが一日中何をしているのかをもっと知りたがっているのは、好奇心旺盛なパートナーかもしれません。あなたの友好的な隣人が、あなたがプログラマーとして働いていることを知り、彼らのプリンターを修理するように頼んだのかもしれません。この種の会話は難しい場合があります。コードを書いた長い一日の後に私のホームオフィスから現れた私のパートナーは、深い質問で私を襲いました:「コンピュータにNOとだけ言えませんか?」コンピュータが「いいえ」を理解しない方法についての答えをつぶやいた。バイナリでしか話せません。彼は完全に非技術的な分野で働いていますが、バイナリコードが何であるかを知っています。Oを綴るのに必要な0と1の数は?」と言い返します。私はため息をつき、彼の質問に答える最も簡単な方法を見つけようとしました。何人の技術者がこのような会話をしたことがあるかを考えました。このガイドを書いて、いくつかの質問をわかりやすく説明します。コンピューターは本当に0と1で話しますか?それはどのように機能しますか?プログラマーとコンピューターは一体どのように通信しますか?プログラマーは彼らの「マトリックスのもの」に座って、一日中ゼロと1を書きますか?バイナリで「いいえ」と言うにはどうすればよいですか?コンピューターは本当に0と1で話しますか?それはどのように機能しますか?この質問に対する簡単な答えは「はい」です。彼らは0と1でのみ話し、それはBinaryと呼ばれます。コンピュータが行うことを最も基本的な機能に分解すると、それは回路を流れる電流だけです。回路が接続されている場合、電気は回路を流れ、1に相関します。回路が接続されていない場合、電気は流れず、0に相関します。電気の流れを漏斗するトランジスタもありますが、必要なものはすべてあります。今知っているのは、コンピュータが実際にオンとオフを知っているだけだということです。事実は、0/1、オン/オフ、はい/いいえ、真/偽、または猫/犬である可能性があるということです。私たちがそれを何と呼ぶか​​は重要ではありません。重要なのは、それが違いを表すということだけです。明らかに異なるものが1つあります。コンピュータの場合、それはたまたま電気と0/1です。コンピュータ上のすべてのものは実際には数字です。「N」や「O」のような文字であっても、実際には1と0のコレクションにすぎません。ある時点で、コンピュータは非常にスマートだと思ったことがあるでしょう。彼らはあらゆる種類のクレイジーで強力な計算をしますよね?彼らは人間よりもはるかに賢くなければなりません。コンピュータは賢くない。彼らは実際には非常に愚かです。私があなたに人間を紹介し、彼らが理解できるのは0と1の2つだけだと言ったとしたら、おそらく彼らがあまり賢いとは思わないでしょう。これについては後で詳しく説明します。コンピュータは0と1で話します。人間はどのように彼らとコミュニケーションをとるのでしょうか?さて、人間同士のコミュニケーションから始めましょう。彼らは言語を使用します。言語を使用すると、脳から抽象的な情報を取得し、それをより小さな概念的なチャンクに分解し、それらのチャンクを再構成して、主に口からの音と体からのジェスチャーを使用して、より消化しやすい形式で世界にブロードキャストできます。情報理論と呼ばれるデータ交換の研究に専念する科学的調査の全部門があります。情報はいたるところにあります。それは私たちの心の中に、私たちのスマートフォンの中に、そして私たちのDNAの中にさえあります。それは私たちが話している情報(データ)の種類に関係なく普遍的な測定単位を持っています。この測定単位はビットと呼ばれます。ビットは(ご想像のとおり)2進数の略です。ビットのバイナリ値は0または1です。これはおなじみのように聞こえ始めていますか?1バイトには8ビットがあり、私たちのほとんどはバイトについてすべて知っています。スマートフォンまたはラップトップが保持できるギガバイト数を正確に知っているでしょう。人間の脳は、250万ギガバイトに相当するデータを保持できると推定されています。抽象的な意味で、路上で誰かと話している場合、言語を使用して脳からその人にビット(情報)を送信していると言えます。コンピュータがファイルをハードドライブに移動している場合は、ビットも転送しています。プログラマーも言語を使ってコンピューターと通信します。英語やフランス語のような話されていない言語だけです。Javascript、C、Ruby、Java(JavaSCRIPTとは異なります)、Python、Go、R、PHPなどのプログラミング言語について聞いたことがあるかもしれません...リストは続きます。Javascriptが書き出されているのを見たことがあれば、次のようになっている可能性があります。lowestNum;};英語やフランス語などの人間の言語は、私たちの脳の抽象的な思考と、私たちの話したり書いたりするのを聞いている人に最終的に到達するその情報のあまり抽象的な表現との間を緩和します。同様に、プログラミング言語は、プログラマーの抽象的な人間の考えと、MACHINEのより正確で抽象度の低い0と1の間に位置します。通常の人間は、数百万の0と1は言うまでもなく、10桁の電話番号を覚えるのに苦労します。そのため、これらすべての0と1を抽象化し、人間と機械の両方が理解できる方法でコンピューターと通信する方法が必要です。同様に、コンピューターは一連のオンまたはオフの電気回路にすぎないため、複雑な言語の楽器を理解することはできません。最終的には、上記のJavascriptのように、0と1の間の何かと人間の言語になります。コンピューターと通信するためのプログラミング言語があります。それらはどのようにして0と1になりますか?簡単に言うと、プログラミング言語で書かれたプログラムは、他のプログラムによって0と1に変換されます。賢いプログラマーはコンピューターに、理解できない言語を理解できる言語に翻訳するように教えました。この不平を言う作業は、コンパイラと呼ばれるものによって行われます。コンパイラーは、プログラマーによって書かれたコードを受け取り、それをコンピューターが理解できるコードで書かれた一連の命令に変換するプログラムです。最終的には、0と1の非常に長いリストになります。これにより、電気が正確に正しい順序でオンとオフを切り替え、コンピューターがプログラマーが指定した命令を実行します。コンパイラーで起こっていることの現実はそれよりもはるかに複雑ですが、私がそれを説明しようとすると、私たちは一日中ここにいるでしょう。インタプリタと呼ばれるコンパイラに似たものもありますが、簡単にするためにここでは取り上げません。事実、コンピューターは、コンピューターが実行できるとわかっている複雑なタスクを実行するために、プログラマーからのかなりの量の手を握る必要があります。先に述べたように、私たちはコンピューターが非常に高速にできるので大好きですが、それでも何をすべきか、そしてそれをどのように行うかをかなり詳細に説明する必要があります。これが、彼らが知覚力を持って地球を乗っ取るのではないかと心配する理由がない理由です。私たちが何を考え、どのように考えるかを教えない限り、彼らは考えません。誰がコンパイラを書いたのでしょうか?大変な作業のようですね。ある段階で、非常に賢い人間が座って、プログラミング言語の構文を構成するすべてのあいまいな文字の組み合わせ(上記のJavascriptに表示されるものなど)を、コンピューターの0と1の組み合わせにマッピングしました。そのロジックのほとんどはコンパイラーによって実行されます。これは、すべてのプログラミング言語が同じであるとは限らないことを言及するのに適切な時期のように感じます。私たちには高水準と低水準のプログラミング言語があり、それらは人間にやさしい(高水準言語)とコンピューターにやさしい(低水準言語)の間のスケールにあります。Webサイトのコードを記述したい場合は、JavaScript、Python、Rubyなどの高級言語を安全、簡単、そして最も重要なことにすばやく使用できます。それらは習得が容易で、複雑さが少なくなります。アセンブリ言語のような低水準言語は0と1に非常に近いため、コンパイラも使用しません。実際、コンパイラが実際に内部で行うことは、高級言語をアセンブリ言語に翻訳することです。低水準言語ははるかに複雑で、習得が困難です。真ん中のどこかにCのような言語があります。これは、オペレーティングシステムの作成やコンパイラの作成などの複雑なプログラミングタスクに一般的に使用されますが、アセンブリ言語のようなものほどハードコアではありません。ここで軌道に戻りましょう。コンピュータに「いいえ」と伝える方法と、プリンタを修正する方法を教えてください。UnsplashのSvenBrandsmaによる写真コンピューターへの文字でさえ、1と0の集合であると前述しました。それらは、エンコーディングと呼ばれるプロセスを通じて、文字から1と0のコレクションになります。ASCIIと呼ばれるエンコーディングに使用されるものがあり、英語のアルファベットの最初の126文字と記号を表すために7桁を使用します。それは便利に連続していて、文字NとOは互いにすぐ隣にあります。ASCIIの場合、「10011101001111」でコンピュータにノーと伝えます。これらの70と1の2つのコレクションは、最初のコレクションが0で終わり、2番目のコレクションが1で終わるという理由だけで区別されていることに注意してください。前述のように、互いに隣接しています。大文字の使用は重要ですが、概念を理解することは重要ではありません。あなたが尋ねる他のすべてのキャラクターはどうですか?そこには126だけではなくもっとたくさんあります!ASCIIだけでは決して十分ではありませんでした。世界の多くの文字を標準化するために、ユニコードコンソーシアムと呼ばれるこの組織があり、それぞれが2進数のコレクションで表される100,000以上の文字のリストを監督しています。その数の文字を表すために、32個の0と1まで移動する必要がありました。最近、私たちが文字に使用するエンコーディングのタイプはUTF-8と呼ばれ、現代のWeb全体でかなり広く使用されています。1001111」は「NO」のままです。これは理解しにくいですが、詳細情報があります。あなたがそれをもっと探求したいなら、参考文献で。プリンタに関しては...2008年です。プリンタの所有権の決定を再考する必要がある理由についてお読みください。結論として...これで、コンピューターがその人々の歌を歌おうとした場合の対応方法がわかりました。ある種...これは、言及されたトピック(バイナリ、情報理論、プログラミング言語、文字エンコードなど)について知っておくべきすべてのことを網羅的または詳細に説明しているわけではありません。それは、調査の魅力的な領域の表面をかろうじて傷つけ、概念は、あなたが最初のレベルの理解を解き放つのを助けるために単純化されています。私の希望は、それがあなたにもっと多くの質問を提起し、あなたがコンピュータサイエンスについてもっと学ぶように導くことです。そのうさぎの穴をさらに下って行きたいかどうかを確認するために、記事をまとめるために使用したリソースを以下にリストしました。アドレスに変換し、コンピュータが接続できるようにします。私が数学からCSに転向した経緯2023年秋の入学プロセスは終了に近づいており、延期/拒否が発生しています。夢のプログラムに合格された方、おめでとうございます。関連記事JARMとPythonを使用したSSLサーバーのフィンガープリントPythonでJARMを使用する簡単な方法であるpyJARMの紹介2020年11月初旬、SalesForceは、説明のつかないJARMという名前の新しいアクティブなTLSフィンガープリントツールを発表しました。JARMの前提は、ターゲットサーバーがさまざまなカスタムクラフトのTCP「Clienthello」パケットを使用してスキャンされた場合、結果の応答を組み合わせてハッシュし、共有または類似のアプリケーションまたはサーバーを示すフィンガープリントを提供できることです。優れた開発者を作る非技術的なこと私はこの記事を書くのをしばらく延期してきました—私はそれを書く資格があるとはまったく感じませんでした。今日はそれを書く時だと思いました。技術面接の社会的要素に取り組むコーディングの課題はストレスがたまりますが、ストレスに対するあなたの反応は、これまでの技術スキルよりも雄弁です。テクノロジー業界でのポジションについて面接する場合、通常、オファーが検討される前に、少なくとも3回の面接を行います。ラウンドは通常次のようになります:あなたがそれを考えるなら、あなたは間違っています。Programmerは1999年に最初に出版されて以来、史上最高のプログラミング本に選ばれています。Manifestoの最初の著者の一人であり、いくつかの真剣な資格を持っています。