力争上游
——我眼中的“计算机产业链”
Google前研究员,腾讯现任副总裁吴军博士写了一本介绍IT行业数十年风云变幻的《浪潮之巅》,其中有一章介绍个人电脑工业的生态链,比较有趣:
个人电脑工业整个的生态链是这样的:以微软为首的软件开发商吃掉硬件提升带来的全部好处,迫使用户更新机器让惠普和戴尔等公司收益,而这些整机生产厂再向英特尔这样的半导体厂订货购买新的芯片、同时向Seagate 等外设厂购买新的外设。在这中间,各家的利润先后得到相应的提升,股票也随着增长。各个硬件半导体和外设公司再将利润投入研发,按照摩尔定理制定的速度,提升硬件性能,为微软下一步更新软件、吃掉硬件性能做准备。华尔街的投资者都知道,如果微软的开发速度比预期的慢,软件的业绩不好,那么就一定不能买英特尔等公司的股票了。
上述描述主要针对的是IT业中有关硬件制造与软件市场销售领域,如果将相关的科研活动也加进去,我们就看到了一条更为完整的计算机产业链(其实更确切的说法是以计算机为代表的“信息产业链”)。本文就聊聊我眼中的这条“计算机产业链”。
计算机产业链的源头是物理学研究。它是计算机产业链的最上游,是计算机技术的发源地。物理学是直接探索客观世界奥秘的学科,它的突破会对人类社会引发极为深远的影响。举个例子,从上个世纪开始,物理学对物质微观结构与运动规律的探索取得了重大突破,从电子管到晶体管再到集成电路,人类造出了计算机,在此基础上又进一步构建了互联互通的互联网络,引爆了一场信息革命。
物理学中有关量子力学的研究,则有可能导致全新的量子计算机的诞生,量子计算机高度并行的特征,使得它具备了当前体系结构计算机所无法比拟的计算能力,不妨想像一下:如果可以使用量子计算机编程,我们又能解决哪些现在解决不了的问题,对人类社会又将带来哪些冲击和影响?
量子力学描述了一个与我们肉眼所见的完全不同的一个世界,有一大堆让人目瞪口呆的结论,曹天元先生的《上帝掷骰子吗:量子物理史话》是我看过的写量子力学最有趣的一本书,感兴趣的朋友不妨看看。
我还想起了另一本看过的科幻小说——《三体》,其作者为有“国内科幻作家第一人”之称的刘慈欣,刘慈欣本人是中国“硬派”科幻的领军人物,也曾作为一名程序员写过不少代码,对计算机科学和物理学都有较深入的理解,配合其奔放的想象力,使他的《三体》三部曲成为科幻经典。
在《三体》中,比较有趣的一个情节是:三体文明为了迟滞地球的科技进步,向地球发送了一个“智子”——这是一个在我们的三维世界中无所不知无所不能的“粒子”,智子通过干扰地球文明所进行的所有高能物理实验,让人类对物质深层结构与运动规律的探索成为不可能,从而达到让地球文明停滞不前的“卑劣”目的。
刘慈欣认为物理学的突破直接决定了人类科学能达到的水平。
呵呵,如果有人没看过《三体》,本人强烈建议朋友们抽时间读读,非常好看的一部科幻小说。
计算机深刻地改变了人类社会,这已是不争的事实。而计算机产业之所以拥有这么大的影响力,其原因在于人类几乎所有的活动几乎都伴随着信息的流动,这使得对信息的加工处理成为一种最基本的需求。
人类利用以物理学为龙头的科学成果研制出了计算机,计算机又反过来引导和推动其他行业的进步,比如没有计算机的参与,人类基因图谱的绘制是不可能的。
在我看来,计算机产业链可看成是一条大河。硬件制造业和数据通讯业是“上游”,软件业则是“下游”。
硬件制造业和数据通讯业往往直接应用并依赖于物理学的科研成果。从历史上看,物理学的突破使我们能造出更为强大的计算机硬件,进而为软件技术的发展提供了更大的可能性,在现实需求的推动下,软件技术也随之发生了突破和进步。
早期的计算机功能很弱,内存和硬盘都很小,许多程序是单线程的,使用结构化的方法开发完成,程序员必须对内存等系统资源精打细算,后来随着CPU计算能力的突飞猛进,内存和外存的成本飞速下降,软件开始进入面向对象开发的时代,此时人们开发软件已经很少再考虑到存储空间的问题,于是出现了占用几百兆甚至上G空间的软件系统。
由于物理定律的制约,CPU的集成度和工作主频的提升有一个上限,为了进一步提升计算能力,人们开发出了多核的CPU,多核CPU一经出现,就迅速由计算机向手机等智能设备扩散,到目前为止,高端的手机已经都是双核的了。
多核CPU推动软件技术迈入“并行计算”的时代,现在的程序员,如果不掌握多线程开发的技能,恐怕找工作都困难。
另一个“上游”领域——数据通讯业,它的技术突破会让信息流动得越来越快。早期使用“猫(modem)”上网的时代,缓慢的网速极大地限制了互联网应用软件的开发,没有人能忍受花上数分钟甚至更长时间来下载一个网页,这极大地限制了相关软件技术的发展。后来ADSL进入普通家庭,带宽一下子上去了,这就使得多媒体信息在互联网上可以顺畅流动,导致互联网的爆炸性增长,Web成为人类信息宝库。
当前数据通讯领域另一个标志性的进步是手机3G网络的普及,导致3G的智能手机取代传统2代手机成为主流,这引爆了手机软件开发技术的突飞猛进,使iOS、Android成为红红火火的软件开发平台,其实是宣告“移动互联网”已成为软件开发的主战场。
在计算机产业链中,区分“上游”和“下游”很关键。因为“上游”比之“下游”,拥有以下不同的特性:
(1)“上游”的技术进步与突破将在“下游”引发引起一连串的“连锁反应”,其成果会得到强有力的“放大”。
(2)越往下游走,其市场就越大,而其变化就越快。
除了“上游”产业与“下游”产业这种粗略的划分,我们还可以将整个计算机产业链这条“大河”从上至下再细分为多个“流域”。
在同一“流域”内部,活跃着众多的企业和公司,这些企业公司同样有“上游”和“下游”之分,上游企业即领军企业,是“大哥”,下游企业跟着上游企业“混”,是“小弟”。
如果把企业比喻成大大小小的船。领军级别的企业,都属于“航空母舰”或“万吨货轮”,规模庞大,行动与反应迟缓。其成功之处往往在于它们通常都构建了一个生态系统。
但如果这艘“航空母舰”或“万吨货轮”大太了,独占了整个航道,不让其他的船行驶,它就成为众矢之的,其中倒霉的就被人们给“拆分”了。尽管如此,所有的船还都梦想着能成为大船。
在各企业间游走打工的IT人,不过是水手罢了,下了这艘船,又登那艘船,在这艘船是水手,在那艘船可能就成了船长。
水手们频繁地“上船”“下船”,各企业三十年河东三十年河西,你方唱罢我登场,大家都有机会,这就是IT行业吸引人的地方,但同时也彰显其竞争的激烈,整个行业洗牌很快。
人类处理信息是一种最基本的需求,开发能自动处理信息的软件系统是主要的满足这一需求的手段,软件技术的发展水平代表了这种需求被满足的程度。
但前面已经分析过,软件是一种“下游”产业,它的技术进步受制于“上游”产业,上游产业的每一个突破,都会在下游的软件行业中引发新的一轮技术进步浪潮。这是把握软件技术发展趋势的关键。
早期的程序大都用于科学计算,这也是计算机之所以被称为“计算机”的原因。但PC的出现和计算机网络改变了一切,软件开始尝试解决科学计算领域之外的问题,很快地,以CRUD为核心的信息系统成为软件开发主战场。
随着移动互联网和智能手机的发展,智能手机(或平板电脑)成了个人的信息处理终端,而数据处理与存储则上移到了网络,出现了“云计算”平台。
利用“云计算”中心提供的强大信息存储与处理能力,结合手机等智能设备的高便携性,人们可以随时随地地获取和处理信息,相关的软件技术将有广泛的发展前景,这也就是当前这一时代的特点。
可以肯定,软件技术的发展步伐不会停止。变是常态。
那么,在千变万化中有没有“不变”的东西?如果找不到这些“不变”的东西,就会在眼花缭乱的软件技术进步浪潮中无所适从。
只需从软件的本质上看就比较清楚了。
软件是什么?
软件完成的主要工作就是对信息的加工与处理!
那软件是怎么加工与处理信息的?
其实就是人们从现实世界中发掘出可以用计算机来解决的问题,将它们抽象为数学模型,并设计某种算法来解决它。
有了算法,人们再使用某种软件开发技术与工具将其实现出来,就是软件的开发过程。
软件要处理的信息就是这么些,数学模型与算法也都是相对稳定的,变化多端的各种软件开发技术,其出现的主要目的,大多都是让同样的软件开发任务变得更为便捷罢了。
在现代的软件技术领域,算法与数据结构主要用于为现实问题建立数学模型,在整个过程,数学起了非常重要的作用。
这里不妨顺便聊聊数学。
数学这门学科非常有趣,与物理不一样,它似乎是个独立王国,许多数学理论只要它本身是完备的,能够自说明的,是合乎逻辑并不会导致矛盾的,这就够了,往往并不要求有实验数据作为基础。至于后来在现实世界中发现某个事物真的符合某个数学规律,那是其他学科(比如物理学)的任务。
数学之所以重要,在于它屏蔽掉了万事万物的其他特征,仅抽取“数”和“形”这两个最本质的特性进行研究,由于“数”和“形”的无处不在,因此数学可能概括并揭示出了客观世界的深层规律。
对软件开发者而言,不可能人人都是数学家,但具备一些基本的数学知识技能是必须的。
回到开发技术领域,我发现许多技术也可以划分为“上游”和“下游”。
许多下游技术往往各有渊源,很多都可以归源于上游的同一个祖先。比如Java平台有一大堆的各种框架,仔细分析一下就发现,许多框架都是面向对象与特定技术领域(比如分布式计算、数据库)理论与技术成果的衍生物。
这就提醒我们,在观察一个新技术是否有应用前景时,一要看为它提供大规模应用基础的“上游”平台是否具备,二要看它是否比现有的技术开发效率更高,功能更强,成本更低。
个人觉得,在学习软件技术时,应该高度关注并下功夫掌握靠近“上游”的“源泉技术”,而非位于“下游”的各种“衍生”技术,只有这样才能以不变应万变。道理很简单:只要掌握了“源泉”技术,就能以较高的效率掌握由这个“源泉技术”所“衍生”出来的子技术,否则,必然陷入疲于奔命的窘境。
以微软.NET平台上的WCF为例,它不过就是使用面向对象理论和技术,对开发分布式应用软件系统的各种理论成果封装而成的一个开发框架罢了。套接字(Socket)编程,网络通讯协议(HTTP、TCP、SOA等)、面向对象的理论与技术、多线程开发技术、.NET平台现有特性(反射、序列化等)就是位于它“上游”的“源泉技术”。
最后小结一下:
作为“水手”的IT人,不管你当前处于整个计算机产业链的哪个“流域”中的哪艘船上,都应该努力地“力争上游”,因为在越靠近源头的领域,你所做出的创新性贡献,其所起的作用被放大的倍数就越大,而创造的价值也就越大!
人生的价值,不就在于他的贡献大小吗?