さまざまなプログラミング言語とそのアプリケーション。 Yandexでの講義

今年の最初の投稿は、非常に基本的なトピック、Small ShADでの講義に専念することにしました。 テクノロジーに興味のある高校生が参加しているため、プレゼンテーションの特異性-講義はプログラムを始めたばかりで、どの方向に進むべきかを考えている人にとって特に興味深いものになります。 彼らのために、Yandexには「プログラミング入門(C ++)」というコースがあり、Stepic.orgプラットフォームで受講できます。



講師ミハイル・グストカシン-Yandexの学術プログラムのキュレーター、HSEコンピューターサイエンス学部の学生オリンピックセンターのディレクター。 ミハイルは、全ロシアプログラミングオリンピックの多数の受賞者と受賞者を準備しました。







講義では、プログラミング言語とは何か、どのように異なるのか、どのように表示されるのか、どの言語がより良く、どの言語がより悪いのかについて説明します。 初めに、言語の歴史について少し話をします-言語がどのように現れたのか、人々がどのようにプログラムを始めたのか、すべてがどのように発展したのか、今何が起こっているのか。 第二部では、どの言語が適切か、どのように「お気に入りの言語を選択して人生を楽しむか」について触れます。 講師はまた、彼の意見では、これをすべて学び、仕事に就く方法についても少し説明します。



いつものように、カットシーンの下には講義の詳細なトランスクリプトがあり、その内容をナビゲートできます。



プログラミング言語の歴史



最初から始めましょう。 当初、コンピューターにはキーボードさえありませんでした! つまり、すべてが非常に悪かった-彼らはキーボードや画面を持っていなかった、 パンチカードがあった(これらは穴のあるものや穴のないものです)。 したがって、ピンがそこに突き刺されたか、またはそこに光が輝いていました。 穴がある場合(またはその逆)-0または1を意味します。 また、当時のプログラムはマシンコードを使用して記述されていました。コンピューター上の各操作(加算、減算、より複雑な操作)には、ある種のマシンコードがありました。 人々自身がタブレット上でこのコードを選択し、メモリ内のあらゆる種類のアドレスを手に入れ、それらをすべて手でノックアウトしてリーダーに詰め込みました。 もちろん、プログラマーの仕事は、おそらくそれほど興味深いものではありませんでした-穴を開けること-そして、科学と技術の開発で、もちろん、彼らはあらゆる種類のより「興味深い」ものを思いつき始めました。 例えば、すでにやや簡単になったアセンブラー(Assembler)。



さて、彼はどのように人生を楽にしましたか? チームには何らかの「魔法の」コードがあることを思い出す代わりに、「人間」の英語に似たあらゆる種類の単語が使用されました-何らかの種類のaddまたはmov-よく、そしてレジスタまたはメモリ領域、これらの変数生産する操作。 しかし、これは一般に、どのレジスタが存在するのか、どの変数がどこにあるのか、一般に何が起こるのかを覚えておくために、十分な量の精神的な努力も必要であることは明らかです。 なぜこれが起こったのですか? コンピューターは「愚か」で、それ以上「スマート」なものを理解できなかったからです。 実際、アセンブラーからマシンコードをアセンブルするには、時間もメモリもかかります(もちろん、その時点では十分ではありませんでした)。



徐々に、このような大規模で複雑なプログラムの開発は非常に難しいことが明らかになりました。 これらのコマンドでのプログラマーの生産性は非常に低かった-つまり、彼は1日に数行(意味のある)書き、各行は特別なことは何もしなかった-いくつかの単純な算術演算。 そして人々は、プログラムを書くのがより簡単で便利になるように、言語を人間の言語、特に英語にもっと似たものにしたかったのです。 そして出発!



古い舌と死んだ舌



最初の言語の1つはFortranでした。 ちなみに、彼はパンチされたカードでbeatられました-Fortranでプログラムをノックアウトするための特別なパンチされたカードがありました。 しかし、このFortranを今すぐ使用すると、私の意見では、50〜60の間ですらあります。 登場-それに何かを書こうとすると、それはあなたにとって非常に不快になります、私はあなたを保証します! 現代のFortranはまだ生きていますが、すでに以前のものとはかなり異なっています。



他の言語-おそらく聞いたことがあるかもしれませんが、プログラミングが歴史について語られるイベントでのみこれを書きます-これはCOBOLです。 これは、ビジネスアプリケーションを作成するための言語でした。 ビジネスアプリケーションとは 銀行でのいくつかの取引、他の何か、これらすべてはKobolで書かれました。 もちろん、私たちにとってはあまり人気がありません。 モスクワのKobolのプログラマーなら、あなたは非常に困難を感じるでしょう。 そして、モスクワではないどこかに、さらに大きな困難があります。 しかし、驚くべきことに、10年前、人類が書いたすべてのコードの半分以上がKobolで書かれていました。 そして今まで、すべての銀行取引の大部分は、それに書かれたプログラム(COBOL)を使用して実行され、人々はまだ何かを書いています。



「面白い」言語もあります。それはアルゴルと呼ばれていました(68番目のバージョンで、作成年を特徴付ける)。 これはアルゴリズム言語です。 一般的に、彼らはそこで何かをすることができましたが、今は彼らが何ができるかにあまり興味がありません。 そして、これで古代と比較的未使用の言語への遠足を完了でき、まだ生きている(そして活発に生きている)ものに進むことができます。



古いが生きている言語



Algolはヨーロッパで発明され、Fortranは主に米国で使用されました-大きな違いはありません。 どのような傾向が顕著ですか? 最初はすべてが複雑で、書くためには、ほとんどの技術者、電気技術者であり、どの接点が閉じられているか、プログラミングのための何かを理解する必要がありました。 それから、小さな葉で座って、記憶を読み、それの世話をすることが必要でした。 そして徐々に、プログラマーにとってすべてがよりシンプルに、シンプルに、シンプルに、そしてさらにシンプルになりました-人にできる限り考えず、可能な限り自動的に行います。 この期間の終わりごろ(講師はアルゴルとコボルを指しています)、言語はある意味で今日まで「生き残った」ように見え始めます。



ベーシック 。 おそらく何人かの人々はまだそれについて何かを書いています、少なくとも私はいくつかの学校で彼らがQBasicを学ぶのを見ました、「1989」を言うそのような青い窓。 一般的に、「力と主力で」生きます! 非プログラマ向けの言語として考案されました。 当時、プログラマーは非常に専門的な職業でした。 そして、ここで彼らはあなたに言います:「ここに私たちはクールなBasic言語があり、合理的な人なら誰でもそれを使ってプログラムを作成します-それは簡単です。 繰り返しになりますが、そのBasicと最新のBasicは大きな違いです。 10の番号が付けられたこれらの行のすべての種類、すべての種類のGOTOおよびその他の恐怖-それらは現代のBasicとは関係がなく、Basic 89とはほとんど関係がありません。



別の面白い話は、主にロシアと旧ソビエト連邦の国々の大学界で広く知られているパスカル言語です。 驚くほど学習言語として使用され続けています。 世界の他の地域では、それはあまり一般的ではありませんが、生活と生活です。 そのような人のワースがあります-ここで彼は科学者、理論家です。 彼はアルゴルの議論に参加し、何が起こったのか気に入らず、自分の言語であるパスカルを思いつきました。 そして、 Borlandの会社(およびその前に他の多くの会社-特にAppleが関与していた会社)がそれを取り、すべてを台無しにしました。 彼は調和のとれた美しい理論を持っていました-「すべてがうまくいく」-彼らは人々が仕事に必要なものをそこに取り込んで詰めました。 まあ、それは彼が望んだほど美しくはなかった。



そして最後に、 C。 Xiはエンジニアによって発明されました。 Pascalが科学者によって発明された場合、CはKerniganとRitchieによって発明され、彼らはベルでエンジニアとして働きました。 これはどのように起こりましたか? 当時、これらの言語で体系的なものを書くことは不可能でした(講師はFortran、COBOL、Algolを指しています)。 「システム」とは何ですか? たとえば、オペレーティングシステム、一部のドライバー、その他。 これらの言語は、数学計算、ビジネス計算、その他すべてを対象としています。 そして、他のすべてはアセンブラーで書かれました。 いくつかの言語がありましたが、それらは現在死んでいます。つまり、C言語はアセンブラーからすぐには現れませんでしたが、いくつかの中間的なものを通して現れました。



ポイントは何ですか? ケルニガンとリッチーは小惑星のおもちゃを遊ぶのが大好きでした-宇宙船が飛んで、小惑星があり、それらを撃ち、それらがバラバラになります。 彼らはプレイするサーバーを持っていましたが、そこにはたくさんの人がいました、そしておもちゃは遅くなりました。 そして彼らはオフィスのどこかで、だれも使用していないコンピューターを持っていることに気付きました。 しかし、問題がありました-それは異なるアーキテクチャを持ち、ゲームはアセンブラーで書かれました。



彼らはそれを書き直しました、もちろん、それを再生するためにいくつかの機能を掘りました。 しかし、これにより、新しいアーキテクチャでの書き換えは毎回あまり賢くないという考えに至りました。 そして、彼らは、システムプログラミングに適した、つまりメモリを管理することができ、何かがどこにあるのか、これらのメモリにアクセスする方法を理解することができるような、高レベルの言語を書くことに決めました。 そして、Cの言語も登場しました。これは、すべてにさらに大きな影響を与えました。 それらすべて(講師はAlgol、Fortran、および言及された他の言語を指しています)は大きな影響を及ぼしましたが、C-そうです...



したがって、これはUnixの主要言語であり、オペレーティングシステムであり、当時は今よりもさらに人気がありました。 80年代頃までは、状況はこのようなものでした(講師はBasic、C、および他の言及された言語で表示します)。 このすべてがすでに私たちのために死んでいるとしましょう(講師はアセンブラー、Fortran、およびAlgolへの言及を消去します)...さらに楽しい。



80年代に固有の言語



最初の奇妙な点の1つはC ++でした。 C言語には多くの欠点があります(まあ、一般的には巨大です)-脚で自分を撃つ、フィクションで脚を撃つ、他の足で、片足を他の足で撃つなど、すべてを行うことができます-一般的に何でもする。 しかし同時に、いくつかのアーキテクチャ上の作業は非常に困難です-再び、アセンブラーのように、私たちはどこに、何を、どのメモリを割り当てたかを常に監視する必要があります。 それは常にこのメモリのどこかで「流れ」ます。つまり、私たちは割り当て、削除を忘れ、他の何かを削除し、一般的にメモリからクロールしました-多くの問題を引き起こしました。



C ++は、開発を容易にするC言語への追加セットとして最初に作成されました。 そのとき、オブジェクト指向プログラミングが流行になり、人々はすべてを階層として記述することができると判断しました。つまり、ボール(抽象)を持ち、サッカーボール、バレーボール、別の抽象ボールを継承します。 「ファッショナブルなものになったので、「現在、すべてを何らかの階層構造の形で記述しています。すべてがうまくいき、人生がうまくいき、すべてがうまくいき、それで終わりです」。 ある意味で、C ++はこのオブジェクトアプローチを実装しました。これは最初のオブジェクト指向プログラミング言語ではありませんでしたが、非常に一般的になり、あらゆる種類の機能が登場し始めました。 同時に、C ++は(当時)C言語とほぼ完全な互換性を保持していました; 99%のケースでは、Cで書かれたプログラムはC ++として正常にコンパイルされ、同様に機能しました。 これは、CからC ++への切り替えを簡単にすることを目的としています。



オブジェクトアプローチ(C ++)に加えて、標準テンプレートライブラリ( STL )がすぐに登場しました。 学校ではまだパスカルを教えていた人は、あなたが最初に組み込みのソートを持っていないことに気づいたと思います(古代の青いボーランドパスカルでは、現在はすでに最新バージョンです)-例があります(ソース)並べ替え、コピーして貼り付けることができます。 ただし、ここで整数を並べ替える場合、実数が必要な場合、ここでは相互に比較できる文字列が必要な場合、まったく同じことを行う3つの異なる並べ替えを記述する必要があります。 これはあまりよくありません。C++ですぐに表示されなかったテンプレートは、この問題をずっと簡単にしました。 つまり、互いに比較できるものを正常にソートする抽象プログラムがありました。



90年代のスクリプト言語



しかし、時間が止まったわけではなく、80年代には多くの興味深いことが起こっていました。 しかし、80年代と90年代の変わり目頃のどこかで、コンピューターは非常に優れたものになったため、既に非常に奇妙で非効率的なことができました。 特に、これらはマシンコードにコンパイルされずに解釈されるスクリプト言語でした。 BASICも時々解釈されましたが、これらのスクリプト言語は主にワードプロセッシングを目的としていました-たとえば、 Perl 、 Python (当時はあまり有名ではありませんでした)、 PHP 、 Ruby-これらは1つまたは複数のスクリプト言語です彼らはまだ異なった程度に住んでいます(彼らはすべて2000年以前、さらにずっと早く現れました)。



これらは特定のものであり、今では多く使用されているため、少し詳しく見ていきましょう。 アイデアは何ですか? コンパイルしないと、さらに多くのことが許可されます。 たとえば、プログラムはそのコードを見て何らかの方法で使用できます。 彼女は自分の身に何が起こっているかを知っていて、これにより、やるべきことがたくさんあります。



Perlはワードプロセッシングを目的としていました-当時、コンピューターには既に大量のメモリがあり、一部のテキストを詰め込んだり、このテキストを扱うのに役立つ何か(たとえば、単語のカウント、何かの検索)がありました。 しかし、私の意見では、それは少し狂った人々によって設計されました、それについてのそのようなジョークがあるので:「書かれた文字のセットは真珠の正しいプログラムです」。 私の意見では、あなたはそれを書くことができるだけで、読むことはできません。 パールコードを見て何かを理解しようとしても、何もわかりません。 もし彼のことをもっとよく知っていれば、何かを理解できるかもしれませんが、まだ方法を知っている人々から聞いたように、彼らは書き直すのが簡単だと言います。 つまり、プログラムは短くなり、そこにあるものを見つけて修正するよりも、書き直しが本当に簡単になります。



その頃、90年代半ばにインターネットが登場しました。 最初はメール、静的なHTMLを備えたサイトでしたが、人々はそこに何らかのダイナミクスを追加したいと考えていました。 したがって、これには何らかの相互作用が必要であり、相互作用のプロトコル、そして最も重要なことには、ユーザーの要求に応じてユーザーに「吐き出す」これらの静的(条件付き)ページの生成を考え出しました。



一般的に、当時の真珠以外は適合しませんでした。 純粋なCまたはC ++ハンドラーで記述するのは悪い考えでした。 また、当時最高の(そして十分な長さ)がなかったため、PearlはWeb開発で人気のある言語でした。 もちろん、規模を現在の状況と比較することはできません。



PHPは...のように見えました。 ある人はすぐにこれをやめました-彼は自分のページを作り、ゲストブック、何か他のもの、いくつかのものを持っていました。 そして彼はパールのためにある種のマクロのセットを書きました。それは彼がとても快適だったからといって、Cの使い方を知っていたので、Cのように見えました。 そして、それを個人ホームページと呼びました。 「人々、私が書いたものを見てください。ここにあるものはすべて、パールのものよりもずっと明確で、編集することができます。」 そして人々はそれが好きだった。



それから彼は事件を放棄した。 一般に、結果として、このPHPは存続し始め、Perlよりもずっと人気がありました。 しかし、彼のこの「出生時の怪我」(パールの一連のマクロとしてのアイデア)は、彼とかなり残酷な冗談を演じました。 言語は奇妙であることが判明しました。 つまり、独自に開発し、誰もそれを設計せず、誰も開発プロセスを管理しませんでした(会社も個人もなし)。多くのグループがあり、それぞれが好きなものを見ました。 その結果、スタイルはありませんが、機能は異なる方法で呼び出されます。すべてが下線を介して行われ、一般に、とにかく、設定はあちこちにあり、これがどのように機能するかは非常に明確ではありません。 しかし、彼はそう考えたので、2時間で座り、PHPを書くことができます。



PythonとRuby:Rubyは今ではあまり人気がなく、Pythonは何らかの形で「プレーン化」されています。これについては後で説明します。 当時、それは非常に専門的な目的のための非常に専門的な言語(講師がPerl、Python、Ruby、PHPを指していた)だったことは明らかです。 一般的なケースでは、システムプログラミングもビジネスロジックも、その時点で誰も書いていないので、今ではほとんど何もしません。



90年代のコンパイル言語



私たちは同じ時間に行きますが、他の方向に行きます。 当時、私たちはウェブ用、ワードプロセッシング用ではなく、アプリケーション用、オペレーティングシステム用、おもちゃ用など、一般的には何でも書く必要があるほぼすべてにC ++を使用していました。 しかし、C ++は実際には不気味な言語です。 なんで? 第一に、下位互換性のためにCのすべての問題を継承したためです。 そこでは、Cの場合と同じように、100万通りの方法で自分自身を殺すことができます(当然、C ++で新しいメソッドが追加されました)。 同時に、C ++の作者が意図したように、すべてを正しく正確に記述すると、もちろん、古いシステムメソッドで強制終了することはできなくなり、小さくなったように見えます。 それにもかかわらず、彼は非常に奇妙な独特のオブジェクトモデルを持っていました。 プログラムをモジュールに分割し、Cからのピースに分割します(CまたはC ++にインクルードできる場合-実際には、ライブラリテキストをプログラムに挿入することを意図していたため、インクルードの束を作成するときにすべてのものがあります) -当初のように「プリミティブ」である場合、すべてが1つのファイルに挿入され、その後数回実行されるため、コンパイルに非常に長い時間がかかります。同じパスカル、Wirtowskiは、この点については、はるかに思慮深いバージョンはさらに優れています。



一般的に、C ++には多くの欠陥があります。 C ++で書くにはプログラマーの資格が高くなければならず、そのようなプログラマーは高価でした(準備や他の何かの両方、つまり、市場でプログラマーを見つけるのは難しく、多くを支払う必要があり、一般的にこれは重要ではありません... ) そして私たちのコンピューターはどんどん速く考えられ、より安くなり、人々は新しいコンピューターを購入し、より多くのアプリケーション、電話用のおもちゃ、そして一般的にはより多くの喜びを求めています。



そこで、Java(Java)が登場しました。 名前がこの言語で登場したように、かなり面白い話がそこに接続されています。 そこにはプログラマーがいて、彼らはいつもコーヒーを飲んでいて、当時はジャワ島で成長していたコーヒーを飲むのが流行でした。 この言語は、組み込み機器、特にコーヒーメーカー用の言語として考えられていました。 そして名前が判明しました...

一般的に彼女から何が始まったのか、何が彼女に良かったのか、そしてなぜ彼女は大きな人気を得たのですか? 最初に、彼らはシシュニーの遺産を完全に取り除きました。 ポインタはありません。体の一部を撃ち、すべてを壊す方法ははるかに少ないです。 第二に、彼らはオブジェクトモデルの観点からより最近のアイデアを導入しました-つまり、C ++はJavaよりもずっと早く登場し、より古くて「ワイルドな」オブジェクトモデルを使用しました。 さて、ここ(講師はJavaを指しています)は、すでにそれよりももっと思慮深く、理論的には、人々は実際にはすべてをもっとクールに考え、応用し、作りました。



そして最後に、3番目。 Javaプログラムは、マシンコードではなく、仮想マシンのコードで収集されました。 つまり、Javovskayaという仮想マシン(VM)JVMがありました。 あなたのプログラムはある種の中間表現になり、このマシンの助けを借りてすでに実行されていました。 それは何を与えましたか? 第一に、速度が低下し、第二に、ひどい力で記憶を食べていました。第三に、(理論的には)どこでも携帯できました-コーヒーメーカー、コーヒーグラインダー、コンピューター、携帯電話までです。 これは、一方では良いことです。つまり、仮想マシンの実装を作成した後、Javaプログラムをどこでも起動できます。 しかし、一方で、同じ携帯電話でメモリが少なく、パフォーマンスが低下し、それでもすべてが鈍くなって速度が低下し始めたのは悪いことです。



しかし、これは言語が発明された主要なものでさえありません。 Java言語は、プログラマーの資格を減らすために考案されました。 つまり、貧しいプログラマーは悪いプログラムを書くことができないので、良いJavaプログラムを書くことができます-プログラムをひどく書く手段はありません。 そこでは、良いプログラムだけを書くことができます。 まあ、言語の作成者の理解で。



つまり、C、C ++、Python、何でも、プロジェクトから何らかのひどいゴミを作ることができます。そこでは、すべてが私たちと混同され、数時間などになります。 その後、Javaでガベージダンプを作成することもできますが、そのためにはすでにいくつかの努力をする必要があります。 つまり、デフォルトでは「ガベージ」ではないことがわかります。何かを継承して継承するという他の問題が発生します。一般に、意味のある1行につき、あまり意味のない10行が取得されます。 しかし、そのような中級レベルのプログラマーは、非常に高品質のコードを書くことができます。

もうすぐ終わりです。 私たちにとって、次に登場するのは.Net(そうではない)です。特に、C#に関心があります(ほぼ同じこと[講師はJavaを指しています]。つまり、詳細に違いがあります。彼らはより多くのお金を払う)。



そしてもう1つ-JavaScript。 同じ年に登場したJava言語とは何の関係もありません。この言葉は流行していました。彼らは使用する商標をライセンスしました。



あなたが注意を払う必要がある主なものは何ですか? (講師は、C ++からJava、.Net、C#、JavaScript、およびPHPに矢印を描画します)。 これらの言語の1つ、および他の多くの言語で簡単な小さなプログラムを作成するには-C ++を知っていれば、一般に他に何も知る必要はありません-C ++で作成し、最初にドルを追加します。ささいなことをして、それはあなたのために何でも働き始めます(講師は、C ++からの矢印が割り当てられた言語をあなたに示します)。 つまり、いくつかの単純な点で非常に似ています。 学校の問題、教育課題、何か他のものを解決する場合(大きなプロジェクトを設計しないでください-数字を読み取り、コンソールに数字を表示し、何か他のことをする1つのファイルがあります)、これらの間にほとんど違いはありません舌。 JavaScriptとPHPが特殊化されていることは明らかです。これらはすべてが少し異なります。 そして、ここで(講師はJavaとC#を指しています)一般的にはほとんど違いはありません。



それ以来、あらゆる種類の興味深いものが登場しましたが、それらが成功するか死ぬかは明らかではありません。 今、何のタスクに使用していますか?



タスクに応じた言語の選択



ビデオカードのドライバーを作成するタスクに直面しているとします。 今日はどの言語を使用しますか? (聴衆からの叫び:Java!)なぜ... Javaは素晴らしいのに、RubyやPHPではないのか? (講師は皮肉を話します。)



低レベルプログラミング



低レベルの何かを書く場合、Cが最良の選択ですが、実際にはC ++がこれに使用されていることを聞きました(しかし見ませんでした)。 しかし、私はこれを弱く信じています。Cではあなたが明確に制御できるからです-あなたが非常に多くのバイトのメモリを与えたので、それから非常に多くがメモリになります。 C ++(STL)では、文字列はどのように実装されますか? まあ、どういうわけか実装。 そして、最終的には、どのように、そして何がそこで起こるかわかりません。おそらく、ビデオカードの記憶が終わるか、何か他のことが起こるでしょう。 したがって、Cはまだ存在し、死なず、そのようなシステムプログラミングタスクはまだ存在します-オペレーティングシステムを記述し、ドライバーを記述し、他の何かを記述するために-Cはこれに最適です。 さらに、今ではバッテリーで生活するあらゆる種類のデバイス(モノのインターネットが来ることを約束します)があります(そしてもちろん、何百万ものデバイスがあり、すべてがこのモノのインターネットでハングアップします)、それらは非常に安く、非常に少ない電力でなければなりません消費する。 したがって、2 KBのメモリ、5 kHzのプロセッサがあります。もちろん、近い将来、ある種の仮想マシンまたはスクリプト言語のねじ込みは機能しません。つまり、Cで何かを記述する必要があります。 そして今、たとえば、ビデオカード(OpenCLまたは他のテクノロジー)でのコンピューティング-彼らは彼らのためにプログラムを書くための新しい言語を思いつきません-彼らはいくつかの大きな制限でCをします。 何か新しいことを学ぶ理由を人々がすでに知っているからといって? 正式には、これはおそらく、ある意味でCです。



Webプログラミング



新しいFacebook(ソーシャルネットワーク)を作成するとします。 何に書きますか? (聴衆からはHTMLとCSSについて話している。)HTML、CSSはデザインであり、そこに写真を追加したり、友達を残したり、コメントを残したりできるようにしたい。



スクリプトの部分、つまりクライアント側で何が起こるかについては、これがJavaScriptです。 また、JavaScriptが別の言語で生成されて送信されることもあります(スクリプトが生成されることがあります...ロジックの変更を処理する方が簡単な場合があるためです)。



驚くべきことに、それはPHPで書かれています-そして、Facebook、および他の多くの大規模なプロジェクト。 もちろん、「タイプミス」が行われたためではなく、正常に機能するように自分で作成する必要がありましたが、彼らはそれを行いました。 原則として、あなたが書くことはだいたい少なくなりますが、Perlはお勧めしません。 もちろんここでは、誰もウェブのためにゼロから何かを書くことはありません。 誰もが何らかのフレームワークなどを書いています。 オンラインストア? オンラインストアのフレームワークをダウンロードしました-それだけで、オンラインストアを作成しました。



ビジネスプログラミング



次に、銀行の退屈なアプリケーションを作成します。 または、たとえば、SIMカードを販売している人はいますか? おそらくあなたは電話などを買ったことがあり、彼らはあなたに言った:「ここにシステムがぶら下がっている、私たちは何もできない」。 そのようなアプリケーションを何に書きますか? (Pythonについての聴衆からの叫び)これをPythonで書くことはできませんか?! Pythonで書く価値はありません。 なんで? Pythonで何かを書くとき、あなたの書くプロセスで大量のバグを検出することは不可能だからです。 Pythonはあらゆる方法で動的に型付けされます。一般的に、バグを隠すことで、これらの利き手のユーザーがそこで何をしたか理解できず、すべてが壊れたような状況でポップアップすることができます。 つまり、Pythonでは小さなスクリプトを作成する方が良いです。そこで何が起こっているのか、何が行われているのかを理解できます。 まあ、または捨てるのが残念ではない何か:競合他社の前に何かを展開したいので、それはしばらくすると壊れます。 Pythonで書いたのはそれだけです-市場を獲得しました。 また、たとえば、銀行のアプリケーション(ローンを承認するなど)のように長い間何かを書く場合は、Javaで記述します。 それは深刻な問題であるため、紙、お金、書類、その他のものですが、すべてを壊すように浪費することは不可能です、そうでなければ人々は気分を害します-あなたが何らかの種類を持っているので、彼らのお金がなくなって、どこにも行かない文字列が数字になった瞬間、またはその逆。 そのため、Javaで系統的に、あなたは取り込んで、書いて、書いて...さて、または.Netで、そのような状況は原則として起こります。 もちろん、そこで問題に遭遇することもありますが、それでもこの可能性はいくぶん低くなります。



軍隊、航空宇宙向けのプログラミング



今、彼らがロケットで月にあなたを送ることに決めたと想像してください。 ロケットエンジンを制御するコードを書きたいと思うものは何ですか? 見てみましょう。 , ( Perl, Python, PHP, Ruby), — , - , . C++? , , , C++ . - , .



Java? , , . , , Java . , , : ÂŤ, garbage Âť. , .



, , . , , , - , .





. - , - , — , - — . , - -, , ( , , - ) - , . , . , - , Java, . ( ), , -, - , , (JavaScript). .



- , , ? ( ), , - . — , : «! !» . , , (, ). ! , , , -, Java, : «, , ,» — 10 . .



-



, , . , Appl, Borland , — Oberon. — , (? ? !). - , , .



. , . Ada, , , - , — .



? Python, , . PHP, , ( ). ( Ada) , . この理由は何ですか? , . , , , ( Stack Overflow) , , , , . , , , . , ? … - , , - , . - , , . , . , . - , (Python) .



Java Java Native Interface. , (-, , ) ( ). . , , ? , . , - . , () - . - .





, , . ? - , ? , , -, - . , , — .



, , , , , , ( , ), — Java, .Net. - , , , Java-, .Net- …



- , -, -, -, C++ . , , ( Perl, Python, PHP, Ruby), . — PHP , Python, , . , .



Ruby, . , PHP, , , .



, , — . , , , , , , - , - (, , ). Excel' -. , , . - Machine Learning, - , , . , , . , , , Machine Learning , , - , , , . ( ) ( ), .



, — . , . , ? だから。 . , , ( ) . , , .



. , , , , , . , , , , - - .



( )? , — . . , C++ ( ), ( ). — , C++, ( ) , , Java. , .



? , , , ? ( , 2000 , , C++, 2015 ).



2000 C++ . 15 , , , . , . - , , Borland Pascal', . C++ - (STL) — , sort() . , , — . - set () — , C++ , . , , , -. , , .



Java , Java . , , . - , . .



? ( ) . . , -, () C++, , .



, - () , , .



, , , , . — ( , ) ++ ( , , ). , , , : «, , - ? ». , , , . , ( ) .



, . , C++. , . , ( ). C++ , C++ .



«» . . , - , . , , — , . — . , : … : «, - , -. - , - — , . - , : «, , » — . , ? — . , : , , - () -, - , - , - , - , , . - , . ( ) C++, -. , ( «») , , - .

, — , “ ”. ( ) , , . — , : - , rsync (, . , , rsync', ).



, . , , , , -. , , ( 2 ) . - , . , .



, , , ( , , ), - , , - , -. , ( C++ ) , ( , ) — , -, , -. - . , , « » — « — »; — C++ , C++ , .



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



プログラマが仕事を探す方法



あなたはこれを行いました( 講師はコースのリストを表示します )、大学で学んだことをすべて行い、生産性を高めるためにさらに2年を費やしました。 仕事のために何かを選ぶには? 最初に、あなたはすべてに会い、どこか深く行き、あなたが愛していることをすでに知っています。 あなたが愛するものを自然に選択しなければなりません。 あなたが愛するなら、あなたは投資するでしょう、あなたはモチベーションを持ち、一般的にすべてがうまくいくからです。 それはお金だけではないので、問題はあなたが興味を持って楽しいはずであることです。 さて、あなたはクールな会社に就職したいのです。 個人的にどのような人に会いたいですか? たとえば、100人の学生が私のところに来ます-私は2人または1人で仕事をしなければなりません。 彼らは何に来ているのでしょうか? 最良の場合、彼らは大学で受け取った卒業証書を見せてくれます。 クールな卒業証書ですが、それほどクールではありません!」と私は間違っている可能性があります。 たぶん、ある人は多くの自由時間を持っていて、彼はずっと良く学んだ。



何が素晴らしいでしょうか? まず、最初から最後まで書いたオープンソースプロジェクト。 データをすばやく読み取ることができるように何らかのインフラストラクチャを作成することをお勧めします。それから、もちろん、何かオープンソースを作成することに興味があります。 彼らはウェブサイトではなく、トピックに関することをしました。 なぜこれに興味がありますか? 私はあなたのコードを見ることができます、あなたがコミットする頻度を見ることができます、私はユーザーからのバグ、それを使用する開発者からのバグにどのように反応したかを見ることができます-私はすべてを書き留めて、私はすべてを見て、考えます:「ああ、2年間バグがありました閉じた後、あなたは失礼のうちにユーザーに答えました、何か他のものがあります-私はそれを受け入れません。」 つまり、これはあなたの個人的なプロジェクトです。



さらに、他にクールなものは何ですか? チームワークをどのように行ったか見てみたいです。 つまり、あなたはインタビューのために私のところに来て、こう言います。「私たちと大学の人たちは良いアプリケーションを書いた。 私はそこでデータベースを作成し、彼らはそこに何らかのモバイルアプリケーションを作成しました。そして、彼は私たちのためにデザイナーの女の子、技術サポートの男の子として働いていました。 私たちは5人いましたが、クールなプロジェクトを行いました。」 さて、あなたのプロジェクトは本当に「あなたのものは何ですか?」と言っています。コードをもう一度見て、チームとチームで仕事をする方法を知っていることを理解しています。



プログラマーは、ガレージに一人で座っている人(インディーズなど)ではなく、明かりのない場所で、誰とも話をせず、ひげを生やして書いています。 とにかく、人々と何らかの交流があります。 たとえば、時々あなたを時々誓う上司と一緒に(上司、彼らはそうであり、いつも親切ではありません)。 そして、私はあなたが人々と一緒に働くことができると思います、そしてあなたが良いチームを持っているならそれは私を幸せにします。 良くなくても、彼女の不在よりはましです。



個人的に他に何が好きですか? 大規模なプロジェクトで自分を見せた場合。 たとえば、システムプログラミングに携わっている場合、彼らはLinuxカーネルに何かをコミットし、何らかのバグを修正しました。 つまり、彼らはあなたが他の誰かのコードを読むことができ、それに何らかの変更を加えることができることを示しました。 「ああ、本当に複雑なものを見つけて、いくつかのバグを修正しました!」そして、私はこれにとても満足し始めました。 私は...よくわかりません...競合他社が彼にもっと給料を提供してくれたので私のプログラマーは辞めました、そして私はあなたの代わりに誰かを差し込む必要があります。 ゼロから書いたように見えますが、他の人のコードを読んだり編集したりすることができず、私は怒っています。



最後に、特定の位置に応じて、他にもさまざまなものがあります。 アナリストとして働いている場合、Kaggleでデータ分析タスクを解決してください。 アルゴリズム的なものを探している場合は、スポーツプログラミングでアルゴリズムを実行してください。 そして最後に、あなたが職業について考え、インタビューがどうなるかを読んだら、そこにいる人々が大きな不満を表明していることに出会いました。 私はフクロウのように座って答えません。私は趣味を持っていないからです」と、彼らはHRがそうしていると考えています。 実際、彼らはあなたがどれだけ友好的で適切かを理解しようとしています。 あなたが非友好的で不十分な場合、あなたがどんな天才や仕事中毒であっても、素晴らしい知識を持つクールな専門家であっても、チームがあなたと一緒に働くことは難しくなり、あなたはプロジェクトを単独で引き出すことはありません。 さらに、たとえそれを引き出したとしても、その会社にとっての負荷を想像することができます。 明日は何をして、「私の給料を10倍に増やしましょう。さもなければ、あなたを置き去りにします。」と言います。 もちろん、企業はそのような状況にはなりたくありません。 したがって、自分自身での妥当性と親善の教育は、(少なくとも)専門的なスキルの開発と同じくらい重要です。



要約すると、私は何と言えますか? どの言語が良いですか、どれが悪いですか? さて、Ruby、Python、PHPなどの特定の言語グループ内では、何を選択すればよいですか? もちろん、正しい答えはPythonですが、実際には、許容されるバグの数と他の何かの量の違い-5%、まあ、おそらく10%です。 つまり、完成したPHPプロジェクトを既に作成している場合、彼らの正しい考えの誰も「Pythonですべてを書き直そう」とは言わないでしょう。 彼らは言う:「もっとPHP開発者を雇って、PHPでさらに書きましょう。」 素晴らしい、それは良い選択です。 もちろん、突然何らかの種類のプロジェクトを書き始めたら、おそらく今Pythonを選択するのが賢明でしょう。 しかし、それも依存します。 市場には安価なPHP開発者がたくさんいて、Pythonの開発者は高価だと思うかもしれません。「はい、テクノロジーはもっと楽しいですが、既製の開発者のお金を節約します。」 それで結構です

JavaとC ++の選択方法 はい、同じことが起こっています。 新しい大規模なプロジェクトを開始する言語を決定するまでに、専門分野の知識を得て、正しい選択ができるようになると思います。 今、あなたはそのような選択をする必要がないので、あなたが好きなことをすることをお勧めします。



私が言ったように、基本的なプログラミングの非常に基本的なもの(関数とは何か、ifs、fors、配列、その他)は、どの言語でも多かれ少なかれ学ぶことができます。 たとえば、C ++では、多くの類似点があり、そのようなレベル(そのようなレベルで)が最も少なく、書く文字が少ないためです。 それでは、複雑な建築のことを学んでも、これについてあまり勉強したり心配したりする必要はありません。 つまり、おもしろいのは、自分が好きなものを探して、それがすでに朝の4時であることを理解し、好きだから座って楽しみのために書いてみることです。 。



All Articles