Стоит ли изучать Ada вместо других языков [c++, c#]?

Если я собираюсь сделать роботов, какой язык вы рекомендуете мне? В нашем университете мы можем выбирать между несколькими языками. Большинство студентов выбирают Ada только потому, что наш учитель использует его.

после некоторых исследований я узнал, что ада старая. О чем вы думаете? Стоит ли этому учиться?

7 ответов


Да. Очень даже, на мой взгляд.

Ada очень хороша в двух точках, которые часто упускаются из виду на других языках программирования:

  • универсальный система: пакеты, функции, и процедуры могут быть универсальными. Это работает вместе особенно хорошо для укоренения сухой [Don't Repeat Yourself принцип]. Да, ты!--9-->can перейти за борт на дженерики, но то, что я видел в проектах (на другом языке), было то, что программирование вырезания и вставки, кажется, больше общий. [и это просто вводит несколько точек сбоя, если ошибка должна быть исправлена на этом месте кода.]
  • родной многозадачности. Одна из замечательных вещей в функции задания языкового уровня заключается в том, что многопоточность не чувствует себя "прикрепленной" и не является громоздким расширением, но интегрирована в язык.

тем не менее, есть и другие веские причины учиться/использовать Ada. Один из них-придирчивый компилятор, будучи таким придирчивым, он заставляет вас начать думать так, что естественно уменьшите ошибки программирования. (Например, запрет на and и or в том же условном.)

другое-понятие подтипов; подтипы противоположны объектам в ООП, вместо того, чтобы разветвляться дальше, вы сужаете тип (это приемлемые значения), тем больше вы уходите от базового типа. {Подумайте об этом в терминах правильных множеств; Integer - ваш базовый тип, Natural-ваши неотрицательные целые числа, а Positive-ваши положительное целое число... и с Ada 2012 у вас могут быть интересные исключения на ваших подтипах, скажем, простые числа, которые являются подтипами положительных (извините за то, что немного расплывчато в этом последнем пункте; я все еще изучаю материал 2012).}

С Ada 2012, вы также можете иметь пре-и пост-условия на ваших подпрограммах; это само по себе может сделать ваши библиотеки более стабильными. (Как и указатели, исключающие нуль.)


совет Питера Норвига, вероятно, уместен здесь:

когда его спросили: "Какую операционную систему я должен использовать, Windows, Unix или Mac?", мой ответ обычно: "используйте то, что используют ваши друзья."Преимущество, которое вы получаете от обучения у своих друзей, компенсирует любую внутреннюю разницу между ОС или между языками программирования.

научитесь программированию за десять лет

все эссе является хорошим читать.


Если ваш учитель и большинство ваших сокурсников используют Ada, вероятно, лучше пойти с Ada. Это очень хороший язык, как для небольших, так и для крупномасштабных программ. Он очень удобочитаем и защищает вас (в какой-то степени) от множества распространенных ошибок.

Ada для программного обеспечения инженерный. Как сказал darkestkhan, это не "взломать и надеяться на лучшее" язык.

совет пола Стансифера очень хорош: изучите несколько языков. Убедиться у вас есть много инструментов в вашем распоряжении - не ограничивайте себя только одним языком. Перспектива, которую вы получаете от изучения разных языков, очень ценна. Существует определенно больше, чем один способ освежевать кошку - взгляните на Хаскелла, например. Вы приобретете совершенно новый взгляд на то, как решать проблемы.

синтаксис языка является наименьшим из обучения программированию. Трудная часть-научиться моделировать сложные проблемы реального мира во что-то, что имеет смысл в очень ограниченный объем языка программирования. С своей сильной системой типа, моделью tasking, generics и твердыми инструментами для реального времени и одновременного программирования Ada идеально одет к этой работе.

поскольку вы спрашиваете конкретно о робототехнике, хорошей книгой для получения может быть "создание параллельных, встроенных и приложений в реальном времени с Ada" Джона У. Маккормика, Фрэнка Сингхоффа и Джерома Хьюза. Это очень хорошо читать.

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


Ада определенно стоит того. В дополнение к 2 вещам, написанным Shark8, нужно добавить, что почти все языки фокусируются на легкости письма вместо чтения (и чаще всего вы собираетесь писать один раз и читать много раз). Также культура, окружающая Ada, сильно отличается от мейнстрима - фокусировка на правильной работе программ и удобочитаемости источника вместо того, чтобы "взломать и заставить его работать, рассчитывая на удачу, что никаких ошибок не будет введено".

Что касается возраста - да ладно тебе, си еще старше. Что такого важного в самой эпохе языка? вы должны взглянуть на то, что было введено в Ada 83 сначала, прежде чем вы сможете даже говорить о проблеме возраста (подсказка: основные языки начали достигать набора функций Ada 83 во второй половине 90-х годов, и многие функции [особенно подтипы] все еще не в мейнстриме). Рядом с новейшим стандартом Ada с 2012 года - если вы можете назвать это старым, то я не знаю, что такое"новое".


хотя Shark8 имеет некоторые очень хорошие моменты об Ada как языке в целом, вопрос был конкретно о робототехнике. В этом отношении, я бы сказал "не заморачиваться". После более чем 10-летнего опыта работы со всеми видами робототехники, которые варьируются от Lego до современных роботов, я никогда не видел роботизированной системы, которая использовала Ada.

в конце концов, робототехника трудно. Так сильно, что вы не собираетесь решать все самостоятельно. А это значит использование множества существующих библиотек и фреймворков. И это означает, что вы будете использовать их языки, интерфейсы и т. д. Ваша роботизированная система, вероятно, будет включать гору кода, только крошечная часть которого будет настроена для вашего конкретного приложения. Хотя можно написать свою крошечную роль в Ada и сделать некоторую обертку или интерфейс, чтобы он мог хорошо играть с остальной частью кода. Но я думаю, что вы обнаружите, что это много работы с очень небольшой пользой.

когда приступая к новому робототехническому проекту, я придерживаюсь прагматичного подхода. Я смотрю на существующие инструменты, библиотеки и утилиты и выбираю тот, который лучше всего соответствует моим потребностям. Тогда я использую любой язык. И в 95% случаев это C++ или Python.


C++ не совсем весенняя курица, вы знаете. По-моему, она на десять лет моложе Ады.

Что еще хуже, как C++, так и c# выводят ядро своего языка из C, что на самом деле составляет десятилетие старше чем Ады.

C был разработан, чтобы упростить построение компиляторов (не работа программиста) в те дни, когда 16KB было много ОЗУ, а жесткие диски были такими же большими, как промышленные кондиционеры. C++ в основном начал как старый добрый конец 60-х годов C с функциями OO, прикрепленными болтами, а C# - это, по сути, настройки Microsoft на C++, чтобы сделать его более похожим на Java. по своей сути, C# и C++ на самом деле старше Ada.

есть много новых языков hip, которые нужно изучать (и в какой-то момент Вы должны их изучить). Однако C++ и C# - это не они.


Это зависит от того, что вы хотите сделать с этим языком. Lisp даже старше Ada и широко используется в искусственном интеллекте. Изучите язык, который вы хотите, Изучите язык, который вам легко выучить и легко понять его концепции. Тогда вы сможете пойти дальше и выучить больше языков.