コンピューターサイエンスとプログラミングの違いは何ですか?


32

私はコンピューターサイエンスとプログラミングが初めてですが、コンピューターサイエンスとプログラミングに違いはありますか?大学でそのうちの1人だけを勉強するか、両方を勉強するかを選択できますか?


42
悪い類推時間。
マイクウェラー

10
建築と建設の違いは何ですか?
オデッド

6
彼らは地質学や溝掘りと同じくらい離れています
スティーブンA.ロウ

27
コンピュータサイエンスは、あなたが学ぶために支払うものです。プログラミングはあなたがする報酬です。
jfrankcarr

5
違いは、バブルソートではなくスムーズソートを使用する理由です。
-deadalnix

回答:


68

コンピューターサイエンスとは、コンピューターができることの研究です。プログラミングとは、コンピューターに何かをさせる習慣です。

興味のある大学が提供するコース/シラバスを見て、コースがCSコース、プログラミングコース、他の何か(ソフトウェアエンジニアリングなど)であるか、上記の組み合わせであるかを確認してください。「コンピューターサイエンス」と宣伝されている多くのコースは、重要なプログラミングコンポーネントを提供します。これは、コースの理論的な部分を実践できるようにするため、またはプログラム作成のスキルを習得するために独自の目的で使用できる場合があります。


1
非常に良い答えですが、質問の実際的な部分には答えていません;)
back2dos

@ back2dos OK、答えを拡張しました。

ほとんどのコンピューターサイエンスコースは理論的なCSにもまったく関わっていないことに注意することが重要です。TCSは少なくともCSがプログラミングと同じくらい実用的なCSとは別です。
ベンブロッカ

3
CS(名前にもかかわらず)をコンピューターにあまりにも密接に結びつけるべきではないと思います。何よりもまず、情報の研究です。「コンピューター」という用語には、情報を操作するために使用するさまざまな物理ツールのほとんどが含まれているため、情報の研究にはほとんどコンピューターのプログラミングが含まれます。
ティコンジャービス

分類法は、情報科学のモニーカーに当てはまる場合があります。しかし、CSに完全にフィットするものとしては思いません。学際的な意味では有用ですが、CSは、コンピューターIMOでできることについて、部分的に密接に関係しています。私はあなたの「コンピューター」の定義をより一般的なものにするかもしれませんが、CSの定義ではありません。
エリックReppen

36

注意点:(少なくとも米国では)大学には「プログラミング」の学位がないため、「コンピューターサイエンス」は現代では泥だらけの分野になっています。これは、プログラミングに興味がある人はコンピューターサイエンスの学位を取得する必要があり、コンピューターサイエンスプログラムがプログラミングをますます重視していることに対する反応として意味します。

とは言っても、コンピューターサイエンス自体は強力な数理科学であり、計算数学がより良い用語だったかもしれません。これには、グラフ理論、アルゴリズムの複雑さ、形式的論理、オートマトン、および一般に、入力に対する変換または応答を記述することができる論理構造の研究が含まれます。古典的な意味でのコンピューター科学者は、必ずしも現在のアーキテクチャーでの実装の詳細を知らなくても、コンピューティングシステム(現代のコンピューターを含む)を管理する規則について推論できます。コンピューターサイエンスの強力なバックグラウンドにより、効率的でスケーラブルなアルゴリズムを開発(またはリコール)し、論理的な削減を予測し、扱いやすいものについてしっかりと推論することができます。

それとは対照的に、プログラミングは、プログラミング言語を使用してアルゴリズムを機械が実行できるものに変換するときに人が行うことです。(これにより、コンピューターサイエンスとの親密なつながり、および混乱の多くが生じる場所が明らかになります。)プログラマー(環境および言語に関連する)は、実質的に任意のアルゴリズムセットを取り、人間の両方の形式に変換できる必要があります-コードを記述することで機械可読。プログラミングの強力なバックグラウンド(ほとんどのCS学位が提供する)により、より良いコードを書くことができます-「より良い」コードは、他の人がより容易に理解し、実装しているアルゴリズムをよりうまく表現できます。

もちろん、大量のクロストークがあり、一方の高度な経験は他方の経験の発達に強く対応します-前述のように、CS専攻はほとんどの場合有能なプログラマーであり、経験豊富なプログラマーが取り上げていますCSの多くの原則。物理学と工学を考えてください。

違いを覚える良い方法はこれです:それが機能するかどうかを確認するためにコンピューターが必要な場合はプログラミングです-鉛筆と紙でできるなら、それはコンピューターサイエンスです。


4
ええ、その最後の文はこすりですよね?しわくちゃの教授の画像を、縮れた髪と羊皮紙の周りを振るチョークのような指で想起させ、「コンピューター科学は天文学は望遠鏡に関するものである」などの引用を思い起こさせます。科学が最終的に何らかの形で機械にならない場合、それは何のポイントですか?彼らの正しい心の中のどの天文学者は望遠鏡を通して決して見ませんか?
ロバートハーベイ

過去30年間、「アルゴリズムを機械が実行できるものに変換する」ように依頼されたことはないと思います。あなたが考えているのはプログラマーではなく、コンパイラーです。
gnasher729

2
@ gnasher729さて、「リスト内の各単語について、Aで始まる場合は先頭に移動する」というアルゴリズムがあるとします。どのコンパイラをお勧めしますか?
shanef22

18

コンピューターサイエンスは、情報、計算の理論的基礎、およびその実装と応用のための実用的な手法を扱います。 http://en.wikipedia.org/wiki/Computer_science

コンピュータサイエンスは、天文学が望遠鏡に関するものである以上、コンピュータに関するものではありません。エドガー・ダイクストラ

プログラミングは、コンピュータープログラムを作成する技術です。


11

私の観点からすると、コンピューターサイエンスは物理学のようなハードサイエンスであるはずです。

コンパイラとコンパイラジェネレータ、ハードウェアアーキテクチャの概念、さまざまな形式の数値システム、アルゴリズムとアルゴリズムの効率/パフォーマンス、およびプロセッサでの算術演算の背後にある理論の研究が含まれます。大学でCSを学んだとき、私たちはアセンブラーをいじくり回し、コンパイル、リンク、解釈などの違いについて学びました。

これの多くはプログラミングによって行われました。つまり、問題を解決するために結果を生成することを意図して、インタープリターを介してコンパイルまたは実行されるコードを記述する行為です。つまり、プログラミングとは、コンピューターサイエンスの知識で説明できる問題を解決する行為です。純粋な数学/応用数学の分割のようなものです。

プログラマーになるためにコンピューターサイエンスの学位を取得する必要はありませんが、CSのバックグラウンドを持つプログラマーは、コンピュータープログラムの動作をより深く理解できるでしょう。


1
CSの学生は、他のプログラミングコースの学生よりも優れているとは思わない。
-Tjaart

5
私はより良いとは言わなかった、私はより深い理解を持つ可能性が高いと述べた。
マクフィニガン

@mcfinnigan、もっと見当違いです。理論に基づいたCSの学生は、実際にコンピューターができることや、さまざまな言語でそこに到達する方法を知る経験がないため、理解が少ない傾向があります。
イズカタ

3
繰り返しますが、あなたは私を誤解しています。時間をかけて実際のCS 理論を習得したプログラマーは、特定の状況でSetがListより優れている理由、または浮動小数点が扱いにくい理由を知っている可能性が高いと言っています。
マクフィニガン

2
@TikhonJelvis:エンジニアリングでは数学を使用しますが、2ステップ先です。CSは数学の分野です。
ケビンクライン

3

あなたの質問を「コンピューターサイエンスとソフトウェアエンジニアリングの違いは何ですか?」結局、両方ともプログラミングに関係しています。

コンピューターサイエンスは、計算とは何か、不可能なことは何かの理論的研究です。ゲーデルの定理や停止問題などを調べます。

ソフトウェアエンジニアリングは、実行するように設計されており、保守可能なプログラムを作成する方法です。


いいえ。なぜ彼の質問を言い換えるのですか?彼は尋ねたものを尋ねた。ソフトウェアエンジニアリングは、プログラミングとは異なり、それは異なる国の異なるものを意味するのでALSO議論がある(例えば、米国およびカナダ)
ダグラス開催

2

コンピュータサイエンスはプログラミングの理論です。プログラミングが実装です。

コンピュータサイエンスは、計算とその応用に対する科学的かつ実用的なアプローチです。コンピューター科学者は、計算理論と計算システムの設計を専門としています。

そのサブフィールドは、さまざまな理論的および実践的な分野に分類できます。計算の複雑さの理論(計算問題の基本的な特性を調査する)などの一部のフィールドは非常に抽象的ですが、コンピューターグラフィックスなどのフィールドは実際の視覚アプリケーションを強調しています。さらに他の分野では、計算の実装における課題に焦点を当てています。たとえば、プログラミング言語の理論では、計算の記述に対するさまざまなアプローチを検討しますが、コンピュータープログラミング自体の研究では、プログラミング言語および複雑なシステムの使用のさまざまな側面を調査します。人間とコンピューターの相互作用は、コンピューターと計算を有用で使いやすく、人間が普遍的にアクセスできるようにする際の課題を考慮しています...


12
正直に言って、コンピューターサイエンスはプログラミング以上のものだと思います。
-Ubermensch

2
@Ubermensch:プログラミングはコンピューターサイエンス以上のものだと正直に信じています。
マイケルボルグワード

1
@MichaelBorgwardt実際、私たちの意見は両方とも正しいです。しかし、コンピューターサイエンスは、プログラミングよりもはるかに大きなものです(逆もまた同様です)。ニールス・ボーアの有名な引用「小さな真実と偉大な真実の2種類の真実があります。小さな真実はその反対が虚偽であるので、あなたは認めることができます。偉大な真実の反対は別の真実です。」
-Ubermensch

@Ubermenschあなたの信念は事実です。コンピュータサイエンスは、プログラミングの理論だけではありません。コンピューターサイエンスはコンピューターが登場する前から存在していました。
ケーシーパットン

1

プログラミングが大工仕事である場合、コンピューターサイエンスはアーキテクチャ/デザインです。

編集

詳細:大工仕事では、どのような順序で物を構築するか(フレーム、サブフロア、内壁、乾式壁など)に興味があります。どのように構築すれば、構築にかかる時間は短縮されますが、後で変更できます。

建築(とにかくCSのような部分)の場合、あなたは材料の能力は何か、この壁/屋根のスパンをサポートするためにどのくらいのビームが必要かなどに関心がありますか?

同様に、CSはコンピューターの理論的な能力に関するものであり、プログラミングはその知識の実際的な応用に関するものです。


3
悪い例え。プログラミングが大工仕事である場合、ソフトウェア設計はアーキテクチャ/設計です。コンピュータサイエンスは、その点で樹木学、または生物学全般に似ています。
back2dos

わかりました、多分私は不明瞭だったので、あなたの類推が機能しないと思う理由を説明させてください。材料の能力に関心があるのは材料科学であり、構造の安定性は静的です。それらはどれも実際にデザインの目的ではなく、それを制約するだけです。設計(ソフトウェアや建物など)とは、すべての要件と制約(技術的、財政的、心理的、...)を取り、それらを満たすソリューションを設計することです。
back2dos

1

物理学は機械工学であるのと同じように、コンピューターサイエンスはプログラミングです。

コンピューターサイエンスは理論的であり、情報とその計算に科学的および数学的なアプローチをとります。

コンピュータープログラミングは実用的です。コンピュータープログラムのソースコードを設計、作成、テスト、デバッグ、および保守するプロセスです。

それらは異なりますが、関連するフィールドです。両方が互いに恩恵を受けています。


0

コンピュータサイエンスの学位は範囲がはるかに広く、コンピューティングの背後にある理論をカバーしています。一方、コンピュータープログラミング学位は、さまざまなプログラミング言語でトレーニングすることにより、学生のコーディングまたはプログラミングスキルの開発に焦点を当てています。混乱している場合は、カリフォルニア大学サンディエゴ校でこれら両方のプログラムの詳細を参照できます。それはあなたにこれらの学位の範囲に関していくらかの明快さを提供するかもしれません!


0

コンピューターサイエンス:コンピューター/計算方法による問題解決の研究です。

コンピュータープログラミング:コンピューターサイエンスの分野を構成するのは、この問題解決プロセスの一部です。コンピュータープログラミングは、コンピューターサイエンスのほんの一部です。


-1

プログラミングは人に関するものです。人々はコードを読み、書き、保守します。コンピューターサイエンスは数学に関するもので、アルゴリズムを実装して記述します。


3
@ SK-logicおよびDeadMG。これらすべてのコメントを削除しました。議論(または実際の議論)を希望する場合は、他の場所で議論してください。
ChrisF

1
それは少し狭いです。少なくとも、私の大学の「アルゴリズム、機械、および人々」研究室は反対したいです:)。そして、その研究室には、CSのトップ研究者の時代が含まれています。また、あらゆる場所のすべてのHCIの人々。私は少しファセットになっていますが、CSはアルゴリズムや数学よりもはるかに広いです。
ティコンジェルビス

-1

プログラミング(開発)とは、お金を稼ぐことです。科学は新しいものを発見することです。


7
誰かがオープンソースコミュニティに伝えるのを忘れていました。
webbiedave

2
@webbiedave-まあ、そこには1人か2人の真の利他主義者がいるかもしれませんが、結局、オープンソースはお金を稼ぐことでもあります。オープンソースプロジェクトに携わるほとんどの人は、自分のスキルや履歴書を強化し、将来の収入の可能性を高めるためにそれを行うと思います。また、多くのオープンソースプロジェクトは、プロジェクトから収益を上げるために商用/エンタープライズバージョンを生み出します。それで、オープンソースコミュニティは、それがお金を稼ぐことになるとループに非常にあります;)
pap

そして、それは科学にも当てはまりませんか?;)
webbiedave

@webbiedave-いいえ、同意しません。お金は科学の副産物かもしれませんが、それは主要な目標ではありません(そうすべきではありません)。科学は、それ自体のための発見に関するものです。企業は研究開発を行いますが、それは新しいものを発見することではなく、すでに発見したものを収益化することです。
-pap

ほとんどの科学者がより多くのお金を必要とする唯一の理由は、彼らがより多くの研究を行えるようにするためです。同じことがオープンソースにも当てはまると思います。あなたが履歴書を強化するためにオープンソースを行うことは、私にとって失敗への道のように聞こえます。それは好奇心、発見、そしてかゆみを掻き立てることについてでなければなりません。
Tjaart
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.