入行至今快12年,这段时间空闲下来,思考一个问题:进入油腻之年,谈到程序,应该谈些什么?
是编程语言的语法吗?这些年接触过C、C++、Golang、Java、OC,看过C#、JS、Erlang。编程语言这么多,怎么学习得过来?
是语言相关的库吗?学语言必然要学相关的语言库。这就更是无究无尽,有数不尽的技术细节、编程技巧,怎么学习得过来?
是学习编程框架吗?编程框架最核心的目的,提高开发效率。因为更靠近业务,Java、JS的框架尤其多。框架封装好,开发者只需要关注业务逻辑,不可或缺,但似乎也不是必需的。见过不少Android程序员,提起四大组件,说得眉飞色舞,但问起.9切图应该怎么设置,却答不上来。
是谈微服务、分布式系统、DevOps吗?这是大规模线上服务必须,但又有多少业务有此需求,又有多少业务是过度设计的,不但没有收益,反而带来额外的维护成本。
技术变化得如此频繁,如何才能跟得上发展呢?开源时代,能接触的优秀项目难以计数,又怎么让不至于迷失于符号、变量、函数中,疲于奔命。想到的答案是,在纷扰中抓住不变的东西。
Unix/Linux的接口设计有这么一个原则:提供机制而不是策略。简单而言,机制是指需要提供什么功能,而策略是如何实现这些功能。机制提供的是一种框架,策略则是基于框架的具体实现。
在我的理解里,机制就是纷扰中不变的东西,而策略则难以穷尽。
Redis面试者可能会遇到这么一个问题:为啥RedisCluster设计成16384个槽?这个问题设计得很巧妙,能考察是否对Redis的实现有深入的了解。但另一方面,若没有答上来,却不能一棒子打死。因为这属于细节,不是所有人都关注到。面试应该不仅是考察记忆能力、经历,还应该考察思考方式、解决问题的思路。故我比较推崇的面试方式是由浅入深的交流,即使面试者回答不上来,也应该不断添加提示,把问题变成一个开放性思考的问题。
此为系列文章的序。