实际上2010年酷壳曾经有文章介绍过其中的十条,但观点本身没有翻译。
最初的问题“你最受争议的编程观点是什么?”(这里还能看到存档),由Jon Skeet在2009年1月提出。此人可不是无名小卒,C#社区大名鼎鼎的人物,多年微软MVP,所著《深入理解C#》(英文版C# in Depth)一书是C#领域少数不可不读的名著(老赵就说过C#他只推荐两本,这本和CLR via C#),现在Google英国公司任工程师(还真不知道他在那里干什么)。
那么,这个问题当时都有哪些热门答案呢?顺序是随机的。
1. 业余时间不会为了好玩而编程的程序员,永远比不上那些以编程为乐的同学。
我认为即使是最聪明、最有才华的人,如果只是将编程作为工作,也永远成不了真正优秀的程序员。以编程为乐的人会在业余时也搞些小项目,或者弄弄各种不同的编程语言和编程思想。
2. 单元测试无助于编写优秀代码。
编写单元测试的唯一理由仅仅是确保已经能工作的代码不会出问题。先写测试或者按测试来写代码是无比荒谬的。如果在代码之前写测试,你都不知道边界情况是什么。虽然能让代码通过测试,但是在没有预见到的情况时还是会出问题。而且,好的开发人员会尽量降低内聚性,新增代码不可能使已有的出问题。
3. 唯一能放之四海而皆准的最佳实践,是“用脑子思考”。
太多人喜欢追逐众多时髦技术,想方设法把各种方法、模式、框架用到不适合的地方。新技术和名人大牛的观点并等于适用于实际情况。
4. 大多数代码中的注释实际上都是代码重复的恶性表现。
我们大部分时间是在维护其他人(或者我们自己)写的代码,而糟糕、错误、过时和误导性的注释肯定是代码中最令人纠结的东西之一。很多人最终会将它们干掉。应该把精力放在提高代码的可读性、必要时就重构、少用惯用法和奇技淫巧上。另外,许多教材还在宣扬什么注释甚至比代码还重要,结果导致了大量废话连篇的注释。
5. 依赖Google没什么错。
这种言论肯定会让那些学富五车的饱学之士恼火。但是谁都需要查资料不是?正确答案就是正确答案,管它是来自哪本秘籍或者私相传授,还是Google出来的呢?重要的是能真正理解,并给出成功的编程解决方案,让客户和老板满意。
6. 程序员不是生而平等的。
经理往往认为程序员A==程序员B,因为他们的年头差不多。实际上,一个开发者的效能可以是另一个的十倍甚至百倍。
7. 我实在不能理解为什么Java是最适合大学教学的第一门语言。
首先,我相信第一门编程语言应该重在学习控制流和变量,而不是对象和语法。其次,我认为没有调试C/C++内存泄漏经验的人,根本无法完全理解Java的初衷。而且,自然的发展过程应该是从“我怎样做这事”到“我怎样找到能做这事的库”,而不是倒过来。
8. 如果你只会一门语言,无论多么精通,仍然不是优秀的程序员。
有人认为,只要精通了C#、Java或者其他什么你学会的第一门语言,就足够了。我不敢苟同。我学习的每一种新语言,都教了不少编程新知,能够反过来用于工作中。任何人只局限于一种语言,都无法充分发挥自己的潜力。而且缺乏求知欲和探索意愿,都不符合优秀程序员的特质。
9. 偶尔写写垃圾代码也无妨。
有时候一些特定任务,快而脏的代码能搞定就行了。模式、ORM、SRP(单一职责原则)啥的算了吧。
10. print语句是有效的调试方式。
我认为用 System.out.println 之类的输出语句调试代码挺好。这经常比正式的调试要快,而且可以比较不同运行的输出结果。但是投入生产环境之前一定要删除这些语句,或者将它们放入日志语句中。
11. 你的工作是要把自己摘出来。
你写的软件都应该让其他任何开发人员花一点时间就能理解并接手。软件应该设计优雅,代码清晰和一致,格式干净,文档合适,每日构建,有恰当的版本管理。如果你被车撞了、被开了、辞职了,公司应该很快能有人很快替代你。如果不能,那你就太悲剧了。有意思的是,你越这样做,你对公司的价值越大。
原帖下面有人评论:你如果无法被替代,也就无法升职啦。
12. getter和setter被极度滥用了。
成千上万的人都说公共字段是罪恶的,应该设为私有,提供getter和setter。我觉得其实没啥不同,除非程序是多线程的,或者访问方法中有业务或者展示逻辑(这可够怪的)。我并不是赞成用公共字段,只是反对用访问方法或者属性包一下,就号称封装、信息隐藏了。
13. SQL也是代码,请等而视之。
SQL和C#, Java或者其他对象、过程语言没什么不同,请注意代码的格式、可读性和可维护性。
14. UML图被高估了。
有些图当然是有用的,比如Composite模式的类图。但许多UML图都毫无价值。
CSDN编者注:记得Robert Martin在《敏捷软件开发(C#版)》里讲UML时,基本上是讲一个图然后说,好像没什么用,我就没怎么用过……同一个问题下面还有一个相关的答案:代码==设计。认为高级语言代码比UML图和文档更有效。
15. 可读性是代码最重要的方面。
比正确性还重要。可读的代码也容易修正,容易优化、修改、理解。而且其他开发者也能从中获益。
16. XML被大大高估了。
很多随波逐流跳上XML这黑船的人都没过脑子。XML用于Web应用不错,因为它本来就是干这个的。此外的问题定义、设计思路应该尽量不用XML。
17. 软件开发只是一份工作而已。
我热爱软件开发, 我现在一家创业公司干,每周公司60小时,而且工资不高,只因为团队很棒,工作很有趣。但站得高一点来看,这仍然只是一份工作而已。它不如家庭、我的女友、其他朋友、幸福等等重要。要是有足够的钱,我宁愿去玩摩托、游艇或单板滑雪。许多开发者忘记了写程序不是最终目的,它只是为我们提供条件,去高高兴兴地做生命中最重要的事情。
CSDN编者注:这条和第1条好像有点对着来嘛。
18. 开发人员就应该能够写代码。
去年做了很多面试,我主要会测人们的思路,如何在白板上实现比较简单的算法。我往往从这样的问题开始:
已知Pi可以用函数4 * (1 – 1/3 + 1/5 – 1/7 + …) 计算,项越多越精确,请写一个函数,计算小数点后5位的Pi。
这是一个10行C#就能搞定的问题。但许多面试者甚至毫无思路。所以我只好接着问这样的问题:
已知圆的面积是Pi乘以半径的平方,写一个函数计算。
居然有超过半数的人无法用任何语言完成这个函数!唉,开发人员应该能够写代码,现在连这个都成有争议的观点了……
19. 设计模式弊大于利。
软件设计,尤其是好的软件设计千变万化,没法有意义地用模式去总结,尤其是那些大家记得住的几个模式,而且这些模式也太抽象了,其实没几个人真正记得住太多。所以设计模式其实没啥用。而另一方面呢,又有太多的人为设计模式的概念迷住,想方设法到处用——结果代码中往往除了一些毫无意义的单例和抽象工厂之外,几乎找不到什么设计。
20. 代码少少益善。
如果用户看不到你的工作,才是做对了。荣耀在别处。
其他比较热门的答案还有:
21. 性能真的很重要。
22. 企业应用很滑稽。需要n年经验是胡扯。计算机科学学位课程纯忽悠。
23. 单元测试无助于编写好代码,软件工程大多数所谓的最佳实践都是为了防范烂程序员搞太多破坏。
24. 每个程序员都应该熟悉现代计算机的体系结构。
25. 编写小方法。
26. PHP真烂!
27. C++是有史以来最差的语言之一。
28. 大多数职业程序员都很烂。
29. 要想成为程序员,你得先学会打字。
30. 编程之外的各种流程规矩越多,代码质量越差。
资深的游戏程序员James Hague(名博Prog21是也)也看到此文,觉得这些观点都没啥太大争议性。他专门写了一篇博客,又提出了他自认为更具争议性的观点,其中不少观点指向他之前发表的其他文章:
31. 计算机科学专业应该只作为辅修学位。
32. 新程序员还没有弄懂分解问题和将解决方法变成代码之前,就给他们介绍面向对象是大错特错。
33. 复杂的编译器优化几乎都没什么价值,即使能得到更快的代码。它们会大大降低编译速度而且很可能产生难以处理的bug,使性能问题的处理更加困难。
34. 不能允许没有十年编程经验的人编写供他人使用的库。忽略此条,抱憾终身。
35. 代码丑陋与否无关紧要。有没有格式与代码是否工作、可靠没什么关系,可以让自动化工具来整理格式。
36. 纯函数式编程没啥用。但在命令式代码里杂用一些效果不错。
37. 软件工程的既定思维反而会阻碍你做出伟大作品。
相关推荐
在探讨编程与年龄之间的关系时,我们必须提到关于专业技能与年龄相关性的争议。长久以来,这一问题一直困扰着程序员群体,特别是中国的IT从业者。大家倾向于探讨,究竟是年轻程序员更易于吸收和掌握新技术,还是年长...
《编程高手箴言》是一本深受争议...虽然书中的一些观点可能引发争议,但无疑它提供了一条通向编程高手之路的思考路径,对提升个人技术水平和职业发展大有裨益。无论你是初学者还是资深开发者,都能从中找到启发和收获。
【C语言作为第一门编程语言的争议】 在国内,C语言通常是首选的入门语言,但许多教材过于侧重语法细节,导致学生在应付填空式考试中无法真正理解和掌握编程。上机实践也往往局限于简单的练习,缺乏实际应用价值,这...
- **内容特性**: 包含了一些可能尚未实现的想法、概念性的思考甚至是错误的观点,但都是为了激发思考和探索而提出的。 #### 3. 版权声明与注意事项 - **版权政策**: 拒绝任何形式的商业转载、摘录和引用。但允许非...
然而,著名计算机科学家 Edsger Dijkstra 在论文《Goto 语句有害》中提出反对 `goto` 的观点,这使得它在结构化编程中被视为禁忌。尽管如此,有时 `goto` 可以简化某些特定场景下的代码,比如在 `case` 语句中,相比...
在计算机科学领域,关于结构化编程(Structured Programming)与goto语句的争议堪称经典,它不仅是编程语言设计史上的一个重要篇章,也深刻影响了软件工程的发展方向。唐纳德·克努特(Donald Knuth)于1974年末发表...
机器人是否应被视为道德行为的主体,是否应对其行为承担责任,以及如何界定其道德地位,这些问题成为学者们争议的焦点。 机器人伦理问题的出现,源于人类对机器人可能产生的伦理影响和后果的担忧。在讨论这一问题时...
然而,这种观点也引发了许多争议。实际上,每种编程语言都有其适用场景和优势,并不存在绝对意义上的“最好”。例如: - **Python**因其简洁的语法和强大的数据处理能力而在科学计算、机器学习等领域受到欢迎。 - **...
- **改善交通流动性的观点**:MonkeyParking则辩称,他们的服务并非买卖停车位本身,而是提供停车位信息,从而减少车辆在街上寻找停车位的时间,进而改善交通状况。 3. **法律与伦理考量**: - **法律角度**:...
争议检测的目标是识别并分析网络上的观点冲突,这在社交媒体、论坛和新闻网站等平台上尤为常见。随着网络信息的爆炸式增长,争议检测技术可以帮助我们理解公众的意见分歧,促进信息的真实传播,避免假新闻的扩散,...
在计算机编程领域,goto语句一直以来都是一个备受争议的话题。本文将深入探讨goto语句的优缺点,以及它在程序设计中的应用,帮助程序员们更好地理解和运用这一语句。 历史背景: goto语句的历史可以追溯到早期的...
Stroustrup可能在这里解答了一些关于C++最常见、最具争议的问题,比如为什么C++不选择垃圾回收机制,而是坚持手动内存管理;或者解释为何C++支持多重继承,而很多现代语言选择单继承。他的回答往往结合实际编程经验...
在编程领域,《代码大全4》作为一本深入探讨编程技术的书籍,其第16章专门聚焦于少见的控制结构,旨在为读者提供更广泛的视角来理解非典型编程控制机制。本章节不仅涵盖了`goto`语句、`return`语句和递归调用等概念...
提供的文件描述的是历史考试试题,涉及的是历史学科的多个知识点,包括古代的地亩制度、自耕农经济、古代思想家的观点、中外历史事件、晚清时期的外交政策、近代科技传播、民族工业的发展、历史人物争议等。...
《程序员的呐喊》的作者是业界知名的程序员——来自Google的Steve Yegge,他写过很多颇富争议的文章,其中有不少就收录在本书中。《程序员的呐喊》是他的精彩文章的合集。 《程序员的呐喊》涉及编程语言文化、...