web-dev-qa-db-ja.com

他の言語[c ++、c#]の代わりにAdaを学ぶ価値はありますか?

ロボットを作るつもりなら、どの言語をお勧めしますか?私たちの大学では、いくつかの言語から選択できます。先生が使っているからといって、ほとんどの生徒がエイダを選んでいます。

いくつかの調査の後、私はadaが古いことを知りました。あなたの考えは何ですか?それを学ぶ価値はありますか?

19
user1012032

はい。私の意見では、非常にそうです。

Adaは、他のプログラミング言語では見過ごされがちな2つの点で非常に優れています。

  • 汎用システム:パッケージ、関数、およびプロシージャはすべて汎用にすることができます。これは、DRY [Don't Repeat Yourself]の原則を浸透させるために特にうまく機能します。はい、あなたはcanジェネリックに乗り越えますが、私が見たもの(他の言語の)プロジェクトでは、カットアンドペーストプログラミングがより一般的であるように思われます。[そして、コードのその場所でバグを修正する必要がある場合、複数の障害点が発生するだけです。]
  • ネイティブマルチタスク。言語レベルのタスク機能の優れた点の1つは、マルチスレッドが「タックオン」されていると感じず、扱いにくい拡張機能ではなく、言語に統合されていることです。

そうは言っても、Adaを学ぶ/使用する理由は他にもあります。 1つは、うるさいコンパイラです。非常にうるさいので、プログラミングエラーを自然に減らす方法で考え始める必要があります。 (同じ条件でのandorの禁止のように。)

もう1つは、サブタイプの概念です。サブタイプはOOPのオブジェクトとは逆であり、さらに派生を分岐させる代わりに、基本タイプから離れるほどタイプ(許容値)を絞り込みます。 {適切なセットの観点から考えてください。整数は基本型、自然は非負の整数、正は正の整数です...そしてAda 2012を使用すると、サブタイプに興味深い除外を設定できます。たとえば、正のサブタイプである素数です(申し訳ありませんが、その最後の点については少し曖昧です。私はまだ2012年のものを学んでいます。}

Ada 2012では、サブプログラムに事前条件と事後条件を設定することもできます。これだけでライブラリをより安定させることができます。 (null-ポインタを除くことができます。)

27
Shark8

Peter Norvigのアドバイスは、おそらくここに関連しています。

「Windows、Unix、Macのどのオペレーティングシステムを使用すればよいですか?」と尋ねられたとき、私の答えは通常「友達が使用するものは何でも使用する」です。友達から学ぶことで得られる利点は、OS間またはプログラミング言語間の本質的な違いを相殺します。

10年でプログラミングを自分で教える

エッセイ全体はよく読まれています。

ちなみに、エイダは私が最初に学んだ言語でした。 Adaを学ぶことには、最初に1つの大きな利点がありました。誰もAdaを使用しないため、他のことをする前に別の言語を学ぶことを余儀なくされ、それによって視点を得ることができました。初心者のプログラマーが抱える可能性のある最悪の問題の1つは、母国語で物事が行われる方法は、物事が行われる方法にすぎないという信念です。新しい言語を学ぶことは簡単で非常に価値があります。

20
Paul Stansifer

先生とほとんどの生徒がAdaを使用している場合は、Adaを使用するのがおそらく最善です。これは、小規模プログラムと大規模プログラムの両方にとって非常に優れた言語です。それは非常に読みやすく、多くの一般的な間違いからあなたを(ある程度)保護します。

Adaはソフトウェアエンジニアリング用です。 darkestkhanが言ったように、それは「最高のハックと希望」の言語ではありません。

ポール・スタンシファーのアドバイスはとても良いです:いくつかの言語を学びましょう。自由に使えるツールがたくさんあることを確認してください。1つの言語だけに制限しないでください。さまざまな言語を学ぶことで得られる視点は非常に貴重です。猫の皮を剥ぐ方法は間違いなく複数あります。たとえば、Haskellを見てください。問題を解決する方法について、まったく新しい視点を得ることができます。

言語構文は、プログラミング方法を学ぶのに最も少ないものです。難しいのは、複雑な現実世界の問題を、プログラミング言語の非常に限られた範囲で意味のあるものにモデル化する方法を学ぶことです。強力な型システム、タスクモデル、ジェネリックス、リアルタイムおよび並行プログラミング用の堅牢なツールを備えたAdaは、この仕事に最適です。

特にロボット工学について質問しているので、入手するのに適した本は、John W. McCormick、Frank Singhoff、およびJeromeHuguesによる「BuildingParallel、Embedded、and Real-TimeApplicationswithAda」かもしれません。とても良い読み物です。

http://www.cambridge.org/gb/knowledge/isbn/item5659578/?site_locale=en_GB

8
Thomas Løcke

Shark8には、一般的な言語としてのAdaについていくつかの非常に良い点がありますが、質問は特にロボット工学に関するものでした。この点で、私は「気にしないでください」と言います。レゴから最先端のロボットアームやハンドに至るまで、あらゆる種類のロボット工学を10年以上行ってきた後、私はAdaを使用したロボットシステムを見たことがありません。

結局のところ、ロボット工学は難しいものです。自分ですべてに取り組むつもりはないほど難しい。そしてそれは、多くの既存のライブラリとフレームワークを活用することを意味します。そして、これはあなたが彼らの言語やインターフェースなどを使用することを意味します。あなたのロボットシステムはおそらくコードの山を含み、そのほんの一部だけがあなたの特定のアプリケーションのためにカスタム化されます。 Adaで小さな部分を記述し、ラッパーまたはインターフェイスを実行して、残りのコードでうまく機能できるようにすることは可能です。しかし、それは多くの作業であり、ほとんどメリットがないことがわかると思います。

新しいロボットプロジェクトに着手するとき、私は実用的なアプローチを取ります。私は既存のツール、ライブラリ、ユーティリティを見て、自分のニーズに最も適したものを選びます。それから私はそれがするどんな言語でも使います。そして、95%の確率でC++またはPythonです。

4
Ben

エイダは間違いなくそれだけの価値があります。 Shark8によって書かれた2つのことに加えて、ほとんどすべての言語が、読むのではなく書くことの容易さに焦点を合わせていることを付け加えなければなりません(そして、ほとんどの場合、一度書いて何度も読むことになります)。また、Adaを取り巻く文化は主流とはまったく異なります。つまり、「バグが発生しない運を頼りに、プログラムを正しく動作させ、ソースを読みやすくする」ことに重点を置いています。

年齢に関しては-ああ、さあ-Cはさらに年上です。言語自体の時代について何がそれほど重要ですか?年齢の問題について話す前に、まずAda 83に何が入っているかを確認する必要があります(ヒント:主流の言語は90年代後半にAda 83の機能セットに到達し始めましたが、多くの機能[特にサブタイプ]はまだ到達していません主流で)。最新のAda標準のほかに、2012年のものがあります。古いと言えば、「新しい」とはわかりません。

4
darkestkhan

C++は、あなたが知っている春の鶏ではありません。エイダより10年も若いと思います。

さらに悪いことに、C++とC#はどちらも、言語のコアをCから派生させています。これは、実際にはAdaよりも10年古いです。

Cは、16KBが大量にあった時代にコンパイラーの構築を容易にするように設計されました(notプログラマーの仕事)RAMそしてハードドライブは産業用エアコンと同じくらい大きかった。C++は基本的に古き良き60年代後半のCとして始まり、OO機能がボルトで固定されており、C#は本質的にMicrosoftがC++に微調整したものです。よりJavaに似ています。基本的に、C#とC++は実際にはAdaよりも古いです。

学ぶべき流行の新しい言語がたくさんあります(そしてある時点であなたはそれらを学ぶべきです)。ただし、C++とC#はそうではありません。

3
T.E.D.

それはあなたがこの言語で何をしたいかによります。 LISPはAdaよりも古く、人工知能内で広く使用されています。あなたが望む言語を学び、あなたが学びやすく、あなたがその概念を理解しやすい言語を学びましょう。その後、さらに進んで、より多くの言語を学ぶことができます。

1
akluth