关于软件生产的工业化思考(一)

2024-01-13 13:18

本文主要是介绍关于软件生产的工业化思考(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

工业脱胎于手工业。

在手工业时代,我们生产一个产品,比如刺绣,是用绣花针一针一针的缝出来的,可以按照手工业者的想法,绣出各种各样的创意作品,相当灵活,只要时间、精力、财力允许,可以做出满足所有客户的所有要求的产品。但是,其效率不言而喻是最低的。

在生产过程中,优秀的手工业者也发明了各种针法,以达到不同的效果,比如什么盘针、套针、抢针、变体绣等等。这些都是这些手工业者为了达到某种效果而总结的技术手段,逐步演变成固定的套路,要达到什么效果,就用什么针法。(这点是不是和设计模式很像?)

随着科学技术的进步,机械设备被大量引入到生产领域。这些冷冰冰的家伙能不知疲倦地工作,而且做的东西误差很小,能达到大批量生产同一款式商品的要求,在刺绣领域也一样,1828年,Joshua Heilman 生产了第一台手摇绣花机,1867年出现第一台飞梭绣花机,以及到后来出现的电脑刺绣技术,使得刺绣能被工业化生产。

发明机械的过程,其实就是一个让机械模仿人行为的过程,这里面就有两个问题比较重要:1、总结人的行为;2、如何让机械模仿。

如果能解决了这两个问题,就能基本实现工业化。

在软件开发领域也同理。

在纯手工编码的方式下,软件开发的过程可以划分为两种行为:1)、如何解决问题, 2)、按照设计编写代码。

第一个部分需要人脑的创造性活动,在人工智能还没有发展到一定阶段之前,这一部分不太可能离开人工的编写;

第二个部分就可以偷懒了。既然第一个部分中,设计者已经想好了如何解决,甚至编写了实现算法,那么,这一步好像只剩下体力活了。而让计算机去做这些体力活肯定能比人做的更有效率。

如果每个问题都是不同的,解决问题的方式也都是完全不同的,那么上述两个阶段的划分好像也没什么太大的价值,反正每个问题都要设计,每个设计都要重新编写实现。

但是在更多的场合中,上述两个阶段的划分是很有意义的。在一些领域,比如ORM,只要你编写了一个DAO,那么其他的DAO和先前的这个基本上都是一样的,打开两个DAO的代码,你会发现好像两个类只有名称是不同的。在这种情况下,如果你不用一些工具,完全手工编写代码,你会发现:在比较有技术含量的阶段1中,你只花了2个小时,但是完成没有技术含量的阶段2中,你却不得不花上20个小时。

作为一个有智商、有品味、有追求的懒人,我们当然不能接受这么无聊的工作。我们要让计算机来帮我们完成。怎么完成呢?

我们不妨先考虑一下写文档,文档有很多种,简历、推荐信、证明、会议记录、需求规格说明书、概要设计、详细设计等等等等,不同类型的文档内容不同,但是相同类型的文档,其格式基本相同。因此,几乎所有的Office软件都会提供一个“模板”功能,你可以选择一个对应的模板,根据这个模板创建你对应的文件,然后把你的内容填写进去即可。

与开发很相似吧,那为什么我们不借鉴这个工作的很好的“模板”的概念呢?

其实,模板的思想在编程中有很多应用,比如类继承,父类或者接口就可以看作是子类的一个模板,还有一个很有用的设计模式“模板方法”也能让很多框架易于扩展。

回到我们懒人的问题中,要让只认识0、1的计算机帮我们编写代码,我们就要编写一个模板,让它遵照执行。然后在运行时,给这个模板中填充一些不同的变量就可以了。

这就是Liferay ServiceBuilder的方式,也是我认为可以实现软件工业化生产的基础。

这篇关于关于软件生产的工业化思考(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/601590

相关文章

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

生产mongodb 分片与集群 方案

链接:http://my.oschina.net/pwd/blog/411439#navbar-header 注:主要是有一键安装的脚本可以借鉴

一次生产环境大量CLOSE_WAIT导致服务无法访问的定位过程

1.症状 生产环境的一个服务突然无法访问,服务的交互过程如下所示: 所有的请求都是通过网关进入,之后分发到后端服务。 现在的情况是用户服务无法访问商旅服务,网关有大量java.net.SocketTimeoutException: Read timed out报错日志,商旅服务也不断有日志打印,大多是回调和定时任务日志,所以故障点在网关和商旅服务,大概率是商旅服务无法访问导致网关超时。 后

红旗EQM换电连接器哪家生产

红旗EQM换电连接器概述 红旗EQM换电连接器是针对红旗品牌电动汽车设计的一种快速更换电池的装置。它允许用户在短时间内完成电池的更换,从而提高电动车的使用效率和便捷性。接下来,我们将详细探讨红旗EQM换电连接器的相关操作步骤、所需工具以及最新的相关信息。   红旗EQM换电连接器操作步骤 根据搜索结果,红旗EQM换电连接器的具体操作步骤如下: 断开电源:在进行任何操作之前,确

【编程底层思考】详解Java的JUC多线程并发编程底层组件AQS的作用及原理

Java中的AbstractQueuedSynchronizer(简称AQS)是位于java.util.concurrent.locks包中的一个核心组件,用于构建锁和其他同步器。AQS为实现依赖于FIFO(先进先出)等待队列的阻塞锁和相关同步器提供了一套高效、可扩展的框架。 一、AQS的作用 统一同步状态管理:AQS提供了一个int类型的成员变量state,用于表示同步状态。子类可以根据自己

Linux多线程——POSIX信号量与环形队列版本之生产消费模型

文章目录 POSIX信号量POSIX的操作初始化销毁等待信号量(申请资源)发布信号量(放下资源) 环形队列之生产消费模型 POSIX信号量 POSIX信号量和System V信号量是不同的标准 但是实现的功能是一样的,都是为了解决同步的问题 我们说信号量指的就是资源的数量 在生产者与消费者模型里面,生产者与消费者所认为的资源是不同的 生产者认为空间是资源,因为每次都要

一次关于生产环境服务无故宕机的排查过程

故事的开始 这个故事是在一年之前,当时我们的系统运行在客户的k8s环境上。然后很神奇的是每个月底我们都会服务宕机,当然我们开启了多个实例。当时的容器线条就像心跳图一样(或许有些描述的不太准确,我没有找到当时那个像心电图一样的容器资源监控图)。 第一次的排查 当时我们还是很有信心去解决这个问题的。由于每个月的月底都是业务使用的高峰时段,也就是说,从表象上来看,qps一高,容器就挂。 业务日

一道算法题引发的动态内存管理的思考

在做PKU2762时,需要建邻接表。 于是按部就班写了下面一个插入边到邻接表中的函数: const int VMAX = 1010;typedef struct Graph{int vex;Graph* next;}Graph;Graph ArcGraph[VMAX];void insert(int u, int v){Graph* t = new Graph;Graph*

广东省特殊食品生产试题分享

1.食品污染是指在各种条件下,导致有毒有害物质进入到食物中,造成以下哪项发生转变的过程。(D) A.食品的安全性 B.食品的养分性 C.食品的感官性状 D.以上都是 2.食品污染物是指(D) A.生物性污染物 B.化学性污染物 C.物理性污染物 D.以上都是 3.关于菌落总数的表达,错误的选项是(A) A.反映食品对人体安康的危害程度 B.是食品清洁状态的标志 C.推测食品的耐保藏性 D.指1g检