コーディングは重要ですか?[閉まっている]


9

コンピュータサイエンスを上手に使うためにコーディングは重要ですか?それをよく知るためにアルゴリズムを実装する必要がありますか?

cs教授のイディオムを「コード化しない」と覚えている


32
コーディングの重要性についてプログラマーのグループに質問しています...公平な応答が得られない可能性があります。
レイチェル

25
あなたの教授のイディオムを十分に尊重して、彼がコードを書かなければ、彼は他の人にコードの書き方を教える資格がありません。彼の教えが純粋に理論的なものである場合でも、コーディングスキルを身に付けることは有益です。
Robert Harvey、

19
泳げなかった人から水泳のレッスンを受けますか?
Steven A. Lowe

5
@Steven A. Lowe:非水泳教授は水泳ではなく水生生理学を教えていると思います。それでも、彼が泳がない場合、私は彼が窒素麻酔の感じ方を知っているとは思いません。
ハビエル

4
@ハビエル:彼は水中解体を教えている可能性が高いが、SCUBAの認定さえ受けていない。そのような人々(「教授」以外)の専門用語は「ポーズ」です;-)
Steven A. Lowe

回答:


27

あなたがそれをコード化するまで、あなたは本当にアルゴリズムをよく知りません。


3
これは必ずしも真実ではありません。アルゴリズムを理解し、実際にコーディングせずに状況や問題に適用できます。
aggietech 2010

10
@aggietech:ここでのキーワードは「まあ」
Robert Harvey

2
@aggietech、ロバートは正解です。アルゴリズムをオウムアウトすることはできますが、実際にアルゴリズムを機能させようとすると、アルゴリズムについてどれだけ学ばなければならないかがわかります。

3
forループとバブルソートについて話している場合、それは大した問題ではありませんが、遺伝的アルゴリズムに関する本を読むことと実際にそれを使って実際の問題を解決することの間には大きな違いがあります
Steven A. Lowe

2
@スティーブン、そう、複雑さはそれと多くの関係があります。

19

コーディングは教授にとって重要ではありませんが、彼は物事を行うために支払われていないことを覚えておく必要があります。彼は物事を言う(そして物事を書く)ために支払われます。

私は元数学の教授なので、このダイナミックさをよく理解しています。

彼の道を進み、理論的なコンピュータ科学者になりたいのであれば、そうです、コーディングはそれほど重要ではありません。ただし、そうする場合は、謙虚さを維持することを忘れないでください。給与は、物事を行うことを選択した人々が稼いだリソースによって支払われることを知っています。


3
経験の声。これは私が見たと思う教授の最高の要約についてです。
TehShrike、

1
はい。他の人に「やる」ことを教える場合は、「やる」を練習する必要があると付け加えておきます。
Beth Whitezel 2010

@BitOff:同意しますが、「if」は「only if」でもあります。決してコードを書かない教授はソフトウェア開発を教えるビジネスを持っていないが、彼は、たとえば複雑さの理論を教えるのに完全に適しているかもしれない。この場合、彼が学生に教えているのは、定理を証明する方法です。したがって、唯一の要件は、(コーディングではなく)定理を証明する練習が必要であることです。
ShreevatsaR 2010

@ShreevatsaRはい、同意します。そして実際には、彼らが多くのコードを書いているという事実にそれほど厳密ではありません。優れたコーダーがめったに優れた教師にならない。教師が週のポイントを知っていれば、補うことができます。業界の人々を教室に呼び込む地元のプログラムがあります。教師は教育の専門家であり、コーディングが可能で、学生のために業界関係者から情報を引き出す方法を知っています。
Beth Whitezel 2010

16

コンピュータサイエンスは、天文学が望遠鏡であるのと同じくらいコンピュータではありません

— Edsger Dijkstra

私は同意する傾向があります。


2
わかりましたが、これは質問とどのように関連していますか?
Robert Harvey、

2
「コンピューターサイエンスを上手に使うためにコーディングは重要ですか?」コンピュータが関連していない場合、コンピュータの物理的なコーディングはどのように重要ですか?
ElGringoGrande 2010

1
@Robert Harvey:コンピュータサイエンスはコンピュータを明確に扱っているわけではなく、多くの天文学者がガラスレンズをのぞく時間をほとんどとっていません。結果を分析するだけの人もいます。コンピュータプログラミングにおける重要な発見の半分は、コンピュータが登場する前に知られていました。
2010

2
@ロバート・ハーヴェイ:コンピューター科学は単にプログラミングの方法ではなく、計算科学です。純粋なバイナリエンコーディング以外では、抽象化である言語を使用して、コンピュータサイエンスの理論と発見を実装します。コンピュータサイエンス(量子コンピューティングなど)には、プログラミングでは十分に理解できない多くのアイデアがあります。私が言っているのは、プログラミング言語を使用しなくても、コンピュータサイエンスのすべてのアイデアを完全かつエレガントに表現できるということです。できない名前を付けてください。
ElGringoGrande 2010

3
@Orbling:とてもそうです。たとえば、最初の電子コンピュータが作成される前に、チューリングがユニバーサルチューリングマシンの概念を発明したことを思い出してください。彼が大量のコードを記述しなかったという事実は、彼を無能なコンピューター科学者にしますか?
mipadi 2010

11

抽象的で基礎的なコンピューターサイエンスの概念に特化した純粋なコンピューターサイエンスのアカデミーであることについて話している場合は、必ずしもそうではありません。

類推を曲げると、これは、NASAのすべてのロケット科学者が「良いロケット科学者」になるために宇宙を飛ぶ必要があるかどうかを尋ねるようなものです。もちろん違います。宇宙飛行士であることは宇宙飛行業界の一部であり、非常に実践的な部分ですが、地上の科学者が独自の方法でそれほど重要ではないという意味ではありません。

そうは言っても、実際に実際のプログラミング言語で記述していなくても、彼が作成したアルゴリズムを適用することはおそらく良い考えです。この意味で、アルゴリズム設計は数学の分岐と考えることができます。


1
NASAのすべてのロケット科学者は、ロケット科学に完全に基づいており、機械工学と電気工学の詳細な実地経験があると言っても差し支えないと思います。おお、そして彼らは一般的にコードの書き方も知っています。
Robert Harvey

3
彼らは方法について理論化しただけでなく、何度も軌道を計算したと思います。

3
+1、私は別の例を追加します-あなたが偉大なソムリエになるためにワイン作りの経験を持っている必要はありません(またはワインテイスティングの人が呼ばれるものなら何でも)。
Jas

2
@Jas:ひどいアナロジー。コンピュータ科学者は最終製品の受け手ではありません。彼らワインメーカーです。
doppelgreener 2010

1
@Axidosいいえ、いいえ、彼らはブドウ農家です。
マークC

9

コーディングは、真のコンピュータサイエンティストになるためにそれほど重要ではありません。そして、コードで考えることは、有用な抽象的な概念を開発しようとするときに、思考を制約する可能性があります。最も優れたコーダーには、複雑なアルゴリズムを分析したり、プログラミング言語、高度な検索および並べ替えアルゴリズム、有限オートマトン理論、分散コンピューティング理論、Rツリー、フォールトトレランスプロトコル、信頼性の高い通信プロトコル、デジタルなどの概念を開発したりするための知的能力がありません信号処理アルゴリズム、暗号理論、パフォーマンス分析と最適化、効率的なキャッシング、マップ削減、信頼性の高いセキュリティプロトコルなど。優れたコーダーやコンピューターエンジニアは、通常、構築しようとしているシステムでこれらの理論を使用して非常に効果的に実行できますが、それは本当にコンピュータシステムエンジニアまたはコンピュータプログラマの領域です。

コーディングは、コンピュータプログラマであるために非常に重要です。コンピュータサイエンティストによって生成された有用な抽象的な概念を実際のコードにエンコードする方法を理解することも役立ちます。

コンピュータサイエンスの大きな問題の1つは、今日のプログラミング問題の解決にほとんど役立たない数学の問題の解決策を見つけなければならないことです。彼らがソリューションをコーディングしたとしても、だれもそれを実際に使用することはできません。デジタル信号処理理論について考えます。フーリエ、ヒルベルト、シャノンのような人々によって発明されましたが、コンピュータ化されたDSPの問題への適用は、約20年前まで広く可能ではありませんでした。

コンピュータ教育の大きな問題は、コンピュータ科学者によって教えられるほとんどの人々がコンピュータ科学者にならないことです。しかし、あまりにも多くのコンピュータ科学者がこれを理解していません。コーディングは彼らにとって重要ではないかもしれませんが、あなたが彼らのクラスにいるなら、それはほとんどあなたにとって重要になるでしょう。

コンピュータ教育におけるもう1つの大きな問題は、多くの真のコンピュータ科学者がソフトウェア開発を教えるのに役立つ産業経験を欠いていることです。彼らは本質的に彼らが本当に知らないことを教えようとしています。それは彼らが信頼性を失う原因になります。産業環境で重要なことは、これらのコンピューター科学者の一部に登録されないことがよくあります。

「コンピュータサイエンティスト」になる人々の大部分は、コンピュータプログラマやコンピュータシステムエンジニアになるため、長くて短いコーディングは重要です。


問題の核心に直行する優れた答え。問題は、業界に関連する計算科学とソフトウェア工学の両方を学ぶ必要があることです。大学は本質的には前者を促進する研究所であり、後者とはほとんど関係がないため、ほとんどの大学は、どちらか一方、通常は前者よりもどちらか一方を上手に教えます。後者を達成することは簡単ではありません。これはほとんどの実用的な分野の問題です。
2010

3

教授が所属するサブフィールドによって異なります。

数値解析の能力がある人は、おそらくFortranの達人でしょう。AI教授は、LispやPrologなどでコーディングします。

より数学的な領域のいくつかでは、実際にコーディングする必要はありません。私はまだ少し疑わしいと思います。


2

コンピューター科学の背後にある数学と理論にちょうど彼は離散的な数学のようなもののように聞こえます... これらのタイプの教授が一粒の塩で言っていることを理解してください。


5
私は数学愛好家であり、アルゴリズム中毒です。私はいつもコーディングを楽しんでいます。ただし、アルゴリズムはコーディングの背後にあります。アルゴリズムも計算理論もペン1枚と紙1枚で十分だと思います。私が最近行っているのは、アルゴリズムを考えて書くことだけですが、コーディングはしません
hilal '22

5
教授が言ったことを、一粒の塩でとりましょう。彼が離散数学の男である場合、彼がプログラミングやソフトウェア工学について語るときではなく、離散数学について語るとき、彼を真剣に受け止めてください。
David Thornley

1
離散数学の連中は、この分野で最も重要な人の1つであり、理論はコーダーによって実装され、実装が正しいことを証明する必要はありません。確かに塩ひとつまみ。
2010

@Orblingそして、プログラムをする人たちが言うことを(幅広いグループで)、同様の一時停止された判断と常識をもってください。
マークC

@Mark C:ええ、はい、私はそれらの線量で誰もが言うすべてをとることを皆に強く勧めます。
2010


2

あなたは理論だけを理解することで脱出できますが、私は常にそれらをコード化した後、アルゴリズムとそのような1000倍をよく理解していることにいつも気づきました(たとえば、バブルソート対クイックソート、Big-Oを知ることは素晴らしいですが、実際に大きなデータでそれを見る-setsは、計算の複雑さを測定するための特定の現実世界の評価を提供します。

私が見つけた興味深いことの1つは、コンピューターサイエンスの理論的側面を研究すればするほど、コーディングが容易になることです。ある時点で、特定の言語で物事を考えるのをやめ、むしろそれらをコンピュータサイエンスのより広範な概念と見なします。


2

これは、すべての英語の教授が私の映画、テレビシリーズ、小説、演劇、詩を私の心に書くことができるかどうかを尋ねるようなものです。同様に、数学の教授が、まったく異様なアイデアに数値を使用しないことを想像してみてください。つまり、基本的なコンピュータサイエンスを教えることができるようにするためにコーディングに重要性を与えるいくつかの基本的な要素があります。したがって、教授は基本的な言語構文と、教授が教えるコースと同じくらい洗練されたプログラムの書き方を知っている必要があります。教授がコンパイラの設計について教えており、これまでにコンパイラを作成したことがない場合、これは大きな問題になります。これまでにケーキを調理したり食べたりしたことがないケーキをシェフが想像してみてください。アイ・カルンバ。

それを知るためにアルゴリズムを実装することにはいくつかの利点があるように見えますが、それが要件であるとは思えません。結局のところ、実装のうさぎの穴からアルゴリズムがどのように実装されるかを理解するのにどれだけ遠くまで行くことができるのか疑問に思われるでしょうか。たとえば、誰かが実際にそれを知るために、任意のアルゴリズムを取り、手続き型、オブジェクト指向、関数型プログラミングなどのさまざまなパラダイムの下で実装する必要がありますか?コンパイラーがすべてのコードをどのように変換し、ビットを電子ごとのレベルで移動するかを知って、それについて理解を深める必要がありますか?


「私は決してコード化しない」というのは、過去形と現在形をある意味で含むという意味合いがあります。いくつかのサークルではうまくいかないかもしれないかなり否定的なトーンを伝えることができるステートメントを表示する別の方法のために、教授の下にある控えめなものとして「コーディング」の暗黙の仮定がある場合もあります。


3
英語の教授は、映画の脚本の書き方を他の人に教える場合、映画の脚本の書き方を知っている必要があります。しかし、実際の本でなくても、すべての英語の教授は非常に優れた論文を書くことができるはずです。
Robert Harvey、

2
@Robert Harvey:OPの教授は、自分コーディングできないというだけで、コーディングできないとは言っていませんでした。彼は、研究にほとんどの時間を費やしている理論的なコンピューター科学者かもしれません。JBキングが指摘したように、たとえばコンパイラーの設計やソフトウェアエンジニアリングについて講義していない限り、彼は自分の分野で非常に経験豊富で有能である可能性があります。
mipadi 2010

@ロバート・ハーベイ:@ミパディはそこにポイントがあると思います、教授は「私は決してコードを書かないと言っただけで、彼が能力がないということではありません。
2010

@JBキング、@オーブリング:引用は翻訳であると私は思うので、文字通り過度に分析しないでください。
ハビエル

@ハビエル:そうかもしれませんが、その場合、それはさらに明確ではありません。
2010

2

あなたの教授は少し正しいかもしれません。そのため、教授になるにはコーディングの必要はありませんが、理論についてはよく知っています。しかし、それは大学の境界の外では機能しません。


1

私はプロのソフトウェア開発者でしたが、機械工学の学位を取得しました。

部品の組み立てや機械加工の経験がほとんどなく、その仕事を機械工に任せれば、優れた機械設計者になることができます。しかし、部品の構築方法と機械加工方法を知っていれば、設計者は大幅に優れたエンジニアになります。これは、設計しているものの製造と組み立てに伴う問題を予測できるためです。

ソフトウェアについても同様です。「コーダー」は機械工または技術者であり、ソフトウェアエンジニアはエンジニアです。多くの場所で、1人の人が両方の仕事をします。それは不可能ではありませんし、いくつかの非常に抽象的な問題については、「エンジニアリングのみ」の立場がうまくいくかもしれません。

しかし、大多数の人にとって、コードを拒否することによるメリットはまったくありません。


2
しかし、あなたが言ったように、あなたは機械工学者であり、ソフトウェア工学について話している。エンジニアは物を作ります。しかし、問題の教授はコンピュータサイエンスを教えています。
mipadi 2010

1

熟考して停止問題に終わらない限り、コンピューターサイエンスのあらゆる側面でコーディングが常に使用されます。

私がプログラミングなしで取った唯一のCSクラスは理論でした。「実験はしない」と言う物理学者はたくさんいると思いますが、「何も発見しない」と言う人もいるでしょう。そして、彼らが気にかけているなら、私は驚かれることでしょう。


1
私のコンピューティング学位では(大学が国際的にトップ10にあるため、足りないことはありません)、クラスの少なくとも3分の1にはプログラミングがまったくありませんでした。コンピューティングはコードよりはるかに多くのことです。
2010

わかりました。まあ、私はトップ10の大学にも行きました。同じ大学に行って、自分の好き嫌いに基づいてさまざまなクラスを受講したり、教授をランダムにランダムに取得したりした可能性もあります。
Peter Turner

0

コンピュータサイエンスの学生として、私は最初はソフトウェア開発に関連する概念を理解する方が良いと思います。ソフトウェアの背後にある概念と、それがコンピュータとどのように相互作用するかを学んだら、コーディングと特定の実装問題への対処を開始する時です。

これは「ソフトウェア例外」と同じです。最初は、許可されていないことをしたので、それらを処理するだけです。次に、それらを学習したら、コードを同じようにして、コードをより冗長にします。

まあ私は、アプリケーションの通常のワークフローとして例外を使用するプログラマーのような概念を気にしない人たちだと思います。彼らは方法を知っていますが、実際に理由を理解しないでください。


-6

私はあなたの教授のための別のイディオムを持っています:

できる人、できる人、できない人。

いも、話が安い。誰もが「理論」について無限に手を出し、それを「コンピュータサイエンス」と呼ぶことができます。しかし、実際に実行されるまで、理論を検証する方法がないため、理論はあまり役に立ちません。私は何かについて教授の意見を取ると思いますはるかに真剣に私は彼が実際にいます知っていたら解決し、彼はちょうどかするいずれかの証拠があってもなくてもよい「理論」逆流だ場合よりも、コード内の特定の問題をバックアップする彼の視点を。


6
アインシュタイン、アリストテレス、ウェブスター、アインランド、ソロー、孔子、ブッカーT.ワシントンは教師でした。教育されていない声明。
JeffO 2010

4
-1教師に対する非常に侮辱的なコメント。私はよく知っているとしばしば引用しましたが、常にばかげています。ジョージバーナードショーの最初の発言は、「できる人はできる、できない人は教える」でした。男とスーパーマン、1903 -彼はまた言った:「教育における人間の救いの嘘の私にとって唯一の希望。」ロンドンスクールオブエコノミクス(LSE)の共同創設者だったので、あなたは彼の見解を判断しました。
2010

2
アインシュタインは人生で物理的な実験を行ったことはありませんでした。他の人によって行われたいくつかの思考実験について説明し、(1つの例外を除いて)彼が予測したとおりに出てきました。アインシュタインには「教室の外では実質的な成果」がなかったと思いますか?教授がエンドユーザーが直接使用できるものを何も実装していないからといって、なぜ彼はフィールドのプログラマー使用する新しいアルゴリズムを研究していないと思いますか?実際、あなたは教授の仕事が学生にコーディング方法を教えることだとさえ思っているようです!
ShreevatsaR 2010

3
おい、私のコンピューターサイエンスの教授(MIT)の多くは素晴らしく、社会に多大な貢献をしてくれました。彼ら「自分の分野で何かをする」ことをたくさんしています。しかし、彼らの分野はコーディングとはほとんど関係がなく、コーディングすることはほとんどありません。(まじめに、量子計算に取り組んでいる誰かが、存在しない量子コンピューター用のコードを書くことを期待していますか?)コンピューターサイエンスについて非常に狭い見方をしているようです。(それはエンジニアリングではなく、コンピュータサイエンスであることを忘れないでください。)
ShreevatsaR 2010

2
@GrandmasterB:comp sci教授が計算理論に焦点を合わせている場合、彼がコードを書く必要はほとんどありません。それは彼が彼の分野で何もしていないという意味ではありません-彼はおそらく計算理論に関する論文を発表しているでしょう!プログラミングコンピュータサイエンスを融合させています
mipadi 2010
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.