# 程序员的奋斗史（一）

**URL:** <https://www.shiqidu.com/t/topic/132>\
**Category:** 职场话题\
**Tags:** 程序员\
**Created:** [2017 年1 月 8 日 11:04 UTC](https://www.shiqidu.com/t/topic/132 "2017-01-08T11:04:55Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

作者： ![caojie](https://www.shiqidu.com/user_avatar/www.shiqidu.com/caojie/32/465_2.png) [@caojie](https://www.shiqidu.com/u/caojie)\
发布日期： [2017 年1 月 8 日 11:04 UTC](https://www.shiqidu.com/t/topic/132/1 "2017-01-08T11:04:55Z")

</div>

> 原文出处：[Robin Wen — Builder in Crypto, Blockchain & Privacy Tech](http://dbarobin.com/2012/04/04/breif-talk-on-primary-programming-language/) 作者：温国兵

### 程序员的奋斗史（一）浅谈几种主要编程语言

### 写在前面

* * *

经常听到有人在抱怨这个语言哪里哪里不好，那个语言又是如何的优秀。对于这样的牢骚，我只是一笑而过。

就我而言，语言只是工具，没有好坏之分。只要你采用相应的语言，完成对应的工作，那你的目标就完成了。我们无需抱怨这种语言的缺点，而是应该抱有接受的态度。任何语言的存在都有它的合理性，如果不合理是不会经受住时间的考验的。世间之物都具有双面性，只是看利多还是弊大。如果一个东西是十全十美的，那我毫不犹豫的告诉你，一种情况是它不存在，另一种情况是你还没发现它的缺点。

每种语言都有自己得天独厚的优势，当然缺点同时伴存。C语言是计算机界的常青藤。C语言执行效率高，用于写底层的驱动那是再适合不过。指针是C语言的精华。而C++是很强大的，只要你是个高手，你几乎可以利用C++完成任何事情。当然虚函数是C++的精华。Java取消了指针，这是应该喜还是忧。喜的是，没有C或者C++那种对内存繁琐的操作，而且也降低了很多致命性的错误发生的概率。忧的是，效率大打折扣，采用虚拟机的方式使得Java有跨平台的特性，必然会使得效率降低。另外一个方面，你借别人的东西使用（内存），是不是应该还回去呢？从这一方面考虑，C或者C++的设计思想更有意义。经常关注TIOBE世界编程语言排行榜，Java已经有很久排名第一，我觉得这样的排名只是看看而已，无需过多的信奉。下面看看几种主要语言的优缺点。

### C语言

* * *

**C语言的优点：**

- 简洁紧凑、灵活方便
- 运算符丰富
- 数据结构丰富
- C是结构式语言
- C语法限制不太严格，程序设计自由度大
- C语言允许直接访问物理地址，可以直接对硬件进行操作
- C语言程序生成代码质量高，程序执行效率高
- C语言适用范围大，可移植性好
- C语言有一个突出的优点就是适合于多种操作系统,如DOS、UNIX,也适用于多种机型
- 有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务，便于开发和维护

**C语言的缺点：**

- C语言的缺点主要是表现在数据的封装性上，这一点使得C在数据的安全性上做的有很大缺陷，这也是C和C++的一大区别。
- C语言的语法限制不太严格，对变量的类型约束不严格，影响程序的安全性，对数组下标越界不作检查等。从应用的角度，C语言比其他高级语言较难掌握。
- 可重用性差
- 数据安全性差
- 难以开发大型软件和图形界面的应用软件
- 把数据和处理数据的过程分离为相互独立的实体
- 当数据结构改变时，所有相关的处理过程都要进行相应的修改
- 每一种相对于老问题的新方法都要带来额外的开销
- 图形用户界面的应用程序，很难用过程来描述和实现，开发和维护也都很困难

### C++

* * *

**C++优点：**

- 可扩展性强
- 高效 简洁 快速
- 可移植性
- 面向对象的特性
- 强大而灵活的表达能力和不输于C的效率
- 支持硬件开发
- 程序模块间的关系更为简单，程序模块的独立性、数据的安全性就有了良好的保障
- 通过继承与多态性，可以大大提高程序的可重用性，使得软件的开发和维护都更为方便

**C++缺点：**

- 比较底层，易用性不是很好
- 多重继承和友元机制
- 标准库涵盖范围不足
- 开发周期长
- 非并行
- 掌握有难度
- 粒度封装不够

### Java

* * *

**Java的优点：**

- 简单性
- 面向对象性（面向对象的程度可以达到95%）
- 健壮性
- 跨平台性
- 高性能（自动垃圾回收机制）
- 多线程
- 动态性
- 安全性

**Java的缺点：**

- 跨平台是它最大的优点也是最大的缺点
- 复杂性（做一个项目需要很多的知识，涉及面广）

_ **写在后面** _

* * *

很多时候，一种语言的优点很可能是它的缺点，缺点又可能是它的优点。这主要看你是从哪方面去考虑。这就印证了那句话，凡事没有必然。

不管是哪种语言，就像文章开头所言，只要你采用他达到你想要的，那就成功了。无需过多在意它的缺点，更无需赞扬它的优点。所以网上那些关于哪种语言更好的口水仗，我只能说这样的争斗毫无意义。

**语言只是工具，没有好坏之分。**

---

<div class="post-metadata">

作者： ![Eureka](https://www.shiqidu.com/user_avatar/www.shiqidu.com/eureka/32/5_2.png) [@Eureka](https://www.shiqidu.com/u/Eureka)\
发布日期： [2017 年1 月 8 日 12:19 UTC](https://www.shiqidu.com/t/topic/132/2 "2017-01-08T12:19:01Z")

</div>

_词过滤，_
