偶然间看到了《程序员应该知道的97件事》这本书,并不是什么新书(只是我之前没有看过而已),不过里面写的内容还是不错的,简单有效,阅读起来颇有共鸣。奇怪的是中文版网上已经很难买到了,下载了英文版阅读了下,还没读完,先写一点(只针对印象比较深的规则):
【Act with Prudence】
网上搜的翻译是“三思而后行”,内容讲解的是不要积累“技术债务”:如果你发现了什么问题需要调整(重构),但是由于工期的原因来不及做,想想“哦,下次再说吧”,这样就形成了债务。这样做实际上是风险比较高的,并不是说一定不能这样做,而是如果你这样做了,务必要想着有一天要把这些债务给还了。
我自己参与的很多项目,实际上都没有还债,结果可想而知,也不知道他们过的怎么样了。。。
前两年负责的一个项目,已经积累了很多债务而不能自拔了,我申请了几个月的时间做重构(很多无用的代码,设计严重不合理,部分代码很难理解),遗憾的是并未得到审批(答复是延后,,,再延后),拖了一年多之后,我已经不再负责那个项目了,哎。。。。
对债务0容忍,做小范围的重构,我认为是比较合理的做法(和作者的观点是一致的),如果已经很久没有这样做了,确实还债很困难。
【Apply Functional Programming Principles】
应用函数式语言。在学习Java8的时候,我才对函数式语言有了些许了解,原本认为函数式语言之所以被重视起来只是因为多核计算的优势(函数式语言因为没有副作用,所以在多核计算上优势是比较明显的)。但作者认为并不是这样:学习函数式语言之后能够让你即便是非函数式语言的编程过程中也能受益匪浅,比如传输透明性。
举例:如果你写的一个类包含这样一个操作:将一个List类型的数据直接返回给调用者(并没有使用Collections.unmodifiedList包装),这种情况的并发控制就会非常复杂了(虽然一些设计思想里面也提到过这个原则,但是我想函数式语言的精通者肯定不会做这种事情的)
题外话:我学习Java8 Lamda表达式的时候觉得有点吃力,不知道为什么要提供这样的机制,到底能够带来哪些好处,后来学习了一下Lisp语言(有本书叫《计算机程序构造和解释》),有一种豁然开朗的感觉。
【The Boy Scout Rule】
翻译过来叫童军规则,标题其实挺难懂的,但是做法我觉得非常好:就是每次Check In的时候,你需要确保本次Check in要比Check Out的代码好一些(哪怕只好一点点),至少不会变坏。这样积累下来,你的代码就会越来越好,如果每次都是赶时间或者自己比较懒,则会越来越糟糕。
【Check Your Code First Before Looking to Blame Others】
责怪他人之前首先检查自己的代码:我发现几乎所有的程序员(特别是非资深程序员)都有这个毛病,夸张的都会代码编译不过马山怀疑是不是Eclipse有Bug了,实际上90%的问题都出现在自己身上。大概10年之前我听过一个笑话:说是”程序员通常认为老婆是别人的好,代码是自己好“,说的有点流氓,但是后一句还是有道理的。
讨论的时候经常会听见诸如:”这个Bug肯定和我没关系“、”我这块代码不会有问题的“之类的论断,结果很快就被事实推翻了,但是依然如故。。。。。。
在我看来改掉这个毛病是成为资深程序员必备的条件之一。
先写这么多吧,打字太累。
相关推荐
前端学习笔记-黑马程序员 本篇文章主要介绍了 HTML 基础知识,涵盖了标签的基本概念、HTML 基本结构、文档类型声明、字符集、标签语义、标题标签、段落和换行标签、文本格式化标签、图像标签、路径、超链接标签、...
### 程序员面试宝典读书笔记:面向对象篇 #### 第十章:面向对象 **面向对象的基本概念** 面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它将数据和处理数据的方法绑定在一起,形成一个整体...
MyBatis的动态SQL功能非常强大,通过`<if>`, `<choose>`, `<when>`, `<otherwise>`, `<foreach>`等标签,可以在XML映射文件中实现条件判断和循环,从而编写出灵活多变的SQL语句。 7. **SqlSession与Executor**: ...
《程序员笔记本》是一款轻量级的应用程序,专为程序员设计,用于记录和整理各类技术笔记。这款笔记本软件的独特之处在于其“树装”结构,即采用类似目录树的方式来组织笔记内容,使得信息层次清晰,便于查找和管理。...
《简明银行会计——程序员视角》读书笔记思维导图
读书笔记:程序员的自我修养阅读笔记
在程序员的求职过程中,面试和笔试是至关重要的环节,而一份详实的面试宝典笔记能为准备阶段提供极大的帮助。这份笔记涵盖了多个方面的知识点,旨在帮助程序员巩固基础,提升技能,从而在面试中表现出色。 一、编程...
PKM2 是基于内容的个人知识管理系统,它可以将您看到的所有文字、图片信息全部转储为...<br><br>PKM2 适用于程序员、研究者、学生、信息专家、以及以互联网作为主要信息来源的网上阅读者、信息搜集者和信息发布者。<br>
HTML文档由一系列元素组成,这些元素通过标签来定义,比如`<html>`、`<head>`、`<body>`、`<p>`(段落)、`<a>`(超链接)等。在HTML5中,引入了更多语义化的标签,如`<header>`、`<nav>`、`<section>`、`<article>`...
### Perl程序员读书笔记知识点解析 #### 一、Perl语言简介 Perl是一种高级脚本语言,以其灵活性和强大的文本处理能力而闻名。它被广泛应用于系统管理、网络编程、Web开发等多个领域。Perl的一个显著特点是其丰富的...
读书笔记:程序员的自我修养笔记
读书笔记:一个程序员的自我修养
总的来说,"SpringBoot-登录认证-黑马程序员学习笔记"涵盖了Spring Security的基本用法,包括如何启用、自定义登录页面、认证逻辑以及权限控制。通过阅读源码和实践,开发者可以更深入地理解Spring Security的工作...
读书笔记:程序员的自我修养——学习笔记
读书笔记:程序员的数学 课的笔记
读书笔记:程序员的基础数学课笔记
读书笔记:一个程序员散户的自我修养
读书笔记:极客时间课程《程序员的数学基础课》学习笔记
读书笔记:学习程序员健康指南做的笔记