[Soft]软件技术的两个趋势
从二十一世纪头十年的软件技术发展历程来看,其存在两个主要的趋势:开源与Web化
虽然软件技术从一开始就是开放源代码的。但上世纪最后二十年,是属于闭源软件开发商的“黄金年代”。从那个时代中走出了Microsoft等一系列商业软件公司,而这些公司的核心竞争力在于其源代码。但近十年的发展,这样的趋势已经被打破。开源软件越来越重要,并逐步成为商务业务中的主流软件技术,其主要表现为:
- 稳定高效的开源操作系统日益成熟:不论在服务器端、还是在桌面PC端、或者是移动智能设备中,开源操作系统已经逐步成熟,并已经取代既有的商业操作系统,成为最主要的开发平台。在服务器端,RedHa(CentOS)、Ubuntu(Debian)和OpenSuSE日益成为最主要的服务器操作系统,Apache成为最主流的Web服务器,MySQL被绝大多数服务器作为主要数据库系统,......。可以毫不夸张地说,在服务器端,闭源商业软件的获利空间已经很狭小了。在桌面PC端,Windows平台虽然仍然是霸主,但其市场逐步被免费的Ubuntu、Fedora等所蚕食。在桌面操控与用户体验度的竞赛中,Windows已经从既有的被赶超者沦为赶超者,而最新的Ubuntu 10系与Windows7系对比而言,其占用资源更小,界面更美观,操控更方便。而在移动智能设备开发中,WindowsCE显然没有获得期望的市场,而既有的Symbian等系统也面临众多基于Linux内核的开源操作系统的威胁,其中包括Google的Android平台。随着开源操作系统在不同硬件环境下的逐步成熟,其将对于软件技术的开发产生根本性的影响。
- 开源代码库的飞速发展。经过近三十年的技术积累,开源代码库已经有了很大的积累。这不仅仅是从数量上考量,更是从质量上而言。在开源代码库中,一些重量级的代码库逐步成熟。例如在C++平台下的Boost开源库,其技术广度与深度是任何一家商业软件公司的产品难于企及的。而且这些开源代码库与SVN、Google Code Search和Sourceforge等平台相整合,形成一个快速查询、定位、获取与比较的环境,这对于软件开发者来说是最大的资源。
- 开源商业模式的日趋成熟。软件的发展离不开商业的推动。在上世纪八九十年代,软件主要依靠授予权收费而获利。这一较为单一与原始的商业模式在今天已经被打破。软件已经进入“免费”时代。在这个时代中,免费与高效的软件比比皆是,用户选择范围很大,已经完全没有为授予权付费的驱动。同时,开源软件的商业模式已经逐步成熟。除了以Web形式提供免费服务的软件系统,还有许多利用拓展服务来进行商业运作的软件系统。商业模式的成熟促进开源软件趋势的发展。也正因为如此,业界许多大型公司,如IBM、Oracle等都大力推动开源软件,期待从中获取发展主导力量。
- 开源社区与文化的成熟。相对于上个世纪末,目前开源社区更加成熟,其运作更加专业化。信息互通的渠道也更多样。人们可以不用劳力费神地制作“HomePage”,或者去维护WebSite Application。而只需要注册一个博客、甚至一个微博,就可以进行软件技术信息发布。而且可以通过各种通用语垂直搜索引擎来获取软件开发技能信息,进而增强自身的软件能力。
由此可见,开源软件将成为软件发展的主流之一。而现在软件技术学习的主要目标在于增强自己在开源软件中的开发能力。
软件开发的另一个趋势是:Web化。目前软件形式已经脱离了单纯的单机形式,或是局域网形式。基于Web平台开发面向多终端、分布式的软件系统已经成为主流。这很像上世纪八十年代初,软件开发由大型机转向PC一样。在七八十年代之交,软件主要是面向大型机,如IBM的X360,而到了八九十年代,面向X86架构的PC机软件已经成为主流。绝大多数的程序员都在开发PC机程序。由此可类比,随着互联网技术的发展,面向Windows平台或者Linux平台单机开发的软件将越来越少,而带有Web通信与服务功能将成为软件必须具备的模块。
对于每个程序员,这三个问题很值得我们深入地进行思考:
- 为何要学习编程?
- 有没有持续学习的动力?
- 想要让编程帮助你达到怎样的人生目标?
在上述两个趋势下,对于上述问题存在一个思考的方向,即强化自我的开源软件技术与Web技术开发能力,将最利于在软件发展中获得最大的实现价值,其主要有如下具体实现方式:
- 强化自己对于开源系统的操控能力。对于Windows用户而言,安装一个VirtualBox免费虚拟机软件,再安装一个Ubuntu系统是最好地与Linux系统亲密接触的方式;
- 熟悉基于社区方式的开发技巧。要善于使用代码搜索引擎,并善于在开源社区中寻找帮助与进行提问。要逐步熟悉社区的文化,用最“潮”的交流方式进行技术沟通。
- 遵循团队开发原则,培养良好的文档习惯。开源软件开发需要更好的团队开发能力,因为许多开源软件都是基于Web进行开发,其参与者之间并不进行面对面交流。这就要求有良好的开发习惯,特别是文档编写习惯。只有这样才能真正融入开源软件开发中,从开源社区的海量资源库获取知识与技能。
- 编程语言不是问题,但深入学习一些开源社区的主流语言仍是必要的,比如PHP与Python等,通过这些语言的学习会帮助你提升开源软件开发能力