今天,软件开发是变易还是变难
(附:金旭亮WCF最新教学资源包下载)
软件技术恐怕是人类社会各行业中更新最快的一个领域了,往往老的技术还没有弄明白,新的技术又横空出世。与老的技术相比,新技术往往功能更为强大,开发效率更高。
我还记得我当年学程序设计时,用C语言写程序,要想得到一个好的用户界面,实在是要付出太多的努力,弄一个中文下拉菜单,都需要上千行的代码。以致于当时流行一句话:一个软件,80%的代码是界面代码。
VB的出现使用户界面的设计工作不再那么劳累了,用控件“拖拖拽拽”就可以“画”出一个规范的用户界面,很快,更先进强大的设计工具出现了,从Delphi到当今的Visual Studio 2008,从MFC到Windows Form再到WPF,当年开发用户界面的痛苦日益成为历史,今天的程序员已很难有老程序员的那种感触了。
有了这样的感叹:由于开发工具越来越强大,编程将变得越来越简单,门槛越来越低,以后,一个笨人也可以编程了,现在的程序员看来前景不妙,人多了,就不值钱了。
从过去到现在再到未来,这个问题变得很有趣:软件开发是变得越来越容易呢还是变得越来越难?
的确,随着技术的发展,一些原来很困难的东西现在实现起来轻而易举。一些原先需要高素质的人才可以从事的工作,现在,普通人也可以从事了。例如:VB的普及使全世界的程序员数目大大增加,这个现象让原先那些拿着高薪的C/C++高手们拥有了一种复杂的心态,既看不起VB菜鸟而又无可奈何。
为何老的“高手”们会感到无可奈何?因为任何人都无法对抗技术发展的客观规律。过去的辉煌业绩,只能供自己在闲暇里回味,软件技术日益走向普及是必然的发展方向。技术,不再也不会始终高居于神坛之上。
然而,还是没有正面回答这个问题:技术的发展,使软件开发是变易还是变难?
我个人认为:软件开发没有变得更简单,也没有变得更复杂。
现代软件技术的发展,使一些过去很困难的问题现在解决得很简单,但与此同时,要求软件技术解决的问题也变得更为复杂多样了。
举例说明。
过去的DOS时代,你编写的程序可以独占整个操作系统和计算机,在PC时代,你可以编写操控个人电脑上各种资源的程序,而到了网络时代,你必须开发高度分布的异构的软件系统。
早期的单机版程序,一个人编写几千行最多几万行搞定,而现代一些复杂的应用系统,拥有几十万行甚至数百万行代码,而象Windows这样“吨位”的大胖子,拥有千万行代码的规模,同时有上千名工程师在工作。
你说软件开发是变难还是变易了?这还真难说。早期的软件虽然规模小,但那时也没有这么强大的工具,这么丰富的资源,更重要的,技术也不成熟,各方面都无法与现在相比,因此,那时开发软件是不能说容易的。
现在开发的环境与条件是过去不能比的,强大的开发工具可以大大地提升编码效率,好用的搜索引擎可以提供丰富的技术资源,无所不在的互联网可以使你向世界上任何一名技术高手请求帮助……,但你要对付的软件开发任务也变得不同的,因此,现在开发软件也不能说是容易的。
事情还有另一方面:虽然现代软件的开发技术与开发方式与几十年前相比有了较大的变化,然而,有些东西却始终起着关键性的作用。这就是人自身所具有的基本能力:学习能力、思考能力、探索能力、解决问题的能力、知识迁移的能力、组合应用能力……。
从人的基本能力出发,其实一名软件牛人与一名玩游戏导致大学没毕业的失败者没有太大的差别。牛人们“牛”在技术,而这些失败的学生们“牛”在玩游戏上。绝大多数人都拥有足够的天赋和能力,可以在某个他所擅长的领域内成为牛人(前提是他能找到它并且具备相应的成功素质)。
软件开发没有变容易,也并不去过去更难。形式变了,但本质没变,因为软件开发本就是一个人基本能力的不断应用过程。
我还记得小时候抱着强烈的好奇心和我的哥哥一起拆过家里的一个闹钟,为了把各式各样的大大小小的齿轮原样再装回去,我们兄弟俩足足耗了好几个小时,不断地动脑筋琢磨这个小齿轮应该放在什么地方的,因为“拆”容易,“装”就难了,“装”好并且还让它“走”就更难了。虽然最后难免被老爸责骂几句,但那种兴致勃勃的探索劲头,现在还记忆犹新。
然而长大以后,有这种体验的机会好象越来越少了。所幸的事,软件技术好象也是一个闹钟,如果你感兴趣的话,也可以拆拆装装,体验一下儿时的那种单纯的快乐。
我最近在拆微软的“WCF牌”闹钟,附件是我的“拆卸”记录。期望对WCF技术感兴趣的朋友,也能从中体会到和我一样的动手试验进行探索的乐趣 。
下载“WCF并发与实例管理”学习资源包。
(http://download.csdn.net/source/1322774)
资源说明:
本资源包集中介绍了WCF中有关“并发与实例管理”这一领域的技术知识,其主要内容有:
(1)理解WCF中的“行为(Behavior)”
(2)异步调用设计模式
(3)在Windows Form和WPF应用程序中驻留WCF服务
(4)使用InstanceContextMode和ConcurrencyMode管理服务对象
(5)WCF如何对并发请求进行控制。
要求学习者具备.NET多线程开发基本技能,以及了解WCF基础知识(可以先看我的《WCF概述》技术资源)。
本资源提供一个PDF文件,和11个示例项目,要求大家亲自动手进行实验。
记得有网友在我发布《WCF概述》教学资源时问过WCF用在何处,我的回答是:
如果你想基于Windows平台开发分布式的软件系统,那么,WCF是一个不错的选择。
而我本次发布的这个学习资源包,可以看成是进入WCF开发分布式系统这一领域的第一步。其中涉及到了许多分布式系统开发中重要的技术点:比如如何处理线程同步、访问共享资源、超时回收对象、保证服务器吞吐率等问题,我相信这个资源能帮助大家进一步理解和掌握更多的WCF技术内幕打下基础。
我个人认为:随着网络技术的发展,计算将高度分布化,某一信息处理任务可能由PC、高性能服务器以及手机等智能设备等共同协同完成,我们已开始进入“计算无所不在”的时代。
开发分布式软件系统是当前和未来主要的一个软件开发领域,它给软件工程师所带来的挑战也是巨大的,其难度大于单机软件系统的开发。
是对分布式软件技术予以足够重视的时候了,因为相关的技术与工具已趋于成熟。
勇敢地迎接新时代的挑战吧!
分享到:
相关推荐
### 现代软件开发中的核心概念与原则 #### 面向对象设计与编程 在现代软件开发中,面向对象编程(Object-Oriented Programming, OOP)是一种广泛采用的方法论,它强调通过对象(类的实例)来构建应用程序。这种...
软件开发:计算机软件开发的java...同时,JAVA编程语言还能够提供了很多其他的优势,例如:可扩展性强、开发效率高、性能好、安全性高等,这些优势使得JAVA编程语言在计算机软件开发领域当中,变得尤为重要和不可替代。
本资源包是金旭亮.NET ...有关本资源的详细介绍,请访问金旭亮博文《今天,软件开发是变易还是变难》(http://blog.csdn.net/bitfan/archive/2009/05/18/4197786.aspx) 更多更新技术学习资源敬请关注金旭亮技术博客: ...
《软件开发工程管理中的质量控制与成本分析》 在软件开发工程管理中,质量是衡量产品价值的关键指标。质量不仅仅是产品的特性或属性,更关乎其优劣程度。然而,值得注意的是,不同样本间的差异是不可避免的,因此,...
然而,这种模型对于需求不明确或易变的项目可能不太适用,因为一旦进入下一阶段,很难回溯修改。 2. **快速原型模型**(Rapid Prototype Model):此模型旨在快速创建一个可运行的原型,以供用户反馈和调整。它的...
相比之下,演化模式更适合需求不明确或易变的情况。它采用迭代和增量开发的方式,通过用户反馈不断调整和改进系统。开发者先开发核心功能,然后根据用户试用的反馈进行扩展和完善。这种方法允许在开发过程中更好地...
软件工程是一门涉及软件开发全过程的学科,涵盖了从需求分析、设计、编码、测试到维护等多个环节。在软件工程的考试中,理解这些基本概念和生命周期模型是非常关键的。 1. 软件生命周期通常包括软件开发期和软件...
软件工程的主要目标是解决软件的复杂性、一致性和易变性问题,以及应对高昂的成本和维护难度。 软件工程的发展经历了四个阶段:程序设计阶段、程序系统阶段、传统软件工程阶段和面向对象阶段。每个阶段都反映了技术...
2. 软件危机:软件危机主要源于软件产品本身的特性(如复杂性、易变性)以及开发和维护过程中的方法不当。选项C准确地描述了这个问题,强调了软件开发方法的重要性。 3. 软件开发瀑布模型:这是一个经典的软件开发...
领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法,它强调通过深入理解和建模业务领域的核心概念,来创建高效、可维护的软件系统。在“领域建模的易与难(27页)”这个PDF文档中,我们可以看到作者...
此外,"G2结业项目----乐学易教网"的文件名表明这可能是一个课程的最终项目,这意味着源代码可能包含了完整的开发流程,包括设计模式、错误处理、测试以及性能优化等方面的知识。 学习这个项目,你可以: - 了解...
软件设计的重要性是软件开发阶段的第一步,最终影响软件实现的成败和软件维护的难易程度。软件设计的好坏直接影响软件的质量和性能,因此软件设计是软件工程中一个非常重要的阶段。 在软件设计过程中,需要遵循一些...
然而,瀑布模型的缺点在于它假设需求在项目开始时就能完全确定,一旦进入下一个阶段,就很难回溯修改,这在实际开发中往往难以实现,尤其是在需求不明确或易变的情况下。 软件工程是解决软件危机的有效途径,它综合...
软件工程的目标是运用先进的软件开发技术和管理方法来提高软件的质量和生产率。 衡量软件的常用六个指标:功能性,可靠性,易变性,效率,可维护性,可移植性。 统一过程描述软件的生存期,它用二维图来描述:横...
需求过程是一个迭代过程,因为市场环境的易变性以及用户本身对于新系统要求的模糊性,需求往往很难一步到位。 数据流图是功能建模的基础,在处理规格说明中给出了对出现在数据流图中的每个功能的描述。数据流图的...
Personal Software Process(PSP)是一种软件开发流程,包括PSP2.1里的各项指标。PSP的优点是:不局限某一种软件技术,而是着眼于开发流程,便于比较。不依赖于考试,而主要依赖于工程师自己收集数据,然后分析,...