在项目实践中 要如何选择编程语言?

作者&投稿:离何 (若有异议请与网页底部的电邮联系)
如何给项目选择最合适的编程语言?~

每次开始一个新项目,无论是一个独立的程序还是现有计划的一个组件,都会面临着一个应该选择什么样的编程语言的问题。只考虑之前用过的编程语言或者现在最流行的语言的话,你很可能会得到一个糟糕的结果。所以你应该实时评估自己的选择,并不断寻找更好的替代方法。评估一种语言的同时,你还需要考虑项目的整体架构,并不是项目的所有部分都适合用同一种语言来写。选择编程语言的过程,实际上也是你项目初步设计中的一个重要组成部分。如何分解和连接组件也非常受语言选择的结果影响。有些项目很容易就能看出最合适的语言,相信你能够自己得出结论。当然语言也会随时间而改变,所以两年前的最佳选择也许现在已经不再适用,而当初首先被排除的语言反而变成了最佳选择。你的团队有过什么样的经验?虽然显而易见,但是不得不说,你也许应该选择自己最熟悉的那门语言。虽然尝试新的编程语言是一项伟大的创新,但非研究性项目并不是适合试验的地方。如果你需要预测出项目的时间表,并且避免大规模的未知变数,相信你不会愿意使用任何不熟悉的语言。这并不是说团队里的每个人都必须是这门语言方面的专家。你甚至可以让团队的一小部分不熟悉这门语言的人加入开发中来保证其他人能有较高的效率。仅仅因为不熟悉项目所需要的语言就把有经验或者有才华的程序员排除在开发团队之外实在是非常愚蠢的行为!好的程序员都有不错的适应能力。当然,即使优先选择熟悉的编程语言,肯定也有让你不得不使用陌生编程语言的时候。有没有计算开销大的操作?比如视频处理,图形渲染,密码学,统计分析,信号处理这些对原始处理能力有巨大需求的功能。他们要执行多长时间直接影响到计算机芯片的使用效率。对于这些模块,你几乎肯定会需要一个静态类型和编译的语言。或者简单地说,这些地方你需要快速的编程语言。不论这是多么罕见的问题,这肯定是会出现的。通常这些性能密集组件是有限的,而且可以很容易地模块化并且和其他语言组合。会涉及到许多子流程和文件管理吗?很多软件都是为了自动处理重复的手工劳动而存在的。过程中一步都已经有了个非常适合的程序,你需要做的就是把他们组合在一起,这就是软件开发系统管理员的主要关注点所在,当然也包括很多保证系统和高级运行的。在这里,你需要执行其他程序并且进行文件管理,而脚本语言灵活又简单,并且与生俱来地实现了这些功能,毫无疑问是你的最佳选择!有紧张的资源限制吗?虽然在一定程度上,现在硬件已经够用了,但是在某些情况下或者对于某些应用来说,硬件还是十分受限的!这一点在嵌入式设备中尤其明显。然而不是所有的编程语言都适合受限的硬件环境下开发,你需要一种编出来的程序能够在那样的环境下运行的语言。有时候运行时的内存限制是主要问题,有时候可能加载过程的问题更大!也许你会遇到这样的问题:你的应用需要从EEPROM或者网络中初始化,那么你可能需要静态链表或者未修剪的库。这并不是排除了使用基于VM的语言的可能,相反,有时你甚至需要一个小型的VM。是否有明确的需求?不管是什么语言所写,好的程序总是能够快速地重构和调整。一些语言本身就可以建立快速原型。而且很多商务项目完全没有规范,或者极其粗糙,这种情况下,客户在看到最初产品前完全不知道它应该是什么样子。你会需要不断地修改,直到每个人都满意。如果你需要在会议中频繁修改程序来演示或者是为了作一份它的详细报告,你会发现快速原型非常重要。动态语言在这里很有优势,它可以很容易地结合多个不相关的库。当然,隐藏“细节编程",比如内存管理,也非常有助于建立快速原型。产品的生命周期有多长?不是所有语言都是足够稳定的,许多年轻的动态语言在升级中会变得不向后兼容或者大量修改它的核心代码。瞬息万变的项目,决不会真的有这些变化的一个问题,事实上,许多项目甚至还会从这些变化中受益。因为时间向后兼容性成为一个问题,寿命短的项目也会因此变成没有人关心的项目。如果你的产品寿命长达五年,十年,甚至二十或更多年,无法向后兼容的问题可能会成为你的噩梦。我不认为你会想继续使用过久的编译器和和其它古老的工具,特别当它们还跟老的硬件挂钩时。项目支持新的版本或者新产品肯定会让你受益。这个时候你最需要的肯定是一个有标准委员会管理,并以长期支持和向后兼容为目标定制的稳定的语言。需要支持什么平台?不是所有的语言都适用于所有平台。如果目标设备不支持你喜欢的语言,那么你肯定是没法使用它的!当然你也不能信任实验性的支持。你喜欢使用C语言,而目标OS上也有C编译器也并不一定意味着它会很合适。定制化的芯片或者甚至是GPU之类有时只支持部分语言产生出来的二进制文件。芯片组兼容性问题并不唯一,对于需要同时工作的其它软件也一样。比如你需要在用户的浏览器中运行代码,那就没有多少语言可供选择了。某些消费设备供应商也只允许部分语言在自己的平台上使用。 服务供应商往往只专注于某些语言和框架,而并不在意别人的因此带来生的牺牲。如果你打算为Linux编写设备驱动程序,你会发现它的内核小组只支持一种语言。你可以宣传你的想法会带来怎样的好处,但如果你想支持某些特定平台,别无选择,只能遵守该平台的意愿。是否会有大量的位操作?文件格式和协议相关的工作往往会需要对字节和位操作。您将需要转换格式到更高级的格式,然后再序列化成一个紧凑的格式。一些算法也会需要对数据进行位操作。最低级的线路协议也会根据你的行为对比特流进行操作。做这样的工作,你需要一个能够很容易地进行位操作并且能够提供合适数据类型(比如无符号整数类型)的语言。但也并非所有的二进制操作都这么麻烦,某些二进制结构就很简单,甚至经过高级包装的函数都可以对它们进行操作。你需要仔细审查自己的工作对二进制操作的需求,然后选择一个不太麻烦的编程语言。是否涉及到某些特定领域?不是所有问题的最佳语言都是一样,有很多非常具体的领域存在的专业语言。比如:人工智能、文本解析、数据转换、专家系统、数学、财务分析等等。领域特定语言往往以节省大量的编码工作,而不会产生大的缺陷,所以你应该尽可能使用它们。在这里,你不妨选择专业语言来代替你熟悉的编程语言。领域特定语言的使用在一定程度上也限制了你可以在项目中使用的其他语言。一些被翻译成另一种语言,而另一些则可以作为可调用模块。无论哪种方式,你还需要某种方法来整合。如果存在一个优秀的库也适用这一原则。无论它依赖哪种语言,我都建议你去使用它!结论要作出一个明智的选择,你会需要了解足够多的语言。如果你仅仅关注某一门编程语言,你会被这门语言以及它的思想牢牢拴住。但相比于语言来说,它们的风格可能更重要。良好地组合静态和动态语言/函数式和命令式/高级和低级语言,再考虑具体领域环境的特点,你才能评估出最适合答案。在选择语言之外,你还需要足够的经验来最佳地利用你最后确定的语言。当然上面也只是给你一个粗略的参考。很不幸的是第一条规则,也就是团队熟悉什么语言,通常才是实际上左右语言选择中的最终结果的因素。尽可能地把项目分解开来,然后给每一个组件寻找一个最合适的语言,至少以我多年经验来看,组合使用多种语言从没有带来过什么坏处。你可能会认为,只考虑上述因素也并不一定能确定下语言。事实上,这样通常注意是排除不合适的语言而不是增加新的选择。项目按组件拆分,给每个组件选择最合适的语言,最终你选择语言的标准会越来越严格,直至剩下一两个最佳答案。但如果你不分解项目,你能得到只是一两个相当糟糕的选择,通常按模块分解项目会是更好的选择。原文链接:mortoray.com本文为CSDN编译整理,未经允许不得转载。

C:使用开放和关闭的花括号将一些表述组合在一起的有结构的goto-less语言。适用于编写简短并且快速的程序
许多C程序库调用却很陈旧,且很容易用于一些后续语言中

相关书籍:《C How to Program》,《C Programming: A Modern Approach》和《C Primer Plus》

C++:是将原始数据类型和算法聚集到更容易创建对象模型的内容中的抽象数据结构

完全支持面向对象(OO)的范式,带有常见数据结构和算法的设计精巧的程序库,可移植、跨平台,巨大且深层次的算法会让代码变得更难读,Steve Heller的《C++: A Dialog》,Bruce Eckel的《Thinking in C++》系列。
Objective-C:带有动态执行时间的对象导向型编程语言
支持各种开发技巧,功能,程序库以及许多能够凸显该语言的额外功能,引用计数垃圾收集器,与非常复杂的内存管理系统相互协作;该语言支持处理2D和3D图像(基于OpenGL)的广泛嵌入式程序库,帮助许多小型游戏开发者通过使用强大且原生的解决方法创建自己的第一款游戏。

专属于苹果的语言,因此你需要拥有一台苹果计算机,运行最新的Mac OS X版本才能开发你的应用。
希望可以帮到您,谢谢!

  事实上,你很有可能采取一些大众化的做法,去引用在上个项目里所使用过的一些语言。或许你是一位对新鲜事物比较敏感的潮人,你会选择一些最新最酷的语言。几年前,很多很棒的年轻人已经蓄意待发。而现在他们让我意识到他们创造的节点是多么的棒,以及clojures已经达到了一定的程度。上次我还注意到,他们图灵完备的语言跟我的已经具有相同的解决问题的能力。实际上,他们还坚持认为他们的语言给了图灵语言更强的表现力,更快的编写以及更低成本的维护。   合适的工具,合适的工作   古人云:工欲善其事,必先利其器。如果你需要自动运行一些命令执行的维护任务,可使用一些擅长脚本编程的语言:如bash,perl,,hell even ruby;不要用Java. 如果你要解决的问题需要一个在微软操作系统的环境里能够无缝整合的桌面客户端,可以使用C#,不要用Java (Java桌面的粉丝,先冷静一下)。如果解决的问题需要处理大量的XML,以及你喜欢处理层积追踪,那当然要使用Java.   通常来说最大的区别归结为规则系统的复杂性。如果你从事的工作具有很多规则系统算法上的复杂性,使用一些能够擅长于表达的东西:一种函数式语言,像haskell 或者F#。或者就像90%的网页应用那样,做的就是数据的输入和输出,你需要一种具有较好的面向对象能力的语言去尝试塑造你的领域:Java 和 C# 都是很好的选择,以及还有几乎所有的其它的现代语言。   Scala  或许你非常痛恨自己想要妥协:为什么当你能选择两个的时候,而只选择函数的或程序的其中一个?为什么会遗漏这些语言的特色,要知道在过去的50年里你能拥有它们全部,而现在是煎熬在一团糟的语言上?是的,如果这听起来像你,你可能认为你是一位对新鲜事物敏感的潮人,但是,事实上你错失了数年的良机:是时候去了解一些Scalas 了。   我猜测Scala 能够如此流行的大部分原因是它最终为所有沮丧的Java开发者带来了它们想要的语言工具。现在Java实在是一种超级反应迟钝的语言,使用它工作时感觉非常的失望。有些人转换去使用C#,我也开始喜欢使用新的华而不实的语言工具。它们有让代码变得更好吗?很多的新语言的引进,提升了复杂性和增加了丰富性,但也使得代码很难被理解和不容易后期的维护。   重点是,Java是一种玩具语言:白痴都可以写出像样的合乎规范的Java. 不过麻烦是,Java这类玩具语言,编程的人无论他们有多牛,每个人还是被迫去编写冗长的愚蠢的Java 代码。这也使得很多技术牛人不能通过编写难以破解的废物来证明他们的水平。我也担心Lambdas将对Java代码库的可维护性带来冲击,以致每个人开始寻找新的令人困惑的方式来表达一切。   语言和能力之间没有必然的联系:我遇到了一些非常聪明的Java开发人员和一些十足可怕的自认为消息灵通的开发者。我宁愿尽可能多的雇佣乐于使用我们所使用的技术的优秀的开发人员,而不是去限制我能召集到人才的机会,坦诚的说,目前已经很受限制了。   我听说到的另一个争论是,你所使用的技术会限制应聘者为你工作的意愿 --- 一些开发者就想在指定的平台工作,比如clojure. 其实,他们阻碍了自己成长。我宁愿要那些主动想去解决有趣问题的人员,不用去考虑语言,而不是那些只解决垃圾问题的自以为是的潮人。如果你是在银行工作,碰到的都是很胡扯的问题吗?当然,可以直接用一种自以为是潮人的语言如果它能够帮助你雇佣到足够的傻子。它会使很多人才远离我。   其次,你是否可以在遇到问题时比较容易的获得支持帮助?Java的开源社区非常棒---当你遇到一个问题,他们已经至少有15个不同的解决方案,其中有一些甚至可行。如果你使用C#,那么你的选择会非常有限---但是将会有选择,有些不是来自微软的支持。如果你使用最新的潮人语言,猜猜会发生什么? 你就只能靠自己。不过对于有些人来说,这正是潮人语言所吸引他们的地方。但对于我们这些想要把工作做好的人来说,这是一种痛苦。


蓬莱市15395658398: 在项目实践中 要如何选择编程语言? -
采邹乐息: 事实上,你很有可能采取一些大众化的做法,去引用在上个项目里所使用过的一些语言.或许你是一位对新鲜事物比较敏感的潮人,你会选择一些最新最酷的语言.几年前,很多很棒的年轻人已经蓄意待发.而现在他们让我意识到他们创造的节...

蓬莱市15395658398: 如何给项目选择最合适的编程语言? -
采邹乐息: 每次开始一个新项目,无论是一个独立的程序还是现有计划的一个组件,都会面临着一个应该选择什么样的编程语言的问题.只考虑之前用过的编程语言或者现在最流行的语言的话,你很可能会得到一个糟糕的结果.所以你应该实时评估自己的...

蓬莱市15395658398: 新手如何选择编程语言 -
采邹乐息: 这个问题是每一位学习编程的初学者都会遇到而且很迷茫的问题,在这里发表一下个人观点,仅供参考: 1.每一种程序都有其发展的历程,没有任何一种程序是万能的,比如说我们都知道的C语言,开发C的初衷就是为了让程序员能脱离那种原...

蓬莱市15395658398: 我们要如何选择编程语言呢?
采邹乐息: 就我所知的.NET和JAVA分析一下给你听,以供参考:.NET微软出的一款应该在WINDOWS平台上的开发语言,使用方便简单,是当前热门的编程语言.JAVA是SUN公司出的高级开发语言,他的开发环境不会局限于WINDOWS平台,跨平台性能十分强大,但是学习起来自然要费事一些.不过,正常来说现在市场的需要量JAVA多于.NET,但是JAVA要求的学历和经验也相对要比.NET要求的高一些.

蓬莱市15395658398: 在有c语言的基础下,如何选择适合自己的编程语言 -
采邹乐息: 刚开始接触c语言感觉没有兴趣,我觉得蛮正常的.因为c语言能做的嵌入式或者其他可以作为一个项目来开发的,你现在还没有掌握一个系统的知识体系.另外以后还会学到C++、C#、java、.net,c语言只是一个入门基础,就好像我们小时候学...

蓬莱市15395658398: 小白程序员如何选择合适自己的编程语言 -
采邹乐息: 什么小白不小白的?千万不可以认为自己不能够学好计算机编程语言!!!因为我本人就是学习计算机软件专业的,我告诉你的一个经验就是:如果你要想真正掌握好计算机编程技能,那么必须要做到:一定、且多亲自上机实践才行!!绝对不...

蓬莱市15395658398: 做网站哪种编程语言好 -
采邹乐息: ASP,ASP.NET,PHP,JSP这些是网页编程常用的语言,究竟哪一种语言最适合做企业网站,哪一种语言最安全?做网站用什么编程语言好? 1.安全性 从安全性方面来看,相对来说,ASP的安全性要低些.但这只是相对的,在网站编程方面,安...

蓬莱市15395658398: 软件开发人员间来选择哪种编程语言情景比较好,c++,java,还是c#和移动设备开发 -
采邹乐息: 是前景吧...我是学java的,月薪是5K.【难易度】 一般来说C/C++不分家的,一般会C都会C++,C的难度较高些,什么数据结构、算法,要有较好的数学功底;至于java,门槛比较低,只要思维逻辑不差,都能学得来,我数学就很差,学java...

蓬莱市15395658398: 如何选择下一门编程语言 -
采邹乐息: 编程语言有很多.要看你学习什么领域的编程.不同领域需要学习的编程语言不同.应该先从你兴趣开始,有兴趣再决定编程领域,有了编程领域在决定语言.不同的语言对应着不同编程领域,只有确定这些信息了,才知道要看什么书籍.如果你...

蓬莱市15395658398: 想做程序员不知道学哪种编程语言? -
采邹乐息: 编程语言有:java、C# 、Basic、Pascal、C语言、C++、AAuto、易语言、SQL、汇编等 实际中常用JAVA、C++、C语言、SQL、C#这些都是高级语言,而汇编是低级语言,不建议学习.这些编程语言,精通任何一种,薪资都很客观. 1. C相对难学,薪资相对较低. 2. java是相对比较好学,而且就业前景好,应用面广泛,薪资也相对较高的编程语言.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网