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

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

相关文章

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈

yolov3 上生产

1、在生产环境上编译darknet,执行make命令就好哦。  通过以后,拿到libdarknet.so 2、改一改../python/darknet.py文件 3、把darknet里的四个模型文件地址改一改就可以了     后面我会写一篇详细的,今天我要回家了

爬虫阶段思考

内容:写这篇文章是因为最近帮同学改了很多的爬虫代码,感触良多。 我用豆瓣为例,并不是不会用别的,而是这个我个人感觉最经典。然后还会写我遇到的一些问题以及解决方法。 首先,我们得先知道怎样爬取。我用的scrapy框架爬取。 我对此图的理解就是: 从spiders中获得一个请求(REQUEST),通过引擎传递给调度器,之后再返回给引擎,引擎把url封装好后传递给下载器,下载器将资源下载好后

关于微信没有接入鸿蒙NEXT的思考

6月21日,纯血鸿蒙发布,国内的质疑声终于停止,不再被人喊叫换皮 Android 了.就连编程语言都是华为自研的。 可是发布会后微信却成了热点,因为余承东在感谢了一圈互联网企业,如:淘宝、支付宝、美团、京东、抖音、今日头条、钉钉、小红书、微博、B站、高德、WPS等等. 唯独没有感谢腾讯. 中国互联网巨头只有哪么几家,腾讯、阿里、字节、拼多多、美团、百度、京东、华为 他们这些派系又诞生了无数

基于RAG的知识库AI代理机器人,问题思考

基于RAG的知识库AI代理机器人,问题思考 知识库内容分类 对于普通非qa问答格式的知识内容 在分段存储时,需要手动调整,保证每个分段的内容意思完整,不被分割,当然段落也不宜过长,保证内容表达的意思到不可分割为止就行 对于qa问答格式的知识内容 通常需要对问题增加格外索引,因为fastgpt的模式是将问题和回答,作为完整的文本作为向量化的坐标,当问题和回答的内容过长时,使用问题向量化匹配

体验了一下AI生产3D模型有感

我的实验路子是想试试能不能帮我建一下实物模型 SO 我选择了一个成都环球中心的网图 但是生成的结果掺不忍睹,但是看demo来看,似乎如果你能给出一张干净的提示图片,他还是能做出一些东西的 这里我延申的思考是这个物体他如果没看过背面,他怎么猜? 他产出的物品为啥都是一张图的,我还是不太理解 但是如果多张图片,其实又和一个多图3D重建的能力似乎重复了 或者我感觉这个功能需求两张图片 正上面45

关于后台实践的一些疑问、思考与建议

1. 关于工具类 建议一个公司或者一个产品线的项目,使用统一的工具包,而不是每个项目都建立自己的工具类。包括一些枚举类,基础抽象类等也建议加到项目的基础工具包中。 如果要在自己项目中编写的工具类,尽量多实现一些常用的函数。或者让工具类直接继承一些框架中的常用工具类,如StringUtils可以继承common.lang中的StringUtils。 2. 关于日期和时间 从contro

一个问题的思考

问题:在32位的机器上对long型变量进行加减操作存在并发隐患,那么到底是不是这样的呢? 分析:long类型是64位,所以在32位机器上,对long类型的数据操作通常需要多条指令组合出来 ,无法保证原子性,所以并发的时候会出现问题。 对于JAVA并发编程中的一些问题: 可见性问题: 对于可见性,我们先看下定义: 可见性:一个线程对共享变量的修改,另外一个线程能够立刻看到。并发问题往往都是

Android不能调用java.awt的原因及解决办法和思考

android 里面不能使用awt,底层没有具体的实现awt android里面的窗口创建过程决定了界面只能是android里面的组建。 android的组件都是通过远程的IPC调用完成的,也就是说服务端有什么功能才能用什么功能。 不是所有用java写的程序都能在标准jvm中运行的。 android中的虚拟机是修改过的,跟标准的JVM不同,比如对一张图片的解析,android

【Rust日报】2020-02-06 那些在生产中使用 Rust 的公司

那些在生产中使用 Rust 的公司 按行业组织的,在生产中使用 Rust 的公司的精选列表。可供大家参考,GitHub 地址:https://github.com/omarabid/rust-companies reddit 上参与讨论:https://www.reddit.com/r/rust/comments/ez7m4u/rust_companies_in_production_list_