zoukankan      html  css  js  c++  java
  • 编程语言吐槽之Java与C

    包含各种偏见和武断,请谨慎阅读。

    为什么在学校学习的C,拿到企业生产中不起作用?

    而为什么企业级的程序员,依然对C/C++无法掌控?在算法各方面不够精湛?

    根本原因还是应用场景的不同。企业级的开发,主要是为了能够快速出活,能够快速将业务需求转换为可执行的代码,立马部署上线开始工作。这就需要Java这样的重型机枪。在这里,重点是能够快速地做出一个“转换”,把复杂的business model快速转换为代码的“表达能力”。

    而C/C++所解决的问题,其实更多的是底层,也就是为上面的“快速构建”和“客户需求的转换能力”,提供底层库的支持。所以,它的视角和范围,根本不是去关心如何表述客户的业务需求,它也不擅长去表述业务需求关系。

    它真正擅长的是表述计算机的运转关系!所以在这个层级,你的算法各方面就开始有了用武之地。因为在这个层次上,你的优化、算法的效率,都和计算机如何运转息息相关。例如:你的代码如何被加载进内存,在CPU内又是如何调用相应的指令集,内存分配上又会经历哪些过程,这一个个的环节都关乎你想要去追求的效率。

    另一方面,高层语言和底层语言又是相互结合的:上层的Java这些确实善于描述business model,但是,没有底层库的支撑,它的表述无异于一纸空文。

    而下层的库,如果没有上层的语法糖和high level的抽象,就不得不一直局限在计算机无尽的运转细节里,永远无法跳出来,为经济生产、为解放生产力、发展生产力的现实用途服务。

    所以,回到最初那个问题,为什么你学校学习的C那些在企业级生产中不管用?因为它的适用范围是为了解决计算机底层的问题。而企业级应用的高级程序员,他擅长的其实是快速准确地把现实的客户诉求,转换为可工作的代码,并能够掌控大规模的代码量,这是他的核心竞争力。但他其实少有关注底层的实现,少有去关心如何配合计算机的机械性地运作方式。

    基于此,很多人对语言的评价是极其不中肯的。

    有的人说,Java真是简单,傻瓜式的语言,没啥意思。可这就完全搞错了重点,简单易学,正是能够快速表达客户需求的一个大前提。而精髓呢?精髓是看你如何运用这个工具,一方面能够精准地表述出实际的业务模型,另一方面是看你能够用这个工具,能够如何巧妙地组织各个模块,使得它们能够具备扩展性、可重用性,从而能够应对快速变化需求的挑战。

    另一部分人说,C太不安全了、没法做好的异常、没法做精准的泛型、更无法做漂亮的继承。可是,C的应用范围就是底层啊。这里提到的一堆面向对象的理念,其实是现实世界的运作思维模式,但这个不是计算机机械式的思考方式。机械式的思考模式,就是汇编、就是语句跳转、就是内存分配。在这个体系里,其重点就是为higher level制造工具,为你设想的那些面向对象的思维概念制造工具。

    这就好比是,你拿到的是一块原木,你非得去抱怨,它怎么不长成圆盘形,为什么不长成方形,为什么不长成螺丝帽的形状,这都不能用好吧?!这TM不废话么!你的工作不就是对这些天然的原木做工,把它们制作成可以供其它生产环节使用的工具么。

    一个是快速地开发出一个程序,另一个是开发出快速的程序。这就是本质的差别。

    前者需要的是贴近人的、现实的思维模式,需要用到的从现实到计算机的转换越少越好。

    后者需要的是贴近计算机的思维模式,越是能够从计算机运转机制角度思考问题越好。

    近期回顾

    减法 、认知、核心
    一次艰难debug的反思
    J2EE导论 | 疑惑篇

     

    如果你喜欢我的文章或分享,请长按下面的二维码关注我的微信公众号,谢谢!

       

    更多信息交流和观点分享,可加入知识星球:

  • 相关阅读:
    自动化:Appium运行成功,取得一个小的胜利
    调优案例1
    HTTP请求方式中8种请求方法(简单介绍)
    Java中基本类型和引用类型(简单介绍)
    @WebListener 注解方式实现监听(eclipse和idea)
    Git免密码提交
    在idea配置jetty和创建(包、文件)javaWeb以及Servlet简单实现
    emmet工具使用和技巧
    Markdown基本语法总结
    viewport原理和使用和设置移动端自适应的方法(移动适应电脑)
  • 原文地址:https://www.cnblogs.com/kid551/p/9302366.html
Copyright © 2011-2022 走看看