知识管理、不可言说知识与软件工程

62 阅读6分钟

工业经济时代的企业管理

亚当斯密(Adam Smith)在《国富论》中提到的社会分工在 19 世纪到 20 世纪中高度分化并使得社会财富快速积累,软件开发中的 BA、PO、SE、QA 等角色的划分同样源于此。工作分化诞生了流水线,现代企业对个体的依赖逐步降低。

在企业中工作的人也因此而异化,代表的不是一个简单个体,是可替代的员工,是一个职业背后的市场。分工又会加剧知识壁垒的构建,形成专家经验,专业的事交给专业的人做,加快了流水线的运转。

企业生存要保证有效性(Effectiveness)和效率(Efficiency) ,也就是做正确的事和正确的做事。员工是无法兼顾两者的,泰勒(Frederick Winslow Taylor)将员工组织成金字塔结构。一部分人用于做企业战略决策,决定做什么与不做什么;一部分人用于管理生产线,将要做的事情做的更快,提升产研效能。

工作方法与程序由专家定义,员工无法决策工作流程。这种将员工作为经济人的管理方法强调控制,强制并且自上而下。

管理知识工作者的挑战

来到 20 世纪 60 年代,知识工作大量涌现。软件开发继续使用以前的管理方法就显得无能为力,导致架构腐化、遗留系统频现。

彼得德鲁克(Peter F. Drucker)提到知识工作者(Knowledge Worker)的兴起是 21 世纪管理最大的挑战,管理是建立在人力工作的基础上,企业要以知识为核心鼓励发挥员工的创造力。工业经济时代的管理方法不再适用,因为知识工作者的价值不由自身决定,而是由消费者决定的

软件工程师就是一种知识工作者,工程师生产的不是代码,而是知识,如果知识没有被消费,那么工程师就是没有价值的。团队效率不在于能力出众的个体,而在于发挥协同效应。面向消费者的知识生产与传递须要打破知识壁垒与金字塔结构,过分依赖专家经验就难以获取与传递知识,过分强调职位就会影响知识传递效率,因此有效性与效率的分离也不再适用。

具体地,管理知识工作者的工作时间、工作内容与工作产物同样受到挑战。工作内容管理依赖管理者的专业能力,工作产物管理难以量化验证质量,工作时间管理反而成为最简单直接的,但这是对企业创造与创新能力的戕害。

知识类型与不可言说知识

管理知识工作者的挑战其实是知识管理的挑战,应对这样的挑战野中郁次郎(Ikujiro Nonaka)提出了知识管理模型 SECI,意在充分挖掘调动企业知识,发挥知识工作者的价值。延伸到软件开发领域,知识类型可分为显性知识(Explicit Knowledge)、隐性知识(Implicit Knowledge)和不可言说知识(Tacit Knowledge,强调不可言说知识就是因为不可言说知识在知识管理中的重要性)。

显性知识就是容易表达和分享的知识,易读易写易传递,典型如公理和常识就是显性知识。对于 Java 工程师而言,SpringBoot 最新发布的版本,最低依赖的 JDK 版本都是显性知识。

相应的,隐性知识只是还没有获取到的显性知识,自己或团队目前不知道而已,他们都是既定事实,知识获取到了就是显性知识。比如还不清楚 Java 中的虚拟线程是什么,在翻看官方文档和一些博客示例后学到了基本用法,隐性知识就转变成了显性知识。

对应的,不可言说知识是难以获取和传递的知识,难以记录、难以表达、难以呈现。往往通过经验积累获得,或者口口相传延续,因此也叫经验知识(Experiental Knowledge)或部落知识(Tribal Knowledge)。与个人或团队的认知、经验、技能高度相关。各行各业都充斥着大量不可言说知识,他们是真正有用且重要的知识,软件开发同样如此,获取与传递不可言说知识是知识管理中的核心。

自然语言中有很多对不可言说知识的形容,比如神似、凭直觉、灵感来了、下意识、妙不可言、暗示、默契。写代码时手感来了、团队之间合作默契、客户对产品演示的肢体暗示、与用户的沟通技巧、方案评审的非正式流程等,这些无法转换成显性知识的不可言说知识,却决定着新员工的融入速度、工作效率提升、团队凝聚力的发展、业务开展进度等个人与团队的方方面面。

不可言说知识的传递与适用性质量

不可言说知识的传递可以通过社会化活动(Socialization) 完成,比如启动-反馈循环(Kickoff-feedback Cycle) ,启动时传递知识,反馈时检查知识的传递效果。传递不可言说知识的关键是分享思维的过程,而不单单是消费最终的结果。这套循环过程是一套训练方法,强化训练可以加快不可言说知识的传递效率。

软件实现是否满足业务价值就是一种不可言说知识,他们来自自然语言,转换成可执行的软件产品。没有人可以早早确定实现的软件是否可以达成业务目标,只能通过持续不断地交付给用户与市场验证,逐步认识需求分析的合理性。

适用性质量是随着知识管理发展衡量业务价值的手段,软件产品至少应该达到适用性质量要求,在用户使用过程中发挥价值,支撑客户的业务发展。也是从知识消费的角度审视软件开发,如果没有软件消费者,再先进的开发过程、再别致的产品特性也是毫无价值的。

作为知识工作者,围绕不可言说知识的传递,构建以客户为先的软件产品,从适用性质量衡量软件价值,注定软件开发过程是无法用过去的研发管理流程来看待的。

软件工程的本质是知识工程

很多来自建筑工程的隐喻被借鉴到软件工程中是不合适的,软件并不是知识本身,只是知识的载体,是知识的可执行形式,真正的软件产品是包含在其中的知识。软件开发的核心不是产生代码,而是知识的获取与学习。围绕着不可言说知识的传递展开,知识产生、传递、应用、消费后才能创造价值。因此,软件工程的本质是知识工程。