40

このhttp://steve-yegge.blogspot.com/2007/06/rich-programmer-food.html 記事によると、私は間違いなくそうすべきです。

引用 穏やかでありながらしつこい要旨: コンパイラーの仕組みを知らなければ、コンピューターの仕組みもわかりません。コンパイラがどのように機能するかを 100% 確信できない場合は、コンパイラがどのように機能するかを知りません。

非常に興味深い記事だと思いましたし、応用分野は非常に役に立ちます (自分で読んでみてください)。その点についてはアーキテクチャですが、次のリストの各項目の 1 つまたは 2 つを知っていました。

  • プログラミング パラダイム (オブジェクト指向、関数型など)
  • プログラミング言語 API (C#、Java..) と、少なくとも 2 つの非常に異なるものがあると言う人もいます。(ジャバ/ハスケル)
  • プログラミング フレームワーク (Java、.NET)
  • 生産性を高める IDE (Eclipse、VisualStudio、Emacs など)。
  • プログラミングのベスト プラクティス (例として fxcop ルールを参照)
  • プログラミングの原則 (DRY、高結束、低結合など)
  • プログラミング方法論 ( TDDMDE )
  • 設計パターン (構造、行動など)
  • アーキテクチャの基本 (階層、レイヤー、プロセス モデル (ウォーターフォール、アジャイルなど)
  • テスト ツール (単体テスト、モデル テストなど)
  • GUI テクニック (WPF、Swing)
  • 文書化ツール (Javadoc、Sandcastle..)
  • モデリング言語 (およびおそらくツール) (UML、VisualParadigm、Rational)
  • (間違いなくここで非常に重要なことを忘れています)

これらのツールのすべてが優れたプログラマーになるために必要なわけではありませんが (GUI が必要ない場合のように)、ほとんどのツールは必要です。コンパイラはどこに登場し、コンパイラは本当に重要なのですか? 前述したように、多くのプログラマはコンパイラを知らなくてもうまくやっているようで、特に優れたプログラマになることは、多くの知識領域を生涯の成果として見られるからです:- ) ですから、コンパイラが非常に重要だとしても、もっと重要なものが常にあるのではないでしょうか?

それとも、「The Unleashed Compilers Unlimited Bible (in 24H..)))」を今日注文する必要がありますか?

記事を読んで、すぐに勉強を始めたい方へ:

パーサー、インタープリター、およびコンパイラーに関する学習リソース

4

9 に答える 9

10

コンパイラーを実装するとより優れたプログラマーになるという単純な理由から、コンパイラーについて学ぶ必要があります。コンパイラは確かにひどいものですが、途中で多くのことを学んだでしょう. これは、プログラミング スキルを向上させる (または練習する) ための優れた方法です。

于 2009-04-09T07:16:38.120 に答える
5

優れたプログラマーになるためにコンパイラーを理解する必要はありませんが、理解することは役に立ちます。それらについて学んで気づいたことの 1 つは、コンパイルは単なる翻訳に過ぎないということです。

ある言語から別の言語に翻訳したことがあるなら、コンパイルは完了しています。


では、いつコンパイラについて学ぶべきでしょうか?

問題を解決したいとき、または解決する必要があるとき。

于 2009-04-09T06:59:34.790 に答える
4

コンパイラ理論は役に立ちますが、必須ではありません。

ただし、字句解析や構文解析など、便利な手法がいくつかあります。

もう 1 つはエラー処理です。コンパイラはこれらの多くを必要とします。ユーザー入力には、予期しないものであっても、何でも含めることができます。そして、これらすべてに対処する必要があります。

于 2009-04-09T07:01:04.163 に答える
3

非常にタイム クリティカルなリアルタイム コードを作成する場合は、コンパイラがコードを最適化する方法を理解しておくと役立ちます。ただし、実際には、ハードウェアの基礎となるアーキテクチャを理解することで、より多くのメリットが得られます。

私の経験から、ハードウェアがどのように機能し、コンパイラがコードをどのように解釈するかを理解していれば、意図したとおりに動作するコードを書くことができます。私は、コンパイラによって最適化されずにハードウェアに意図しない動作をさせるコードを書いていることに何度か遭遇しました。

全体として、ソフトウェアとハ​​ードウェアのスタック全体を理解することは、優れたアルゴリズムとコードを作成するために不可欠ではありませんが、役立つことは間違いありません!

于 2009-04-09T07:55:04.160 に答える
2

実用的な観点からは、一般的なコンパイラ理論は、特定のプラットフォームへのアセンブラ、リンカ、およびローダーほど重要ではありません。たとえば、私は GCC コンパイラを x86 プラットフォーム上の高レベル C 言語から低レベル アセンブリ言語へのトランスレータと考えています。そしてたいていの場合、私は手動で改良を加えます;) コンパイラーによって生成されたコード。

科学的な観点から、コンパイラ理論を学ぶことを強くお勧めします。これは、コンピュータが構築されている素晴らしいアイデアを理解するのに役立ちます。さらに、世界に対する見方が変わるでしょう。

于 2012-05-02T09:17:46.467 に答える
2

コンパイラ コースでは、通常、高レベル コードがどのように分析され、マシン コードに変換されるかに焦点を当てています。これは非常に興味深いことですが、重要ではありません。コンピューターがどのように機能し、各言語構造のコストがいくらかを理解するには、コンパイラによって生成されるこのマシン コードが何であるかを理解することがより重要です。

したがって、コンピューターがどのように機能するかを理解するには、アセンブリ言語 (つまり、1 つのアーキテクチャのアセンブリ言語の限られたサブセットを意味します) を知っている必要があります。 、いつ最適化するか、いつ最適化しないか、および他の同様の低レベルのもの。

于 2009-04-09T07:02:19.370 に答える
0

単なる私の意見ですが、CS のコースでは、コンパイラーは十分な注意を払われていないと思います。私は、どの CS 専攻者も、サバティカルまたは専攻を終えた後に 2 つのことを行うべきだと思います。それを適用します。この知識で簡単なコンパイラを書きます。Alex Aiken は、2013 年版の Scala のサブセットである COOL (Classroom Object Oriented Language) のコンパイラを作成するための非常に役立つオンライン チュートリアルを持っています。少なくとも執筆時点では。

于 2014-04-01T13:55:44.510 に答える