C(またはC ++)の使用方法を学ぶことは、優れた(優秀な)プログラマーになるための要件ですか?[閉まっている]


25

私が最初にプログラミングの方法を学び始めたとき、本当のプログラマーは眠っている間にアセンブリを書くことができました。コンピュータサイエンスの本格的な教育には、アセンブリを使用したプログラミングのトレーニングと実践が含まれます。それはその後変わっており、アセンブリを含むコンピューターサイエンスの学位が含まれている場合、それが1つの課題と1つの章に委ねられ、4年間の学校教育の合計2週間の作業になります。

C / C ++プログラミングも同様のパスをたどっているようです。C ++で2週間以上プログラミングをしておらず、どこかの本でCしか読んでいない大学卒業生にインタビューしても、私はもう驚かない。最も深刻なCS学位には、かなりの時間の学習と一方または両方の言語の使用が含まれているようですが、傾向は明らかに学校でのC / C ++の実施が少なくなる傾向にあります。

CやC ++のコードを1行も読み書きすることなく、良い仕事をするキャリアを作ることは明らかに可能です。

これらすべてを考えると、努力する価値のある2つの言語を学習していますか?彼らは優れている必要がありますか?(「包括的な教育にはおそらく適切な言語の選択が重要である」などの明確な非言語固有のアドバイスに加えて、「プログラマーのキャリアを通じて新しい言語を試し、学習し続けることはおそらく良い考えです。灰色のセルを引き伸ばす」)


8
Cは、今日のソフトウェアインフラストラクチャで広く使用されています。それを学ぶことは間違いなく、あなたが書いているソフトウェアで実際に何が起こっているのかをより深く理解することになるでしょう。(programmers.stackexchange.com/questions/14744/…を参照)。
チャールズサルビア

また、ここで答えが関連していることを見つけました:Programmers.stackexchange.com/questions/29109/…–
blueberryfields

接線:優れたプログラマーはさまざまなプログラミングパラダイムに慣れているため、複数の言語を学んだ(そして使用した)ことを意味します。
マチューM.

より多くの言語を学んでも害はありません。
Maxpm

4
C / C ++はありません。CとC ++のみがあります。それらは非常に異なる言語であり、答えはあなたが話しているものによってかなり異なる可能性があります。
カレブ

回答:


63

ジョエル・スポルスキ(ええ、というジョエルは)しばらく前を主張本当のタフなプログラマが及び、(ポインタおよび機能的特徴のような)その構造(C、C ++とLispのように)難しい言語を使用する方法を知っていることと、より高いレベルの言語は、通常ではなかったことあなたの能力を実証するのに十分な「ハード」。

CとC ++を知っていて、実際にそれが得意な人は、たとえばRubyで(Ruby だけで)プログラムをしている人よりも、内部で行われていることについて多くのことを知っているという彼のポイントを理解できます。「ハード」言語を知っているなら、厳しい制約を尊重しながらプログラミングできること、または複雑な考え方を習得できることを示す良い証拠でしょう。高レベルの言語が得意であれば、厳しい制約を尊重しながらプログラミングすることもできますが、その証拠はありません。

CやC ++の学習はあなたの脳にダメージを与えるとは思いません(一部の人はこれを信じているようです)。実際、より良い高レベル言語を理解するためだけにそれを学ぶことは良い考えかもしれません。


34

はい、優れたプログラマーになるには、C(またはC ++)を知る必要があります(現時点では)。

それは言語そのものではなく、環境です。

プログラムは真空で実行されません。優秀なプログラマーは、偉大な彫刻家が彼/彼女の素材を知っているように、彼/彼女の環境を知っています。現在のプログラミング環境(オペレーティングシステム、コンパイラ、ネットワークなど)はC / C ++上に構築されています。

優秀なプログラマーは効率的なプログラムを作成し、実際の状況でそれらをデバッグします。彼は環境を知っている必要があります-そして今日では、C / C ++を知っている必要があります。

編集:マトリックス参照の追加に抵抗できません。モーフィアスは尋ねるかもしれません:あなたはJavaピルを服用して、仮想マシンによって提供される快適な世界で生き続けたいですか?または、Cピルを服用して、ウサギの穴がどのくらい深くなるのかを確認しますか?


9
マトリックス参照用に+1、今後の使用に備えて保管します:
コナミマン

20

別のジョエルの記事を参照する必要があります。で漏れ抽象化の法則、C、Lispの、C ++のような言語を学習し、メモリ管理を必要とする言語はまた、当社のキャリアの残りのための定義私たちのことを考える方法を学習伴います。

私のデータ構造とアルゴリズムのクラスのウィリアム・スピアーズ教授は、なぜ最新のツールを学ばなかったのかについて、多くの懐疑的なコンピューターサイエンスの学生に語りました。学生たちは、私たちがJavaを学んでいないので、「現実の世界」の準備ができていないように感じていると不満を漏らしました。JavaScriptを学んでいませんでした。HTMLにはクラスがありませんでした。学習していませんでした[[ここに技術を挿入]]。

なぜ最新のツールを学ばなかったのですか?教授によると、技術は非常に急速に変化するため、4年で学習するツールは時代遅れになる可能性があります。まあ、業界で数年後、私は彼の評価に同意しなければならないでしょう。

コンピュータサイエンス教育の目的は、学習方法を学ぶことです。開発における多くの問題の解決策を見つけるには、基本的な、基本的な、ボンネットの下で、C、C ++、およびLispを操作することから来る生のコンピュータサイエンスを学ぶことからしか得られない、枠の外で考える能力が必要になることがよくあります。

現実の世界のそれらの抽象化が漏れ、そしてそれらが漏れるとき、基本の理解は平均を最高から分離するものです。


3
私は何かが欠けているに違いない。Lispは基礎の学習と何の関係がありますか?これは、これまでに発明された最大の抽象化反転です。当初の基本的な設計目標の1つは、「チューリングマシンを実際に使用していないふりをして、それを行うことによってどれだけ物事を単純化できるかを見てみましょう」です。
メイソンウィーラー

6
@Mason:Learning Lispは、実際のコンピューターについてはほとんど何も教えません。計算理論について多くのことを教えてくれます。生のコンピューターサイエンスは、生のコンピューター以上のものです。
デビッドソーンリー

2
@Masonウィーラー学習lispの紹介など、いくつかの高度な概念、:データ/コードは互換性があり、反射/自己修正コード、およびコンパイラ/あなたの最終製品のVM部分を考慮することの重要性
blueberryfields

@blueberryfields:...これらはすべて、経験豊富なコーダーによってある程度、有害またはセキュリティ上の脆弱性とみなされています。初心者に教えるのは非常に悪いことです。
メイソンウィーラー

2
@Masonあなたのコメントの文脈がわかりません-ここでは、初心者ではなく優秀なプログラマーについて話しています。これらの概念を完全に理解しておらず、彼の仕事に適切に(そして定期的に)それらを適用するプログラマーは、専門家であるとは考えません。
ブルーベリー

18

このようにします。C ++の仕事をするために誰かを雇う必要があり、大学で1つのC ++プロジェクトをしたが卒業以来Javaでしかプログラミングしていない人がいるとしましょう。逆に、Javaの仕事のために誰かを雇う必要があり、大学でJavaプロジェクトを行ったが、卒業後はC ++でしかプログラミングしていない人が応募したとします。

誰がより快適に雇用できるようになりますか?ガベージコレクション言語の使用に移行する方が、C ++から離れるよりもずっと簡単なので、私はC ++の人を主張します。同様に、コンパイルされたものから解釈されたものへ、または静的な型から動的な型への移行など、他の概念および他の言語についても同様です。言語間で行うことができる機能比較ごとのほとんどすべての機能で、C ++は難易度の高い結果になります。これはプログラミングに苦労するだけでなく、プログラマーを判断するための優れたベースラインにもなります。

CやC ++のコードに触れることなくキャリアを成功させることができますか?確かに、しかし、私はまだそうすることができないか、またはそうすることを恐れた誰かを雇いたくありません。


3
圧倒的な議論。Javaの作業が必要な場合は、Javaの経験がある人を雇います。C ++の作業を完了する必要がある場合は、C ++の経験がある人を雇います。Javaの人をC ++の職に雇わなければならなかったら、ポインターとメモリ管理とRAIIについてクイズをするためにインタビューの時間を余分に費やすかもしれません。同様に、Javaの職務のためにC ++の人を雇わなければならなかった場合、面接でより多くの時間をジッター、設計パターン、反射などについて尋ねることになります。とにかく、学習曲線のほとんどはライブラリーにあります。
アーロンノート

13

いいえ、優れたプログラマーになるためにCやC ++を習得する必要はありませんが、それを理解すると、メモリ管理などの基本的な概念を明確にするのに役立ちます。


7

努力する価値のある2つの言語を学習していますか?

CやC ++のコードを1行も読み書きすることなく、良い仕事をするキャリアを作ることは明らかに可能です。


6

要するに、そうではありません。これらは学習するのに便利な言語ですが、CまたはC ++の行に触れることなく、簡単に優れたプログラマーになることができます。ほとんどの優秀なプログラマーはおそらくそれに触れますが、それはポイントのほかにあります-最近の多くのアプリケーションでは、.NETやJavaほど使用されておらず、その必要性はいくらか低下しています。

私は彼らが学ぶ価値がないと言っているわけではないことに注意してください、特にあなたがプログラミングからキャリアを作ることを計画している場合、私はそれらは両方とも学ぶべき重要な言語だと思います。しかし、触ることなく、あなたはまともなプログラマになれますか?はい。


5

それはあなたの興味に依存します。
システムプログラミングになりたい場合は、デフォルトであるは、CSの言語である。OSの概念、コンパイラ、データ構造、メモリ管理などに精通するには、C / C ++を知っている必要があります。さらに、C / C ++では、プログラミングスキルを最適化する優れたテキスト、書籍、および記事が豊富に用意されています。数日前にある/ * *プログラマ/ iのための優れた答え読みなぜCを - メタルへの密接なので。 C / C ++を学習する必要があります。逆に、アプリケーションプログラミングに制限したい場合は、C / C ++を使用する必要はありません。 (.Net)/ Javaを使用すると、優れた開発者の仕事が得られます。しかし、ハードコアプログラミングが本当に好きなら、いつかC / C ++の学習を始められると思います。


金属に近い!そのコメントが大好きです。
Wajih

3

これは、どのアプリケーションドメインで作業するかによって完全に異なります。組み込みのランドスケープでプレイしたい場合は、CまたはC ++を知っている必要があります。C ++は、おそらくゲーム開発で最も一般的に使用される言語でもあります。Webアプリケーションで作業したい場合、CまたはC ++はそれほど重要ではないかもしれません。優れたソフトウェアエンジニアを定義するための優先順位として知る必要があるという名声を保持する言語はありません。


3

Cは「移植可能なアセンブリ」と名付けられていますが、これは非常に真実です。Unixをプロセッサ間で移植できるように設計されており、基盤となるプロセッサの命令セットに非常に近いコードを記述します。

もしあなたは組み込みソフトウェアやデバイスドライバなどにある、実際のハードウェアの作業近いしたいことを見つけるあなたはより多くの主流で作業したい場合は、C.周りに方法はありません、ハイレベル言語は良いアイデア以来ですCを強力にする機能の多くは、Cを危険にさらしているので、Cを減らすか単純に削除しています。

個人的には、多くの設計上の決定がこれに依存しているため、最終的にプログラムを実行するために必要なものを理解することが非常に重要であると考えます。ハードウェア。当たり前のことは実際には時間かかることます。

したがって、少なくともCといくつかの高度なポインター算術コードを見て、毎日対処する必要のないものを知っていることをお勧めます。


1

Cはシリコンに近いため、学習に役立ちます。C言語またはアセンブリ言語を使用すると、コンピューターで何ができるのか、どのようにできるのかがわかりやすくなります。これは、何が可能で何が実用的かを理解するのに役立ちます。さらに、あなたが興味を持っているかもしれないCコードがたくさんあり、非常に多くの現代言語がその構文とセマンティクスの多くを使用しています。

C ++は、非常に興味深い機能を備えた高レベル言語です。多くの優れた用途があり、強力な言語です。一方、他にも強力で便利な言語がたくさんあります。

したがって、低レベルで何が起こるかについて学ぶことを強くお勧めします。Cはそれらを学ぶための優れた方法なので、Cを学ぶことを強くお勧めします。C++はオプションです。それを学ぶことはあなたに物事を教えますが、それらのほとんどを学ぶ他の方法があります、そして、あなたがすでに主流言語で働いているならば、新しい概念を拾うために学ぶより良い言語があります。


0

作成するソフトウェアの種類によって異なります。ゲームはC / C ++で記述されることが多く、実行可能コードに関しては従来より最適化された言語であるためです。あなたがコーディングするのは、ある意味では、あなたが得るものについてです。

とはいえ、C#はゲームのプログラミングにも使用されています。C#が、おそらくの一つであり、少なくともWindowsプラットフォーム上で、デスクトップアプリケーション開発のための最高の言語。

それは、すべての意図や目的のためだとして、Visual Studioのに加えて、C#は、(SQLやPHPなどのような言語をexcusing)はほぼ唯一のソフトウェア開発言語のIの使用となっている幻想的な流血の私の意見インチ

Windowsで開発する場合は、C#.NETを他のものと一緒に学習することを強くお勧めします。

C ++自体は要件ではないと思いますが、ポインター、メモリ管理、その他の概念についての低レベルの知識があると便利です。


1
@ Nick:コンピューターの世界は窓やC#を超えています。
レンジャー

2
したがって、「Windowsで開発する場合」と言ったのはなぜですか
ニックベッドフォード

0

@Nick Bedfordは、あなたが働いているドメインについて正しいです。私のソフトウェアカウンターパートは、デバイスドライバーと組み込みソフトウェアを作成します。Cはそこに行く方法です。また、C ++を第2言語とは考えないでください。それらには大きな重複があります。


3
C ++をCとは異なる言語だと思わないのであれば、C ++をよく知らないでしょう。オーバーラップでのみ作業することは可能ですが、お勧めできません。
デビッドソーンリー

おそらく私は類似性を誇張しています。しかし、それらは、たとえばCやPerlと同じです。
ブライアンカールトン

0

多くの人が、Cはメモリ管理のために学ぶのに適していると言っていますが、私も同感です。Cの学習に関する私の意見では、プログラムのデバッグ方法を学ぶために学ぶことは非常に良いことです。プログラムをデバッグする方法を考える必要があるCの記述では、多くの点が間違っている可能性があります。Cが組み込みデバッグユーティリティをプログラムに追加する方法を教えてくれたため、プログラミング(Cまたは他の言語)でデバッグツールを使用することはほとんどありません。

キャリアにC / C ++の学習は必要ですか?いいえ。しかし、Javaのみを学んだため、プログラミングの基礎をあまり知らないJava開発者も多く見ました。Perlプログラマーと同じです。C / C ++がこれらの言語の1つであるかどうかにかかわらず、複数の言語を学習することは、キャリアの要件となるはずです。


+1-異なる言語で異なる方法で提示された同様の概念を見ると、それらの概念をよりよく理解し、まったく新しい観点で見ることができました。
jmort253

0

最初は、Java、Visual Basicなどの比較的新しい言語がたくさんあるときに、2学期にCを含めることで、私の大学はデニスM.リッチーの世代だと思っていました。しかし、事実は、少なくともCは、プログラミングの基本概念を理解するのに役立つ最高の言語の1つです。

そして、C(またはC ++)を学習しないキャリアについて-はい、可能ですが、Cを学習するとプログラミングの知識が示されます。


0

私の答えはイエスでした。CとC ++はどちらも私のCS学位プログラムで必須のコースであり、CSまたは関連する学位を取得することが「優れたプログラマー」であるための最小要件であると確信しています。さらに、「優れたプログラマー」であるということは、発生する問題を合理化し、予想どおりに機能しない理由を理解できることを意味します。私のキャリアの中で何度も、私は個人が問題に悩まされており、それらに対して超自然的な力が働いていると思っているのを目撃しました...それはばかげています。

Cを知っているIMOは、命令型言語を理解し、人類がこれまでに発明した最も強力なツールの1つを使用して問題を解決する能力を実証します。


0

丸みを帯びたプログラマーは、彼の袖にいくつかのトリックの袋を持っています。

1)低レベルのプログラミング ...少なくともC。いくつかのアセンブリは傷つきません。

2)関数型プログラミング ...ハイブリッドではなく、純粋な関数型言語-Schemeはここで機能します。

3)OOP ...通常、smalltalkと言いますが、今はJavaで対応できると思います。


0

Cはすべてのプログラミング言語の母です。Cの専門知識により、Javaのような他の言語を短時間で知ることができます。

C ++はまったく異なるボールゲームであり、中でも最も複雑です。


0

優秀な(優秀な)プログラマーになるためにCやC ++を学ぶ必要はありませんが、優秀な(優秀な)プログラマーになるためにはAssemblyを学ぶ必要があります。優れたプログラミングとは、メモリ、Mhz、帯域幅、電力の制約を最適化してから、最適な設計や実装を選択して、タスクを達成することです。コンピューター科学者の間では、何十年にもわたるテクノロジーの進化の後、データを最適に管理することの主な弱点は依然として残っています。これは、アセンブリ(任意のアセンブリ。ARM、MIPS、x86、マイクロコントローラー、DSP、またはverilog / VHDLを介したそれよりも低いもの)を書くことで教えられる一連のスキルです。


0

c、c ++、アセンブリ、およびLispを上手に使用したので、優れたプログラマーになるために特定の言語をまったく習得する必要はありません。優れたプログラマーになるための私の経験は、問題を解決する方法で考えることができることです。言語はあなたの問題解決能力を表現することを可能にします。たとえば、Cの単純さによりアルゴリズムを簡単に表現でき、Lispでは問題を再帰的に解決できます。だから、言語はあなたをプログラマーにしない。優れたプログラマーになるには、まず問題解決者でなければなりません。言語は、問題を解決するために使用する単なるツールです。


-1

メモリ管理についてしっかりと理解するためには、Cをよく学ぶ価値があります。Ditto for C ++。ただし、データ構造を学習することを目的としています。


データ構造の学習に使用する言語は関係ありません。
kirk.burleson

他の多くの言語では、データ構造がメモリ内でどのように処理されるかを知らずに使用されるため、そうなると思います。C ++(STLを使用しない)は、プログラマーに低レベルでのデータ構造の処理方法を強制的に学習させます。
アクア

-1

いいえ。C/ C ++コードを書くお粗末なプログラマはたくさんいます。あなたを優れたプログラマーにするのは、C / C ++で何かを書く必要がある場合とその理由を理解することです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.