软件开发中的理想与现实(九)——三个臭皮匠,顶个诸葛亮

2024-02-12 02:30

本文主要是介绍软件开发中的理想与现实(九)——三个臭皮匠,顶个诸葛亮,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我说过要介绍一下项目组成员的,既然马上要真正开始做项目,那么互相好好了解一下还是很有必要的。
项目组包括我一共四人,分别是realdodo(我)、chanjinn、wumaomao、XophiiX。
我自不用多说,在项目中以项目流程的引导者身份出现,同时也参与开发。
chanjinn是我的学长(噢,忘说了,我们四个都是学生),做过好几个项目,编过很多代码,嵌入式、Linux都有不少研究,做项目很有思想,唯一只是C++基础相对差一点,不过不要紧,软件开发中的经验和悟性很重要。他笑起来很可爱(^______^),就像括号里面那样,很和蔼可亲。
wumaomao是团队中少有的C++高手,了解不少C++和设计模式的东西,有很强的编程能力,绝对将是项目中的中坚力量。而且他写得一手好字,有深厚的文化内涵,令我十分佩服。
XophiiX是项目组中最年轻的同学,比我小整四岁,但在编程方面已经很有感觉,并且酷爱游戏编程,对新东西非常感兴趣。我见到他之后就马上感觉到后生可畏,他超过我只是时间问题了!
在团队中能够拉到这么强大的阵容真是十分难得,我相当知足了。不过,如果放到更大的范围内比较,我们都是菜鸟中的菜鸟,我们的能力还远没有值得骄傲的地步。这不,2月20日,项目正式开张的第一天,我们就遇到大难题了。
我们项目的第一个迭代目标是,将用ASN语法描述的消息转换成C语言数据结构。至于什么是ASN、为什么要自己开发而不用现成的ASN到C的转换工具、为什么不用yacc、为什么用C++开发这些功能等问题我都不想回答,反正我们有自己的理由(呵呵)。写一个最简单的例子,假设有下面的消息:
     A ::= SEQUENCE
    {
        b BOOLEAN,
        c INTEGER
    }
那么转换成C语言之后应该是:
    typedef struct tagA
    {
        BOOL b;
        LONG c;
    }A;
相信一看这个例子就能够明白,SEQUENCE和struct相对,BOOLEAN和BOOL相对,INTEGER和LONG相对,只要处理好这个对应关系就问题不大了。
根据这个想法,XophiiX提出一种设计(白板上画的草图,我把它稍微整理了一下):
第一版设计
当然,这是一种有效的做法,但是扩展性实在太差,因为ASN的语法可不比C语言简单!例如这个消息:
    Sample ::= CHOICE
    {
        b BOOLEAN,
        c INTEGER
    }
那么换成C语言之后应该是:
    enum Sample_E
    {
        I_B,
        I_C
    };
   
    typedef struct tagSample
    {
        ULONG ulIndex;
        union
        {
            BOOL b;
            LONG c;
        }choice;
    }Sample;
噢,这是什么东西,根本就没有办法简单的进行对应了!如果用刚才简单对应的方式来处理,这个系统真的就会变成一个怪物了!所以这个方案就被否定了,啊,XophiiX不要伤心,在最开始这是很常见的事情。
为了方便确定设计的方向,我根据需求画出这个系统最基本的处理流程图(好了,大家终于知道我有多么菜了):
第二版设计
但是我还没有想好如何把它变成可分解的类,所以就算大家都比较认同这样的流程也没有用,不过作为一个大体思路,起码有助于指明方向。
马上,我们就把上面这个做了一个精简,并准备对各部分进行细化。精简图如下:
第三版设计
大家心里都明白,最重要也是最麻烦的就是如何收集词元信息,但是如何做最好呢?不知道!眼看着上午就要结束,白板上的图画了又擦,方案往往提出几分钟就被否,然后所有人都陷入一种抓狂之中。
OK,it's lunch time。人是铁饭是钢,还是去休息一下吧。
午餐的时候大家都比较沉默,虽然我一直安慰大家,每个项目开始的时候都是这样的,设计的灵感会突然冒出来的,不过大家还是不太相信。
嗯,不管怎么样,灵感还真的就出来了。不知道是谁提出了一个“作坊”模型,让大家眼前一亮,简单的说就是,把处理ASN文件得到的词元当作零件,收集词元信息当作零件分类,修饰词元信息当作零件组装,输出C文件则是最终包装,那么“作坊”(就是收集词元信息)负责进货(得到零件)和销售(零件分类输出)。按这样的说法,为了进货,我们需要一个库存;为了分类,我们需要工人;为了管理工人,我们需要一个经理。他们的职责也很清楚,库存负责存放零件,经理负责根据库存情况划定工作范围并“雇佣”合适的工人,工人则仅仅专注于工作。他们的关系如下:
第四版设计
这个图并不详细,甚至有些明显地错误,但是我们已经可以按照中央的想法进行工作了!综合来看,现在可以把整个处理过程表达如下:
第五版设计
下面我们就可以针对这种设计,具体规定这几部分之间的接口了!在规定接口时我们发现,这个流程并不具有弹性,因为作坊必须知道它的顾客(修饰词元信息)的情况才能工作,而我们是想实现一个面向广大人民群众的作坊,所以我们引入了一个代理商来解决这个问题。嗯,代理商具体是什么呢?哦,直接用main来做这样的代理其实就可以了!
最终,今天的框架如下:
第六版设计
至于接口,我们也慢慢的一一确定,此处不再赘述。今天的晚餐吃得特别香。
好了,喘口气,今天收获很多,等会我们来好好总结一下。

这篇关于软件开发中的理想与现实(九)——三个臭皮匠,顶个诸葛亮的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

AI在软件开发中的应用

AI在软件开发中的应用可以帮助开发人员更高效地编写和测试代码,并提高软件的质量和性能。它能够帮助加快软件的部署和维护过程,提供更好的开发体验。 编码辅助 帮助开发人员更快地编写代码。例如,AI可以识别代码中的语法错误,并提供修正建议。它还可以根据开发人员的代码习惯和上下文提供代码自动补全功能。 自动化测试 用于自动化测试,帮助开发人员更好地测试其软件的功能和性能。它可以帮助发现潜在的错

Zigbee协议详解:低功耗无线通信的理想选择

什么是Zigbee协议 Zigbee是一种基于IEEE 802.15.4标准的无线通信协议,专为低功耗、低数据速率和短距离通信设计。它广泛应用于物联网(IoT)设备,如智能家居、工业自动化和健康监测等领域。Zigbee协议由Zigbee联盟维护和推广,旨在提供可靠、安全和互操作的无线通信解决方案。 Zigbee协议的主要特点 低功耗:Zigbee设备通常采用电池供电,设计上考虑了

迈巴赫S480升级增强现实AR抬头显示hud比普通抬头显示HUD更好用吗

增强AR实景抬头显示HUD(Augmented Reality Head-Up Display)是一种更高级的驾驶辅助技术,相比于普通抬头显示HUD,它提供了更丰富、更具沉浸感的驾驶体验。以下是它比普通抬头显示HUD多的一些功能: • 信息呈现方式:普通抬头显示HUD通常只能显示简单的文字和图标,而增强AR实景抬头显示HUD可以在驾驶员的视线范围内呈现更多的信息,并将其与实际道路场景进行融合

软件开发-人员流动

软件开发 并不是一件 简单的事情。 如果程序员像白菜一样,标一个价,放在市场卖的话, 那么,软件,也不是,一堆白菜堆在一起就ok了。 人员在一个地方待久了,可能就会流动。 毕竟世界这么大。 可是,软件系统 一旦开发出来, 应该就在线上一直 运行着。 那么人员的流动,决不应该像白菜一样,一个挨一个的放着。他们彼此重叠,这样的重叠部分,应该不少于半年。这个软件系统才是可控的。 否则, 这个拼

Vant:构建现代化移动端应用的理想选择

Vant:构建现代化移动端应用的理想选择 引言: 在当今移动互联网时代,移动应用的开发已经成为了许多企业和开发者的重要任务。为了提高开发效率和用户体验,选择一款优秀的UI组件库是至关重要的。而Vant作为一款流行的移动端UI组件库,凭借其丰富的功能和简洁的设计风格,成为了开发者们的理想选择。本文将介绍Vant的特点和优势,以及如何在项目中使用它,并提供一些基本的使用语法。 一、Vant的特点

软件开发的流程和常用模式

一、软件开发一般分为五个阶段: 1.问题的定义及规划(可行性分析) 此阶段是软件开发与需求放共同讨论,主要确定软件的开发目标及其可行性。 文档为可行性研究报告和项目开发计划 2.需求分析 在确定软件开发可行性的情况下,对软件需要实现的各个功能进行详细需求分析。 文档为软件需求说明书,数据要求说明书 3.软件设计(概要设计和详细设计) 此阶段中要根据需求分析的结果,对整个软件系统进行

敏捷方法对于快速软件开发至关重要

介绍 敏捷方法是指在项目管理领域中,一种旨在提供高质量软件解决方案的协作和灵活方法。与传统的项目管理方法(瀑布式)相比,敏捷方法有很大不同,它更注重迭代进度、反馈整合、客户满意度和团队协作。 历史与演变 敏捷方法论的起源可以追溯到 20 世纪 70 年代和 80 年代,当时软件开发团队开始使用迭代程序来最大限度地提高生产力和效率。然而,敏捷方法论正式诞生于 2001 年,当时 17 位技术先

求职难遇理想offer!!【送源码】

现在的求职行情确实不太好,有很多抱怨自己找到的工作技术栈落后的同学,我也是建议他们接下先干着。不能幻想毕业之后还能找到更合适的工作,那个时候就基本只能参加社招了,没有工作经验参加社招想要获得满意 offer 的更是地狱难度。校招都获得不了合适的 offer,还指望社招么?这都什么时候了啊?不要野心比能力大,要学会接受现实并努力在正确的方向突破。 对于已经在技术栈落后的公司工作几年的朋友,

【报告分享】青年理想工作空间白皮书(附下载)

摘要:11月30日,瑞安房地产旗下办公品牌瑞安办公SHUI ON WORKX联合青年志在「三联生活周刊」发布《青年理想工作空间白皮书》(以下简称《白皮书》)。《白皮书》采用定性调研+冰山模型的研究方法,通过对新一代工作者们工作诉求的深度洞察,阐述了他们对工作空间的未来需求与思考,同时瑞安办公也在不断探索未来办公的重要趋势,创新提出了「价值办公」的理念,即办公室超越物理空间的意义,以价值凝聚人,又赋

AI 已经在污染互联网了。。赛博喂屎成为现实

大家好,我是程序员鱼皮。这两年 AI 发展势头迅猛,更好的性能、更低的成本、更优的效果,让 AI 这一曾经高高在上的技术也走入大众的视野,能够被我们大多数普通人轻松使用,无需理解复杂的技术和原理。 其中,AI 有一个很重要的应用,就是 搜索 。 搜索技术经历了几个主要阶段的发展: 1)1.0 时代:以关键词匹配为主,搜索引擎根据用户输入的关键词在索引数据库中查找匹配的网页。但容易受到垃圾信息