[5]_技术那么多,我该如何选择

[5]_技术那么多,我该如何选择

自从计算机发明开始,到现在的移动应用的普及,各类应用也是品类繁多,而使用的技术也是非常之多,同时新技术的出现与旧技术的淘汰也是频繁更替,所以在所有行业中,IT技术人员的学习需求是最旺盛的,基本上隔几年就需要学习新的技术和解决方案,尤其是作为互联网开发技术人员。

工欲善其事,必先利其器

技术的选择很重要,直接影响到后面的工作进展和效率,而对应用而言,又会影响到扩展,执行效率,维护成本,升级空间等等。在选择技术的时候还是很有讲究的,可以从以下几个方面进行衡量:
1. 针对的应用种类
所有的技术出现及存在,都是为了要解决某些问题,而存在的。如Java最早出现,是为了解决C++不好使用的情况下,而出现的,却不想发展很快,不仅仅解决了之前的问题,也一并将其它某些领域的问题都解决了。Flash的出现,是因为早期要做矢量二维动画,早期叫Future Wave。除此外,还有一些广泛使用的语言,如C、C++、C#等,涉及的行业很广,但是并没有一种语言能够解决所有的问题,当然,别跟我说机器语言,要么你用机器语言写个淘宝试试,看要多少年搞出来?
在每个特定领域都有比较合适的语言来处理,如桌面语言(Window环境)比较合适用C++、C#等,Web应用合适用Java、PHP、Ruby等语言。服务器端合适使用Python、C等。所以在选择合适的语言之前,先分析这款应用的种类,然后调查此类应用的同类产品使用的是何种开发语言,一般能够很快有几种备选方案。
2. 有开发周期的情况下,首选自己熟悉的
往往我们在开发某个系统(Or Web应用)的时候,有一定的期限,在通过上面第一步的分析之后,我们首选的应该是选择自己熟悉的语言,既可以减少开发时间,又能够快速解决问题。如果需要选择一门新的语言情况下,我建议选择学习成本较低的语言。
3. 选择较新的,不容易快速淘汰
还有个原则,现阶段选择的语言,尽量选择较新稳定的产品,这样在一段时间内不会出现被淘汰的情况,但是不建议选择过新的技术,一方面可能稳定性方面没有被证实,另外一方面知识积累的程度还不够。如,现阶段web开发,Nodejs应用很热,但是也不建议将网站都全替换成Nodejs,笔者认为应该从它比较擅长的部分,如前端的部分,开始进行尝试,进行部分移植。
4. 选择热门大众的,很容易找到解决方案
在开发新系统时,也应该尽量使用此类应用较热门的语言,如CMS建站,一般首选PHP,虽然Python的Web Framework也很强大,Django、Tornado、Web.py等,但是在国内,使用Python建站的中小型公司依然是少数,毕竟门槛较低。
5. 资金有限的情况下,首选开源的
对于一些集团企业不差钱的主,在开发新系统的情况下,首选商业成熟的方案,一方面开发周期较短,另外一方面由于有公司性质的技术支持,也使得应用质量有保障。但是在一些初创型企业中,因为资金有限,尽量选择开源免费的产品也是有效的省钱方案。
6. 要和选择的系统融合
有时候,我们新开发的应用,是建立在原有系统的基础之上,这时候选择技术语言的时候,我们就应该多考虑兼容性,即使不选择与以前的开发语言一样,我们也需要考虑是否有合理的方案进行兼容,如新老系统使用Restful接口进行数据交互,或者调用同一个数据库进行数据交互等方案。
7. 所有的技术只是为了解决问题而存在
说到最后,选择某种语言的标准,还是在具体分析问题后,选择合理的编程语言。

八仙过海,各显神通

下图大致描述了我们在开发某个系统的时候,每个层面可能涉及的语言及相关技术,图是在网上找的,总结的不错,暂时先用着了:
多层架构

下面我们再看下2015年5月份来自Tiobe的编程语言的排行榜,
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
上面的排名虽然与我国的实际情况有一定出入,但是总体趋势都差不多,所以从某种程度上,也反映了技术趋势。
1~20
21~50

当然也有人列举了一张各种编程图的进化图谱,图很大,涉及的语言也很多:
编程语言图谱

一些热门的语言就不做介绍了,既然那么多人用,肯定被证明在某些方面还是满足应用了。当然编程语言只是其中的一方面,相应的各类容器、中间件、服务器也很关键,后面的文章中我们会提到如何使用,现在就列一些涉及的软件:
来源于:http://www.oschina.net/project
==HTTP服务器==:Apache、Nginx\Tengine、Tornado、LightHttp、Nodejs、IIS
==应用服务器==:Tomcat、Jboss、Jetty、WebLogic、Resin、GlassFish
==缓存服务器==:Memcached、Redis、Cassandra、Tokyo Cabinet、NCache、Dynamo
==反向代理服务器==:Nginx(做代理用)、Squid、Varnish、Traffic Server
==负载均衡==:HAproxy、LVS、Keepalived、Gearman
==储存系统==:FastDFS、Ceph、GlusterFS、Tachyon、Hadoop(基础架构)、MogileFS、TFS

在不同的场景之下,我们将会选择不同的服务器或者相关的中间件来进行业务处理,在后面的架构章节将会详细说明。

永不磨灭的九大语言

来源:
http://www.infoworld.com/article/2840235/application-development/9-cutting-edge-programming-languages-worth-learning-next.html

==Erlang:面向实时系统的函数式语言==
Erlang 最初是由瑞典电信设备制造商爱立信为通信应用(电话交换机)设计的。爱立信的开发者鼓吹 Erlang 的9个9指标的性能,声称 Erlang 能够传输99.9999999%的数据。这时 Erlang 才开始引起人们的关注。
Erlang 的秘密是它的函数式设计范例。大部分代码都被强制运行于它的虚拟机中,这很好的避免了其他系统的干扰。函数都在虚拟机内部运行,运行在小的“类似沙箱模式的轻量级进程中”,并且只能通过消息传递相互通讯。你不可能仅仅抓取一个指针就够快速该变指针在栈中的状态。你必须保持在调用层次内部来保证函数状态的一致性。设计上或许有些不妥,但是这样很好的保证了错误向外扩散。
这种模式简化了运行逻辑,让运行时代码决定同时能够运行什么任务。并发处理也很容易管理,运行调度程序能够减少上下文切换。Erlang 迷们喜欢吹嘘“在Web服务器上同时运行2000万”处理器“(轻量级进程)。假如你正在构架一个类似移动电话交换机的实时收费系统,但是并没有足够的空间存储数据,那么 Erlang 正好符合你的需求。

==Go:简单、动态==
谷歌不是第一家调查集合语言的组织,最终发现语言杂乱,复杂并且效率不高。2009年,谷歌发布了它自己的解决方案:一门静态类型的语言,类似于 C 语言但是包含了其所不具备的特征,它让程序员避免了类型声明和被 malloc 调用锁迷惑。通过 Go 语言,程序员能够受益于塔的简洁、已编译的c语言的结构以及动态脚本语言的的易用性。
同时,Sun 和 Apple 也以相同的方式创建了 Java 和 Swift 语言,相应的,Google 做出了一个重要的不同的决定:Go 语言的发明者希望它能足够简单以至于每个程序员都能轻松的掌握。Rob Pike,发明者之一,向 Ars Technica 豪言道:长远来说,通过将事件分开处理,你能够获得更多。因此,Go语言还有一些灵活的特性,泛型,类型继承,断言,只通过干净的简单代码块操作字符串、数字以及哈希表。
据报道这门这门语言在巨大谷歌帝国内部被很好的接受,在其它方面也获得了认可,动态语言 Python 和 Ruby 的爱好者接受了编译已编译语言的严密性。假如你想要获得 Google 的青睐,并且需要建立服务器端的业务逻辑,那么 Go 会是一个好的选择。

==Groovy:提供 Java 的脚本支持==
Java 世界是异常的灵活。但是你需要仍忍受它”穿个背带裤又要系皮带”的方式,例如,声明,每个变量的类型,分行代表每行结束,类的访问只是返回一个值。但是 Go 语言瞄准了动态语言的吸引人之处并且将它自身紧紧的与 Java 相集成。
Groovy 弃置了 Java 乏味的引号和分号方式,提供一种简单的编程习惯,也能用于扩展现有的 Java代码。运行在 jvm 上。不仅仅如此,Groovy 紧紧的月 JavaJAR 相结合,所以你能和好的利用一有的Java 代码。Groovy 运行起来像一门动态类型语言,并且能够访问静态类型 Java 对象的数据。
Groovy 程序眼认为他们技术与 Java 程序员,同事也是 Groovy 程序员。基于 Java 代码,能够提供非常多的功能。充分使用 Java 拥有的闭包,操作符重载,多态性。不要忘了使用问号来做空指针的判断的简易性,这比使用 if-then 语句来判断要简单得多。因此,简洁的语法,使程序员敲击键盘次数减少了。谁会不喜欢呢?
最后,令所有 Java 程序员羡慕的动态语言的简单特点让他们能够减少工作量,有更多的娱乐时间,但是又不跳出 Java 圈。

==OCaml:复杂数据层次把戏==
一些程序员不喜欢声明变量,于是他们创建了动态语言。其他人喜欢声明一个变量的特定类型,integer,string 或者是 object。对于他们来说,大多胡编译型语言都对类型声明提供了支持。
这是一些喜欢详细声明变量层次类型的,甚至谈到要创建“algebras”(代数)类型。他们想象列表和多种类型的表能用来表示复杂、多层次的数据。他们提到了多态,模式匹配原型以及数据封装。这只会他们期望的复杂的,高结构化类型、原型以及原原型世界的基础。
对于他们,OCaml,一门有多个编程社区为了让前述想法被广泛接受而共同努力的语言。OCaml 提供类对象的支持,自动内存管理以及跨平台。甚至苹果App商店也提供了 OCaml 的 App 支持。OCaml 的理想的工程可能是建立一个符号数学网站来教授代数。

==CoffeeScript:使 JavaScript 更简洁==
技术角度来说,CoffeeScript 并不是一门语言。这是一个将你写的代码转换 Javascript 的预处理器。但是它看起来有所与众不同,因为它缺少大量的标点符号。你可以人为他是 Ruby 或者 Python,尽管内部表现像 Javascript。
当封号厌恶者被强制用浏览器支持的 Javascript 编程的时候,Coffeescript 开始流行了。改变浏览器工作的脚本语言是不切实际的,于是他们写了他们自己的预处理。结果是程序员们能够写干净的嗲吗并且让 CoffeeScript 将那些代码转译成各种符号的 Javascript 语言指令来操控浏览器。
少了分号紧紧支持开始。通过 CoffeeScript,你甚至不需要通过var来声明变量。声明函数也不需要function 关键字或者大括号。事实上,大括号在 CoffeeScript 中也不太被使用。代码是如此的简洁,以至于相比于哥特式教堂,它看起来像现代主义建筑物。这就是为什么很多新的 Javascript 框架通常是用 CoffeeScript 写的然后编译成 Javascript。

==Scala:JVM上的函数式编程==
假如你想要让你的代码有面向对象的清晰层次结构又喜欢函数型编程模式,那你有很多选择。假如你熟悉 Java,Scala 会是你的一个选择。
Scala 运行在 JVM 上,并将所有的清晰的函数式编程的约束转变成 Java 支持的语法以及联接到具体的 JAR 文件。假如那些额外的 JAR 中有副作用和其他不可避免的令人讨厌的头痛代码,那么使用Scala 刚刚适合业务场景,你的代码会变得很清晰。
Scala 是静态类型的。编译器负责在编译时推断出具体类型,对象类型和原始类型没有区别,因为Scala 想让每一个对象都继承自 Any。Scala 的语法比 Java 更加简洁。Scala 程序员称之为“低礼节”。你可以把驼峰式命名方式遗留在 Java 世界了。
Scala 提供了很多函数型语言的特征,例如懒初始化,尾递归,常量。但是为了能在 JVM 中运行,做了适当的修改。基本的原类型或者列表变量(像lists和哈希表),可以是可变或者不可变的。尾递归通过简单的例子运行,而不是必须通过详细声明的可变递归。以上是 Scala 的全部实现思想,但是因为需要运行在 JVM 上,具体实现会有所限制。Scala 能够所有 Java 平台上运行,能很好的与已存在的开源 Java 代码混用。这对于许多实践性问题是一种权衡。
假如你需要将数据放在一千个处理器的集群中处理,并且有一堆遗留的 Java 代码,那么 Scala 是一个很好的解决方案。

==Dart:不像 JavaScript 的 JavaScript==
流行并不是被吹捧出来的。可能有越来越多领域使用到了 JavaScript,“事君数,斯辱矣;朋友数,斯疏矣”,有时候太过于亲近反而会导致疏远,疏远了然后就开始寻找替代。Dart 是 Google 出品的一门适用于 Web 浏览器端的新语言。
Dart 并没有从 JavaScript 基本概念中脱离出来。它工作在浏览器中,操作所有的 DIV 和我们所见的Web 对象。Dart 的作者仅仅只是为了清除 JavaScript 中所有恼人的部分,使之变得更简洁。底层结构并没有太大的变化。因为他们希望将 Dart 代码转成 Javascript 来提高运行速度。
高亮可能在许多 JavaScript 类库中提供的额外功能。你不需要通过 jQuery 或者其他通用类库来修改部分 HTML 页面。Dart 提供了默认的支持。也许一些熟悉的数据类型以及语法的速记技巧能够少敲几次键盘。Google 通过提供开源的支持大多数主流平台的开源工具来答题推广 Dart。
假如你正在建立一个动态的 Web 应用。并且已经对于 JavaScript 厌烦了,Dart 提供了清晰的语法结构来创建有多种 Web 资源数据的 Div 块。

==Haskell:通用纯函数式编程语言==
经过超过20年的时间,一直研究函数型编程的学术研究者开发了 Haskell 语言,一门用来表达他们对于副作用的坏处的想法的语言。这是一门更加存粹的表达式函数型语言,通过精细的机制来处理 I/O Channels 和其他不可避免的副作用。其余的代码应该是相当有用的。
Haskell 社区相当活跃,那里有很多 Haskell 的变体等着你去探究。有些是单机版的,其他的是通过与像 Java(Jaskell,Frege)或者 Python 那样的主流语言集成的。大多数的名字显示他们来自苏格兰,那里是 Haskell 研究,或者是哲学家/逻辑学家(他们是许多 Haskell 思想的启蒙者)的温床。假如你认为你的数据结构和类型太复杂了,你可以考虑用 Haskell。

==Julia:给Python界带来了新的消息==
科学计算领域有一群 Python 的爱好者,享受 Python 带来的简单语法以及能够避免陷入乱用指针和字节的细节中的自由自在。除了所有的优点,Python 通常在科学计算中处理大数据所表现的令人发狂的运行速度一值是一个诟病。为了提高运行速度,很多科学家转而使用c语言来编写核心的运行代码。但是这带来了新的问题,用两种语言写的程序很难修改或者扩展。
Julia 是这种复杂问题的一种解决方案。它的作者带来了零 Python 程序员欣赏的干净语法并且做了稍稍修改使之能够在后台编译代码。通过这种方式,你能够像 Python 那样打开个记事本或者命令行来编码,但是你写的任何代码都会被即时编译。
Julia 真是非常了不起的语言。它提供了非常强大的类型分析引擎能够帮助优化代码。假如你喜欢元编程,这门语言提供了足够的扩展接口。它最大的附加价值是通过集群发布并行算法的简单机制。其内置了大量的数学算法库用来做数据分析。
最好的消息应该是它的运行速度。它的许多基本标准的运行速度是 Python 的30倍,甚至比 C 语言还快一点,假如你需要处理大量数据并且喜欢 Python 的语法,那么你最好快去学学 Julia 吧。

上面几个语言,在我们平时开发中较少出现,一般接触较多的还是C、C#、Java、PHP等,这些代表了一种简便实用思想,但是并不一定是最佳方案,我相信在不久的将来,会出现更加优秀的语言,随着硬件的突破,未来的编程手段和方式,以及思考的方法可能都有着质的飞跃。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值