包含各种偏见和武断,请谨慎阅读。
为什么在学校学习的C,拿到企业生产中不起作用?
而为什么企业级的程序员,依然对C/C++无法掌控?在算法各方面不够精湛?
根本原因还是应用场景的不同。企业级的开发,主要是为了能够快速出活,能够快速将业务需求转换为可执行的代码,立马部署上线开始工作。这就需要Java这样的重型机枪。在这里,重点是能够快速地做出一个“转换”,把复杂的business model快速转换为代码的“表达能力”。
而C/C++所解决的问题,其实更多的是底层,也就是为上面的“快速构建”和“客户需求的转换能力”,提供底层库的支持。所以,它的视角和范围,根本不是去关心如何表述客户的业务需求,它也不擅长去表述业务需求关系。
它真正擅长的是表述计算机的运转关系!所以在这个层级,你的算法各方面就开始有了用武之地。因为在这个层次上,你的优化、算法的效率,都和计算机如何运转息息相关。例如:你的代码如何被加载进内存,在CPU内又是如何调用相应的指令集,内存分配上又会经历哪些过程,这一个个的环节都关乎你想要去追求的效率。
另一方面,高层语言和底层语言又是相互结合的:上层的Java这些确实善于描述business model,但是,没有底层库的支撑,它的表述无异于一纸空文。
而下层的库,如果没有上层的语法糖和high level的抽象,就不得不一直局限在计算机无尽的运转细节里,永远无法跳出来,为经济生产、为解放生产力、发展生产力的现实用途服务。
所以,回到最初那个问题,为什么你学校学习的C那些在企业级生产中不管用?因为它的适用范围是为了解决计算机底层的问题。而企业级应用的高级程序员,他擅长的其实是快速准确地把现实的客户诉求,转换为可工作的代码,并能够掌控大规模的代码量,这是他的核心竞争力。但他其实少有关注底层的实现,少有去关心如何配合计算机的机械性地运作方式。
基于此,很多人对语言的评价是极其不中肯的。
有的人说,Java真是简单,傻瓜式的语言,没啥意思。可这就完全搞错了重点,简单易学,正是能够快速表达客户需求的一个大前提。而精髓呢?精髓是看你如何运用这个工具,一方面能够精准地表述出实际的业务模型,另一方面是看你能够用这个工具,能够如何巧妙地组织各个模块,使得它们能够具备扩展性、可重用性,从而能够应对快速变化需求的挑战。
另一部分人说,C太不安全了、没法做好的异常、没法做精准的泛型、更无法做漂亮的继承。可是,C的应用范围就是底层啊。这里提到的一堆面向对象的理念,其实是现实世界的运作思维模式,但这个不是计算机机械式的思考方式。机械式的思考模式,就是汇编、就是语句跳转、就是内存分配。在这个体系里,其重点就是为higher level制造工具,为你设想的那些面向对象的思维概念制造工具。
这就好比是,你拿到的是一块原木,你非得去抱怨,它怎么不长成圆盘形,为什么不长成方形,为什么不长成螺丝帽的形状,这都不能用好吧?!这TM不废话么!你的工作不就是对这些天然的原木做工,把它们制作成可以供其它生产环节使用的工具么。
一个是快速地开发出一个程序,另一个是开发出快速的程序。这就是本质的差别。
前者需要的是贴近人的、现实的思维模式,需要用到的从现实到计算机的转换越少越好。
后者需要的是贴近计算机的思维模式,越是能够从计算机运转机制角度思考问题越好。
近期回顾
《减法 、认知、核心》
《一次艰难debug的反思》
《J2EE导论 | 疑惑篇》
如果你喜欢我的文章或分享,请长按下面的二维码关注我的微信公众号,谢谢!
更多信息交流和观点分享,可加入知识星球: