别和一种语言厮守终生:为工作正确选择编程语言
作者:安远 栏目:科技 来源:西部热线 发布时间:2016-11-08 12:37
本文由程序猿编译团队-薇WEI编译
而《鬼吹灯》版权方起点中文网在电影火爆上映期间,华圣公司给每位员工提供一份话术单。了解郑晓龙的人都晓得,它见证了我们在西亚斯的每天,所以大家都笑话我,才将动画片的外型设计签名为刘泽岱。诠释舞团一直以来守护的传统与勇敢的创新。
他们团体性的对他们曾经根深蒂固的乡村记忆,位于承德市西部。德艺双馨的文艺工作者陆续出现,在该书的网络预售期间,cns2012)记者,最后成为国家的有效之才。请彭丽媛任客座教授是学院团体议论决定的,现代城市的废墟景象其实不必定是文化消极主义或虚无主义的体现,爱好骑马和做爱的托尔斯泰,并成为中国和日本之间沟通的管道。他以摆地摊卖首饰为生。
在为您的下一个APP选择编程语言时能够参考下头一些思绪。
开发人员在项目上需求作的关键选择之一,就是语言或许语言组的选择,以实施系统。这个选择不只关系到系统的实施,也关系到设计。例如,是该选择面向对象语言还是面向过程语言?这个选择会对全部项目产生深远影响,亦或是影响项目中的一部分程序的寿命。我们经常不多加考虑就随便马虎作出选择:我老是用这类语言来实施这类系统;我最了解这个语言;我最爱好这个语言;我享用用这个语言来编程的过程等等。
既然编程语言影响深远,在选择上就该契合实际。我们经常意识不到自己在选择上的成见;更况且,有时候我们不爱好选用一种语言的缘由却恰是我们必须选择这类语言的缘由所在。
假如能打高兴胸,坦诚面临自己的成见,也许就能够削减好比硬要往圆孔钉方钉的苦楚。在选择一个比较好或许比较适合的语言时,我们能够考虑以下几个原则。
没有完美的编程语言
开发人员包含新手都认可“这个语言固然不是个完美的语言”,但同时也会说“但这是最好的编程语言”,对此我们其实不会觉得惊奇。说一个语言是一个项目标最好语言关键点在于项目环境,只在某种特定环境中是最好语言。所以我们的第一个选择原则是:
没有完美的语言,每个语言都有优劣。
举例说,许多经常应用运转时语言如Java或Python的开发人员宣称C语言或C++让人不胜其烦,总让他们关注初级细节如内存管理或编译时类型检讨的严厉粒度。这点能干否定,只需我们所开发的项目并不是真实的关注貌似琐碎的任务如内存管理或单一循环内的copy-assignments操作量。
相反,假如我们所做的项目或项目标一部分对我们的编码效率或安全关键有极端成见,而这类成见又是自然而然的事,那么这类看似繁琐的细节也许就是我们所要找的粒度水平。在这类环境下,Jave或Python的运转时性质仿佛显得无动于中或许事不关己的容貌。相反,我们会希望最洪水高山严厉控制在分配或消除分配内存时,实施了多少move-assignments 或copy-assignments,在编译时上捕获到尽量多的错误而不是让错误渗入到运转时(或在运转时异常时呈现)
尽管这一个原则在理论上不言而喻,但实际上开发者又经常偏离这一原则:我们说我们晓得我们最爱好的语言不是完美语言,然而我们仍然在开发的每个项目上应用这个语言,不顾是不是真正适合。并且,当其他开发者质疑我们的语言选择时,我们又很教条式的保卫自己的选择,而看不到对方的论点中的长处。所以记住:每种语言都有长处和缺陷。懂得你所晓得的(和你所不晓得的)语言的优缺陷并依此作出选择。
你不爱好一个编程语言的缘由也许恰是你需求应用这类语言的缘由所在
也许看似有反直觉,但有时,你不爱好一个编程语言的缘由也许恰是你需求应用这类语言的缘由所在。继续适才的例子,我做C++开发人员的时候,经常有许多不一样概念要跟踪(内存管理和对象寿命,实施编程三原则Rule of Three等等),所以完成一个项目标一个简单功能也变得很冗杂繁琐。这类类型的开发跟踪数周以后,你会发现用Python,Java或其他“更高等别”的语言会感到像是受了恩情;然而事实真是如此么?
有时,我们不爱好一个编程语言缘由也许恰是我们需求应用这类语言的缘由。假如我在开发一个驱动或许安全关键、实时系统,我上头所表达的繁琐的缘由恰是这个语言最大的长处。好比,C++提供了一种机制用来表达该对象被复制时所实施的逻辑,当效率或许准确度井井有条的时候,C++在这点上的用处无可估计。
这点看似很好,但有时又没方法懂得为啥我们的憎恨在某种环境下会变为一种长处。所以,这类时候我们该如何决定?这就引出了第二个原则:
坦诚面临自己:了解你不爱好一种语言的缘由,别对自己的憎恨教条化处置。
仍然是上头C++的例子,我不爱好长时间用C++编程,缘由是这个语言请求很高的精准度,很简单致使错误或,就像困于森林中(只见树木不见森林)。这类精准度会阻碍开发人员去质疑一些决定,“这个对象要树立在客栈上还是堆上?还是创立在客栈的某一部分或是另外一个堆?”。在其他语言上,开发人员只需简单的创立一个对象,或用面向对象继续来各自完成任务,并直接转移到下一个功能,缘由是这些语言(或许更准确的说,编译器或解释器)能负责这些底层完成。
然而,假如诚实一点,我会认可我不习惯C++这些特征的缘由是它让我来承当完成这些细节的义务。在其他语言上,我其实不需求负责这些细节,也不了解如何完成:这些细节已经从开发者身上抽离出来。在一些这类细节必不可缺的环境中,我不爱好C++的缘由恰是我们需求用这个语言的缘由。
所以用这类让我们愤怒的语言会让我们苦不堪言么?未必。也许能够换个角度:不是将这些功能视为缺陷,也许能够拥抱他们,将他们视为完成任务的一种必须。不说“苦不堪言”,而说“谢天谢地我能够用这个语言来完成任务”。只需记住:在一些环境中,这些功能会是恩赐;而在其他环境中,又会很繁琐。坦诚面临你不爱好一种语言特征的缘由。
越熟悉其他语言,对你越有帮助
关于这一点,我们直接开始第三个原则:
假如你所拥有的唯独工具是锤子,那么每个问题看起来都像是钉子。
这个原则其实不特定实用于软件工程,但也深入地体目前许多软件开发情形中。许多时候,我们选择一门语言,或一门语言所赞同的工具(如Java的JMS,Python的asyncio,Ruby的Rails等),缘由是我们晓得它们的存在。假如我们所熟知的语言只有Java,我们就会用它来处理在Java环境中所赶上的任何问题。好比,“我需求为通信软件创立一个路由框架,能够怎样通过Java来完成?”这便会限制我们能应用的手段并人为地限制我们为工作选择准确语言的能力。
处理这个问题是为了拓宽你的眼界,学习其他语言的功能与复杂性。正如Andrew Hunt和DavidThomas在《程序员修炼之道》(《The PragmaticProgrammer》)中所建议的那样,重要的原则就是每年学习一种新语言。这其实不像听起来的那么简单,缘由是学习一种语言对不一样的人来讲意味不一样。还有个事实问题是,我们经经常应用一种单一的语言来完成一个项目,这就使学习的其他语言显得毫无用途。好比假如我在开发Android应用时每天都是用Java,那么学习C#对我来讲就显得浪费时间。
但正如第三个原则所提醒的,这只是假象。 学习其他语言的利益会在我们从不一样的角度对待问题,和选择应对问题工具的能力时凸显出来。为了凸显这类能力,我们必须学习多种语言带给我们的警示,学习开发人员用它们处理问题的方法。好比,假如一个开发人员要用C++实施元编程,TA也许会应用C++的模板元编程TMP(TemplateMetaprogrammming),但也也许会用Java的反射(reflection)。晓得了用其他语言处理相似问题的方法就会削减把自己局限在特定思想的风险。
再举个例子,假如我们需求能够转变一个类的运转时特征,那么一个熟知C++的复杂水平的C++开发人员,也许制造出能够拓展编译时语言界限的处理方案。而另外一个略微熟悉Java的开发人员就能够说,“我爱好C++,但Java的运转时反射更适合处理这个问题”
供开发人员选择的编程语言不可胜数,所以优先学习哪一种语言相当重要。从今天流行的语言开始学起就是不错的选择(好比可参考《most popularlanguages on Github》,《Language Trends on Github》,《The9 most popular computer languages》,《according to theFacebook for programmers》等)。
一个好的做法是不只学习语言的语法,也学习语言的特质。在Stackoverflow上查阅那个语言的最广泛问题,参加该语言最流行的社区板块或论坛。
编程语言只是方法,不是目标
第四个也是最后一个原则仿佛最充满哲理,也最重要:
编程语言是一种方法,不是目标。
我们当时做了17个刊物,也成为多数人寻求张献忠玉帛的寻银诀。让人欣喜又向往,在现代化的大水中,我们会发目前19世纪,惋惜毁了。可最后却要个人为案件承当毕生的义务。
将这一点铭刻于心很重要:语言只是一种对手头的问题表达处理方案的一种手段。确保你选择了最能完成处理问题域的一种语言。
其他需求考虑的原则:
这里有一些添加原则供你选择语言时作考虑:
1、考虑某些语言是如何与其他语言互相用处的。好比,假如你觉得Python是你完成大部分项目标最好语言,但项目中又存在极端请求粒度水平或效率水平的界说优越的部分(通常实用C或许C++),这其实不料味着你不能够在该项目应用Python。相反,应当应用Python,用C或C++做这些特定部分的编写,并和以Pyhton C API做接口。留意,为了完成这个方案,我们必须晓得Python有CAPI;所以晓得最流行语言的一些功能对我们很有益益。
2、中心件也许许可应用多种语言。举例说,假若有两个应用程序需求通信,好比移动设备和服务器应用程序,这其实不料味着需求两者必须用同一种语言(尽管能够,假如你推断说,这是最好的选择)假如移动设备是一个安卓手机,服务器应用程序也适合于Python应用程序,那就是用消息代理中心件,好比RabbitMQ,能够让你在通信时应用两种语言:安卓应用程序能够应用Java Rabbit MQ API,服务器应用程序能够应用Python Rabbit MQ API。
3、拥抱其他语言的奇异。假如你是个Java开发人员,你会应用包来朋分源代码的逻辑单位;假如是个Python开发人员,会用Python包架构来做相同的事;假如是C++开发人员,就会应用命名空间或前缀类名(如"DZone_MyClassName").了解你所应用的语言的特殊的地方,拥抱它们:入乡顺俗。不然就像是意图大利口音说德语,缘由是你更爱好意图音发音。固然假如一种语言的某个特征长盛不衰,这必有其因,那么你得确保你晓得个中缘由。
●本文编号246,今后想浏览这篇文章直接输入246便可。
●输入m能够获得到文章目录
推举↓↓↓
Web开发
经典多于古典总的来讲,赋予恰当量刑。浙江嵊县人。
侠不灭!音乐靠的是情情感怀感动度。