【水文5】主观的工程Tips

Link:

码畜总结一下主观经验清单:

1. 鼓励多模态编程

强调自己只写某某语言的程序员,80%情况下,代码都没法看。

每个语言都是一个思维体系,每一种不同编程范式更是迥异的思路。只接触一类编程模式,很难打开眼界,让自己有新的提升。

当然,我有拉黑两个语言: Php、JavaScript。

2. 代码中80%抽象和通用性的考虑都是程序员自作多情

大部分的通用性设计最后都会沦为无用的代码,毕竟,架构师级别思考的需求出现的概率小于1/10000。

为了通用性,需要更多的精力去思考额外的设计。这些精力,在我看来,还是好好分配给API设计 & 变量起名上吧。

3. 代码风格需要统一,最好有检查工具

不要一套代码里面各种代码风格,一会下划线函数名,一会驼峰,驼峰还能出现首字母大小写不一的。

有些语言也提供了官方的指导,比如,Python就是PEP8。Java按照主流IDE写出来的也都是统一风格。

4. API设计属于核心工作

从编程的角度来看,API设计才是最核心的工作。

最基本:接口名称、参数顺序、参数名称。

进一步的,在思考API的过程中,会迫使自己更好的思考代码中的功能划分。就像Test Driven的过程中也会迫使自己设计更清晰、易用的API。

所以TDD的目的不是为了那几个test case,而是让你反思自己的API,提升代码的易读性(也就是 eating your own dog food)。

5. 多花点精力在变量名上

不要用handler这种没有意义的类型名&变量名,没有一毛钱的易读性可言。英语非母语,但是可以查查词典再决定用哪个名字比较好。

变量名的简写,也要符合惯例,能往惯例上靠的,就不要自己发明简写了。

6. 静态语言一定要利用好类型系统

能交给编译器检查的,不要自己操劳了;能交给类型推导的,省点力气,少打几个字母也好。

编译期就尽量把能处理的错误都覆盖掉,比跑起来半途调试要省力很多。有些代码想用通用类型包装抹掉类型,得不偿失。

7. 用OO的,就把特性用好

既然已经使用OO特性了,就一定要利用好: 能包装的都包装好,能不暴露就不暴露内部。

设计好符合使用场景的API很重要:API设计的不好,又需要把一些比较基本的类型暴露出来。暴露数据结构中的变量与使用全局变量没什么本质区别,只会让人想把你弄死。

做不到的话,那还不如不用OO,多了包装,易读性还没提升,图开心么…

8. 多用三方库,业余造轮子

有比较标准的三方库就直接用,不要自己搞一些幺蛾子。自己写的东西八成不如人家的,而且还增加了维护成本。

业余自己可以造轮子玩啊,当然996的这种人可能不明白业余造轮子的乐趣,毕竟可能他们连性生活都没有,虽然我也没有,呵呵。

9. 不要刻意追求设计模式

清楚简单的代码比套用设计模式更重要。

设计模式只是提供了一个guideline,以及行业共识,方便沟通和现用。

但不是为了设计模式而设计模式:代码里面套一堆模式只为实现一个功能,实际上很简短的代码就可以完成。

10. 易读性 > 一切

绝大部分情况下:易读性 > 一切。

程序员么,就是个文字工作者。写出来的东西别人读不下去(或者自己也读不下去),是不是不太符合文字工作者的自我修养?

11. 不要编写有副作用的函数

这样的函数不管是调试还是阅读,都容易让人产生骂人的冲动。(我的)理想的函数就是:1+N输入(1可能是被修改的,N不允许被修改),1输出,完成1功能,错误流程可以用异常。

12. IDE,IDE,IDE

已经是现代社会了,写代码要关注的还是生产力水平。IDE整体上还是代表了先进生产力的方向。

Emacs、Vim、甚至VSCode,都不能称为一个完整的IDE。

一个技术型公司,理应在这些方面为员工投入,其实相对程序员的人力成本、公司的运营成本,这点钱根本微不足道,顺路还避免了法律风险、提升了生产力、增加了员工好感、还能有商业支持,真的,血赚的买卖。

13. 在有选择的情况下,尽量避免更底层的语言

举个例子,同样一件事:

Python和Java同时都能做,选Python。

Java和CPP同时都能做,选Java。

不要谈性能、不要谈性能、不要谈性能。

能够通过更底层的语言对硬件有更精细的控制,带来性能方面大范围提升。这样的程序员百里挑一,先掂量掂量自己组里有没有这个价位的人。不论是个人还是leader,对自己的状况要有基本的AC数。

真碰到热点了,可以用底层代码写个接口给上层调。相比整体替换底层语言,这对个人或者团队的技术要求低几个数量级。

14. 重视工具开发

工具就是技术的杠杆,你买房知道贷款、炒股知道融资,写起程序来就不管不顾工具开发了,想不开?何况工具带来的自动化、标准化,就是工程方面的追求方向。一个工程师,不去追求自动化、标准化,难道追求“工匠精神”,天天弯腰驼背在工位上磨玻璃?

15. 避免雄性动物的本能

雄性动物对于尺寸的追求有一种魔怔,追求对了领域和方向也没什么问题。

但是,一天到晚只追求代码行数、新feature数量、项目越复杂越high,是不是就有点…emmm… 当然,谁X大,谁说了算。