程序员应有的谦逊

作者: 小明同学 | 来源:发表于2016-08-02 04:47 被阅读102次
    What is Modest

    谦逊是什么,其实我很难给出文学上的解释。从百科上释义如下:

    谦虚、不浮夸、低调、为人低调,不自满。是一种自我的认识,良好的品德

    我理解的谦逊就是 Modest,是对于身边人或者个人习惯的一种尊重。为什么会谈到这个问题,是因为最近在工作中遇到一些事情,让我开始了自我反思。

    场景一

    我在和 Mike 结对编程时,我会提前看一下他的工作年限。从工作简历上看起来,此人工作了五六年,应该是个大神。于是我和他工作时倾向于被他带着走,逐渐的缺少思考。因为我觉得他就是个大神,大神做得应该都是对的。

    场景二

    我在和 Allen 结对编程时,我注意到 Allen 其实只工作一年,看起来工作年限并没有我时间长。这时候我在和她结对时,会倾向于表达自己的观点,并且有些时候对于自己的观点更是根深蒂固的坚持,很少去考虑她的想法。

    场景三

    我和 Mike 正在为一个按时间分类的问题犯愁,Mike 想了好一会儿,好像没有好的结果。于是我自己在纸上画了画,似乎有点想法了。于是我问 Mike 我是不是可以试试。Mike 也友好的示意我试试。所以我一股脑儿把自己的想法用代码实现出来了,用几个测试用例跑了下,似乎结果还可以。于是 Mike 从简单到难,用一个个测试了来覆盖。最后我们再重构了下代码。

    场景四

    我和 Allen 就多环境一个URL的配置问题,引起了讨论。我坚持认为直接把整个的URL配置放在配置文件中就可以了。 Allen 认为把URL的域名部分放在配置文件中,具体的页面放在代码中,这样别人更容易看懂。当然我在尽力告诉她我这样是最好的,因为她那样并没有提高重用性等等。

    似乎 Allen 也没有被我说服,午饭时我又在思考这个问题。我想到了什么,下午开始工作时,我说我们先按照你的方法做吧,因为我觉得两者差别不是太大。当然我不想为了一个问题请第三者仲裁,这样没有被采用方案的哪一方岂不是很尴尬。通过 Allen 的做法,在最后资源命名时,我们发现这种做法,最后命名时的尴尬揭露了这种做法的不合适。最后我们愉快的采用了另外一个方案。

    反思

    为什么我在开始合作时,会先看同事的简历?

    这是个很错误的习惯,因为我潜意识里会把一个人的项目经验作为一个人资质的评判。似乎这样子能让我“知已知彼,百战不怠”。但是事实似乎并不是如此。

    首先,做决策沟通过程中,我们应该充分考虑互相的想法。因为我们永远不能说,经验丰富的人说的话就一定是对的。特别是在写代码过程中,每个人看到的问题角度不一样,所以每个人处理问题的手段也可能有差异。结对编程的目的就是帮助你们作出最好的决策。

    其实,要敢于发声。强者不必咄咄逼人,弱者也不必一言不发。你不说出口,没人知道你的想法。同样,你有不懂的问题,憋在心里也永远没有答案。所以你应该借助结对编程这个合作形式,把想问的,不懂得,想说的都及时的抛出来。才能给同伴一个反馈。

    理解

    Mike 遵循严格的 TDD

    Mike 在写代码时,遵循很严格的 TDD,Java 里面的一个注解都需要用测试覆盖。如果没有测试覆盖的情况下,你添加的任意一行代码,他会立马给你删掉。也就是如果按照这种方式写代码,测试率百分百应该不是问题。

    Mike 认为单元测试就应该测单元

    和 Mike 同学结对过程中,发现他对单元测试的界定很严格。比如 A 类的职责是调用 API 获取数据,调用 B 类处理一个复杂的分组处理,然后简单的过滤进行返回。首先我们给 B 类这个分组器添加了严格的单元测试,确保其功能的正常。当我给 A 添加测试时, Mike 坚持将 B 类这个分组器给 Mock 掉,因为在给 A 类测试时,我们不希望受到 B 类的影响,所以即使 B 类只要一个简单的方法,他也需要保证 A 的测试只是在测试 A。

    对于以上两种情况,你很难说这样有什么问题。因为测试驱动开发或者单元测试不就是应该这样吗?所以当你尝试去遵守时,却发现比如确保每一行代码都有测试,真是太难了。

    这时候,首先我理解 Mike 这么做的初衷,他看起来是一个完美主义者,而且是一个资深的 TDD 捍卫者。我应该尊重他的这个习惯,因为这的确是个好习惯。问题在于我们在平时做事过程中,是不是要严格这样遵守呢?其实这就要看项目里面的 “潜规则”。一般大家都会达成共识,比如怎样的代码块需要严格测试的,什么样的代码只需要稍微测试下即可的。有了共识,其实按照大家的工作习惯来,就基本没什么问题。

    开放

    除了上面具体的编程习惯,不知道你是不是遇到了下面这些问题:

    1. 产品代码没有单元测试的公司不是好公司
    2. 编写 Java 还在使用 Eclipse 的
    3. 还在用 Windows 机器开发应用程序
    4. 竟然还在使用 SVN 进行代码管理
    5. 只知道 CSDN,不知道 Github 的开发人员
    6. 公司内部网络访问不了 Google
    7. 手工部署,没有使用过 Jenkins 等工具
    8. 传统的瀑布流开发方式
    9. 每天有上司盯着你,公司有严格的 KPI
    10. 开发 Android 竟然还在使用 Eclipse,说好的 Android Studio呢?

    多少次,我尝试去了解一家公司时,会使用这些指标给一家公司定性。似乎只有和我现在的公司开发方式以及文化相似的公司才是好公司。现在想来也有点过了。

    毕竟,任何一家公司都有自己的做事方式,其实你很难评价这种方式是好还是不好。比如下面几种:

    1. 扁平化组织一定比传统的层级化组织有优势?
    2. Mac 就一定比 Windows 高效?
    3. 所有的互联网公司都应该使用 TDD?
    4. Eclipse 真的就是一坨渣,好程序就应该使用 Intellij?

    其实上述问题,大家每个人都有每个人的看法。拿扁平化组织而言,我司难道就比组织层级化的华为优秀?

    对于 TDD 而言,国内的创业公司节奏很快,当你的 APP 还在写测试时,别人的产品也许早就上线了。等你花了三倍的时间把产品开发完,发现别人早就验证这个市场不靠谱。然后你一堆代码就烂在那里。

    对于操作系统,Mac 和 Windows 各有优势,相信每个人都有自己的偏好,并且每个人都会根据自己的实际财力情况,进行取舍。

    当我们在喷 Eclipse 时,其实我自己当时也是用 Eclipse 来写 Java 程序,来写 Android 程序的。后来工作后,在新公司的要求下,才放弃 Eclipse。

    谦逊

    恰巧前段时间读到了陈先生公众号里面一篇文章,讲的是一个年过半百的老者去面试的故事。文中老者在面试时表现的恭敬与认真的态度着实给我上了一课。因为我曾经也有个面试,那个意外的面试纯粹是为了探探其他公司招人的要求,因为我根本没有想到去那家公司。于是面试时表现的可漫不经心了。没有简历,随便的自我介绍,其实完全是一种无所谓的态度。

    细思极恐,面试官看到我这个样子该是多么的嫌弃。我竟不曾想到我这样留给别人什么印象。虽然我没有想过得到别人的认可,但是我应该给予每个人应有的尊重。应该时刻保持谦逊。这样我才可能在花甲之年,成为文中那个受人尊敬的老者。

    结语

    当你遇到不同的人,不同的公司时,千万不要见怪。其实一切的不适应都只是你不喜欢变化的烂借口。而且当你足够牛逼时,你可以影响他人,当你有足够的影响力的时候,你有能力改变一些事情。

    相关文章

      网友评论

      本文标题:程序员应有的谦逊

      本文链接:https://www.haomeiwen.com/subject/axjfsttx.html