软件之“工场技术”(下)

“同时保有全然相反的两种观念,还能正常行事,是第一流智慧的标志。"
————《了不起的盖茨比》作者 菲茨吉拉德

继上篇探讨软件是一个“工厂技术" 之后,也有同事留言探讨,就继续补充完善一下。细心的人可能看到本次标题改了一个字“工场”的场,也略微代表了希望更准确表达软件规律的意思。

软件之“工厂技术”(上)
https://editor.csdn.net/md/?articleId=112578061

上次说到工厂技术,举例说明了Tesla工厂,为了进一步阐述,本次再补充一个例子。
说到科学技术的时候,我们脑子里往往会联想到实验室、穿白大褂的科研人员、各种实验设备等等。技术由科研人员在实验室中研发出来,然后拿到工厂中去大规模投产,我们可以把这种技术称为实验室技术。日本人在液晶领域积累的专利,大部分都属于这种实验室技术。与实验室技术不同,液晶产业的发展显示出另一种同样重要——或许更重要——的技术,就是工厂技术。韩国、中国台湾以及中国大陆的液晶企业,后来大量积累的都是工厂技术。韩国企业疯狂的进攻性投资战略,让他们在工厂技术上一举领先,赶超了日本企业。

什么是工厂技术呢?比如,在液晶生产中,避免灰尘是个很大的问题。而且,液晶生产对无尘的要求,比同为半导体的CPU还要高。生产CPU,是在一个大硅晶圆片上切割出很多小硅片,分别制成CPU。如果有尘埃进入,只是相应的那几片CPU受影响,其他大部分硅片不受影响。但是液晶不行,液晶屏是一整块大玻璃。同样是混入10粒尘埃,CPU生产只要剔除那10片CPU即可,其他的还是合格品;液晶屏则是出现了10个不发光的坏点,整块屏因此就算不合格,彻底报废了。因此,液晶生产对无尘车间的要求非常高。无尘技术本身并不复杂,在实验室中很容易小规模做到。但在实验室中做到没什么意义,重要又困难的是在大型厂房中做到。几十米高、各种设备轰轰运转、人来人往的巨大厂房,建成无尘车间,这完全是另一套技术。重点在于,这种技术只能在当时当地逐渐摸索、改进,不可能事先在实验室中完成,然后简单转移到工厂中。这种只能在当时当地、结合实际生产而积累的技术,就是工厂技术。和实验室技术相比,单个的工厂技术或许不那么高深,甚至很不起眼,但大量的细小改进、点滴窍门积累起来,就成为一套竞争对手更难复制和超越的大技术。这种技术甚至都不能用一本说明书来教给你,很多技术细节是存在于各个层次员工的脑子里。实际的例子是:京东方刚投产某条液晶生产线时,面临的最大问题就是良品率低,只有60%左右。低良品率当然会让产品成本居高不下,工人们每天都要挥舞大锤砸碎不合格的液晶面板——简直心疼死了。怎么提高良品率呢?不知道,大家只能在想得到的地方一点点改进。今天弄弄这里,明天弄弄那里,把尘埃的数量逐渐降低。经过一段时间的努力,出乎大家预期,良品率居然达到了95%!在整个过程中,并没有什么了不起的黑科技,有的只是在生产现场无数点滴的改进和调整。除了液晶生产以外,这种工厂技术在其他一些领域也有表现,比如常见的物流业。无论是仓储、传送带、公路运输这些环节,还是快递员蹬着小三轮车在街道上奔忙,看上去都不是什么高级技术,甚至就是简单劳动而已,大家使用的设备也都差不多。但把这些环节紧密结合在一起,不断修补软件硬件,完善各个细小步骤,确保物流系统的高效便捷,这一整套经验和技巧可就是工厂技术了。都是电商企业,有的上午下单,下午就能送到,有的则需要好几天。同样,这其中没有了不起的黑科技,有的只是无数细小的解决方案和点滴改进。

举个我们自己团队的例子,我们OSDT从之前代表大企业参加国际主流开源社区,参与几个子项目,取用一些开源版本等工作逐步发展到结合5G,MEC等需要自主建设和运营一些开源项目,这样的转型,我就感觉它需要一种工厂化的、组织化的生产能力。之前,少量个人的经验,就相当于实验室技术,也许质量还可以,但是没有办法量产。怎么办?这就需要探索工厂技术。相对大一点的开源开发,运营,产业策略洞察和规划队伍,质量怎么保证、效率怎么提升、安全红线如何保障、长期怎么迭代,都是问题。其实也没有什么诀窍,就是不断地生产,不断地碰撞,PK,摸索和挑毛病,不断地总结规律,然后不停的总结和固化,这个过程,就是研发工厂技术的过程。一旦累积出这样的技术,它不仅仅存在于纸面上,实际上还存储在每一个同事的脑子里,和他们之间的协作关系中,这个优势就很大了。很多人的思维误区是:推崇实验室技术,轻视工厂技术。这其实是缺乏工业思维的表现。工业思维,是要从产业和人员能力上去考虑问题。其实这项“工厂技术”我们并未完全做出来,还在路上,但即使这样,随便找几个能编码的,懂战略的人拼凑一个团队却的确做不了OSDT能做的事情,不经意间,团队构筑了一个在电信网络领域的“难以复制”,“不可替代的”技术。

由于开源更贴近软件,所以回到软件本身。最近读了硅谷创业之父Paul Graham的经典《黑客与画家》后也给了我一些启示。他的核心观点是:软件或计算机科学包括计算机工程严格意义上是个伪命题。Graham结合自己的经验,更多的把自己看做一个黑客(不是骇客),意思是更具创意的编程人员,他觉得需要掌握的理论和科学还不如一个画家需要对颜料了解的更多(当然,画家还是很懂颜料的),作者进一步说到,与其到“CS”领域寻求理论,还不如在绘画中寻求创意。由于作者一直以黑客自居,所以言语中还是比较尖锐和极端,但鉴于其个人成就,所以他试图表达的深层次意思仍然不可忽略。作者更多的强调个人创造,兴趣,爱好和灵感是作出好的软件的基础,因为好的软件本来也没有标准。

近几年,我们在越来越重视软件的情况下,无论是自上而下还是自下而上做了很多“实践”,早期有敏捷,结对编程等活动,进而在云化概念下也强化CI\CD,学习谷歌的SRE,尝试DevOps。阿里等提出中台概念后,最近到处又都是“中台”满天飞。从质量流程上早期的CMM,ISO9000,再到现在的安全红线、可信等等。软件工程师的技能提升也有很多方法被引入,培训,考试,认证,刷题,甚至到加强面试环节。而且这个话题一旦起来,不最后回到文化、基因等宽泛话题不会终止。进而就在这些点之间循环往复,面多了加水,水多了加面。领导给了很多指示,各层级也做了很多研讨,抓哪儿都免不了像是“运动”,不抓又不行,总体结果上似乎也无法看到明显的改进。

本文标题很容易给大家造成困惑,工厂技术不就是制造业,面向硬件的一个概念,为什么试图阐述软件规律,避免硬件思维却依然要用工厂这个概念。这不得不回到本文意图是希望大家避免把软件简单看成一个类似硬件,容易规模制造和复制,一旦在实验室完成发明和实验,就需要接下来规模制造的思维误区,所以这里工厂更强调的是“工厂技术”,相对于“实验室技术”或“专利技术”而言,本质上是一个复杂系统的技术,和人的技能,对软件产业技术和开源能力的掌握和跟随,对工程师的创造性都有很大关系,既强调单兵作战能力,又强调协作(大型产品和软件),既强调经验,有强调创造。如果说能稍微总结出几点特质的话,似乎可以有如下“画像”:

1、软件把发明和测试与制造是在同一地点,同一团队同步完成的,没有严格的上下游和环节的概念,也没有流水线的概念。这点很不同于硬件;这也从反面验证,如果哪里的软件工程师更多把自己称之为“码农”或“工人”,哪里的软件就很难做好;
2、软件的概念、设计和文档没有那么重要,是一种凝结在“手艺人”身上的“手艺活”,其高质量,好的标准是多维度和复杂的,不仅仅是稳定,高性能等硬件简单指标;对规模,弹性,韧性,鲁棒性,甚至开发维护效率都有涉及;
3、软件的无形资产属性和边际制造成本为零衍生出来的特质是其专利属性,保护属性没那么强,反倒是平台、生态和开放属性更能体现其粘性,这里非常有悖论意义,软件的使用人越多,越广,支撑的应用越多,其网络效应和封闭效应体现越明显;
4、软件工程师终身学习能力,对产业界开源组件和工具、平台(类似硬件制造和研发中元器件和BOM清单概念)的掌握与其对设计框架、模式等的掌握一样重要,这点和上述第1点,其发明人,设计师,制造工人的角色往往是合一的。
5、多人团队协作的软件开发围绕流程和传统的“软件工程”组织起来只能满足上世纪印度软件外包(国内也有东软的外包)和简单基于数据库等一些工具软件。现在要引入“软件工场”的概念,赋能于人,围绕资深程序员展开类似创意工作室,创意合伙人等阿米巴式开发。这对人力资源提出了很高的要求,需要像广告公司和游戏公司那样来组织开发队伍。激发工程师学习热情和技能提升。
6、软件没有供应链概念,只有工具链,开源平台、生态,应用等概念,传统工业制造的流程、链条和管理在极度被压缩为一点的时候,量变出现质变。人的技能、热情和创造力变得无比重要。其使用,购买,物权,产权转移以及价值获取,分享也变得模糊。所以软件注定是挑战一切现成的制造、管理、商业理念的一个“怪胎”。

这也是为什么长篇累牍的要用一个近似“工厂技术”,甚至“工场技术”来类比,说明其复杂性,内在悖论和谬误性,以及把人,团队,文化和技能,以及发明,制造,供应;还有使用,购买,分发,变现等多维度高度压缩在一个点,就像现实世界中的“黑洞”一样,在这个点上传统的时空概念扭曲,变化一样,我们必须用更加抽象的概念来认识和发育软件能力,提升软件水平,进而提供持续的,好的,可信的软件产品和平台。

总之,当我们说软件要吃掉这个世界的时候,这个软件也是由上世纪五六十年代的软件逐步演化而来的,但伴随着云、平台、生态等业态,伴随着千行百业数字化的大潮,软件又变得很不一样了。当软件这样一个“手艺”和智能制造相互结合的时候,需要从组织、协作、人才、技能、开源生态等运用综合的处理复杂系统的方式来看待和管理,任何单一的技能,知识和经验在软件提升面前都显得“无力感”很强。
写到这里,其实文中已经有一些显得自相矛盾的点出现了,或者说读者要挑刺或抬杠的话,文中有太多这样的素材,比如工厂,制造,规模,创造等看似矛盾的概念。

幸好作家菲茨吉拉德说 “能同时拥有两种截然相反的观念还能正常做事的人,才是有第一流智慧的人"。真正的成熟,不是你懂得了多少的大道理,而是理解了更多的小矛盾;如果说每个人的成长都注定会有代价,那么同样软件工程和软件技术的成熟和提高也是需要付出巨大代价的,我最希望的是,经历了所有的代价之后,我们能换来一份真正意义上的成熟。

软件之“工场技术”(下)相关推荐

  1. [trustzone]-ARM trustzone技术下常见的软件框图

    文章目录 常用软件框图 1.Trustzone技术下常用软件框图 2.指纹TEE采集数据的框图 3.locksetting框架 4.gatekeeper框架 5.生物认证框架 6.keymaster框 ...

  2. 软件的复用技术及开发方法

    软件的复用技术及开发方法 2.1软件的复用技术 软件复用是指在开发新的软件系统时,对已有的软件或软件模块重新使用,该软件可以是己经存在的软件,也可以是专门的可复用组件[8].软件可复用性的高低影响到生 ...

  3. Interview:算法岗位面试—11.17下午上海某网**软件公司(上市)技术面之比赛考察、目标检测算法、视频分析算法考点

    Interview:算法岗位面试-11.17下午上海某网**软件公司(上市)技术面之比赛考察.目标检测算法.视频分析算法考点 导读:邀约的下午14.30,到的时候前边有两个学生在等待,当轮到我的时候, ...

  4. 浅谈虚拟化技术下的云安全如何处置

    浅谈虚拟化技术下的云安全如何处置 近年来,云计算是目前非常热门的一个研究领域,其实它并不是一种全新的技术,而是许多技术的融合体,包括分布式计算.动态和拓展等各种各样的技术算法,而虚拟化技术是云计算里最 ...

  5. 《软件调试分析技术》学习笔记

    <软件调试分析技术>学习笔记(一) 今天开始写写一些心得体验. <软件调试分析技术>是好友Monster的处女作品.作为一直以的好伙伴,他是我看着长大的,(*^__^*) 嘻嘻 ...

  6. 计算机办公软件应用二级 考试题库,计算机二级办公软件高级应用技术考试真题题库...

    绝对有用哦! 计算机二级办公软件高级应用技术考试真题题库 二级Word试题 题目要求 文档: Adobe简介 1. 对正文进行排版,其中: (1) 章名使用样式"标题1",并居中: ...

  7. ”0元中标的商业逻辑“ -- 如何更好防范项目风险(北京软件造价评估技术创新联盟:李培圣)...

    摘要: 近年来,经常可以在新闻中可以看到"0元中标"的信息化投入项目,这些项目在建设.运维过程中可能出现各种问题,"0元中标"背后的商业逻辑是什么?企业为什么不 ...

  8. 删除下拉框只找23火星软件_下拉框搜索就找23火星软件/下拉框软件速来火星下拉...

    现在不管做什么,都是需要流量,有了流量才能把自己手上的生意做好.不管是实体店微商,电商,还是互联网创业者,如果你拥有了流量,那么不管你选择去做什么产品,你都会一步到位,一飞冲天,实现自己的梦想.但是现 ...

  9. 一种NET软件加壳技术的设计与实现

    1 引言     为了保护自己的软件的技术内核不被他人轻易盗用,软件开发人员使用了各种加密技术来保障软件的版权不被侵犯,壳便是我们常用的一种软件保护手段.对于Win32 中软件加壳技术已经有非常成熟的 ...

最新文章

  1. 重磅丨2018年人工智能标准化白皮书
  2. TLB的作用及工作原理
  3. TFF 官方demo解释
  4. DataGrid 或 DataView 中删除项时告知是否删除
  5. Oracle-知识结构漫谈
  6. 分布式系统理论基础1: 一致性、2PC和3PC
  7. linux中sh+$0,浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释
  8. Java快速生成20亿数字_20 亿个数字在 4G 内存中如何去重排序:快来试一试 BitMap...
  9. 工作中使用jasmine遇到的一个html element和Component绑定属性失去同步的问题
  10. mysql 昨天日期_MySQL 日期函数 今天明天昨天......
  11. Win10配置VSCode+Opencv3(C++) GCC环境
  12. Future源码解读
  13. 吉林大学java期末试卷_吉大18年9月《JAVA程序设计》作业考核试题-0001
  14. IE8 SVG Viewer下一些对象属性和方法
  15. 清理谷歌浏览器注册表_chrome注册表怎么清理_如何清理没用的chrome注册表-win7之家...
  16. margin属性的正负值确定
  17. EXCEL中如何让某些行列固定不动
  18. 计算机桌面无法中英文切换,Win10输入法中英文切换不了怎么办?
  19. matlab 读ctl,用matlab将nc数据读出来,写成二进制文件,然后用grads画图
  20. Java字符串使用Split以竖线作为分隔符

热门文章

  1. Springboot整合MyBatis-plus:乐观锁和悲观锁
  2. 我的App开发之路:从零开始到上线赚钱
  3. 分布式基石|最难 paxos 和最易 raft?
  4. 八个最好的轻量级Linux发行版ZT
  5. 分解质因数(不含头文件)
  6. AI和机器学习对量化交易领域的影响
  7. 高德地图的简单使用:点击标记获取经纬度和详细地址
  8. 公司很小的时候,怎么判断未来老板是否能做大做强?
  9. 谷晟阳:包容父母,就是最好的孝顺
  10. (转载)TOMCAT介绍