差距是全方位的,下面仅例举几条比较典型的:
- 心浮气躁,唯利是图。这个是大环境了,整个程序员圈子都比较浮躁,热衷于赚快钱,热衷于追各种热点,什么大数据,人工智能,什么框架,市面上炒什么就一窝蜂追求什么。而从来不沉下心来打好基础。
- 重应用,轻底层。我们都知道,万仗高楼平地起,计算机编程也一样,没有扎实的底层基础,想写出高效稳键的系统,几乎是不可能的。不管是在工作中,还是在技术论坛上,你们发现一篇应用性的技术文章浏览者甚多,一篇操作系统或有关汇编的文章,浏览的人寥寥无几;这个特性,可以推广到国内的所有行业,越是深入基础的东西,关注的人越少,他们会给出一个冠冕堂皇的借口——这些东西没有用,也用不到。
- 私心重,久分享。你会发现,不少技术人员,悟出了一点道理,解决了一些问题,就藏着掖着,生怕被别人学走,或者放到网上收钱下载。或者自己遇到类似的问题解决了,一走了之,也不分享出来。
- 怠于学,懒于行。常常在写代码时,不追求好的风格,不写注释,遇到难题绕着走,而常常把没有写好代码归咎于时间紧,任务重。学习也只学简单的,变现快的。什么编译原理,汇编语言,操作系统,计算机网络,计算机体系统结构,算法,等等。这些东西这么花时间,肯定没有耐心学下去的。于是乎,一年经验用十年,然后还以老程序员自居,嚷嚷要转管理!代码都写不好,管理就能做好?
- 重于言,轻于手。口头上说,这个容易,那个不难,但就是做不好事情。就像面对操作系统和EDA等卡脖子问题,会有一大群上在网上,开口就这个不难,那个也不难,找一大堆的借口。各种问题都不难,就是tmd的做不出来,连抄都抄不好。
最后,我们再看看教材和书籍的问题,你会发现也是一样,美国的计算机类教材,深入浅出,事无巨细,娓娓道来,直到把它教懂。国内的同类,胡编乱造,敷衍了事,忽悠一个算一个。
最后的差距就是:
代码首先是层次差,几乎主要是应用层,极少底层代码;
注释和风格差,没有注释,或者不规范注释;
健壮性差,bug多,那些天天加不完班的几乎主要这些鬼事情;
扩展性和复用性差,换一个项目又推倒重来;
……
不过有一点也很重要,中国企业不允许程序员上班参与开源项目,上班时间长疲于奔命,没有多少时间参与开源项目,也没有多少时间用于学习思考,这方面也是客观原因。
前一阵子我给一个玩票项目做技术选型,比较了阿里云和AWS,最后选择了AWS。促使我选择AWS的很大一部分原因在于文档——作为一个开发者,最终我是要吭哧吭哧读你的API文档来开发代码。决定我工作量的不是你的设施有多先进,而是文档里有多少坑;牛吹的再响亮,文档不全在我看来就是金玉其外败絮其中。
现在是2021年12月17日,我随便拿两个文档来让大家看一下差距。我觉得拿阿里云的OSS和AWS的S3来比较是很合理的,二者分别是国内和美国的云服务商的老大,且OSS和S3二者功能几乎完全一致(连API都几乎一模一样),且都是成熟商用多年、非常常用的云服务产品。
随便搜一下,你就能找到双方的API文档:
我挑了两个类AmazonS3和OSS ,它们分别是S3和OSS的入口,你进去看一眼就知道它们有多相似了,很多方法名都是一模一样的,我不说谁抄谁的问题,想象一下,你是一个开发者,你需要使用一个API,第一个反应是去看文档,这没什么问题吧?
这是阿里云的文档,这个注释写的,和不写有什么区别?源代码+注释提供的信息几乎和二进制代码一模一样,真正实现了”代码即文档“。

这是AWS的同名方法,我不得不缩小屏幕分辨率才把它截全。

这是我随便挑的方法,你从上面的链接点进去,随便找,能找着一个阿里云认真写的文档算我输。你要是英文不好的话,中文API文档也没见你好好写啊?
二者都是商业化产品,万千的客户都要用它吃饭,尚且这样,在你看不到的地方,就有更多的差距了。这是能力问题,还是态度问题呢?我不知道,我只知道,作为一个程序员,远离阿里(包括但不限于云、开源项目等)
欧美码农写代码:
- 和客户多次讨论
- 确定需求,确定最简单的最直白的MVP版本
- 制定开发milestone
- 在GitHub/Gitlab开repo,先构筑模版项目,写好单元测试框架、CICD、lint、文档框架,以及开发和部署分开的权限
- 先跑一个空壳,没有业务代码,但架构、依赖以及自动构建流程已经确定下来了
- 慢慢往框架里填充代码,持续交付
- 新人来了就靠文档上手,贡献代码靠pull request,自动化测试和lint以及人工代码审核
- 权限隔离,码农删不了生产代码也动不了生产系统
天朝码农写代码:
- 客户天马行空要一个东西,细问则不耐烦,说你照着淘宝/百度做一个就对了
- 口水乱喷开始吹架构,什么mq, Redis, Spring使劲上,号称支持千万并发
- 打开IDE开始一个项目,名字懒得起就叫untitled,skip所有IDE的git/README.md构建提示
- 上网查各种Redis, JVM之类的配置模版,开发机里下载了一堆依赖,还都是全局的
- 勉强跑起来一堆四不像,也没法部署,因为配置全是本地的
- 写了一堆没人看得懂的代码,没文档没测试,方法名类名用拼音。问代码架构,则拉出一本“代码之禅”“架构之道”
- 部署那天在生产机上鼓捣了老半天,终于跑起来了。因为怎么配置自己都忘了
- 客户没给钱,一怒之下删代码删库跑路
如果是国内大厂的话,还会拷贝别人GPL的代码然后查抄替换文件头说是国产知识产权,或者改别人的包加点料之类。不过这算是国产高科技了,一般的码农还没到这个级别。
就以csdn和stack overflow做例子。
csdn上的技术贴,先不说到底转手了多少次,就算内容是原创的,大多也是毫无营养的烂文。
烂在什么地方:比如1、直接贴代码不写注释,自己这篇博客一点解释也没有,什么架构,自己的想法等等。2、如果是解决一些程序问题,常常直接贴命令行代码块,不解释出现的原因,不解释为什么可以这样解决。
其实csdn我大一大二在用,他当然有好的作者,但太少了,很多人把csdn当做个人笔记用了,对内容很不负责。
stack overflow其实不算博客算解答。一个问题,提问者会说出现的原因,自己做过的尝试和自己的一些猜测。下面解决问题的人会说解决办法,会建议你去看什么什么文档来了解这个问题。
再有就是分享欲。国人代码不讲究开源,对于技术问题的帖子,没有多少人回复。就知乎这个平台,不算一个技术平台。很多优质的计算机回答只有几个赞,而男朋友xxx女朋友xxx一堆人答的飞起。
