程序员优秀之路:一起来看下这 97 位”砖家“能给出啥编程的好建议?(5)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本瓜并未逐字逐句翻译,而是取其精要、理解抽象,结合自身进行撰文表达,与各位看官分享。认知好的编程概念,走向优秀~

image.png

本系列共 5 篇,通译自:97-things-every-x-should-know


License:由 CC BY-SA 3.0 获得许可;

欢迎点赞、收藏、评论~ O(∩_∩)O



终于来到第 5 篇啦,善始善终~


测试保障开发严谨



这位作者想说:

  1. 软件开发与桥梁建设这类实体工程相似,但最大的不同是:软件开发不需要实体材料;
  2. 对软件的测试尤其重要,软件的构建成本低,可以开发一个完整的生态来进行测试,包括:单元测试、模拟对象、测试工具等等;
  3. 测试保障了软件开发工程的严谨性,就好比建筑工程在图纸上所做的结构分析保障了工程质量;


认清“状态”



这位作者想说:

  1. 程序员对于“状态”的认定需要非常清晰;
  2. 举了一个例子:作者去喝咖啡,想找店员要一点牛奶,店员回答说:“牛奶紧缺”,作者懵 b 了,“牛奶紧缺”是什么意思?要么就是“有”牛奶,要么就是“没有”牛奶,对于作者来说,“牛奶紧缺”意味着“没有”牛奶吗?
  3. 现实中,我们会对很多状态进行模糊的描述,但是在程序员的世界中,这不被允许。


  1. 认清“状态”可以让你的代码更简洁、健壮;


不要闭门造车



这位作者想说:

  1. 对程序员的刻板印象是:编程需要独自深度思考;
  2. 但作者是结对编程的死忠粉;(结对编程,前文提过)
  3. 与同事合作解决问题,能提升开发效率;


错误的交织



这位作者想说:

  1. 举了一个例子:阿波罗 11 号登月舱存在一个着陆器不稳定的错误,但是这个错误被另外一个错误弥补了,以至于登月时它们都没被发现;
  2. 当多个错误交织,修复错误将是一个非常头痛的事情,你将会不断遇到错误陷阱;
  3. 如果遇到这类问题,你需要有一个清醒的头脑,并考虑所有可能性;


Ubuntu



  • Umuntu ngumuntu ngabantu:他人在,故我在。


不说了,这位作者又是结对编程的死忠粉~

不过,有个哲学问题可以探讨:

笛卡尔说:“我思故我在”,而祖鲁族有句谚语:“他人在,故我在”,意味着:与外界的联系和互动,是形成和保持连贯完整的自我印象的重要外在条件。剥夺这些条件后,人会面临失去自我的危险。


使用 Unix



这位作者想说:

  1. 他钟爱 Unix 胜过 IDE;
  2. Unix 可以非常有效的处理庞大的数据集;
  3. Unix 小而美;
  4. 在 Windows 上,Cygwin 环境可以提供 Unix;
  5. 遵循 Unix 规则,地球都是你的~(QAQ, NB)


算法和数据结构



这位作者想说:


  1. 举了一个例子:一个银行行长嫌购买的一批电脑太慢,最后发现是因为一个程序消耗了所有 CPU,这个程序就是一个循环算法;
  2. 先让程序能用,不一定是对的;
  3. 选择不同的算法和数据结构将会有很大不同;
  4. 推荐一本书 Donald Knuth 的《计算机编程艺术》


拒绝冗长日志



这位作者想说:

  1. 大多日志记录根本无用;
  2. 分布式系统要考虑如何处理外部依赖失败时的日志记录问题;
  3. 日志是监控的一部分,记录它,就要有处理它的打算;
  4. 杂乱的日志投入生产将难以控制;


WET 消耗性能



我们前面说了 DRY 原则(不要重复自己),任何重复都可考虑进行抽象;

而 DRY 的对立原则是 WET(每次输入);


看段代码:遍历集合来进行查询

// WET:使用这个类的每个人都可能重新实现相同的查询;
public class UsageExample {
    private ArrayList<Customer> allCustomers = new ArrayList<Customer>();
    // ...
    public ArrayList<Customer> findCustomersThatSpendAtLeast(Money amount) {
        ArrayList<Customer> customersOfInterest = new ArrayList<Customer>();
        for (Customer customer: allCustomers) {
            if (customer.spendsAtLeast(amount))
               customersOfInterest.add(customer);
        }
        return customersOfInterest;
    }
}
// DRY:从 API 中删除暴露的原始集合,可以轻松避免上述情况;
public class CustomerList {
    private ArrayList<Customer> customers = new ArrayList<Customer>();
    private SortedList<Customer> customersSortedBySpendingLevel = new SortedList<Customer>();
    // ...
    public CustomerList findCustomersThatSpendAtLeast(Money amount) {
        return new CustomerList(customersSortedBySpendingLevel.elementsLargerThan(amount));
    }
}
public class UsageExample {
    public static void main(String[] args) {
        CustomerList customers = new CustomerList();
        // ...
        CustomerList customersOfInterest = customers.findCustomersThatSpendAtLeast(someMinimalAmount);
        // ...
    }
}

遵循 DRY ,让性能更优。


开发和测试合作



这位作者想说:

  1. 当程序员和测试人员合作,就能更快弄清错误;
  2. 程序员可以给测试提供建议以更好的覆盖测试;
  3. 程序员和测试人员配合完成自动化,了解良好的编码实践;
  4. 放下成见、合作共赢;


终身维护代码



这位作者想说:

  1. 编码态度第一,编写代码就好像你必须在你的余生会一直维护它一样;
  2. 这种认知会帮你成为一位专家,因为你会去学习设计模式、编写好的注释、测试代码并不断重构、不断扩展;
  3. 编的不是代码,是态度!!!


编写小函数



这位作者想说:

  1. 问题的关键都是一些小函数,它可能只有几行,几个变量,几个操作;
  2. 小函数通常回归到一些数学函数;
  3. 用小函数写一些测试用例,是解决问题的关键;


为他人编写测试



这位作者想说:

  1. 好的测试有完善的测试文档,描述测试场景、原理;
  2. 为他人编写测试,让其他人也能看懂;
  3. 测试你的测试,给出测试报告;
  4. 试着和测试人员换个角色;


关心代码



这位作者想说:

  1. 写得一手好代码需要努力工作、不断实践、不断关心代码;
  2. 精通算法不代表能写出好的代码,简洁的代码往往是好的代码;
  3. 合格程序员和优秀程序员之间的真正区别在于:态度;(这里与前文小点又契合了,看来态度真的还挺重要!!)
  4. 没有程序员是一座孤岛;
  5. 阅读本文意味着你关心代码,祝福你; O(∩_∩)O


了解客户



这位作者想说:

  1. 客户不会把自己的需求讲的非常详细,或者说在与客户的沟通中获得的信息是有限的,所以需要多次的互动;
  2. 尽早挑战挑战客户的需求的不合理之处;
  3. 学会用客户的术语与他们沟通,因为身份不同,即使谈论同一个东西,差异也会很大
  4. 用图表或其它视觉辅助工具和客户沟通,提高信息的保留率;


✨✨✨✨✨

呜呼哀哉,总算是干完了~

本系列是 97 个不同程序员针对编程给出的建议!

有些是新奇的,比如:技术负债编程即设计Ubuntu 哲学思考等;

有些是通过讲故事引人入胜的,比如:认清“状态” 中的买牛奶故事,错误的交织中的登月飞船故事等;


有些是得到重新认知的,比如:开源实现梦想让项目说话结对编程等;

有些是要牢记的:态度第一重视测试DRY 原则等......

完整看一遍还是有很多感触的,不过目前可能还只是停留在感触,或许之后会再结合实战再谈~


不过别担心,种子已经埋下了!你一定能成长为一个有调性、有尿性的程序员儿 😎


OK,以上便是系列第 5 篇分享(共5篇),关注专栏,系列持续追踪~

我是掘进安东尼,输出暴露输入,技术洞见生活,下次再会~



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
28天前
|
小程序 C++ Python
探索代码的诗意——我的编程感悟
【5月更文挑战第31天】在数字世界的浩瀚海洋中,我是一位航行者。每一次按下键盘,都是与机器灵魂的对话。这篇文章是我个人的技术之旅,记录了从困惑到顿悟的过程,以及那些让我着迷的编程之美。它不仅仅是关于技术的,更是关于创造和表达的艺术。
|
11月前
|
算法 Unix Java
初学者值得一看:什么是编程/C语言,编程学习建议,编程解疑与误区注意
初学者值得一看:什么是编程/C语言,编程学习建议,编程解疑与误区注意
136 0
|
JavaScript 前端开发 C语言
聊一聊编程中的函数
聊一聊编程中的函数
58 0
|
程序员 测试技术 开发工具
程序员成长第十篇:从阅读代码开始
程序员成长第十篇:从阅读代码开始
178 0
|
IDE 程序员 测试技术
程序员优秀之路:一起来看下这 97 位”砖家“能给出啥编程的好建议?(4)
本瓜并未逐字逐句翻译,而是取其精要、理解抽象,结合自身进行撰文表达,与各位看官分享。认知好的编程概念,走向优秀~
|
设计模式 缓存 Java
程序员优秀之路:一起来看下这 97 位”砖家“能给出啥编程的好建议?(2)
本瓜并未逐字逐句翻译,而是取其精要、理解抽象,结合自身进行撰文表达,与各位看官分享。认知好的编程概念,走向优秀~
|
SQL IDE 前端开发
程序员优秀之路:一起来看下这 97 位”砖家“能给出啥编程的好建议?(3)
本瓜并未逐字逐句翻译,而是取其精要、理解抽象,结合自身进行撰文表达,与各位看官分享。认知好的编程概念,走向优秀~
|
机器人 程序员 编译器
程序员优秀之路:一起来看下这 97 位”砖家“能给出啥编程的好建议?(1)
咱们程序员在接到需求初期,是没办法对整个需求作完全正确评估的!(本瓜以为,由产品需求到技术落地是有着天然的鸿沟的)所以,多数情况下,我们都会在代码迭代过程中面对之前未预想到的问题。
|
测试技术
软件测试好学吗 只要选对了学习方式,就并不难学
我们都知道,如今互联网IT行业,在国内可是非常吃香的,尤其是近些年随着软件的普及,人们对软件的要求也是越来越高,因此国内各大互联网企业,也开始大量招聘软件测试人员,但由于这个岗位在我国的发展时间并不长,人员需求也是供应不求的。
177 0
软件测试好学吗 只要选对了学习方式,就并不难学
|
程序员 定位技术
我21年编程生涯中的21个错误
  从我21年的编程中学到的经验教训。   2022年1月18日。今天对我来说是美好的一天。 我终于完成了21年编程。   ew! 好像昨天和今天在这里一样,我的内心写着一个40岁的中年程序员,他成功地度过了软件行业这个危险世界的正弦波峰和波谷。 是的,至少对我来说,这是决定性的时刻。   话虽如此,犯错是实现卓越的学习途径的一部分。 快速且经常失败是成功的标志。 为了避免多次犯同样的错误,应该放在优先列表上。   是的,个人经验是最有效的学习方法,但是通过他人的经验获得的知识是一种更快,更聪明的方法,可以减轻痛苦。 毕竟,生命是短暂的。 您不可能一生中犯下所有可能的错误。   软件
113 0