那些争议最大的编程观点

知名问答网站StackOverflow之所以成功,合理的规则与严格执行是重要的原因,所以删帖是经常的。不过有时候执行得过严了,被删的问答不时会有惊艳之作。这不,他们的博客829日的文章“20个最受争议的编程观点说的就是这样一个被删帖。此文一出,立刻在RedditHacker News等各大技术新闻站上引起了热议。

 


 

 

实际上2010年酷壳曾经有文章介绍过其中的十条,但观点本身没有翻译。

 

最初的问题你最受争议的编程观点是什么?(这里还能看到存档),由Jon Skeet20091月提出。此人可不是无名小卒,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.   偶尔写写垃圾代码也无妨。

有时候一些特定任务,快而脏的代码能搞定就行了。模式、ORMSRP(单一职责原则)啥的算了吧。

 

 

10.   print语句是有效的调试方式。

我认为用 System.out.println 之类的输出语句调试代码挺好。这经常比正式的调试要快,而且可以比较不同运行的输出结果。但是投入生产环境之前一定要删除这些语句,或者将它们放入日志语句中。

 

 

11.   你的工作是要把自己摘出来。

你写的软件都应该让其他任何开发人员花一点时间就能理解并接手。软件应该设计优雅,代码清晰和一致,格式干净,文档合适,每日构建,有恰当的版本管理。如果你被车撞了、被开了、辞职了,公司应该很快能有人很快替代你。如果不能,那你就太悲剧了。有意思的是,你越这样做,你对公司的价值越大。 

 

 

原帖下面有人评论:你如果无法被替代,也就无法升职啦。

 

12.   gettersetter被极度滥用了。

成千上万的人都说公共字段是罪恶的,应该设为私有,提供gettersetter。我觉得其实没啥不同,除非程序是多线程的,或者访问方法中有业务或者展示逻辑(这可够怪的)。我并不是赞成用公共字段,只是反对用访问方法或者属性包一下,就号称封装、信息隐藏了。

 

 

13.   SQL也是代码,请等而视之。

SQLC#, 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

这是一个10C#就能搞定的问题。但许多面试者甚至毫无思路。所以我只好接着问这样的问题:

已知圆的面积是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. 软件工程的既定思维反而会阻碍你做出伟大作品。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
### 回答1: 说到最好的编程语言,这是一个相当有争议的问题,因为这取决于你的目标和需求.对于某些人来说,Java可能是最好的选择,因为它是一种非常流行的、功能强大的、易于学习和使用的编程语言.但是,对于其他人来说,其他编程语言可能更适合他们的需求,例如 Python、C++ 或者 JavaScript.所以,要说哪种编程语言是最好的,实际上是不可能的,因为这取决于个人偏好和需求. ### 回答2: Java是一种强大且被广泛使用的编程语言,但不一定是最好的。首先,Java具有跨平台特性,可以在不同操作系统上运行,这使得开发者能够更广泛地使用和分享他们的代码。其次,Java拥有丰富的库和工具,使得开发过程更高效和便捷。此外,Java有着良好的安全性和强大的性能,适用于处理大规模的任务和复杂的系统。 然而,没有一种编程语言是完美的。Java在某些方面也有一些限制。首先,由于其严格的语法和类型检查,Java对于初学者来说学习曲线比较陡峭。另外,相比于一些其他语言,使用Java编写的代码可能较为冗长,一些任务可能需要更多的代码量来实现。 此外,编程语言的选择取决于具体的应用场景和需求。对于前端开发来说,JavaScript可能是更好的选择,因为它可以直接在浏览器中运行并与用户交互。对于数据科学和机器学习,Python可能是更流行的选择,因为它有着丰富的库和工具,尤其是用于数据分析和科学计算的。 综上所述,虽然Java是一种强大和广泛应用的编程语言,但并不意味着它是最好的。没有一种语言可以适用于所有情况,选择最合适的编程语言取决于具体的需求和条件。 ### 回答3: Java可以说是一种非常好的编程语言,但不能说是最好的编程语言。首先,Java在跨平台性方面非常出色。它可以运行在不同的操作系统上,并且能够保持相同的效果和性能。这使得Java成为开发企业级应用程序的首选语言。 其次,Java具有丰富的类库和框架,可以支持各种功能和需求。无论是网络编程、图形界面开发还是数据库操作,都有相应的类库和框架可以使用。这使得Java的开发效率大大提高,减少了开发人员的工作量。 此外,Java具有良好的安全性和可靠性。Java虚拟机通过自动内存管理和异常处理机制,提高了程序的稳定性和可靠性。同时,Java也有一套完整的安全特性和机制,可以保护程序免受恶意代码的攻击。 然而,Java也有一些不足之处。与其他编程语言相比,Java在性能方面稍显逊色。尽管Java对于大多数应用场景来说已经足够快速,但对于需要极致性能的领域(如高频交易系统),其他编程语言可能更合适。 另外,Java相比其他语言,语法较为繁琐,学习曲线相对较陡。这对于初学者来说可能会增加一定的学习困难。 综上所述,尽管Java在跨平台性、类库和框架、安全性等方面具有许多优势,但它并不是最好的编程语言。最好的编程语言需要根据具体需求和场景来选择,没有一种编程语言可以适用于所有情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值