在物理界和数学界,我们经常会听到一句话,叫做这个公式好美,这个论证方式完美无缺。
网上有很多谈程序员规划的文章,有很多的是从能力角度来阐述。比如初级程序员、中级程序员、高级程序员、技术总监等等,还有一些事从工作经验方面来阐述,比如工作的 1~2 年,3~5 年,5 年以上等等。这篇文章尝试以「三观」的角度更加清晰简单的阐述程序员的职业生涯。欢迎大家留言评论。
这三观指的是微观层面、中观层面和宏观层面。
中观层面:
先来谈中观层面,因为大部分的互联网公司,大部分的程序员,应该都是在这一个层次。这个层面要解决的是 80% 的技术问题。
中观层面是一个程序员基本上都要求达到的一个层面,这个层面要求程序员对业务有足够的了解。程序员需要意识到,技术很重要,但技术不是目的,而是手段。通过这个手段来解决大部分的问题,服务用户。大家要注意不要为了秀技术而使用技术,而是要让你的技术为商业服务。 大部分的互联网公司,考察一个程序员合不合格,主要是对业务能力的要求。也就是在中观层面进行考察。产品经理给了需求之后,能不能完美的完成它。一个技术人,不管他理论知识有多牛逼,比如申请了什么专利,取得了什么技术突破,如果不能解决大部分的工程问题,那他的中观层面还是存在问题的。不适合大部分的互联网工作。 举个例子,比如未来产品半年的日活是 50W,你要解决的就是 50W 的问题。你去解决 100W 的问题可不可以?当然可以。但是如果你如果定义 100W 作为问题,在做事的过程中会变得不聚焦。有很多的并发问题,效率问题,成本问题需要额外的考虑。所以在 50W 的问题下,你定义 100W 的目标,我认为这不是一个程序员中观层面需要做的。
微观层面:
微观层面是一个个的技术点,「微」字也体现出了这点。做 Android 的产品或者做 iOS 的产品,很多的时候聚焦的是应用层的东西,也就是中观层面的工作。具体的技术背后的原理由于工作重心的原因,可能涉及的不多。
比如 Android 和 iOS ,在中层关注的是如何通过调用 api 实现产品想要的功能和需求,但是这些 api 背后到底做了什么,没有了解。这些东西我们需要从微观的层面去了解。
当一个程序员从微观层面了解的更清楚以后,他的技术架构才能更加的牢固,否则很多的时候业务层面碰到的问题往往不能从根源上解决。如果这一层次没有达到,那么在中观做事的时候会慌。原因是因为只是知道怎么做(How),不知道为什么能那么做(Why)。
微观更多体现的是一个基础层面的事,如果没有大的地基,很难支撑起上层的建筑。一旦产品的业务线更改了之后,很多时候就需要重新学习。能从微观上去解释到底这个功能的背后实现原理是什么,就不慌。其实掌握了微观层面,在中观层面做事就会事半功倍。
举个例子,初中的时候,大家都学过一元二次方程,对于它的求根公式也背的滚瓜烂熟。如果我们仅限于会用,那么就只属于中观层次。当时记得很清楚,老师花了一堂课的时间来推导这个公式,但是相信很多的人可能没有记住怎么推导,只是记住了最后的公式。设想下一种情况,如果万一求根公式忘记了或者要求二元二次方程,你觉得是记住公式的人解出方程的可能性大还是知道了推导过程的人解出方程的可能性更大。
宏观层面:
宏观站在更高的角度,脱离了具体业务。记住,我这里有「具体」两个定语,而不是说脱离了技术和业务。宏观是一个抽象的层次。能够将一些具象的事务抽象化。能够以模型的方式应用于大千世界。很多年前,有一个概念很火,叫做建模。含义其实就是从一个个的具象中抽象出模型,通过这个模型就能预测出具象世界的一些发展。
宏观强调整个产品从技术角度的设计和实现。业务模块怎么划分,各模块怎么通信,api 的接口如何定义,代码如何管理,单元测试如何实施,如何持续集成。
站在一个更高的角度,移动端,前端,后端的框架如何设计,能够支撑未来业务的不断变化以及用户量的不断突破。能够以更长的时间线来支撑项目。上面提到的 100W 的问题,就属于宏观层面需要解决的问题。
对于一个大型业务或者系统的架构师来说,需要了解中观层面和微观层面,然后进行设计。
有一个名词一直比较火:全栈。我们在形容全栈的时候,会用 T 来表示,表明这个人除了深度外一束,还有那一横。回到上面提到的三观,似乎很好的解释了这样的一种人。首先你得是个初始化的 T ,这其实是一个中观层面,你有一点的广度,也有一定的深度,能够解决大部分业务性的问题。其次,那所谓的一竖,其实就是微观层面,让你了解技术的一些本像。越长越代表技术越深。那一横,其实就是宏观层面,让你对技术形成一个体,越长代表技术越广。
国内的技术人员,对于技术有一种偏见,认为只有懂底层或者架构师才是真正的技术高手。在《技术人最重要的能力是什么?》这篇文章中,提到了两个观点:
- 技术要能解决具体问题才有价值;
- 问题的复杂度决定技术实力的高度。其实所谓的三观,都是在解决具体的问题,只不过特定场景下的问题汇对应不同的三观层面罢了。
假如一个互联网公司产品界面,一个计算机理论知识很强的人,会各种算法,但是却连一个按钮的点击事件处理都不清楚,他的公司的价值又有多高呢?