引言
科学要通过工程才能变成产品,才能改变世界。
计算机科学在一个相对理想的状态下工作,这将注意力集中在量级的改进上。
在工程中必须使用在科学上最好的方法,然后再作细节的改进。
先找到极限所在,然后在极限里寻找具体问题的答案。 工程师知道,任何产品的性能都有一个物理上无法突破的极限,这个极限是可以通过已有的理论直接给出。
在现实状态的产品中,要考虑各种细节。
产品经理在没有数据之前不要轻易给出结论。
I 预备知识
1.1 广义上的科学和狭义上的科学
- 广义上的科学:任何成为体系的、能够自洽的知识。
- 狭义上的科学:源于古希腊,建立在严格逻辑推理之上,后来在近代西方科学方法基础上发展起来的,可以证实和证伪的完整体系。
科学是系统的,是在逻辑的基础上不断递进的,而不是各种知识点简单的结合。我们的学习也应该是系统的,只有这样我们才能获得可叠加式的进步。
科学不同于解决实际问题的技术,它需要很多先决条件。
科学需要从业者有比较纯粹的探索精神,远离物质的诱惑。
1.2 科学是一种求真的过程
是一种对世界的态度,是理解世界的观点,和日常做事的方法。
科学的结论总会过时,成为过去,但是信念永存,方法永存。 真理都是有局限性的,它们是在一定范围内解决我们的困惑、我们的问题。
1.3 科学的方法
从事实出发,讲究逻辑,得到合理的结论。
学习打篮球:教练先教你对大部分人都适用的投篮要领,然后观察你的投篮,根据你姿势中一些不好的动作,告诉你一套可以遵从的方式。
1.4 量级思维
数量级指一系列 10 的幂:数量级每差出一级,数据相差十倍左右。
个、十、百、千、万
量级是一种方便表示数量级的方式,通常使用科学计数法表示。
地球的质量是5.98x
10^24
千克,其中10^24
就是量级。 量级简单地讲,就是芝麻、橘子、西瓜、大象、大山、地球、太阳、银河系这样大的差别。
一个人在公司的成就:成功率x事情的量级x做事的速度
提高事情的量级需要不断学习,转变自己的角色。
从老师转型成校长,就有了量级上的突破。
对不同规模的问题要采用不同的方法
II 计算机科学
2.1 计算机科学的工作
- 第一步:将我们这个世界的现实问题变成一个数学问题,这就是计算机科学家们做的事情。
对于绝大部分计算机科学家来讲,他们不需要自己真的去设计制造计算机,而是做好现实问题到计算机问题的转化。 还有一部分科学家在研究如何让计算机变得更快更强大。
- 第二步:将数学问题重新描述一下,变成计算机能够处理的问题,这就是计算机工程师的工作,这个重新描述的过程,其实就是把人的自然语言变成计算机程序语言。
2.2 计算机科学的基本做事原则:比较标准
明确一个公平的比较标准:过滤掉所有次要的因素,构建一个理想的环境(虚拟的环境),构建可比较的、容易对比的、理想的平台。
应用场景:首先明确游戏规则,然后再开始做研究,确定基线,对比方法的优缺点。
将世界理想化的目的:找到真正的主要矛盾,过滤出那些相对次要的噪音。 将问题抽象出来,以便于抓住本质。
案例:
- 伽利略和牛顿在研究运动时,假设空气阻力和摩擦力可以忽略不计的,来构建理想状态。
- 科学家波义耳和马略特在研究气体压强和空间大小的关系时,也是先构造出理想的气体状态。
- 亚里士多德因为无滤除空气阻力对重力加速度的影响,得到了重物比轻物下降速度快的荒唐结论。
2.3 计算机思维的本质
计算机思维:伴随着计算机出现的思维方式。计算机思维的本质:翻译
把人想要做的具体事情,翻译成计算机能够懂得的程序语言。 软件开发中的关键任务就是理解并处理反映软件构成的复杂概念。
III 计算机工程
3.1 计算机科学和工程的关系
科学家考虑的是对和错,工程师只是在现有条件下考虑好和坏的解决方案。
一个合格的软件工程师,要知道采用别人已经写好的,被长期证明运行无误的源代码,作为自己开发新产品的工具,这样才能把精力集中在解决前人未解决的问题上。
科学家告诉大家这件事的可行性,但工程师要明白怎么做。
工程师的工作:科学变成技术再变成产品
3.2 工程思维:在边界里面做事情,遵循一套工程思路解决问题。
https://blog.csdn.net/z929118967/article/details/131559831?spm=1001.2014.3001.5501
先找到极限所在,然后在极限里寻找具体问题的答案。
在工程中必须使用在科学上最好的方法,然后再作细节的改进。
3.3 合格的工程师处理不同量级事物时的做法
好的工程师最重要的能力是了解最新的科学进展,并且根据实际情况使用最新的技术解决实际问题,考虑预案。
成就=成功率x事情的量级x做事的速度
不断学习,转变自己的角色,提高事情的量级。
合格的工程师处理不同量级事物时的做法:
- 考虑量级的差异: 小量级和大量级的东西放在一起,前者必须被忽略掉。
- 几个小量级的东西放在一起,远比不上一个大量级的东西。
- 试验和测试非常重要,任何代码不做到几乎100%的测试覆盖率,是不能开始系统调试的,而不经过仔细的调试和小范围用户测试,是不能上线的。
- 大的目标要分解成简单的,一个个解决, 一个复杂的问题如果能拆成两个等价的简单的问题。
- 工程师要懂得从量级上改进工程方法,这样的收获几万倍,甚至更多。
- 工程师要能够梳理出一个难题中各个因素在量级上的不同,知道把那些无关紧要的事情从自己的To Do List上删掉。
- 工程师要想着在更有影响力的事情中,参与1%。
- 产品经理要想怎样能让用户为你的产品多掏一倍的价钱,懂得在细节上做1%的改进,让产品的品质显得高出一个数量级。
Mac的视网膜显示屏成本比一般的显示屏价格贵不了10美元,但可以让电脑多卖一百多美元,而且用户的感觉好了不止一倍。
- 投资人要想办法写出最大的一张支票。
- 讲师要想如何当好校长。
IV 计算机科学和工程的区别
4.1 方向和道路之分别
科学指出正确的方向,工程沿着科学指出的方向建设道路。
在工程上,专业人士和业余爱好者的一个差别就在于是否了解极限的存在。有了这个理论极限,做事就不至于异想天开。
工程师掌握的知识是做事情的基线,之所以接受教育,就是为了提高基线。
4.2 关注不同的事情,不同的工作环境。
计算机科学家聚焦在量级上提高性能,需要构建理想的环境,摒除一些不必要的干扰,把主要矛盾突出出来。
科学家要变为工程师,思维方式需要改变,要从理想状态进入到现实状态。
好的工程师最重要的能力是了解最新的科学进展,并且根据实际情况使用最新的技术解决实际问题,考虑预案。
工程上节省几倍的时间是很有意义的,在工程上需要计较2%的运行时间。 找到极限所在,然后在极限里寻找具体问题的答案。
4.3 跟钱的距离不同
科学家要离短期的利益远一点,才能把目光放远