停止学习的人都老了,不管是二十岁还是八十岁。
人们在学习编程时犯的第一个错误是过于担心选择的语言是否正确。
现在你可能已经意识到有很多编程语言。事实上,每次你重新看一个语言你都会发现很多新事物。
你应该试着学习大家都在谈论的新语言吗?明年还会谈论吗?JavaScript到底是怎么回事?
当你一拍后脑勺然后打算跟风的时候,你需要看到以下两个残酷的现实。
选择一门语言需要知识。
你可能已经懂得了一门语言,或者你可能正在学习你的第一门语言——无论如何,选择一门新的语言学习,并不是一件容易的事情。基本上,选择一门语言,你应该有很高的视野,但是这需要几年的时间才能拥有。在这篇文章中,我将给出我的建议来帮助你做出正确的选择。
羊群并不总是对的
最近最流行的语言可能会在一段时间以后就会不再大火。同样的道理,世界上最晦涩难懂的语言可能完全适合你开始你的职业生涯,因为它符合你的专业技能和你的生活目标。
“But—howcanthosemanyprogrammersbesowrong?!”但是—很多程序员好像都在犯错
我的观点是程序员也是人,他们也可能是错的。相信我,这在我的职业生涯中发生过两次。相信自己的判断,做出决定。
也就是说,让我们看看在选择编程语言时需要考虑那些因素,无论是个人使用还是有组织的大型项目。
语言的灵活性很重要。
语言的“灵活”是指可以轻松地将新特性添加到现有程序中。灵活可以是添加一组新函数,或者使用现有库添加新特性。考虑以下与灵活性有关的问题。
我可以开始使用该语言的功能而不包括一个新的库吗?如果不能,语言库中是否有这种功能?如果它不是一个原生功能,也不能作为库使用,那么从头构建这些特性需要做什么工作?
在做决定之前,您应该知道程序是如何设计的,以及哪些特性被保留下来作为将来的改进。
尽管比较一些语言在技术上是不正确的的,但是还是来比较一下Perl和Python。Perl内建了正则表达式支持作为一个随时可用的特性。对于Python,您必须从标准库导入。
请永远记住,根据经验,“随需应变”很重要,就像软件每隔几个月就会有多个版本的改进。总是会有一个“补丁”之类的东西被导入来添加一些新的东西,更新现有的功能,等等。
如果这种情况没有发生,这个编程语言就不会有长久的发展,不要花时间学习这种语言。
选择一种可以解决问题的语言
除了明显的性能要求外,该语言还必须具有良好的技术质量来满足您的需求。你需要选择一种语言来解决你的问题,让你的工作更高效。
例如,X语言可以轻松帮你应对超过万的访问量的处理,但是Y语言可以使你用更低的成本和更快的速度处理万以内的访问量的处理,你怎么知道你是否会达到五百万的访问量呢?也许一开始使用X语言成本太高,在接触到那么多用户之前,你的公司说不一定已经失败。
因此,您确实需要选择一种适合您的用例的语言,一种考虑了所有情况的语言。不需要选择最适合的一个,这是因为不可能总是对不同的需求进行全面考虑,因为即使是这样,你也可能不知道哪个需求对您最重要。
将技术需求考虑为过滤器,你选择的语言必须通过他们来过滤,但它不需要是最好的语言。
选择表现最好的语言
“表现最好”实际上是用词不当。你永远不可能拥有一种在所有情况下都表现最好的语言。
例如,考虑一个用Java代码和Python编写的web应用程序。性能数据将使你得出这样的结论:在相似的环境下,用Java语言编写的应用程序应该比用Python编写的应用程序运行得更快。
但是运行环境呢?如果是在相同的环境下那还好。如果web应用程序在云中,运行在谷歌应用程序引擎上,情况会怎样?你现在可以得到几乎无限的处理能力,而且这两个程序几乎同时返回结果。
选择因素现在围绕着代码行和可维护性。
另一方面,我们有领域特定的科学语言/框架,比如Matlab,它专门处理各种任务,它使用特殊的线性代数和其他数学库来优化性能,它支持矢量化,等等。Matlab适合于原型设计或简单的研究任务,但它的商业化和庞大的软件包限制了它的跨平台性和高可用性。
也就是说,当目标环境没有提供足够的扩展空间时,语言的性能应该很重要。手持设备就是这种环境的一个例子。
最后,良好的社区支持是重要的
正如好的软件需要社区的支持来帮助它成长一样,编程语言背后也应该有一个强大的社区。拥有活跃论坛的语言很可能比没有任何帮助的语言更受欢迎。
良好的社区契合度有很多优势:开发人员以你希望的方式思考,而且他们通常具有你需要的非编程技能或知识。这意味着你可以花更少的时间来学习语言,并且遇到错误的信息风险更小。
社区可以很好的支持语言发展和提供丰富的附加库。单打独斗的日子一去不复返。如果语言有更多的使用者,我们就不用为了解决一个小问题而浏览所有的语言文档。
SAP是社区重要性的一个很好的例子。SAP开发人员网络(SDN)是社区驱动的工作。SDN的主要目的是帮助程序员定位不包含在SAP标准发行版中的模块和程序。它的结构是分散的;作者维护和改进他们自己的模块。分叉和为相同的任务或目的创建竞争模块是常见的。
毕竟,构建优秀软件的前提是建立在协作的基础上。协作越多,软件就越健壮,就这么简单。
正如卡罗琳戈恩(CarolineGhosn)所说的那样。
Collaborationislikecarbonationforfreshideas.Workingtogetherbubblesupideasyouwouldnothave