1、如何来评判一个程序员到底对OOP理解的怎么样呢?
面向对象编程OOP,可以说是我们最熟悉的编程范式,结合实际的过程我们一般有如下2点理解:
1、面向对象编程注重抽象和分层,这是计算机科学解决复杂问题的方案,甚至是人类解决复杂问题的方案。如 SpringMVC,就是典型的一种分层和抽象策略,它让我们设计大型复杂系统成为了可能,可以逐层击破,并且各自优化。
2、面向对象编程还天然地契合现实世界的生活,如我们有一个动物园类,里面有动物的list集合,每个动物是一种对象,这样的描述使代码易于理解。
如何来评判一个程序员到底对OOP理解的怎么样呢?
面向对象编程,我自己踩过的坑,就是分层透传问题。底层的实现直接上浮到抽象层,这样就会出现代码逐渐奔溃的现象。
假如可以深入回答以下几个问题,我觉得基本可以判断一个人对OOP已经理解的很有门道了:
1、为什么类似的 实体类 对象,要分 VO、Entity、DO等多个类似的对象?
2、为什么写一个实现类,总是要先写一个接口?
3、为什么很多地方需要一个工厂模式?不建议直接 new 一个对象?
2、为什么很多leader都喜欢闭环,比如闭环研发?
但如果自己就是业务方,独立负责一块业务,很多 Leader 肯定就会想自己闭环最好,不然还得等排期。还不如自己直接招几个人,这样更高效,这是人性。
但实际上,需要大家更客观去看。早期自闭环,可以让业务从 0-1 更高效。发展到一定阶段后,特别是各个业务板块需要互相关联时,集中化的技术支撑,往往能复用专业能力,整体业务效能会更高。
我现在更能理解一句话:分工是整个社会效能提升的关键。工业社会的分工极大提高了社会运转效率。以前农业社会衣食住行所需要的东西都可以自己生产,这叫做自闭环,效率是极低的。正是因为有了社会分工,整个人类社会才飞速发展。
3、一个人应该如何得到持续的成长?
个人追求持续的成长,就得要不断的做决策,甘愿冒风险,从失败中学习。能力成长的关键,在于发现和跨越障碍。
如果当前获得不到收益,通常权衡风险,就会考虑得比较多。
看起来是要理性决策,但其实很复杂,这里面还有更多是人的性格决定的。你想到的,悟到的,做到的,这些都是真正筑成你。
克服自己的心魔,内心变强大,变成一个有求知欲、向上生长的人,默默努力,静等花开。
4、程序员耗费的大部分精力解决的大部分问题都不是程序问题。
比如:
你辛辛苦苦写的代码还没上线,产品经理就告诉你需求变了;
你拼命加班只因错估了工作量,自己造的“孽”,含着泪也要搞定;
你累死累活做出来的东西和要求不符,只能从头再来;
你大面积地修改代码只是因为设计糟糕,无法适应新的需求变化;
这些问题,分析下来,是由一个叫做偶然复杂度导致的问题。《人月神话》中提到两个非常重要的概念:本质复杂度(Essential Complexity)和偶然复杂度(Accident Complexity)。
比如,我们编写一个购物车的功能,这里面的逻辑,就是本质复杂度,但是我为了写好购物车的代码,我尝试用了很多种IDEA工具,切换的成本,就是偶然复杂度。
https://time.geekbang.org/column/article/2729
https://time.geekbang.org/column/article/73980
这里记录,我每周碰到的,或想到的,引起触动,或感动的,事物的思考及笔记。不见得都对,但开始思考记录总是好的。