C ++のすべての主要な側面を学び、言語の基礎をよく知っている人が、他の言語(Python、Perl、Javaなど)をより速く簡単に学ぶ可能性はありますか?
C ++のすべての主要な側面を学び、言語の基礎をよく知っている人が、他の言語(Python、Perl、Javaなど)をより速く簡単に学ぶ可能性はありますか?
回答:
プログラミング言語に関する深い知識があれば、他の言語をすばやく習得するのに役立ちます。それは部分的にそうです。なぜなら、プログラミングは構文を学ぶことよりも思考する方法だからです。ほとんどのプログラミング方法は、他のほとんどのプログラミング言語に当てはまります。そのため、常に2番目のプログラミング言語を最初のプログラミング言語よりも早く習得すると人々は言っています。
C ++は、他の言語よりもはるかに優れた「制御」を可能にする言語です。これは良いことも悪いこともあります。 たとえば、実際の銃は森に行くときはエアガンよりも優れています(実際にそれを使って何かを撃ち落とすことができるためです)が、あなたやあなたの周りの人々にとっても危険です。C ++には、メモリ管理などの概念があり、他のほとんどの言語では心配する必要はありません。ただし、これらの概念をしっかりと把握することは、自動メモリ管理言語を使用する場合でも、無意味なことはありません。また、ビット単位の演算を実行して、C ++のような言語で「金属」まで下げることもできます。これらの分野の基本的な理解さえも、あらゆる言語のプログラマーとしてあなたを助けることができます。
私はC ++を学ぶ前に、ほぼ3年間最初にJavaを個人的に学びました、そして私はそれを一種の後悔と言うべきです(単一コース...)。これにより、C ++の学習(私はまだ学習中-「深い」知識からはほど遠い:D)は、私が望むほど単純ではありませんでした。もし私が他の方法でそれをしたなら、私にとってはずっと簡単だったと言えるでしょう。あなたが知っている場合は特にWHY何かが特定の方法で行われ、そしてちょうど言語の自動magicnessに安心ではありません。私が意見を述べることが許可されている場合、私は提案します:C(基本的で普遍的なプログラミングパラダイムの場合)-> C ++(OOPの基本的な理解とメモリ管理の場合)->次に、優れた基盤またはC ++でより高度なトピックを続行できます。
OR
、AND
残念だけど違う。これは、プログラミングクラス、特に初心者レベルのクラスでC ++を教えるときに実際に大きな問題になります。プログラミングの原則を学ぶことも、C ++言語を学ぶこともできますが、C ++言語には落とし穴が多く、愚かなことで両方を効果的に学ぶことはできません。 1学期クラスの範囲!
C ++で試され、最終的には純粋な慣性によってその言語で慣用的になったものがたくさんあります。それは、他のほとんどすべての言語が、それが大きな間違いであることが判明したために調べて拒否したからです。主なものは、C ++のテンプレートとC ++のオブジェクトモデルです(値型としてのオブジェクトは、Liskov置換と多数のOOP自体を壊すため、決して良いことではありません)。
したがって、最初にC ++の深い知識を得てから、他のプログラミング言語を学びたい場合、他のプログラミング言語で効果を発揮するために、学習しなくてはならない有害で逆効果のクラッドがたくさんあります。
いいえ。C++をよく理解していると、C ++のような他の言語を簡単に学ぶことができます。しかし、それは退屈です。同じ2つの言語を知りたいのはなぜですか?それはあなたを何も買いません。(これはC ++に固有のものではないことに注意してください。これはすべての言語に適用されます。自然言語と比較してください:イタリア語を学ぶことは他の言語を学ぶことを容易にしません。スペイン語、フランス語、ポルトガル語を学ぶことを容易にします。そのうちの4つ目は4つ目の学習が容易になりますが、すべてのロマンス言語を学習しても、フィンランド語、中国語、ヒンディー語、ヘブライ語、アラビア語、パシュトゥ語、ギリシャ語などを少し学ぶことはできません。)
プログラミング言語はパラダイムを実装しています。Peter van Royは、34の主要なプログラミングパラダイムのポスターを集めました。
同様に、パラダイムは概念で構成されています。そのポスターには約18の概念がリストされています。
すべてのパラダイム(または少なくともポスターのパラダイム)は、これらの概念から構成されています。すべての言語は、それらの概念で構成される1つ以上のパラダイムを実装します。したがって、これらの概念を学習すると、(ある意味で)すべてのプログラミング言語を一度に学習することになります。
もちろん、まだ言語固有の癖がたくさんあります(それらの間の構文)。また、そのポスターは型付けを完全に無視しています。もちろん、依存型システムは言うまでもなく、システムF <:ωスタイルの型システム、Scalaスタイルの型システム、または動的ダック型の型システムの間には大きな違いがあります。イドラ、アグダ、コック、グル、またはATS。
私が知っていることを言うだろう任意の深くプログラミング言語は、同じ家族の中で少なくとも他の言語で、他の人を学習に役立ちます。たとえば、C ++の知識はLISPやHaskellではあまり役に立ちませんが、オブジェクト指向の手続き型言語では役立ちます。私のアプローチは、言語のさまざまなファミリ(手続き型、関数型、オブジェクト指向など)から言語をうまく学習して、その知識をそのファミリの他の言語に引き継ぐことでした。一方、APLの深い知識は他には何の助けにもなりません...
ここでは別の解釈をします。
C ++は、オブジェクトの所有権や寿命などの概念について慎重に考える必要があるため、メモリとデータ構造について学ぶのに適した言語です。また、メモリとデータ構造について学ぶことは、ソフトウェアエンジニアリングのカリキュラムの重要な部分の1つです。
ただし、データ構造について学習する必要があります。「C ++を学ぶ」だけではあまり効果がなく、短期的には他の言語を学ぶプロセスが遅くなる可能性があります。
私が大学にいたとき、データ構造はCS1(少なくともクラスの半分が出ていた)の後に取られた必須の新入生レベルのコースでした。大変でした。コースの形式は基本的には「これまで見たことのないデータ構造です[例:左側のヒープ ]。1週間でC ++に実装し、出力をバイト単位で期待される出力と正確に一致させます。自動的に採点できます。」次に、来週、新しいデータ構造と新しい割り当てを取得します。その1つのコースでは、他のすべてのコースを組み合わせたときよりも多くのことを学んだと思います。
これは、C ++を価値あるものにするために必要な学習です。
あなたが学ぶすべての言語は、特に同じパラダイムの中で、次の言語を学びやすくします。彼らは互いに借用し合い、しばらくすると新しい言語が他の言語からの機能の集まりのように見え、いくつかのユニークなひねりを加えたものになりました。
その点では、C ++が他のどの言語よりも優れているとは思いません。それは私が知っているより冗長な言語の1つであり、他のほとんどの言語では簡単であるいくつかのことを難しくしますが、必ずしも次の言語を学習しやすくすることにはなりません。これは、一般的に次の言語がより簡単に感じさせるん使用ものの、。違いがあります。
いいえ。C、または「基本的にはC」であるC ++のサブセットに関する深い知識は、他の言語を学ぶときに、少なくともそれらの実装が何をしているのかを描くときに役立ちます。一方、C ++の深い知識は、他の言語を学習するときに混乱したり関連のない情報になることがほとんどです。C ++のオブジェクト指向を表面レベル以上で学習する場合、たとえば、Perl / Python / Rubyに移動すると、それらを使用するよりも、知っていることの学習に多くの時間を費やすことになります。完全に異なる方法C ++よりも。同じことが多かれ少なかれ他のほとんどの言語と他の言語機能にも当てはまります(たとえば、C ++テンプレートとHaskellポリモーフィズムは基本的に同じ機能ですが、実装もまったく異なります)。したがって、C ++に関する深い知識は、主にC ++固有のものになります。