コンピュータサイエンスを上手に使うためにコーディングは重要ですか?それをよく知るためにアルゴリズムを実装する必要がありますか?
cs教授のイディオムを「コード化しない」と覚えている
コンピュータサイエンスを上手に使うためにコーディングは重要ですか?それをよく知るためにアルゴリズムを実装する必要がありますか?
cs教授のイディオムを「コード化しない」と覚えている
回答:
あなたがそれをコード化するまで、あなたは本当にアルゴリズムをよく知りません。
コーディングは教授にとって重要ではありませんが、彼は物事を行うために支払われていないことを覚えておく必要があります。彼は物事を言う(そして物事を書く)ために支払われます。
私は元数学の教授なので、このダイナミックさをよく理解しています。
彼の道を進み、理論的なコンピュータ科学者になりたいのであれば、そうです、コーディングはそれほど重要ではありません。ただし、そうする場合は、謙虚さを維持することを忘れないでください。給与は、物事を行うことを選択した人々が稼いだリソースによって支払われることを知っています。
コンピュータサイエンスは、天文学が望遠鏡であるのと同じくらいコンピュータではありません
— Edsger Dijkstra
私は同意する傾向があります。
抽象的で基礎的なコンピューターサイエンスの概念に特化した純粋なコンピューターサイエンスのアカデミーであることについて話している場合は、必ずしもそうではありません。
類推を曲げると、これは、NASAのすべてのロケット科学者が「良いロケット科学者」になるために宇宙を飛ぶ必要があるかどうかを尋ねるようなものです。もちろん違います。宇宙飛行士であることは宇宙飛行業界の一部であり、非常に実践的な部分ですが、地上の科学者が独自の方法でそれほど重要ではないという意味ではありません。
そうは言っても、実際に実際のプログラミング言語で記述していなくても、彼が作成したアルゴリズムを適用することはおそらく良い考えです。この意味で、アルゴリズム設計は数学の分岐と考えることができます。
コーディングは、真のコンピュータサイエンティストになるためにそれほど重要ではありません。そして、コードで考えることは、有用な抽象的な概念を開発しようとするときに、思考を制約する可能性があります。最も優れたコーダーには、複雑なアルゴリズムを分析したり、プログラミング言語、高度な検索および並べ替えアルゴリズム、有限オートマトン理論、分散コンピューティング理論、Rツリー、フォールトトレランスプロトコル、信頼性の高い通信プロトコル、デジタルなどの概念を開発したりするための知的能力がありません信号処理アルゴリズム、暗号理論、パフォーマンス分析と最適化、効率的なキャッシング、マップ削減、信頼性の高いセキュリティプロトコルなど。優れたコーダーやコンピューターエンジニアは、通常、構築しようとしているシステムでこれらの理論を使用して非常に効果的に実行できますが、それは本当にコンピュータシステムエンジニアまたはコンピュータプログラマの領域です。
コーディングは、コンピュータプログラマであるために非常に重要です。コンピュータサイエンティストによって生成された有用な抽象的な概念を実際のコードにエンコードする方法を理解することも役立ちます。
コンピュータサイエンスの大きな問題の1つは、今日のプログラミング問題の解決にほとんど役立たない数学の問題の解決策を見つけなければならないことです。彼らがソリューションをコーディングしたとしても、だれもそれを実際に使用することはできません。デジタル信号処理理論について考えます。フーリエ、ヒルベルト、シャノンのような人々によって発明されましたが、コンピュータ化されたDSPの問題への適用は、約20年前まで広く可能ではありませんでした。
コンピュータ教育の大きな問題は、コンピュータ科学者によって教えられるほとんどの人々がコンピュータ科学者にならないことです。しかし、あまりにも多くのコンピュータ科学者がこれを理解していません。コーディングは彼らにとって重要ではないかもしれませんが、あなたが彼らのクラスにいるなら、それはほとんどあなたにとって重要になるでしょう。
コンピュータ教育におけるもう1つの大きな問題は、多くの真のコンピュータ科学者がソフトウェア開発を教えるのに役立つ産業経験を欠いていることです。彼らは本質的に彼らが本当に知らないことを教えようとしています。それは彼らが信頼性を失う原因になります。産業環境で重要なことは、これらのコンピューター科学者の一部に登録されないことがよくあります。
「コンピュータサイエンティスト」になる人々の大部分は、コンピュータプログラマやコンピュータシステムエンジニアになるため、長くて短いコーディングは重要です。
コンピューター科学の背後にある数学と理論にちょうど彼は離散的な数学のようなもののように聞こえます... これらのタイプの教授が一粒の塩で言っていることを理解してください。
あなたは理論だけを理解することで脱出できますが、私は常にそれらをコード化した後、アルゴリズムとそのような1000倍をよく理解していることにいつも気づきました(たとえば、バブルソート対クイックソート、Big-Oを知ることは素晴らしいですが、実際に大きなデータでそれを見る-setsは、計算の複雑さを測定するための特定の現実世界の評価を提供します。
私が見つけた興味深いことの1つは、コンピューターサイエンスの理論的側面を研究すればするほど、コーディングが容易になることです。ある時点で、特定の言語で物事を考えるのをやめ、むしろそれらをコンピュータサイエンスのより広範な概念と見なします。
これは、すべての英語の教授が私の映画、テレビシリーズ、小説、演劇、詩を私の心に書くことができるかどうかを尋ねるようなものです。同様に、数学の教授が、まったく異様なアイデアに数値を使用しないことを想像してみてください。つまり、基本的なコンピュータサイエンスを教えることができるようにするためにコーディングに重要性を与えるいくつかの基本的な要素があります。したがって、教授は基本的な言語構文と、教授が教えるコースと同じくらい洗練されたプログラムの書き方を知っている必要があります。教授がコンパイラの設計について教えており、これまでにコンパイラを作成したことがない場合、これは大きな問題になります。これまでにケーキを調理したり食べたりしたことがないケーキをシェフが想像してみてください。アイ・カルンバ。
それを知るためにアルゴリズムを実装することにはいくつかの利点があるように見えますが、それが要件であるとは思えません。結局のところ、実装のうさぎの穴からアルゴリズムがどのように実装されるかを理解するのにどれだけ遠くまで行くことができるのか疑問に思われるでしょうか。たとえば、誰かが実際にそれを知るために、任意のアルゴリズムを取り、手続き型、オブジェクト指向、関数型プログラミングなどのさまざまなパラダイムの下で実装する必要がありますか?コンパイラーがすべてのコードをどのように変換し、ビットを電子ごとのレベルで移動するかを知って、それについて理解を深める必要がありますか?
「私は決してコード化しない」というのは、過去形と現在形をある意味で含むという意味合いがあります。いくつかのサークルではうまくいかないかもしれないかなり否定的なトーンを伝えることができるステートメントを表示する別の方法のために、教授の下にある控えめなものとして「コーディング」の暗黙の仮定がある場合もあります。
私はプロのソフトウェア開発者でしたが、機械工学の学位を取得しました。
部品の組み立てや機械加工の経験がほとんどなく、その仕事を機械工に任せれば、優れた機械設計者になることができます。しかし、部品の構築方法と機械加工方法を知っていれば、設計者は大幅に優れたエンジニアになります。これは、設計しているものの製造と組み立てに伴う問題を予測できるためです。
ソフトウェアについても同様です。「コーダー」は機械工または技術者であり、ソフトウェアエンジニアはエンジニアです。多くの場所で、1人の人が両方の仕事をします。それは不可能ではありませんし、いくつかの非常に抽象的な問題については、「エンジニアリングのみ」の立場がうまくいくかもしれません。
しかし、大多数の人にとって、コードを拒否することによるメリットはまったくありません。
熟考して停止問題に終わらない限り、コンピューターサイエンスのあらゆる側面でコーディングが常に使用されます。
私がプログラミングなしで取った唯一のCSクラスは理論でした。「実験はしない」と言う物理学者はたくさんいると思いますが、「何も発見しない」と言う人もいるでしょう。そして、彼らが気にかけているなら、私は驚かれることでしょう。
コンピュータサイエンスの学生として、私は最初はソフトウェア開発に関連する概念を理解する方が良いと思います。ソフトウェアの背後にある概念と、それがコンピュータとどのように相互作用するかを学んだら、コーディングと特定の実装問題への対処を開始する時です。
これは「ソフトウェア例外」と同じです。最初は、許可されていないことをしたので、それらを処理するだけです。次に、それらを学習したら、コードを同じようにして、コードをより冗長にします。
まあ私は、アプリケーションの通常のワークフローとして例外を使用するプログラマーのような概念を気にしない人たちだと思います。彼らは方法を知っていますが、実際に理由を理解しないでください。
私はあなたの教授のための別のイディオムを持っています:
できる人、できる人、できない人。
いも、話が安い。誰もが「理論」について無限に手を出し、それを「コンピュータサイエンス」と呼ぶことができます。しかし、実際に実行されるまで、理論を検証する方法がないため、理論はあまり役に立ちません。私は何かについて教授の意見を取ると思いますはるかに真剣に私は彼が実際にいます知っていたら解決し、彼はちょうどかするいずれかの証拠があってもなくてもよい「理論」逆流だ場合よりも、コード内の特定の問題をバックアップする彼の視点を。