如果我要制作机器人,您会推荐我使用哪种编程语言?在我们的大学,我们可以选择几种编程语言。由于我们的老师使用Ada,大多数学生都选择了它。
经过一些调查,我发现Ada已经过时了。您有什么想法吗?学习它是否值得?
如果我要制作机器人,您会推荐我使用哪种编程语言?在我们的大学,我们可以选择几种编程语言。由于我们的老师使用Ada,大多数学生都选择了它。
经过一些调查,我发现Ada已经过时了。您有什么想法吗?学习它是否值得?
是的,我个人认为Ada在两个常被其他编程语言忽视的方面非常出色:
尽管如此,还有其他很好的理由去学习/使用Ada。其中一个理由是挑剔的编译器,通过这样的挑剔,它强迫你开始以自然减少编程错误的方式思考。(例如,在同一条件中禁止使用and
和or
。)
另一个理由是子类型的概念;子类型与OOP中的对象相反,它不是随着派生越来越分散,而是随着距离基本类型越远,缩小类型(它可以接受的值)。{可以将其想象为适当集合;整数是你的基本类型,自然数是你的非负整数,正数是你的正整数...而且在Ada 2012中,你可以对子类型进行有趣的排除,例如是素数的子类型属于正数(对于最后一点我有些含糊,因为我还在学习2012版的内容)。}
使用Ada 2012,你还可以在你的子程序中设置前置和后置条件;仅此一点就可以使你的库更加稳定。 (像排除空指针一样)。
Peter Norvig的建议在这里可能很有用:
当被问及“我应该使用哪种操作系统,Windows、Unix还是Mac?”时,我的回答通常是:“使用你的朋友们在用的。”从朋友那里学习的优势将抵消任何操作系统之间或编程语言之间的内在差异。
整篇文章都值得一读。
顺便提一下,Ada是我学过的第一门语言。学习Ada的一个主要优点是:没有人使用Ada,因此我不得不在做其他事情之前学习另一种语言,并因此获得了更多的视角。初学者程序员可能遇到最糟糕的问题之一是认为他们第一种语言中所做的事情就是“正确的”。学习新语言是容易且非常有价值的。
Ada绝对值得一试。除了Shark8所写的两点外,还应该注意到几乎所有的编程语言都将重点放在书写简易性上,而不是阅读(大多数情况下,你只需要编写一次,但要进行多次阅读)。此外,围绕Ada的文化与主流有很大的区别 - 关注程序的正确运行和源代码的可读性,而不是“快速搞定并期望没有引入错误”的做法。
至于年龄 - 噢,拜托 - C语言甚至更老。语言本身的年龄有什么重要性呢?在谈论年龄成为问题之前,你应该先看看Ada 83中最初加入了什么(提示:主流语言直到90年代后半期才开始具备Ada 83的功能集合,并且许多功能[尤其是子类型]仍未被主流采纳)。另外,最新版本的Ada标准发布于2012年 - 如果你认为这已经太旧了,那我也不知道什么才算是“新”。
C++并不是一个新生的语言,它比Ada晚了十年。
更糟糕的是,C++和C#都是从C语言中派生出来的,而C语言实际上比Ada还要老十年。
C语言最初是为了让编译器的构建更容易(而不是程序员的工作),当时16KB的内存已经算是很多了,硬盘的大小只有工业级空调那么大。 C++基本上是在60年代后期的C语言上添加了面向对象的特性,而C#本质上是微软对C++进行了调整,使其更像Java。 从本质上讲,C#和C++实际上比Ada还要老。
现在有很多时髦的新语言需要学习(你应该在某个时候学习它们)。 然而,C++和C#并不是这些语言。
相较于其他大多数编程语言,Ada更偏向工程化。与普通编程语言不同,Ada提供了强大的数据工程能力。也就是说,在Ada开发者开始开发算法之前,他们会先设计(工程化)数据。
Ada类型模型允许设计精确的数据。一个简单的例子是: type Channel is range 1..135;
在这个整数数据类型的每个实例中,都属于预设约束范围内的值。这极大地简化了使用这些实例的算法。
底层原则是,当数据被精确地工程化时,相关算法将会更加简单。这个特性在其他语言中很少见,在Ada中却是常见的实践。
通过支持这种数据工程化作为整个软件工程流程的子集,我们可以显着降低整体软件设计的圈复杂度。
我的例子只是Ada完整数据工程能力的冰山一角。然而,正是这种数据工程能力使它成为安全关键软件的最佳选择,在21世纪的软件环境中,这是它最常用的领域。
这取决于你想用这种语言做什么。Lisp比Ada还要古老,广泛应用于人工智能领域。学习你想要的语言,学习对你来说容易学习和理解概念的语言。然后你可以进一步学习更多的语言。