如何掌握多种编程语言?

1、编程语言特色

有人说 “数据结构 + 算法 = 程序”,那么按照这个逻辑,一门编程语言就是:“运行环境 + 编译/连接 + 语法 + 类库 + 框架 = 编程语言”(固然这是露出在外的冰山一角)。每门编程语言都有深层次的理论,包括编译、解释、执行一系列过程当中的基础知识。算法

拿Python来讲,基础类型对应的是C语言实现的一个Struct, 带来的好处是在Collections(集合)中能够为每个元素设置不一样的类型,同时坏处是,同一种类型的Collections中就显得类型信息变得冗余,致使在大数据量的执行过程在空间和时间上变得没有效率,因此Numpy库就出现了。Python做为“胶水”型语言,能够把追求执行效率的实现让给其余语言来作,固然CPython GIL问题也常被诟病(编程语言执行环境选择多线程仍是单线程,并如何解决优化执行效率而引起的相关问题【多线程下的锁,单线程下的排队等待】,能够对比JavaScript在单线程执行中引入的Event Loop)。编程

编程语言设计及实现方式就决定了它自己的优点和弱点。编译执行的效率、智能化(好比:JVM会根据方法的执行的次数来优化编译。提一下,LLVM框架在各大编译器中都有应用和借鉴);并发多线程/进程(随CPU多核心的出现,充分挖掘利用变得重要)、IO操做、跨平台、类库支持等,成为工程化技术应用的选择、比对的标准。好比Java,虽然语法不那么时尚,模块化底层的支持还老拖延(Java 9 中支持,应用还待类库大面积支持),由于累积将近30年的优秀开源库及解决方案,依然是当前技术应用的热门语言之一。设计模式

下面谈谈掌握多种编程语言的现实须要:性能优化

一、应用场景的须要

分层与解耦、协议与平台无关性、跨平台RPC框架、伴随分布式架构(ESB、SOA、Microservices、Service Mesh)大面积应用,异构融合互通。如今掌握多种编程语言,在应用场景中快速实现新的需求,就变的颇有竞争力。固然深层次了解编程语言的实现和执行,有助于代码优化及性能Bug问题的解决。但不少实际应用场景中尚未达到开源框架或类库的设计瓶颈,没有急迫须要去重写或优化开源框架和类库的实现。问题多出在业务逻辑的实现和优化上面。业务逻辑的分解和细化也涉及到产品部门对需求的理解和经验的应用上,咱们会在另外一篇文章中谈到。数据结构

二、编程范式和模型的延续性

POP(面向过程)、OOP(面向对象)、FP(面向函数)的范式思想都是有几十年的高龄了,Java8中才出现lambda这种高阶函数的样式。编程范式在很长的时间内并无多少变化,编程语言实现编程范式的策略也不尽相同,有的是毅然决然地贯彻一种范式(好比:Haskell、Lisp 等),有的是温和融合方式(好比:Scala、go),有的是渐进方式(好比 :Java)。这里多说一句,Java的发展有其历史包袱,可还记得其泛型的实现也有些苟且。多线程

编程模型在各类语言中也各有特点,这就是它们在相同的处理操做上不一样的表现形式,这也是应对不一样场景需求的灵活性所在。若是你把范式当作接口或父(基)类, 而各类语言的具体功能(模型)实现就能够理解实现的多态了。模式化的认知思惟是人类的特色,这有助于咱们概括总结(也是大数据分析及AI学习的基础思惟)。架构

2、掌握编程语言的方法论

如何掌握多门编程语言?咱们分为四个方面去引导,对于非开源性的语言这里就不举例(.net 体系经过.net core开源实现跨平台功能【注:之前只有跨语言功能】,但.net CLR的具体实现而言,在自家Windows平台上具备执行效率的优点,加上一体化的Visual Studio IDE 环境,对入门至关友好,但对一些比较深刻的问题探究就具备黑盒效应。因此这里就很少加讨论)。并发

一、从架构实现的角度,选型、应用中掌握。框架

二、从DevOps的角度,CI/DI的编译、部署、维护中掌握less

三、从性能优化解决BUG的角度,深刻原理中掌握

四、从业务逻辑开发中,深刻掌握

下面就详细按我的经验去展开谈谈这四个角度。

一、架构实现(总体和选型)的角度

先谈总体架构的角度,脱离实际应用谈架构大可能是体现知识面和对原理了解、及经验的积累。花点时间来了解架构发展历程,通用划分方式是:传统架构(单一混合型)、分层架构、分布式架构、超大型分布式架构(主架构下混合其它架构形式)。这样的划分并不是是表示越日后越先进,只是从适应发展(规模、用户数量)的角度来看问题。工业设计中有个叫设计余量的东西,留的过多则代表潜能浪费,也就是说,使用价值没有最大化。过分设计也是目前广泛存在的问题(开源项目随取随用,并无恰如其分的使用或部分使用,每每是紧随潮流的选择)。

这里提一下两个模式:中心模式和分布式模式(一致性的CAP / FLP / BASE理论,PAXOS及变种/ RAFT / ZAB等协议),一般是采用二者结合的方式达到效率平衡(选举中心节点、协调各工做节点)。也有决然的分布式应用,好比区块链,效率始终是个瓶颈,算力攻击也发生过。

这里不主讲架构自己,因此回到选型上,来肯定那种框架和中间件能帮助本身实现总体应用架构。了解和对比选型对象,理解其设计理念、架构,以及其所使用的编程语言带来的优点。同时也是本身学习了解选定框架和中间件编程语言的契机。

二、DevOps的角度

Amazon(亚马逊) 最先提出 You build it,You own it ! 如今流行的DevOps概念时尚起来也花了很多时间,随着Docker这种轻容器的兴起,提升了总体运行环境的迁移性,Microservices(微服务)、Serviceless(无服务、云服务商提供可伸缩调用的函数封装、在线IDE) 、Envless (运行环境无关)也使得维护的成本减小,非资深开发人员维护本身写的服务和代码也变得可行、而且正在流行。

在一切变得自动化以前,“如何设置的问题” 还会深刻到基础和核心的部分,因此在运维上会牵涉到脚本、系统功能的使用,也就会有了解和熟悉的须要。

三、适应性和性能优化的角度

目前来看一切都很美好,但棘手的问题也随之而来,屏蔽一切复杂以后,傻瓜式编程老是缺乏能力去解决适应性和性能优化的问题。软件思想在应对不断的变化中发展,对事物的抽象,总会归结到模式上,流行框架能大规模的应用也就对应着要使用模式来适应多种变化(从生活中来,到生活中去的鲜活例子)。

框架具体应用中可能要用效率来换取灵活性。作好具体案例的适用、优化好性能也是平常工做,对框架实现语言的了解和掌握也就是应有之义了。

四、从业务逻辑开发的角度

这是主要的掌握语言的方式,熟悉语法、深刻理解数据结构和算法实现;熟悉编译、执行环境,参与测试流程;解决疑难杂症;学习设计模式和架构,都是你们熟悉的过程。

3、总结

在熟悉一门编程语言后,范式和模型的经验可以迁移不一样的语言上。从一个熟悉环境到一个陌生的环境,总会有不适应,这都是自我意识设置的局限,其实没有什么是学不会的!


原创文章,转载注明出处
相关文章
相关标签/搜索