当前位置: 首页 > news >正文

关于语言的争论

最近社区关于语言的争论很多,有点看热闹,有的凑热闹。不管是C++,C以及C#与JAVA。好像不比个高低不罢手的态度。

第一语言是一门技术,而程序员是靠这个吃饭的 

首先从程序员的角度,语言是一门技术,而程序员是靠这个吃饭的,不然公司也不会找你。(这里的程序员不包括分析、架构、设计等) ,所以首先会确定学习那门语言,然后在入门以后就会要求提高,最后要成为大师的话就要掌握精髓啦,做到掌中无剑,心中有剑的崇高境界,这是个人技术修行的过程。同时作为一门技术,在实践的过程中,就需要思考简单与简洁,开发效率,运行性能,团队开发等问题。

 

第二语言从层次上来讲只有两种-面向机器与面向用户(技术人员)

编程语言在发展过程中可谓百花齐放,从最初的汇编语言,C语言,C++,Java语言与C#等。就算现在,也是天天冒出一门新的语言。或者那天你心情好,自己创造发明一种语言也行。但是本质上来讲,编程语言是桥梁,在人与计算机是起到沟通交流的作用。我们程序员喜欢语言来与计算机交流,聊聊天。殊不知编程语言本身也有自己的爱好,有的语言是面向机器的,比如汇编语言以及C语言,那整个的一个在管理计算机的五脏六腑,管理着机器没有部件的运行时状态。而现代的语言为了是人能够更好里按人类自己的角度来思考,把这里底层的东西抽象了,更加地面向技术人员,或者说更加面向用户。JAVA与C#就是这样的语言。

 

第三不同语言处理的问题领域不同 

 每门语言都有自己的背景以及目标,因此在使用计算机编程语言处理不同的领域问题的时候,需要有选择性的去选择适合解决这个问题的编程语言或者选择解决方案。只有这样才能找到合适的。

那么C语言作为有一定的面向机器,又有一定的机器抽象,而且运行效率很高,比较适合超大规模的用户访问量,或者对性能有极端要求的,使用这个语言应该是没错的。

JAVA和C#虽然不是同根生,但是至少也是堂亲。 两者站在的角度都是从用户处理实际的问题角度出发,目的的提高开发效率以及维护效率,而对运行性能没有极端要求的软件。不过运行时性能可以以更多的机器设备来换取。

 

想想我们编一个普通的web应用程序可能会用ASP.net, RAILS,php等开完成,不会用C或C++来实现吧。因为编程语言是由具体的应用场景的。但是当后台服务器需要处理一个高并发,高性能的任务的时候,可能会使用C或者C++来实现这个任务。也即是编程语言也需要合作协调。

 

第四企业更注重平衡和谐 

前面讲到一些面向用户的用户由于使用了太多的抽象,所以在运行时候的性能就成了瓶颈。而企业更注重的是保护现有的投资,改善开发效率,提高程序的可维护性以及软件性能的平衡,不能单单从一个角度来看一门语言的优劣。所以在实际的开发过程中也会针对具体的问题有不同的方案。

 

还有就是企业选择什么语言作为主流的开发语言的问题。这个问题同样没有统一的答案,应该是具体问题具体分析。Oracle公司的数据库不是也是用JAVA开发的,我想C#不是微软发明的,是开源的,并有开源组织来维护的,而且C#的诞生比JAVA早的话,ORACLE公司未必不会用C#来开发自己的数据库。也就是企业更关注的整体利益!

 

第五程序员怎么面对语言特性

不同的语言有不同的语言特性,就像现在的C#3.0,4.0特性一大堆。这些特性应该来讲都是为了解决具体的问题的方法。

 因此既然都是解决问题的方法,都有存在的理由。但是我们应该更注重语言的本质特性,而不必为这些特性大加赞赏,或者使劲的贬低。也就是在面对语言特性的时候要客观,理智。要具体问题具体分析。

 

转载于:https://www.cnblogs.com/zengyongjoy/archive/2010/06/25/1765115.html

相关文章:

  • webservice学习教程(一):理论
  • C中int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t区别
  • 自制jQuery图片切换插件ImgSlider v1.0
  • CORS简介
  • 《Android/OPhone 开发完全讲义》目录
  • mac pycharm快捷键
  • asp.net architecture
  • Exchange 2010 之:1—DAG
  • 什麽才是考驗人生的跟本
  • 「【算法进阶0x30】数学知识A」作业简洁总结
  • 「线性基」学习笔记and乱口胡总结
  • F#教程:+运算符也是函数
  • 一些想法
  • C语言之数据的存储类别
  • 算法的基本概念
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • Java反射-动态类加载和重新加载
  • PAT A1050
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • SpringBoot 实战 (三) | 配置文件详解
  • TypeScript迭代器
  • 分享一份非常强势的Android面试题
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 记一次用 NodeJs 实现模拟登录的思路
  • 利用jquery编写加法运算验证码
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 如何编写一个可升级的智能合约
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 温故知新之javascript面向对象
  • 一份游戏开发学习路线
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • #微信小程序:微信小程序常见的配置传值
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (6)STL算法之转换
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (三)模仿学习-Action数据的模仿
  • (十六)一篇文章学会Java的常用API
  • (转)可以带来幸福的一本书
  • .NET CLR基本术语
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .Net Core缓存组件(MemoryCache)源码解析
  • .net 无限分类
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET运行机制
  • .Net转前端开发-启航篇,如何定制博客园主题
  • @Mapper作用
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [ajaxupload] - 上传文件同时附件参数值
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [Bugku]密码???[writeup]