高屋建瓴的理解很重要
做理工科,学习或者做项目,高屋建瓴的理解很重要。
我为此走了很多弯路,但是我去给别人讲的时候,他们会不耐烦,我是喜欢去先理解,然后解决问题的人;大部分人是我要做什么,然后我要什么东西,然后我做出来。这是两条路,后面这个在做项目方面会非常快,但是往往对问题的理解会很浅,做出来的东西往往也是应付指标或者评奖评优,但是在现代的项目节奏中,绝对是这样做更适用,因为现在的时代变化很快,很多时候你前脚学的东西后脚就再用不上了,彻底消解了你去了解它“底层是什么样的,到底做没做靠谱”的意义。
但是如果是给人授课,或者做更接近一些数理底层的东西,还是要抓到本质。我写这篇文章其实主要是想列几个例子。
-------
第一个例子:photoshop
我应该是2010年的时候没事做想学学photoshop,这个兴趣的来源是因为计算机老师教过个例子,然后就需要找视频,当时是youku还是土豆,找到了一个叫李涛的高手之路,大概9个多小时,我很认真看了大概好几天,当时我还很小,理解力不够,所以经常倒回去,看看了好几天,好像学了photoshop,但实际是没学会。
李源这个课讲photoshop开始讲一堆艺术上的东西,什么色彩、色调、像素,然后讲软件各个功能,然后做了个例子。其实作为教程没太大问题,而且也介绍了一些原理,只不过没有抓到本质,其它的很多ps教程只是给例子,还不如李源。
其实从我今天来看,photoshop是个傻瓜软件,不太需要学。本质是什么呢?photoshop就是对一个二维矩阵做数学操作。比如,RGB/CMYK/HSV这些其实就是颜色的坐标系,同一个颜色在不同坐标系下坐标值不同,但图像或物理现象本身不依赖于坐标系,曲线其实就是不同坐标值(一般是亮度)的柱状分布图;选区就是获得透明度值为1和0的矩阵,这个矩阵叫mask,1的地方可以操作,0的地方不能,如果是羽化的选区,就是透明度可以0-1之间;图层就是把图像按视觉前后关系分成前中后几个矩阵,最后叠在一起,每个图层上可以放一个物体,每个图层上都可以加一个mask,规定操作的范围;滤镜就是加滤波器,调整曲线也可以看成是加滤波器。说穿了就这么个东西。
就像女人的化妆一样,你要把它看成若干图层就很好解决了。第一层先上粉底,把脸本来的颜色盖住;第二层在粉底上用腮红等等,各种颜色去勾画出明暗面,让五官立体化;第三层是嘴巴部分,用口红画出嘴,可大可小,可深可浅;第四层眼睛周围进行操作,眼线、眼影、睫毛膏,达到放大眼睛的效果,毕竟眼睛是心灵的窗户;其他层,比如发型等等。
这是认知方面的,当你有了这样的认知后,所谓的ps技术其实就是对哪个排列组合好见仁见智的事情了,就像你家里的家具这两条这么摆,过两天你可能想那么摆,在我眼里只要能达到目的,大差不差。
其实当年看完李涛那个课,我自己总结出个学习方法,就是搞清楚一个软件菜单栏中每个选项是做什么用的就能快速掌握这个软件,菜单栏其实就是软件功能的目录。至于具体每个功能如何用,等你用到了再说。
-------
第二个例子:某工业商软和游戏
某工业商软是很不好掌握的,当你没有理论知识的时候,对着文档的用例去用软件就是在面对一个黑箱。
我这里假设一个前提,假如我已经有了对应学科的理论知识,这个时候其实软件对我仍然是一个黑箱,即便算法你都知道。因为缺乏软件编写的知识,我完全不知道我的边界在哪里,即便这个软件我很熟练了。很多时候我有一个需求,这个软件能不能做我是不确定的。
后来当我接触一些游戏之后,我对工业商软的理解才进一步加深。
游戏设计上是这样的,游戏面向三类人群,一类是普通用户,一类是软件厂商开发者,一类是MOD开发者。普通用户不需要改动设置,另外两类人群对应有两套配置或脚本解析器,软件中全部功能只开放给厂商去debug,然后部分功能可以选择性开放给MOD开发者去开发MOD。工业软件非常类似,mod开发者对应于工业软件的二次开发者。
因为静态语言编译环境配置很复杂,而且软件开发者并不想开源,所以二次开发的语言基本上都是动态脚本语言,软件开发者在软件中写一个parser,去读取用户写的东西。
工业商业软件 ==> parser读取 ==> 用户脚本
因为某商软提供给用户的脚本语言在数学计算上有很大局限性,所以用户脚本又需要去调用类似matlab这样的软件去进行计算。
假如我当年了解这些知识,我可能要少走好几个月的弯路。
-------
引申题外话
我当初写的批处理的做法是这样的:先写一个输入数据文件,去后台执行商软,商软运行我写的前半段商软脚本,读取输入数据,商软脚本输出结果到中间结果文件,关闭商软,我用matlab从文件读取结果返回参数,然后再打开商软,执行我的后半段商软脚本,输出结果到文件。
商软关闭再打开其实是有时间损耗的,大概几十秒,但算例要二十分钟,能接受,省去几十秒技术上可行性未知,实践可能需要很久,没必要钻研。
我写的商软脚本里有算法,这个算法本身是创新,是专利和论文的核心,我当年非常失策地没有意识到这一点,所以在项目结题PPT重点在介绍整个项目,没有突出这个创新的部分。这个失策很大部分在于心态上我当时认识思路局限在演说应该讲项目整体这样宏观的东西,其实我做的东西,宏观的东西在其他领导眼中没有价值,别人更关心微观上你做了什么新东西。做项目,无论宏观如何把控还是微观如何实现,当然个人成长上都是有价值的。技术上明白自己做了一个什么东西,但是搞不清楚自己该突出给别人讲什么、写什么,其实是在具体工作中是很常见的问题,你在意的东西未必别人在意。我经历过类似的挫折太多了,这些事也算是提升了工作情商。
-------
第三个例子:数学课
其实没有第三个例子,第一个例子已经表达清楚了我想说的东西。
数学还是抓住数学史沿革的思路,从欧拉到高斯到黎曼,每一代人的想法、对后人的影响等等,蛮重要的。然后知道有哪些分支,每个分支又有哪些子分支,子分支有哪些算法,分别能解决什么问题,这样遇到一个工程问题,就能快速定位自己应该用什么工具做。如果遇到问题,只是从网上找几篇论文说这么做可行,那做项目经常就会卡住。因为人家写文章的人是脑子有个工具箱,里面锤子、钳子、扳手都知道是干吗的,最后告诉你用扳手做。到你了,你看了教程买了把扳手,没搞下去,就不知道是改良扳手呢?还是找其他工具?改良扳手麻烦,于是你买了锤子不行、买了钳子不行,不知道该造轮子还是找轮子,虚耗了很多时间。简单来说,不确定问题到底有没有办法解决的时候不妨把问题放到更高的抽象层次或者其他的维度去看。写到这里有点形而上了,到此为止吧。
数学史还是要听国际顶尖的数学家的,因为只有顶尖的人才能同时讲清楚发展脉络和细节,大陆由于各种原因,现在并没有这样的人,可以听一下丘成桐的《近代几何史》。大部分数学史的书都在讲一些比较浅的东西,跟儿童科普读物一样,毫无价值。
我很后悔上学期间没有多旁听几门数学课,我当时是有意识的,大概完整旁听了一门数学一们物理课,后面都对我对很多问题的理解产生了很大帮助。不过现在看来是远远不够的,我应该去蹭博士的泛函分析和随机过程,然后多学一些几何的课程,人总是有局限性的,当下在意的东西可能未来进入工作看毫无价值,比如绩点,比如奖学金,比如荣誉。