点击上方“CSDN”,选择“置顶公众号”

关键时刻,第一时间送达!

以严谨著称的程序员们似乎与“迷信”一词毫无关系。不过事实上,很多程序员都存在一些根深蒂固的编程误解,即使是 Hacker News 或 Proggit 上的很多程序员精英也不能避免。

以下为译文:

我对误解很感兴趣。以前我经常在酒吧里主持猜谜游戏(我们这里有的地方叫做“冷知识之夜”),参加过几次的人都知道,如果一道题看上去像是陷阱,那通常它就是陷阱。我的题目里有相当多的“似真似假”的题目,其中所有问题的答案都是假,但几乎没有任何人注意到这一点,因为每道题都是人们平常深信不疑的错误的事情。

等等,这跟编程有什么关系?别着急,继续读下去。

在Hacker News或Proggit上评论的程序员并不是从计算机行业随机选取的,而是这个行业中的精英部分。就像参加任何会议一样,参与评论的这些人都比一般程序员对编程更有热情。

然而,从许多评论中可以看出,许多很厉害的程序员也会有各种信仰和误解,这些信仰和误解虽然错得离谱,但却广为流传。下面是我收集的一些很有意思的误解,附有我的解释。

C语言就是快。

如果说哪个误解会招致差评、导致认知差异、甚至引起口水战?那很可能就是这一条了。

就像其他的误解一样,我对这一条完全不理解。

估计是因为我学C语言的那个时代,人们普遍认为C语言用于游戏编程等很慢,而汇编才是王道。或者是因为,程序都要编译成机器语言,而就像什么顺势疗法一样,汇编语言仿佛是水,能记住自己从哪儿来,从而使得CPU能执行得更快……于是就有了下一条误解。

垃圾回收语言就是慢。

这里说的垃圾回收指的是“跟踪式垃圾回收”。许多人都评论说,在真正的系统中编程时,跟踪是垃圾回收是多么不能忍。要是每条评论我能收一分钱的话,我现在就有好几块钱了。

我大概能理解这一条,因为四年前我也相信。

我还曾经相信后台会有小仙子自动帮我清理那些“明显”会导致程序变慢的代码。以后我会写一篇文章专门讲这个问题。

Emacs是个文本模式的程序。

每次有人说文本编辑器比不上IDE,就必然有人跳出来问,为啥非要用文本模式的编辑器。

我是个Emacs用户,我也不知道为啥他们都要用。类似地还有……

文本编辑器没办法也不应该拥有自动完成、查找定义等功能。

这一条通常会在讨论Emacs是终端程序的帖子里出现。通常还会伴随着一些人说IDE的上述功能是必要的。我也不用IDE编程,估计以后也不会。同样,我很少看到用编辑器用得很溜的人。

不记得多少次看到某人用vim打开一个文件,发现开错了,关掉vim,再打开另一个文件,再关掉……啊啊啊啊啊啊啊啊啊啊。

还有人“喜欢Eclipse”却不知道“查找定义”功能的……简直是奇迹。

由于C ABI是编程的通用语言,所以实现应该也用C语言。

在讨论二进制代码时C语言是真正的胶水语言。

这是有历史原因的,但不可否认在这方面C语言就是王者。但令我大跌眼镜的是,很多人把这句话理解为,如果API是C语言的,那么实现它的唯一语言就是C语言。也不想想Visual Studio的libc是用C++写的。

C和C++是同一种语言,真正的名字是C/C++。

而且没人把Objective C算进去(其实Objective C跟C++不一样,它实际上是C语言的超集),因为……啥原因呢?

C和C++有太多共通的地方,有时候当你想说一些适合两种语言的东西时,写成C/C++是有道理的。但许多时候人们并不是这样用……

在并发编程的容易性方面Rust是唯一的选择。

我估计所有使用Pony、D、Haskell、Erlang等语言的人都不明白这句话。Rust是不是比C++更安全?当然是,但这个标准也太低了。

我第一次用Rust时花了30分钟就死锁了。我感觉并不容易,或者应该说“不考虑数据冲突的话很容易”?反正是很容易上当。

内核只能用C语言。

显然Haiku和Redox被无视了,以及其他一切unikernel框架。

平台的字节序很重要。

这又是一条让我迷惑不解的理论。

我甚至都不知道为啥还有htons和ntohs这两个函数。完全搞不懂,而且更悲惨的是,我跟别人解释这个时,似乎他比我还明白。

我并不是说字节序不重要,而是说99.9%的情况下,人们认为它很重要,实际上却完全无所谓。我肯定会读一次IEEE浮点数的定义,但这并不意味着写任何程序都必须记住哪一部分才是尾数。

Haskell代码能通过编译就能跑!

嗯……不是的。

简单的语言能避免复杂性。

也称为“清扫地毯下面的尘土”迷信。

我并不明白这句话。我的意思是,一项任务的复杂度并不会因为使用了简单的语言而消失,甚至会变得更复杂。有许多负责搞笑的语言极其简单,但真用来写代码就简直是噩梦。

代码覆盖率是测试质量的标准。

我认为覆盖率很重要。我觉得,阅读一份漂亮的HTML覆盖率报告确实能够帮助书写高质量的软件。但我十分确信,追逐代码覆盖率的目标是有害的,而且毫无意义。下面是个很无聊的函数:

int divide(int x, int y) { return x + y }

然后是测试套件:

TEST(divide) { divide(4, 2); }

100%的覆盖率。函数甚至连返回值都不对。好吧,其实应该assert点啥东西:

TEST(divide) {     assert(divide(4, 2) == 2);     assert(divide(6, 3) == 2);}int divide(int x, int y) { return 2; }

100%覆盖率。嗯……要不这样?

TEST(divide) {     assert(divide(4, 2) == 2);     assert(divide(9, 3) == 3);}int divide(int x, int y) { return x / y; }

测试成功!当然,别给y传0……

应该测量测试覆盖率,阅读报告,然后决定下一步该做什么。之前我也写过着跟问题。

C能最接近地映射到硬件。

如果“硬件”的意思是PDP11或微型嵌入式设备,那么没错。但写内核不能只用C不用汇编是有理由的。

而且还有这一堆东西:SIMD,多CPU核心,缓存层次结构,缓存管线,内存预取,乱序执行,等等。至少现在有原子性了。

我不知道人们给量子计算机写代码的时候还会不会说C最接近硬件。听起来似乎很傻,但我还见过更傻的。

另外,Lisp机器从来没存在过,FPGA/GPA也不是硬件(别忘了Poe定律!Poe定律:只要不明确表明是讽刺,那么不管讽刺得多么夸张,总会有人信以为真)。

做某件事只能用某个语言。

不管你说的某件事是啥,Lisp估计都能做。

原文:https://atilanevesoncode.wordpress.com/2018/06/12/myths-programmers-believe/

作者:atilaneves

译者:弯月,责编:郭芮

  征稿啦!

CSDN 公众号秉持着「与千万技术人共成长」理念,不仅以「极客头条」、「畅言」栏目在第一时间以技术人的独特视角描述技术人关心的行业焦点事件,更有「技术头条」专栏,深度解读行业内的热门技术与场景应用,让所有的开发者紧跟技术潮流,保持警醒的技术嗅觉,对行业趋势、技术有更为全面的认知。
如果你有优质的文章,或是行业热点事件、技术趋势的真知灼见,或是深度的应用实践、场景方案等的新见解,欢迎联系 CSDN 投稿,联系方式:微信(guorui_1118,请备注投稿+姓名+公司职位),邮箱(guorui@csdn.net)。

————— 推荐阅读 —————

点击图片即可阅读

@程序员,这些编程陷阱你中招了吗?相关推荐

  1. python好学吗 老程序员-使用 Python 会降低程序员的编程能力吗?

    某些情况下会降低编程能力,某些情况下会提升编程能力,要看你怎么理解"编程能力". 1.使用 Python 会降低程序员的编程能力,这个假设成立的情形 如果强行要说使用Python可 ...

  2. 如何向新手程序员介绍编程?

     如何向新手程序员介绍编程? 学习Java,他们都说很easy. 作为一名刚从斯康星大学麦迪逊分校计算机科学系毕业的大学生,我通过一些编程课程认识了很多使用Java的朋友.现在很多学校都在从别的编 ...

  3. c语言为什么有这么多的编程环境?_为什么98%的程序员学编程都会从C语言开始?...

    在互联网蓬勃发展的时代,有一类人做出了巨大的贡献,这一群人被大家称之为程序员,怎样才能成为一名优秀的程序员呢,为什么每一个程序员都需要学习C语言呢? 就让我来跟大家分享分享: 壹 第一:相比较其他的编 ...

  4. C/C++程序员的编程修养

    关注.星标公众号,不错过精彩内容 作者:陈浩 转自:嵌入式云IOT技术圈 什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是.对于一些技术细节来说和底层的技术, ...

  5. 论一个程序员的编程修养(你品,你细品)

    论一个程序员的编程修养 转自:陈浩 芯片之家 作者:陈浩 来源:嵌入式云IOT技术圈 什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是.对于一些技术细节来说和 ...

  6. 为什么90%的程序员学编程都会从C语言开始?

    在互联网蓬勃发展的时代,有一类人做出了巨大的贡献,这一群人被大家称之为程序员,怎样才能成为一名优秀的程序员呢,为什么每一个程序员都需要学习C语言呢? 在学习C/C++可以加入我们的学习交流QQ群: 9 ...

  7. coji小机器人_让孩子学做程序员 Coji编程机器人体验

    原标题:让孩子学做程序员 Coji编程机器人体验 玩具机器人可能每个孩子小时候的梦想,不过对于90后小编来说,小时候见过的所谓"机器人"好像最多也就是那种可遥控移动或放音乐的电子玩 ...

  8. c++ 读陈黎娟的《C、C++实践进阶之道,写给程序员的编程书》所感--关于变量的类型与引用

    最近在看陈黎娟的书<C.C++实践进阶之道,写给程序员的编程书>,其中第十一章讲的是变量和类型,现做笔记如下: 数据存储区域分只读数据区(存储常量和恒值,正常情况下不做修改).全局/静态存 ...

  9. 程序员获取编程灵感的 10 种方式

    来源:http://www.codeceo.com/article/10-inspiration-as-a-programmer.html 有时我会陷入读着编程书但编不了程的陷阱.我不能总是找到一个可 ...

最新文章

  1. 根据基因或者蛋白的id提取序列---extract_seq.exe
  2. python 去掉字符串的
  3. 到底什么时候该使用MQ
  4. 华为高密UA5000升级
  5. 在request.GET中捕获url参数
  6. linux脚本或关系表达,Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等...
  7. CBNetV2:北大提出的复合主干网络,COCO成绩60.1%
  8. getId()方法的作用
  9. lingo变量无限制版本_LINGO笔记
  10. 在HTML中使用JavaScript
  11. 计算机网络---UDP协议与TCP协议
  12. 2021-10-24
  13. python+appium+android模拟器自动化测试 源码
  14. 如何正确书写正则表达式
  15. windows10 系统家庭版转专业版小结
  16. 根据结构体数组中某一数据项对结构体数组排序
  17. CCNA 640-802,CCENT和CCNP练习题库LMI的自动检测,转换,以及更多!
  18. java中break和continue的用法
  19. 突发!incaseformat蠕虫病毒来袭,警惕文件遭删除
  20. 为什么大公司一定要使用微服务?微服务杂谈(1),推荐学习

热门文章

  1. [SQL实战]之查找所有员工的last_name和first_name以及对应的dept_name,也包括暂时没有分配部门的员工
  2. 中国近红外成像行业市场供需与战略研究报告
  3. 2021年中国带LED显示屏的温度调节器市场趋势报告、技术动态创新及2027年市场预测
  4. linux for循环原理,linux for循环
  5. 第11章 樱花树(《C和C++游戏趣味编程》配套教学视频)
  6. :empty css 可以用在哪些标签,CSS3 :empty 选择器
  7. eclipse读取mysql数据乱码_eclipse从数据库获取数据时控制台乱码问题
  8. 在CentOS6和CentOS7安装epel仓库-最简单的方法
  9. 他曾一举击败英伟达,却因坚持研发背负骂名
  10. 第八届开源操作系统年度技术会议(OS2ATC)在京召开, 百位科技菁英到场共鉴“开源协作”