一点说明:作为程序员,通常心里是讨厌软件工厂的,但很多时候问题自身皆有其内在理性,并不以个人的偏好而改变其发展的轨迹。
所以程序员一旦谈及和自身喜好相关的问题时,尤其要摒绝个人好恶,否则就会离问题的真相越来越远,而只有一腔情绪。
就我个人观察软件工厂大致处在这样一种地位:经营管理者迫于成本的压力,总是潜在的期望其可能实现;而程序员群体自身则总是对其嗤之以鼻。
为什么在经营层面软件工厂有如此大的诱惑力?
这不难理解,如果软件可以用工厂的模式来运作,那么程序员的可替换性将被无限强化,这样软件开发的成本就可以大幅度降低。
看看近二十年来中国制造的影响,就可以理解这种廉价劳动力所蕴含的巨大杀伤力。
经营层面话题可以无限丰富,但永远也无法摆脱的则是永恒的利益,而这些利益又是不得不争。
外包,外协人员所有这些东西的出现貌似偶然,但终究是利益驱动。
同样的原因,很多人也总是忘不了软件工厂。
但软件工厂的方向实在是错误的,这种错误不在于口水上的是是非非,而在于使用软件工厂模式投入产出比很低,一样会照成利益上的损失,而非相反。
工厂的特征是按照既定的工艺流程,大批量生产同样的东西,这时候通常会有规模效益。
而软件开发是通过明确概念和逻辑来一次性的创造东西,这时候的特征是规模不经济(diseconomy of scale)。
这点是有很多工程数据可以支撑的。
这也就意味着,创造,创新性的东西是无法和工厂的特征相结合的,而更类似于某种工艺的确认过程。
勉强为软件开发导入工厂模式时,很多人会努力切分想(设计)和做(编码)。
这里的问题在于软件开发中想和做是无法切的干净利落的,想约定了做的方向,但做的过程中必然带着对想的深化。
对于全新的开发,不管需求分析还是架构设计都很难摆脱迭代的特征,这个时候需要的是全员参与及积极的沟通。
独裁体制会阻塞这种信息回路,进而降低效率。
我们可以用一个很简单的公式来做些推导:
生产率:Productivity = Scale/MM 单位:KSLOC/MM
其中,Scale代表最终软件产品的规模,我们用代码行来做度量规模的单位。
MM则是开发此软件产品所花费的人月。
而与此同时,Scale = Coding Speed *Coding MM。
Coding Speed是指一个程序员编写代码的速度(不是指生产率),而Coding MM则是指所有程序员 用来编码的时间。
把这两个简单的公式合在一起,生产率的公式将变为:
Productivity = Coding Speed* CodingMM/Total MM 单位:KSLOC/MM
如果我们假设Coding Speed是一个程序员写出Bug最少,质量最佳代码的时间,那么显然生产率主要和程序员的能力以及编码所投入的时间有关。
而软件工厂模式恰恰与此相反,编码速度较低,耗费在沟通上时间会多,所以生产率大致上是低的。
顺道一提:李开复先生的公司叫创新工厂,这很有意思,从本质上看,专注创新的一定不是工厂,而工厂的使命也一定不主要是创新。
这是一个充满矛盾的名字,只是不知道从何而来。
分享到:
相关推荐
希捷硬盘工厂维修工具软件是一套专为希捷品牌硬盘设计的专业维护和修复工具,它包含了一系列高级功能,旨在帮助IT技术人员和数据恢复专家解决硬盘出现的各种问题。这些工具通常不面向普通用户,而是针对那些需要对...
但需要注意的是,这种跨型号的升级可能存在风险,可能导致不兼容或者功能不稳定,因此建议在专业人士的指导下进行。 刷机步骤通常包括以下几点: 1. **备份当前固件**:在升级前,为了防止意外,应先备份当前设备...
"SuperWORKS V8.0 工厂版补丁"便是针对该特定版本软件的一个升级补丁,旨在解决原软件存在的问题、优化性能或增加新功能。下面我们将深入探讨补丁的概念、目的以及应用。 **补丁的定义与作用** 补丁(Patch)是软件...
在软件设计模式中,工厂模式是一种非常常见的创建型模式,它提供了一种创建对象的最佳方式。C#中的工厂模式分为简单工厂、抽象工厂和单例模式三种,每一种都有其特定的应用场景和优势。 1. **简单工厂模式**: ...
### 抽象工厂模式实验报告知识点解析 #### 实验背景及目标 ...此外,对比工厂方法模式,抽象工厂模式能够更好地处理具有多个相关联对象的产品族问题,非常适合于需要管理多种类型产品且这些产品之间存在关联的情况。
然而,任何软件都有可能存在潜在风险,因此建议定期更新至最新版本,并在使用时保持良好的网络环境,防止恶意软件的侵入。 总的来说,格式工厂4.2.0以其全面的格式支持、友好的用户界面和丰富的功能,成为了一个...
在软件设计模式中,工厂方法(Factory Method)和抽象工厂(Abstract Factory)是两种非常重要的创建型模式。它们主要用于解决对象实例化的问题,提供了一种封装对象创建过程的方法,使得代码更加灵活,易于扩展和...
在软件开发中,我们经常会遇到这样的情况:不同的平台或者环境可能需要使用不同的组件或者对象,这些对象之间可能存在一定的依赖关系,抽象工厂模式就是为了解决这类问题而提出的。它将创建对象的过程封装起来,使得...
在软件设计模式中,"简单工厂"是一种创建型设计模式,它提供一个创建对象的接口,但允许子类决定实例化哪一个类。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 【描述】:EMS(简单工厂...
这些类代表实际需要创建的对象,例如,可能存在`ConcreteProductA`和`ConcreteProductB`两个类,分别实现了`Product`接口的不同行为。 3. **工厂类**:这是简单工厂模式的核心,通常命名为`Factory`,负责根据需求...
通过这种方式,设计人员可以在虚拟环境中进行工厂漫游,提前发现新车间和生产线配置可能存在的问题,寻找最佳解决方案。 江衡仿真提供的数字化服务不仅限于软件本身,还包括全面的解决方案。通过3D可视化技术,他们...
4. 模式的优缺点:分析工厂模式带来的优点,如解耦、提高可扩展性,以及可能存在的问题,如增加类的数量。 5. 应用实例:通过具体的.NET项目案例,展示如何在实际开发中应用工厂模式解决实际问题。 6. 设计原则:...
例如,可以使用ConcurrentHashMap来存储已创建的数据库连接,当需要新连接时,首先检查缓存中是否存在,如果存在则直接使用,不存在再通过工厂创建新的连接。这有助于减少数据库资源的开销,提高系统的响应速度。 ...
然而,简单工厂模式也存在一些缺点: - **违背开闭原则**:如果需要添加新的产品类型,需要修改工厂类的代码,这违反了面向对象设计原则中的“对扩展开放,对修改关闭”。 - **灵活性受限**:工厂类集中了所有产品的...
2. **错误检测**:通过仿真不同类型的错误情况,如数据包丢失、重复、错序等,软件可以帮助开发者识别并修复可能存在的通信问题。 3. **性能测试**:软件可以评估系统在高速、高并发情况下的性能,确保在大规模生产...
- 在这个例子中,可能存在一个`AbstractFactory`接口,它定义了创建一系列相关产品的方法,然后有多个具体的工厂类(如`ConcreteFactoryA`、`ConcreteFactoryB`)实现这些方法,分别创建属于不同系列的产品。...
在软件工程中,当类的数量庞大且它们之间存在复杂的依赖关系时,直接实例化对象可能会导致代码复杂度增加,不易维护。工厂模式通过引入一个专门的工厂类来负责对象的创建,使得客户端与具体的产品对象解耦,提高了...
**简单工厂模式**是软件设计模式中的一种,属于创建型模式。在Java编程中,它是一种用于创建对象的简便方法,将对象的实例化过程封装到一个单独的工厂类中,使得客户端代码无需直接调用具体类的构造函数,而是通过...
或者使用单例模式来确保一个特定平台的工厂在程序中只存在一个实例。 总之,抽象工厂模式是一种强大的工具,它帮助我们在设计时保持灵活性和可扩展性,特别是在处理跨平台或多组件系统时。通过理解并正确应用这一...
值得注意的是,描述中提到“价格便宜,软件多,有些不能解的也正常”,这意味着这些解密软件可能并非官方支持,并且可能存在兼容性和成功率的问题。此外,如果软件本身存在漏洞,使用它们可能会引入安全风险,如病毒...