2012-09-17 4 views
18

私はロボットを作るつもりなら、どの言語を私に勧めますか? 私たちの大学では、いくつかの言語の中から選択できます。私たちの先生がそれを使っているため、ほとんどの学生がAdaを選んでいます。別の言語[C++、C#]の代わりにAdaを学ぶ価値はありますか?

若干の研究の後、私はアダが古いことを知りました。あなたの考えは? それを学ぶ価値はありますか?

+12

「古い」について - 最新のAdaの改訂版はAda 2012です。 – NWS

+1

なぜ「代わりに」ですか?どうして "横にならない"? – rightfold

+0

C++は古くはありませんか? OK、それはADAより若いです。 3年。 :D –

答えて

24

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

  • 一般的なシステム:

    エイダは、多くの場合、他のプログラミング言語で見過ごされている2つの点で非常に良いですが、パッケージ、機能、および手順は、すべての一般的なことができます。これはDRY []の原則を育むのに特に効果的です。はい、あなたはですはジェネリック医薬品に乗っていますが、私が(他の言語の)プロジェクトで見たことは、カットアンドペーストプログラミングが一般的であるようです。 [そのコードの箇所にバグを修正する必要がある場合は、複数の障害箇所が導入されるだけです。]

  • ネイティブマルチタスク。言語レベルのタスク機能の大きな点の1つは、マルチスレッドでは「タックした」と感じることはなく、扱いにくい拡張機能ではなく、言語に統合されていることです。

つまり、Adaを学ぶ/使用するその他の理由があります。 1つは、厄介なコンパイラです。それは、あなたがプログラムのエラーを自然に減らす方法で考えるようになることを強く強く要します。 (同じ条件でandorの禁止のように)

もう1つはサブタイプの概念です。サブタイプはOOPのオブジェクトとは逆ですが、それ以上のデリビジョンを分岐するのではなく、基本型から離れるほど型を狭める(受け入れられる値です)。 {適切なセットについて考える。整数は基本型、Naturalは非負整数、正は正整数です...Ada 2012では、PositivesのサブタイプであるPrimesというサブタイプについて興味深い除外項目を設定することができます(最後の点で少し曖昧ですが、まだ2012年のことを学んでいます)。

With Adaサブプログラムには事前条件と事後条件を設定することもできます。これだけでライブラリをより安定にすることができます。 (ヌル除外ポインタと同じように)

1

これは、この言語で何をしたいかによって異なります。 LispはAdaよりも古く、人工知能の中で広く使われています。あなたが欲しい言語を学び、習得しやすい言語を学び、その概念を理解しやすいようにしてください。その後、さらに進んでもっと多くの言語を学ぶことができます。

+0

さて、センサー、モーターなどの電子部品を使用した高度なロボットを作ります。例えば、C#で始まって、他の言語のadaやビットを少し学習するのではなく、完全にそれを学ぶ方がいいでしょうか? –

+1

@ Alex90 - あなたは1つか2つの小さな学校のプロジェクトからどんな言語も完全に学ぶつもりはありません。 –

19

ピーター・ノーヴィグのアドバイスはここにおそらく関連している:

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

Teach Yourself Programming in Ten Years

全体エッセイは良い読み物です。

ちなみに、Adaは私が学んだ最初の言語でした。ラーニング・アダには大きな利点がありました。誰もアダを使用していなかったので、他のことをする前に別の言語を習得しなければなりませんでした。プログラマーの初心者が抱える最悪の問題の1つは、最初の言葉でやり遂げる方法が、ただのものであるという考えであるということです。新しい言語を学ぶことは簡単で、非常に貴重です。

+5

他の言語の視点では+1! – NWS

4

Adaは確かに価値があります。 Shark8によって書かれた2つの事柄に加えて、ほぼすべての言語が読書ではなく書込みの容易さに焦点を当てているということを付け加えなければならない(ほとんどの場合、一度書いて何度も読むつもりである)。また、Adaを取り巻く文化は、プログラムの正しい作業とソースの読みやすさに焦点を当て、主流とはまったく異なります。

年齢について - ああ、来てください - Cはさらに年上です。言語そのものの年齢については何がとても重要ですか?主な言語が90年代後半にAda 83の機能セットに達するようになりました。多くの機能(特にサブタイプ)はまだありません。主流で)。最新のAda標準の横には2012年からのものがあります。古いものを呼び出すことができれば、私は "新しい"ものが何かを知りません。

8

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

Adaはソフトウェア用工学です。 darkestkhanが言ったように、それは "ハックと最高の言語のための希望"ではありません。

Paul Stansiferのアドバイスは非常に優れています。いくつかの言語を学びます。あなたが自由に使えるツールがたくさんあることを確認してください。自分自身を1つの言語に限定しないでください。あなたが異なる言語を学ぶことから得られる視点は非常に貴重です。間違いなく、猫を肌に触れる方法は複数あります。例えば、Haskellを見てください。あなたは問題を解決する方法についてまったく新しい視点を得るでしょう。

言語構文は、プログラミング方法を学ぶのが最も難しいです。難しい部分は、複雑な現実世界の問題を、プログラミング言語の非常に限られた範囲で意味をなさないものにモデル化する方法を学ぶことです。強力なタイプシステム、タスキングモデル、ジェネリック、リアルタイムおよび並行プログラミングのための強固なツールで、Adaは理想的にこの仕事に適しています。

ロボティクスについて具体的にお尋ねしているので、優れた本は、John W. McCormick、Frank Singhoff、Jerome Huguesの「Adaを使用した並列アプリケーション、組み込みアプリケーション、リアルタイムアプリケーションの構築」です。それは非常に良い読書です。

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

3

C++は正確にあなたが知っている春の鶏ではありません。私はそれがすべてアダの若い10年だと思う。

さらに悪いことに、C++とC#の両方は、Cから言語のコアを派生させています。これは実際には十年です。年齢はです。

Cは、16KBが多くのRAMであり、ハードドライブが工業用エアコンと同じくらい大きかった時代に戻って、コンパイラの構築を容易にするように設計されました(プログラマーの仕事です)。基本的にはC++はOO機能を搭載した60年代後半の良いC++として始まりました.C#は本質的にマイクロソフトがC++を改良してJavaに似たものにしています。 コアでは、C#とC++は実際にはAdaより古いです。

多くのヒップの新しい言語があり、学習する必要があります(ある時点で学習する必要があります)。しかし、C++とC#はそれらではありません。

2

Shark8は、一般的に言えば、Adaについてのいくつかの非常に良い点がありますが、特にロボットに関する問題です。この点で、私は "気にしないでください"と言います。レゴから最先端のロボットの腕と手の範囲のあらゆる種類のロボットを経験した10年以上の経験を経て、私はアダを使ったロボットシステムを見たことがありません。

今日の終わりには、ロボット工学は難しいです。あなた自身でそれに全力で取り組むつもりはありません。これは、既存のライブラリやフレームワークを多く活用することを意味します。これは、あなたが言語やインターフェースなどを使用することを意味します。あなたのロボットシステムにはコードの山が含まれている可能性があります。 Adaにあなたの小さな部分を書くことが可能ですが、コードの残りの部分でうまくいくように、いくつかのラッパーやインターフェースを実行することができます。しかし、私はあなたがそれがほとんど利益のない多くの仕事であることがわかると思います。

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

+5

この場合、教師や他の学生の大部分が使用しているように、あなたの "実用的な"論理は* Adaのために議論するでしょう。 –

関連する問題