私が最初にプログラミングの方法を学び始めたとき、realプログラマは眠っている間にアセンブリを書くことができました。コンピュータサイエンスの真面目な教育には、Assemblyを使用したプログラミングに関する大量のトレーニングと実践が含まれます。それ以来、私がアセンブリを使用したコンピュータサイエンスの学位を見ると、仮に含まれているとしても、4年間の教育のうち合計2週間の仕事のために1つの課題と1つの章に追いやられました。
C/C++プログラミングも同様の道をたどってきたようです。 C++でのプログラミングに2週間以上費やしておらず、どこかで本の中でCを読んだだけである大卒者にインタビューすることには、もはや驚きません。最も深刻なCSの学位には、かなりの時間の学習と1つまたは両方の言語の使用が含まれているようですが、傾向は明らかに、学校でのC/C++の実施が少ないことです。
CまたはC++コードの1行も読み書きしなくても、良い仕事を生み出すキャリアを作ることは明らかに可能です。
これらすべてを考慮して、2つの言語を学ぶことは努力に値するのでしょうかそれらは優れている必要がありますか? (「言語の適切な選択はおそらく包括的な教育にとって重要である」などの明白な非言語固有のアドバイスを超えて、「プログラマーのキャリアを通して新しい言語を試し、学習し続けることはおそらく良いアイデアです。灰色のセルを引き伸ばす」)
Joel Spolsky(ええ、thatJoel) しばらく議論された 本当のタフなプログラマーは(Cのような)より難しい言語の使い方を知っている、C++およびLISP)およびそれらのコンストラクト(ポインターや関数型機能など)、およびその高水準言語は通常、能力を実証するのに十分な「難しい」ものではありませんでした。
Ruby(andonlyRubyの場合、次のようになります。「難しい」言語を知っている場合、おそらくそれが可能であることの良い証拠です。厳しい制約を尊重しながらプログラミングしたり、複雑な考え方を習得したりできます。高級言語が得意であれば、厳しい制約を尊重しながらプログラミングすることもできますが、それを証明するものはありません。
CやC++を学んでも脳にダメージを与えるとは思いません(ただし、これを信じている人もいます)。実際、より優れた高水準言語を理解するためだけにそれを学ぶことは良い考えかもしれません。
はい、C(またはC++)を知ることは、(現在の)優れたプログラマーになるために必要です。
言語そのものではなく、環境です。
プログラムは真空で実行されません。優秀なプログラマーは、優れた彫刻家が素材を知っているように、自分の環境を知っています。現在のプログラミング環境(オペレーティングシステム、コンパイラ、ネットワーキングなど)は、C/C++上に構築されています。
優秀なプログラマーは、効率的なプログラムを作成し、実際の状況でそれらをデバッグします。彼は環境を知っている必要があり、現在ではC/C++を知る必要があります。
編集:マトリックス参照の追加に抵抗できません。モーフィアスは尋ねるかもしれません:Java=錠剤を飲み、仮想マシンによって提供される快適な世界で生活を続けますか?または、C錠剤を飲み、ウサギの穴がどのくらい深いかを確認しますか?
Joelの別の記事を参照する必要があります。 リークの抽象化の法則 では、C、LISP、C++などの言語、およびメモリ管理に関連する言語の学習には、残りのキャリアで私たちを定義する考え方を学ぶことも含まれます。
私のデータ構造とアルゴリズムクラスの教授であるウィリアムスピアーズは、最新のツールを学んでいない理由を、懐疑的なコンピューターサイエンスの学生たちに話しました。学生たちは、私たちがJavaを学んでいないので、「現実の世界」への準備ができていないと感じたと不満を述べました。 JavaScriptを学習していませんでした。 HTMLにはクラスがありませんでした。 [[テクノロジーをここに挿入]]については学習していませんでした。
最新のツールを学ばなかったのはなぜですか?教授によると、テクノロジーは急速に変化するため、4年間で、私たちが学ぶツールは時代遅れになる可能性があります。まあ、業界で数年後、私は彼の評価に同意する必要があります。
コンピュータサイエンス教育の目的は、学習方法を学ぶことです。多くの場合、開発における多くの問題の解決策を理解するには、C、C++、およびLISPでの作業から生まれる生のコンピュータサイエンスの内部で基礎、基礎を学ぶことからのみ得られる、箱から出して考える能力が必要です。
現実世界のそれらの抽象化が漏れ、そして漏れる場合、基本を理解することで、平均と最高を区別します。
このようにしましょう。たとえば、C++の仕事をするために誰かを雇う必要があり、大学で1つのC++プロジェクトを実行したが、Javaは卒業以来プログラムを作成したことがない人)を申請したとします。逆に、いくつかのJava仕事、そして大学でJavaプロジェクトを実行したが、卒業以来C++でのみプログラミングした人がいます。
誰がより快適な採用を目指しますか?ガベージコレクション言語を使用するように移行する方が、ガベージコレクション言語から移行するよりもはるかに簡単であるため、C++の人を主張します。同様に、他の概念や他の言語についても、コンパイルされたものから解釈されたものへ、または静的なタイプから動的なタイプに移行するようなものです。言語間で実行できる機能ごとの比較では、ほとんどすべての機能で、C++が難しい端に出てくるため、プログラミングするのは面倒ですが、プログラマーを判断するための優れたベースラインでもあります。
CやC++のコードに触れることなく、キャリアを積むことができますか?もちろんですが、それができない、または恐れる人を雇いたくありません。
いいえ、CまたはC++を優れたプログラマーとして学ぶ必要はありませんが、それを理解することで、メモリ管理などのいくつかの基本的な概念を明確にすることができます。
努力する価値のある2つの言語を学ぶことですか?
CまたはC++コードの1行を読み書きすることなく、良い仕事を生み出すキャリアを作ることは明らかに可能です。
つまり、そうではありません。これらは学ぶのに役立つ言語ですが、CやC++の行に触れなくても、すぐに優れたプログラマーになることができます。ほとんどの優秀なプログラマーはおそらく彼らに触れたでしょうが、それは重要なことです。最近の多くのアプリケーションでは、.NETやJavaほど使用されていないため、その必要性はやや低下しています。
学ぶ価値がないと言っているわけではないことに注意してください。特に、プログラミングでキャリアを積むことを計画している場合は、どちらも学ぶべき重要な言語だと思います。しかし、あなたはこれまで触れたことなく、まともなプログラマーになることができますか?承知しました。
それはあなたの興味に依存します。
システムプログラミングに参加したい場合は、C/C++をそのまま学習する必要がありますデフォルト CSの言語。 OSの概念、コンパイラ、データ構造、メモリ管理などに慣れるには、C/C++の知識が必要です。さらに、プログラミングスキルを最適化するために、C/C++で多数の優れたテキスト、書籍、記事を利用できます。数日前の/ *プログラマ* /私はWhy C-それが金属に近いための優れた答えを読みました。
逆に、アプリケーションプログラミングに限定したい場合は、C/C++を使用する必要はありません。直接C#(.Net)/ Java and良い開発者の仕事が得られますが、ハードコアプログラミングが本当に好きな人なら、いつかC/C++の学習を始めると確信しています。
それは完全にあなたが働きたいアプリケーションドメインに依存します。あなたが組み込みランドスケープでプレーしたいなら、あなたはCまたはC++を知る必要があるでしょう。 C++は、おそらくゲーム開発で最も一般的に使用される言語でもあります。 Webアプリケーションで作業する場合、CまたはC++はそれほど重要ではない可能性があります。優れたソフトウェアエンジニアを定義するための優先順位として知る必要があるという名声を保持する言語はありません。
Cは「移植可能なアセンブリ」と呼ばれていますが、これは真実です。 Unixをプロセッサ間で移植できるように設計されており、基になるプロセッサの命令セットに非常に近いコードを記述します。
If組み込みソフトウェアやデバイスドライバーなど、実際のハードウェアの近くで作業したい場合、Cを回避する方法はありません。より主流の高機能で作業したい場合は、レベル言語は、Cを強力にする多くの機能がCを危険なものにするので、それらは軽減されるか単に削除されるため、より良いアイデアです。
個人的には、多くの設計上の決定がこれに依存しているため、プログラムを実行するために最終的に何が必要になるかを理解することが非常に重要であると考えます。ハードウェア。あなたが当たり前と思っていること時間をかけるするべきこととその理由。
したがって、少なくともCといくつかの高度なポインター算術コードを確認することをお勧めします。そうすれば、自分がしないでくださいを日常的に処理する必要があることを理解できます。
Cはシリコンに近いため、学習に役立ちます。 Cまたはアセンブリ言語は、コンピューターが何を実行できるか、どのように実行できるかについて良い感触を与えてくれます。これは、何が可能で何が実用的であるかを理解するのに役立つでしょう。さらに、あなたが興味を持つかもしれないCコードがたくさんあります。そして、もっと多くのより現代的な言語は、その構文とセマンティクスの多くを使用しています。
C++は、いくつかの非常に興味深い機能を備えた高水準言語です。多くの優れた用途があり、強力な言語です。一方、他にも多くの強力で便利な言語があります。
したがって、下位レベルで何が起こるかについて学ぶことを強くお勧めします。Cはそれらを学ぶ優れた方法であるため、Cを学ぶことを強くお勧めします。C++はオプションです。それを学ぶことはあなたに物事を教えますが、それらのほとんどを学ぶ他の方法があり、あなたがすでに主流の言語で働いているなら、新しい概念を学ぶために学ぶより良い言語があります。
C、c ++、Assembly、およびLISPを上手に使用しているので、優れたプログラマーになるために特定の言語を学ぶ必要はまったく意味がないと思います。優れたプログラマーになるための私の経験は、問題を解決する方法で考えることができることです。言語は、問題解決スキルを表現するためのものです。たとえば、Cの単純さはアルゴリズムを簡単に表現することを可能にし、LISPは問題を再帰的に解決することを可能にします。したがって、言語はプログラマーにはなりません。優れたプログラマになるには、まず問題を解決する必要があります。言語は、問題を解決するために使用するツールにすぎません。たとえば、論理プログラミングの実装に関する特許を申請するところがほとんどでした。その実装を実装できるコンパイラが存在しないため、実装を表現する唯一の方法はアセンブリ言語を使用することだと考えました。
十分に丸みを帯びたプログラマーは、いくつかのトリックの袋を持っています。
1)低水準プログラミング ...最低でもC。一部の議会は傷つかないでしょう。
2)関数型プログラミング ...ハイブリッドではなく純粋な関数型言語-スキームはここで機能します。
3)[〜#〜] oop [〜#〜] ...通常は、Smalltalkと言いますが、Javaを使用することで解決できると思います。
作成するソフトウェアの種類によって異なります。実行可能コードに関しては、ゲームは古典的により最適化された言語であるため、ゲームはしばしばC/C++で記述されます。あなたがコーディングすることは、ある意味で、あなたが得るものについてです。
そうは言っても、C#はゲームのプログラミングにも使用されています。 C#はおそらくthe少なくともWindowsプラットフォームでのデスクトップアプリケーション開発に最適な言語の1つです。
Visual Studioと同様に、C#は私が使用するほとんど唯一のソフトウェア開発言語になっています(SQLやPHPなどのような言語)は、すべての目的と目的のために使用されます流血のファンタスティック) =私の意見では。
Windowsで開発する場合は、他のものと一緒にC#.NETを学ぶことを強くお勧めします。
C++自体が要件であるとは思いませんが、ポインター、メモリ管理、およびその他の概念について、より低いレベルの知識を持っているのは素晴らしいことです。
@Nick Bedfordは、あなたが作業しているドメインについて適切です。私のソフトウェアの対応者は、デバイスドライバーと組み込みソフトウェアを作成します。 Cはそこに行く方法です。また、C++を第2言語として考えないでください。これらは非常に重複しています。
多くの人が、Cはメモリ管理について学ぶのに良いと言っており、私も同意します。 Cを学ぶことについての私の意見として、プログラムのデバッグ方法を学ぶために学ぶことは非常に良いということです。プログラムをデバッグする方法を考える必要があるC向けの記述では、多くのことがうまくいかない可能性があります。 Cがプログラムに組み込みのデバッグユーティリティを追加する方法を教えてくれたからといって、私のプログラミング(Cまたは他の言語)でデバッグツールを使用することはほとんどありません。
キャリアにC/C++の学習は必要ですか?いいえ、しかしlot of Java Javaしか学んでいないのでプログラミングの基本をあまり知らない開発者も見ました。Perlプログラマーと同じです。 C/C++がそれらの言語の1つであるかどうかに関係なく、複数の言語を学ぶことはキャリアの要件であるはずです。
優れた(優れた)プログラマーになるためにCまたはC++を学ぶ必要はありませんが、優れた(優れた)プログラマーになるためにアセンブリを学ぶ必要があります。優れたプログラミングとは、メモリ、Mhz、帯域幅、電力制約全体を最適化し、最適な設計や実装を選択して、目前のタスクを達成することです。コンピュータサイエンティストの主な弱点は、数十年に渡るテクノロジーの進化後も、データを最適に管理することです。これは、アセンブリ(任意のアセンブリです。ARM、MIPS、x86、マイクロコントローラ、DSP、またはそれよりも低い、verilog/VHDLを使用することもできます)を書くことによって教えられる一連のスキルです。
私の答えはイエスでした。私のCS学位プログラムではCとC++の両方が必須コースでしたが、私はCSまたは関連学位を持つことが「優れたプログラマー」になるための最小要件であると信じています。さらに、「優れたプログラマ」であるということは、発生する問題を合理化し、期待どおりに機能しない理由を理解できることを意味します。私のキャリアの中で何度も、私は問題に悩まされ、彼らに対して超自然的な力が働いていると思っているのを目撃しました...それはとんでもないことです。
Cを知っているIMOは、命令型言語を理解し、人類がこれまでに発明した最も強力なツールの1つを使用して問題を解決する能力を示します。
最初は、JavaやVisual Basicなどの比較的新しい言語がたくさんあるときに、大学がデニスM.リッチーの世代で、Cを2学期に含めたと考えていました。しかし、事実、または少なくとも今では、Cはプログラミングの基本概念を理解するのに役立つ最高の言語の1つです。
そして、C(またはC++)を学ぶことなくキャリアについて-はい、それは可能ですが、Cを学ぶことはプログラミングにおけるあなたの知識を紹介します。
Cはすべてのプログラミング言語の母です。Cのエキスパートknowlesdgeを使用すると、Javaのような他の言語を短時間で知ることができます。
C++はまったく異なる球技であり、すべての中で最も複雑です。