私がロボットを作るなら、どの言語をお勧めしますか? 私たちの大学では、いくつかの言語から選択できます。先生が使っているという理由だけで、ほとんどの生徒が Ada を選んでいます。
いくつかの調査の後、ADAが古いことがわかりました。あなたの考えは何ですか?それを学ぶ価値はありますか?
私がロボットを作るなら、どの言語をお勧めしますか? 私たちの大学では、いくつかの言語から選択できます。先生が使っているという理由だけで、ほとんどの生徒が Ada を選んでいます。
いくつかの調査の後、ADAが古いことがわかりました。あなたの考えは何ですか?それを学ぶ価値はありますか?
はい。私の意見では、非常にそうです。
Ada は、他のプログラミング言語では見過ごされがちな 2 つの点で非常に優れています。
Don't Repeat Yourself
これは、DRY [ ] 原則を根付かせるために特にうまく機能します。はい、ジェネリックに行き過ぎることはありますが、私が (他の言語の) プロジェクトで見たのは、カット アンド ペースト プログラミングがより一般的であるように思われることでした。[そして、コードのその場所でバグを修正する必要がある場合、複数の障害点が発生するだけです。]そうは言っても、Ada を学習/使用する正当な理由は他にもあります。1 つはうるさいコンパイラです。うるさいため、プログラミング エラーを自然に減らす方法を考え始める必要があります。and
(同じ条件文のとの禁止のようにor
。)
もう 1 つは、サブタイプの概念です。サブタイプは、OOP のオブジェクトとは逆です。さらにデレビションを分岐するのではなく、ベース タイプから遠ざかるほどタイプを絞り込みます (許容される値です)。{適切なセットの観点から考えてください。Integer は基本型、Natural は非負の整数、Positive は正の整数です。Ada 2012 では、Subtype に興味深い除外を設定できます。たとえば、Positives のサブタイプである Primes (最後の点については少し曖昧です。私はまだ 2012 年のことを学んでいます)。}
Ada 2012 では、サブプログラムに事前および事後条件を設定することもできます。これだけで、ライブラリをより安定させることができます。(null 除外ポインターも同様です。)
Peter Norvig のアドバイスは、おそらくここに関連しています。
「Windows、Unix、または Mac のどのオペレーティング システムを使用すればよいですか?」と尋ねられた場合、私の答えは通常、「友人が使用するものを使用する」です。友人から学ぶことで得られる利点は、OS 間またはプログラミング言語間の本質的な違いを相殺します。
エッセイ全体が読みやすいです。
ちなみに、私が最初に覚えた言語はAdaでした。最初に Ada を学んだことには大きな利点が 1 つあります。それは、誰も Ada を使用していないため、他のことをする前に別の言語を学ぶことを余儀なくされ、それによって視野を広げることでした。初心者のプログラマーが抱えている最悪の問題の 1 つは、母国語でのやり方が単に「物事が行われる方法」であると思い込んでしまうことです。新しい言語を学ぶことは簡単で、非常に価値があります。
あなたの教師とほとんどの生徒が Ada を使用している場合は、おそらく Ada を使用するのが最善です。小規模なプログラムにも大規模なプログラムにも、非常に優れた言語です。非常に読みやすく、多くの一般的な間違いから (ある程度) 保護されます。
Ada はソフトウェアエンジニアリング用です。darkestkhan が言ったように、それは「ハックして最善を尽くす」言語ではありません。
Paul Stansifer のアドバイスはとても良いものです。複数の言語を学びましょう。自由に使えるツールがたくさんあることを確認してください。1 つの言語だけに限定しないでください。さまざまな言語を学ぶことで得られる視点は非常に貴重です。猫の皮を剥ぐ方法は間違いなく複数あります。たとえば、Haskell を見てください。問題を解決する方法について、まったく新しい視点を得ることができます。
言語の構文は、プログラミング方法を学ぶ上で最も重要です。難しいのは、現実世界の複雑な問題を、プログラミング言語の非常に限られた範囲で意味のあるものにモデル化する方法を学ぶことです。強力な型システム、タスク モデル、ジェネリック、およびリアルタイムおよび並行プログラミング用の堅牢なツールを備えた Ada は、この仕事に最適です。
特にロボティクスについて質問しているので、John W. McCormick、Frank Singhoff、および Jerome Hugues による「Building Parallel, Embedded, and Real-Time Applications with Ada」を入手するのに適した本かもしれません。とても良い読み物です。
http://www.cambridge.org/gb/knowledge/isbn/item5659578/?site_locale=en_GB
Adaは間違いなく価値があります。Shark8 によって書かれた 2 つのことに加えて、ほぼすべての言語が読みやすさではなく書きやすさに重点を置いていることを付け加える必要があります (ほとんどの場合、一度書いて何度も読むことになります)。また、Ada を取り巻く文化は、メインストリームとはかなり異なります。「ハックして、バグが発生しないことを運に頼りながら」ではなく、プログラムの正しい動作とソースの可読性に重点が置かれています。
年齢に関しては - ああ、さあ - C はさらに年上です。言語そのものの時代について何がそれほど重要なのでしょうか? 年齢の問題について話す前に、最初に Ada 83 に何が追加されたかを確認する必要があります (ヒント: 主流言語は 90 年代後半に Ada 83 の機能セットに到達し始めましたが、多くの機能 [特にサブタイプ] はまだ到達していません)。主流で)。最新の Ada 標準は 2012 年のものですが、それを古いものと呼べるなら、何が「新しい」のかわかりません。
ご存じのように、C++ は正確には春のニワトリではありません。エイダより10年も若いと思います。
さらに悪いことに、C++ と C# はどちらも言語のコアを C から派生させており、実際には C はAda より10 年古いものです。
C 言語は、16KB の RAM が大量の RAM であり、ハード ドライブが産業用エアコンと同じくらい大きかった時代に (プログラマーの仕事ではなく) コンパイラの構築を容易にするために設計されました。C++ は基本的に、OO 機能が追加された古き良き 60 年代後半の C として始まりました。C# は、本質的に、Microsoft が C++ をより Java に似せるように微調整したものです。C# と C++ は、本質的には Ada よりも古いものです。
学ぶべきおしゃれな新しい言語がたくさんあります (そして、ある時点でそれらを学ぶ必要があります)。ただし、C++ と C# はそうではありません。
Shark8 は言語全般として Ada についていくつかの非常に良い点を挙げていますが、質問は特にロボット工学に関するものでした。この点で、私は「気にしないでください」と言うでしょう。レゴから最先端のロボット アームやハンドに至るまで、あらゆる種類のロボット工学を 10 年以上行ってきましたが、Ada を使用したロボット システムを見たことがありません。
結局のところ、ロボット工学は難しいものです。あまりにも難しいので、自分ですべてに取り組むことはできません。そしてそれは、多くの既存のライブラリとフレームワークを活用することを意味します。これは、その言語やインターフェースなどを使用することを意味します。ロボット システムには、特定のアプリケーション用にカスタマイズされたコードのごく一部のみが含まれている可能性があります。あなたの小さな部分をAdaで書き、ラッパーやインターフェースを実行することは可能ですが、残りのコードでうまく機能することができます. しかし、それはたいへんな作業であり、利益はほとんどないことがわかると思います。
新しいロボティクス プロジェクトに着手するとき、私は実用的なアプローチを取ります。既存のツール、ライブラリ、およびユーティリティを調べて、自分のニーズに最も適したものを選びます。それから私はそれがするどんな言語でも使用します。そして、その 95% は C++ または Python です。
それはあなたがこの言語で何をしたいかによります。LispはAdaよりも古く、人工知能内で広く使用されています。あなたが望む言語を学び、あなたが学びやすく、あなたがその概念を理解しやすい言語を学びましょう。その後、さらに進んで、より多くの言語を学ぶことができます。