20多年前,我博士毕业后来到宝钢。有位前辈对我讲:你是学先进控制的(最优控制、鲁棒控制等),应该尽量把这些技术用在钢铁行业。后来我逐步意识到:在企业里,按照这种思路走下去,成功是小概率事件。
我们知道:企业里做创新一定要有价值。找到值得做的创新问题已经不容易了,为什么一定要用你学的算法?如果把取得了创新成果比作”打到一只兔子“,而正好用到你所擅长的方法就好比”一枪打中两只兔子“。所以,成功的概率会大大降低。
但是,学术界总是有这样的潜意识:“因为我懂某种技术,所以能解决特定问题“。这种认识是一种典型的”幸存者偏差“:写论文的时候,只有用了高级算法才容易发表。于是,从论文的角度看,解决问题都用了高级算法。但现实的实践却往往告诉我们:解决问题往往用简单的算法。
我并不否认科技进步对技术的推动作用。这种推动作用往往体现在工具层面:计算机性能不断提升、网络传输能力不断加强、平台和工具不断产生。这些基础的改善,使得我们可以用简单、方便的办法,去做过去很难做成的事情。
众多论文里,强调的是解决问题的“核心算法“。在现实中,确实有些算法特别重要。但论文中写的那些算法,却往往不重要。论文中的东西,往往是”露水平、不露关键“,甚至是”虚晃一枪“,拿些华而不实的东西来发表:真正有用的东西,有几个人愿意公开啊?
按照我的理解,“算法“中真正重要的东西往往包括这样一些内容:
1、 选择输入输出变量:既要抓住关键,又不能特别复杂。
2、 数据的处理方法:该用的数据用,不该用的不用。
3、 结论的应用方法:合适的时候用,不合适的时候不用。
4、 异常处置与特殊处理。保证安全可靠。
这些关键问题,往往是个性化很强的。不同的场景,采用的处理方式不一样。所以,“深入实践”是非常重要的。
但从另外一个角度讲,“核心算法“往往不通用。所以,许多获奖项目中提到的所谓“通用核心算法”往往是忽悠人的。但人们往往必须这么做:如果不吹一下,就评不上奖。于是,很多国家级获奖项目,总有“核心通用算法”上的突破。这也是现实中的一种“幸存者偏差".
对科技工作者来说,灵活处理问题的能力才是关键。而不是指望死守着某个方法吃一辈子。优秀的工程师,一般知识面比较宽广,知道遇到什么问题选择什么方法;对问题的认识也比较深入,遇到困难和障碍也知道如何变通。这些都是灵活性的体现。
工业软件、尤其是工具性的工业软件特别重要:这是因为,这些软件为解决问题提供了灵活性——让人们方便地利用不同的方法解决个性化问题。
要让软件提供灵活性的服务,软件本身却是要相当复杂的:用户用起来越简单、工具的灵活性越好,背后的开发和设计越复杂。复杂性应该是软件、工业软件开发的难点所在。从我的观点看,软件工程的思想和方法,就是为了解决复杂性而提出来的。
推进智能制造、工业互联网的时候,要给用户提供极大的灵活性,故而相关工业软件的开发也会变得超级复杂。
我昨天看到一些调侃:码农35岁以上,只能去送快递了。这种说法虽然过于夸张,但也点出了一个事实:开发软件是个特别费脑子的事情。我博士毕业的时候,放弃了几个软件编程的高薪offer。一个重要的原因就是觉得自己当时年近30,脑力开始下降了,没法与年轻人竞争。
殷部长说过:工程问题上的困难往往源自复杂性。换句话说:往往并不体现在某个具体的奇思妙想。所以,每当我听到有人强调某个算法难的时候,就怀疑这人没做过难事。
然而,我又想起某位高 官:长期从事行政管理工作,却在软件领域靠着“透明计算”获得十年一见的国家自然科学一等奖。据说,爱因斯坦的智商高达160、达芬奇的智商有230;这位官员的智商至少应该有250吧?当然,这么高的智商,也应该是中国科技界特殊的“幸存者偏差”所致。
对我们资历普通的人,不要指望自己的智商也有这么高。我们能做的,就是规规矩矩地做事,“复杂问题简单化、模糊问题清晰化”,把复杂和困难的问题,变成我们的智商能想得明白的工作。