每个程序员都应该了解的十句话

1.技术是解决问题的选择,不是解决问题的根本

我们可以因为掌握了最新的JavaScript框架Ahem、Angular的IoC容器技术或者某些编程语言甚至操作系统而欢欣雀跃,但是这些东西并不是作为程序员的我们用来解决问题的根本——它们只是用于帮助我们解决问题的简单工具。

我们必须非常谨慎,不要对某项正好喜欢或者正好很火的特定技术走火入魔。否则,我们将进入这样的思维怪圈:把掌握的那项技术比做是锤子,在思考问题时,会自然的把所有的问题都想象成是锤子可以解决的钉子。

2.聪明是代码清晰的敌人当编写代码时,我们应当努力做到代码清晰易理解。

虽然这句话并不总是正确的,但在一般情况下,聪明确实是代码清晰的敌人。 事实证明,当我们写下一段自认为非常了不起的代码的时候,这些代码在别人眼里可能会是一头雾水。所以当你在编写某段聪明高效代码的时候,牢牢记住这个原则是很有必要的。 如果你对如何编写整洁清晰的代码很感兴趣的话,我强烈推荐你看罗伯特·C·马丁的书《The Clean Coder: A Code of Conduct for Professional Programmers》。

3.写尽可能少的代码这句话看起来有一些矛盾。程序员的工作不就是编写代码么?

嗯,是的但也不是。 工作需要我们编写代码,但是我们在尝试解决问题的时候应当做到尽量编写更少的代码。 这并不意味着我们需要尽量把代码写得更紧凑或者把所有的变量都使用单个字母。它的意思是我们应当尝试用更精简的算法来实现所需要实现的功能。

通常情况下,我们在代码中所添加的各种很酷的特性是非常诱人的,这还能让我们的代码看起来更“健壮”和“灵活”,能够处理各种不同类型的情况。但是,更多的时候,我们尝试添加可能有用的特性,或者想用这些特性来预防在未来可能存在的问题,这种做法是不可取的。这些额外的代码可能不具备任何的价值,但是却可能造成更多的bug。因为代码越多,出现未知错误的机会就越多,代码的维护也更加麻烦。

优秀的软件工程师写尽可能少的代码。 伟大的软件工程师删除尽可能多的代码。

4.注释是代码表述的最后选择鲍勃·马丁曾经说过:“当你在为一段代码写注释的时候,你应当对自己糟糕的表达能力而反思。”

这并不意味着我们以后就不要写注释了。但在大多数情况下这种情况是可以避免的,你可以选择用更好的命名方式来取代它。 只有在使用命名都无法表述清楚某个方法或者变量的目的时,注释才是最后的选择。事实上,表达那些无法轻易用代码而表达的东西才是注释的真正作用。 举个例子,注释可以告诉你在代码中的那些奇怪的操作命令并不是一个错误,而是故意的,那是因为在底层操作系统存在着某个bug。 虽然在一般情况下,许多注释还是非常有用的,但是却存在着误导的风险。 在其它代码更新后,与某些更新前代码相关的注释常常会得不到同样的更新,这就导致了某些注释会变得非常的危险,它们很可能会把你引导到一个错误的方向。 你检查过与代码密切相关的每一段注释么?是否确保代码都是在按照注释所说的那样做?如果你都照着这样做了,那么注释的意义又何在呢?如果你没有这样做,你又怎么知道注释说的都是真的? 所以,注释的作用并不象所宣扬的那么好,这种东西切勿滥用。

5.在编写代码之前你应当清楚你的代码要做什么这看起来是理所当然的,但实际情况却不是。

现实工作中你有多少次是在没有经过充分了解到你的代码要干些什么就开始着手编程的?反正对于我来说,是不计其数了,所以我把这条记录下来用来随时提醒我。 测试驱动开发(TDD)的实践在这里可以帮助你,因为你需要在编写代码之前了解这些代码将要用于什么地方,虽然这不能阻止你创造出bug,但是它依旧非常重要。所以当你完完全全了解了需要构建的需求和功能时,再动手去编程。

6.提交完成代码之前先自行测试不要在完成编程工作后,就把代码扔给QA,然后就坐等消息了。这样会浪费每一个人的时间。在报告编程工作完成之前,花费几分钟时间运行测试场景进行自我检测会更好一些。当然,在你把代码提交给QA之前不一定会发现每一个Bug,但至少你可以减少一些我们每个人都可能犯下的低级错误。

很多的软件开发人员认为测试代码只是QA人员的工作。这是不对的。保持质量是我们每个人的责任。

7.每天都学一些新东西有句名言——“刀不磨要生锈,人不学要落后。”这句话是很有道理的,因为无论是否获取到新的知识,你每天都会遗忘掉一些以前的东西。

每天学些一些新东西并不会花费掉你很多的时间。试着每天用15分钟时间去读书,然后你就会发现每天你都会有一点点的进步,在未来的某个时候,你会发现这种进步是巨大的。因此,为了在今后获得丰厚回报你必须从现在开始就进行投资。另外,现在的技术发展日新月异,如果你不改善自己的技巧,学习新的东西,你很快就会被甩在后边。

8.写代码应该成为一种乐趣这是非常正确的。或许,你进入这个行业仅仅是因为它的薪水可观。选择一份报酬丰厚的工作这并没有错,但是还有更好的选择,比如医生或者律师。事实上很多人选择做软件开发还有一个原因,那就是他们喜欢写代码。在你被工作压力所累的时候,不要忘了你选择这份职业的初衷。

编写代码可以带来很大的乐趣。这么多年的时间里,很多人可能都已经遗忘了这一点,那么从现在起,重新唤回以前的那份热情吧,从身边的项目开始,把你的观念和意识转换到以前你开始学习编程的那个时刻。

9.你不需要无所不知在你学到了很多知识的时候,你仍然有很多东西不知道。意识到这点很重要,因为它可以驱使你去了解更多更多的东西。

不知道问题的答案没关系,不了解某个东西说出来并寻求帮助也无关紧要。在很多情况下,你可以选择现学现用——相信我,我就是这么走过来的。 我的观点是,不要企图去学习所有的知识,因为这是一个不可能完成的任务。你需要关注和掌握的是能够帮助你快速学习的技巧。

10.最佳的实践视环境而定测试驱动开发最好的方法是先编写测试代码?

我们应该保持结对编程的习惯? 如果不使用IoC容器是否会低人一等? 所有这些问题的答案是“看情况。”这取决于所处的实际环境。 有人试图把最佳的实践通过喉咙等方式传输给你,他们会告诉你,他们平时都是这样应用的。所以,你也应该这样做——这其实并不正确。 在写代码的时候,我也借鉴过不少别人的成功经验。但是,这些借鉴都是有条件的。 知识是死的,人是活的。最好的实践需要视环境而定。

原文发布于微信公众号 - java工会(javagonghui)

原文发表时间:2018-07-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏华仔的技术笔记

iOS应用架构谈 开篇

3837
来自专栏程序你好

与Java、PHP 、C#相比,为什么Python薪资更高?

3042
来自专栏张善友的专栏

千万级规模高性能、高并发的网络架构经验分享

主 题 :INTO100沙龙 时间 :2015年11月21日下午 地点 :梦想加联合办公空间 分享人:卫向军(毕业于北京邮电大学,现任微博平台架构师,先后在微软...

5486
来自专栏互扯程序

千万级规模高性能、高并发的网络架构经验分享

现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享。

1746
来自专栏求索之路

BAT等大厂Android面试书单和知识点清单Java知识Android知识java设计模式知识算法和数据结构知识计算机系统知识数据库知识计算机网络知识Android开源项目知识

Java知识 java是Android开发的基础,在BAT的初面中,会涉及到比较多的java基础知识,所以比较重要,下面我介绍的书籍内容是由浅到深。 1....

3738
来自专栏大数据和云计算技术

实用调度工具Airflow

引言 前面写过一篇文章《端午搬砖:聊聊调度云服务》,主要讲云服务的。如果企业也业务上云,可以优先选用这些服务,减少工作量。 而在传统企业内部,数据集成是基础,更...

7186
来自专栏程序员的SOD蜜

“领域驱动开发”实例之旅(1)--不一样的开发模式      一、分析业务需求。    二、设计领域对象模型    三、测试领域对象模型    四、设计业务处理类    五、设计Entity和Vi

    听说DDD-“领域驱动开发”已经很久了,园子里面已经有不少大牛写过博文介绍,但我一直没有尝试过,直到今年公司的一个项目出现数据库移植,原来的业务逻辑都写...

2427
来自专栏Java学习网

每一个程序员都应当了解的11句话

每一个程序员都应当了解的11句话   1.技术只是解决问题的选择,而不是解决问题的根本   我们可以因为掌握了最新的JavaScript框架ahem、Angul...

2258
来自专栏郭耀华‘s Blog

【分享】熟练的Java程序员应该掌握哪些技术?

Java程序员应该掌握哪些能力才能算是脱离菜鸟达到熟练的程度?   1、语法:Java程序员必须比较熟悉语法,在写代码的时候IDE的编辑器对某一行报错应该能...

2995
来自专栏EAWorld

命令式和声明式,哪个才是你的菜

今天的主题是讨论一下“命令式”思想和“声明式”思想在分布式系统和微服务架构运维中的应用。 主要大纲 1. “命令式”和“声明式”的概念 2. 命令式思想在分布式...

4936

扫码关注云+社区