明智软件开发的共鸣和思考 - 读Ivar博士PPT的读后感

从CSDN首页看到了曾总的 2008英雄大会的总结性文章,其中的Ivar Jacobson的主题演讲“明智-软件开发的新趋势”引起了我的注意,然后查看了 孟岩的博客,并下载了里面的ppt,仔细研读,感受颇深。

大家对需求的理解差异,是软件失败的最主要原因,引起了错误的预算,工期的预计以及人员的安排,最终导致质量无法保证,我们这么多年用的软件工程理论难道都是有问题的吗?从面向对象,UML建模,RUP,XP,甚至Scrum。是这些体系有问题?还是我们没有用好呢?

  我个人并非计算机专业出身,完全凭的自学,所以对于标准的软件开发理论一直没有深入的研究过。面向对象的思想也是在我2002年放弃php转学java之后才有一点体会的。UML我只用让他给客户做过方案,因为对方的一个家伙必须看这个。至于RUP,XP我没机会实践了。我公司的团队必须按照现有的适合的开发方法继续做,不可能随便换一个什么理论。从根本上讲,现有的软件开发系统思想并没有给我什么帮助。我在开发中遇到的最大问题,并不是怎么开发,而是无法准确理解用户的需求,而且用户的需求变更也是无法控制的。你不改?我们就不付款,你们看着办。 关系弄僵了,我想挨批评的肯定还是我们自己。
 

他提出了Smart的概念,也就是“明智软件开发”。我们来看看他的内容是什么。

一 什么是Smart
 1 他引用了爱因斯坦的一句话, Things should be done as simple as possible - but no simpler.

不好意思,这句话是我第一次看到。用简单的方法解决问题,应该是最好的。这个观念我在论坛里看到过许多人提到过。

个人认为简单有几个情况

  1 原始的简单,因为不会高深的技术和方法,对付着弄出来就行了,但是这个东西能用
  2 能从一群解决方案中,选出一个最简单的实现方法,能满足需求,能用,虽然可能在某个方面不适合以后的扩展。
  3 被迫的简单,因为工期催促,不能考虑那么多了,只能简单的实现最主要的功能,许多细节并不完善的简单。类似于原型。

我们面对用户一个很简单的需求,如果找一个手快的人,估计1-2个小时就能搞定,用户马上就能看到结果并确认,如果按照正规的流程,提交申请,审批,确认,转到开发人员,开发,提交测试,让用户看结果,我估计最快也需要2天,因为要考虑人家不是一天没事的等着你反馈,赶上出差,开会这类事情都要考虑进去的,而且一点用户有修改,这个流程肯定还要走一遍的。

正规适合于许多人一起合作的大系统,特别是人员变动比较大的情况。对于我来说,虽然有10几个人,但项目多,每个项目也就4-5个人,我想那些大公司看着人多,真正一个项目里有效参与的,估计不会到10个人。大家把负责的问题简单化才是解决这类项目的比较好的做法吧。至少我这么认为。


2 Smart意味着什么(What does being Smart mean?)
  Being Smart is not the same thing as being intelligent.
  你可以智力很高不精明,你也可以很精明,但智力却不是很高

  呵呵,我一开始分不清2个的区别,我想大致是这个意思吧。太聪明的人也许太聪明了,他们的设计太超前了,可以满足你5-10年的需求,可许多时候,我们只需要满足这个月的需求就行了,呵呵,仔细想想就知道为什么了。

  Smart is more then having common sense
  你可以拥有常识的东西,但不一定很精明,但是如果你很精明,则你一定拥有常识性的东西。

  我们掌握了许多的东西,这是基础,否则我们无法理解和实现用户的需求。业务的理解重要性远高于对基础的理解,因为对于用户来说,他要求的功能都可能是行业内的常识了。


  Being Smart is being agile, but more

  敏捷是灵活性,可以适应各种情况,而精明则是敏捷+在特定的条件下正确的完成了它。

  我们的项目很灵活,可以很快的进行调整来满足用户的需求,但我们真的需要调整吗?我们的调整真的是对的吗?如果对用户需求理解不足,出现了偏差,那么我们的调整就是错误的。而且我经常遇到用户又再次反悔的情况。 我一般对于用户的新的需求变更,都是最少压3-7天,给用户一个反悔的机会。期间通过其它方式确认需求,特别是那些影响很大的变动。有时还尽力说服用户不要变动,因为我们可以换一个思路给他实现类似的功能。 正确立即用户的需求并正确的实现它,用户高兴,我们也会少了许多的无用功。



二、精明的例子

  1 人
    不精明的人想通过过程和工具来提供人的智力,获得优秀的技能、。
    A Foo with a tools is still a foll but a dangerous fool.

    呵呵,可惜有些人是这样考虑的,希望通过工具来使自己变得更专业,更精明。

    但软件是人开发的,只有合适的人才能开发出合适的软件,而不是工具开发出来的。我个人就曾经在一个关键的系统使用时,用notepad编写了程序和HTML页面,并编译和发布了,那是2001年。许多那时候过来的人,都会怀念手工编写的经历,包括现在还有人鼓励用文本编辑器而不是是IDE来进行开发。这个我就不评价了,呵呵,毕竟年代不同了。


  2 项目
    瀑布式开发是不精明的。应该开发一个拥有核心功能的演示系统,然后再逐步的完善。

    用户其实最关系的地方只有几个,比如老板一般关系报表,你把这个弄出来,他们那里就会通过。 操作人员关心的是是否方便。许多支持的功能,已经锦上添花的功能,完全可以放到后面完成。主题完成,我们再开始绣花。何处是关键,这个要靠人去判断了,特别是根据用户的喜好决定。否则你辛苦做的一个功能,他也许根本不关心。

  3 需求
    需求是不断变化的,而许多人却努力的描述所有的需求,因为这样才能精确估算费用。

    我们应该用基于简单的需求,然后逐步的完善它,卖给用户的是一个定制的系统,与原始的方案作为再次谈判的标准。

    我们国内有点不同,我们大部分是用户提出了一个不是很具体的需求,我们开发了。用户看到后,增加和变动了许多,并且一般不会增加任何费用。这个是很不公平的。如果开发方拒绝开发,那么你这个公司在这个行业的名声将会出现问题。除非你是大公司,是强势的一方,但绝大多数公司不是这样的。用户是付款的,他们才是上帝。如果关系处好了,也许还能谈谈价格。 还有一种情况,就是开发商用低廉的价格中标,然后以各种功能为由增加费用,这个也是一些有些实力的大公司才敢做的,或者是关系非常铁的,还或者有猫腻的情况才可能出现。呵呵,不是你也知道是啥意思。。。。


  4 架构

     2个极端情况
    1)无须架构,直接编码,以后需要时再重构。
    2)架构在一个非常高级的结构上。

    对软件质量影响最大的是软件的架构

    建议先架构一个核心的系统,只有大的骨架,然后开始编码实现。 没有可执行的代码的架构是个幻想。进行适当的重构。

    架构取决于经验,如果大方向正确,完全可以先进行功能的实现,出现问题再进行局部调整。没有人一开始就能预测所有的问题。需要重构的代码应该符合 1-9原则,而不是2-8原则。绝大部分代码是不需要重构的,因为他们运行次数不大,对系统的影响很小。只有那些频繁运行的代码,才最需要重构,效果也最明显。

   5 建模
    和架构非常类似


   6 测试
    我们有2类人,思考者和清理着。测试人员属于软件世界的清理者。

    如果测试总是在思考之后进行,那就太晚了并且太昂贵了。
    如果你无法验证你做的是否正确,那就先不要做。


    虽然大家都知道测试的重要性,但实际做起来还是有很多困难的,特别是人员和工期紧张的时候。大家还是多争取一些兼职的测试人员吧,呵呵呵,比如你的其它部门的同事,朋友啥的。


    7 文档
     多年以来,我们写了太多的文档了。

    几乎每个领导都非常重视文档,但我们真的需要那么多的文档吗?我们真的需要看所有的文档吗? 买来电视机,买来笔记本,看用户手册的有多少?但新买了一个电风扇,需要自己组装,看文档的又有多少人?

    软件文档中真正有用的,会被大家经常看的还是那些整体的文档,至于那些细节,人们会自己弄符合个人习惯的东西的,比如贴一大堆纸条,或者写一个txt文件放在桌面上。

    文档应该增加系统的价值,而不是成为累赘。

   8 过程管理
    我没啥好说的。



三、如何变得精明呢?

    1 你应该不断的进步
    2 你应该熟悉不同的角色,比如工程师,过程管理,社会工程师
    3 从你拥有的开始,找到不断提高的一小步,一次只实践一个。


    我们工程师习惯了听项目经理的安排,不断的按照指示和需求文档来用代码实现,我们很少去和客户直接接触,很少作为一个专业的测试人员去搞测试。在一些外包公司更是这样,你只知道自己眼前的这点东西,你不可能熟悉整个系统,因为你没有那个权利,呵呵。
 
   
   
四、Smart到底是什么?

    他啥也没说,只是告诉大家: 每个人都可以变得精明


 

个人总结:

    我开发软件的时间可是不短了,从1988年接触电脑,到1992年和计算机系的人混的最熟,一直到现在用了6年的Java,期间做了许多的项目,对开发方法也是感触颇深的。

    在软件开发的环节上,需求、设计、开发、测试,越靠前,对后面的影响越大。而出问题最多的并不是设计,而是需求。改来该去,没完没了的系统简直是太常见了。

   用户在不断的学习,他的需求也会不断的完善,不断的增加,我们开发人员就要不断的开发,变更来满足需求。我个人的一般做法是。

   1 分清楚这个项目到底是【形象工程】,还是【实干工程】。这个太重要了,如果搞错了,你的辛苦很可能白搭。

    形象工程:允许你的系统不是很高效,代码不是很优雅,但一定要界面漂亮,使用一些高级的东西来满足用户的虚荣心,系统不能做的太简单,至少看上去是那样,否则他们会觉得拿不出手的。他们宁可用20万的,绝不会用你2万的。至于真正用起来会怎样,没人关心。这个项目很可能在6个月后无疾而终,因为他的做作用已经达到了。 至于啥作用,去问你的客户的老总吧。哈哈
    这样的工程一般是高层处于某个目的提出来的,你必须通过非常手段才能获得内部准确消息哦。


   实干工程:允许你爹系统不是非常漂亮,因为图片多了会影响速度,但要求你的系统必须稳定,必须快速。丑陋一点点不是大问题,可以慢慢完善。 必须实现他们日常工作需要的一些功能,特别是报表。

    这样的工程一般是基层或者中层提出来的,他们需要解决实际的问题,比如加快处理速度,提供合作和信息共享,降低通信费用等很实际的问题。和他们打交道要注意不要惹到了小鬼。你的一个不经意的东西,可能会引起一个最终用户的反感,他可能会成为你项目继续的一个阻碍。和基层的最终用户搞好关系,你的项目则会顺利的很多。即使出现了一些小的BUG,他们也会先通知你,而不会直接向上级汇报的。


    2 找对正确的甲方的配合人员

    有些项目,甲方派了一个基层的文职员来,这样的项目遇到的阻碍会很大。一般我会建议对方让一个中层来做,而且是一个和业务非常熟悉,且说话有一定分量的人来担当。这样需要一些资源的时候,比如开会,找部门人员调研都会比较好办。项目组和这个人一定要搞好关系。他是中间沟通的桥梁。

  

    3 使用大家最熟悉的技术,加上一点点尝试的技术做开发

    不要追求新技术,那不是项目里用的,而是实验室用的。新技术必须经过大家的共同实践,在正式的业务系统里被证明是有效的,才可以大面积的使用。在一些非关键的地方,正好可以作为实验点。

    我一般在新技术出现后的2年,才会考虑在正式的项目里使用它,因为这时候各种BUG已经修补的差不多了,各种文档也很齐备了,平时的积累也差不多了。大家已经都憋坏了。

    
    4 项目人员要定期沟通,搞好关系。

    这个就不多说了,那些比较内向的人,还是尽可能的多和人沟通吧,机器在好也是死的。




写的太多了,估计错别字不少,先这样吧。希望对大家有帮助
















<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>
内容概要:本文出自罗兰贝格关于工业4.0现状的报告,系统分析了制造业在数字化转型过程中的实际进展与挑战。报告指出,尽管“工业4.0”概念提出已逾十年,但多数企业仍未实现预期的智能化、自组织生产目标,主要受限于技术复杂性、组织孤岛、投资回报周期长及人才短缺等问题。通过对领先制造企业的研究,报告提炼出三大成功要素:一是制定基于现实的工业4.0愿景与全面战略,明确用例优先级;二是建立“中心辐射式”组织架构,设立专职数字化制造部门,推动跨职能协作与规模化落地;三是构建统一的IT/OT目标架构,强化数据生态与系统互操作性。报告特别强调,高价值用例如预测性维护、实时参数优化、视觉检测等已在汽车与半导体行业显现显著成效,企业应聚焦可量化回报的场景,结合资源现实,分阶段推进转型。; 适合人群:制造业企业管理者、数字化转型负责人、工业互联网从业者及政策制定者; 使用场景及目标:①帮助企业评估自身工业4.0成熟度并制定务实发展战略;②为制造企业设计组织架构与IT/OT技术路线图提供参考;③指导资源优先配置于高价值数字化用例,提升投资回报率; 阅建议:建议结合企业实际生产场景阅,重点关注“中心辐射式”运营模式与六大高价值用例的适用性分析,同时参考报告中的汽车行业案例,因地制宜地规划数字化路径。
内容概要:本文围绕基于蚁狮优化算法(ALO)在复杂三维动态环境下求解多无人机动态避障路径规划问题展开研究,并提供了完整的Matlab代码实现。该研究旨在解决多无人机系统在存在障碍物动态变化环境中的高效、安全路径规划挑战,通过引入ALO算法优化飞行轨迹,有效规避障碍并实现路径最优。研究不仅关注算法层面的实现,还涵盖了目标函数设计、约束条件处理、环境建模等关键技术环节,确保路径规划结果兼具可行性与鲁棒性。此外,文档附带丰富的相关科研资源,涵盖路径规划、智能优化算法、机器学习、电力系统等多个领域,为后续拓展研究提供坚实支撑。; 适合人群:具备一定编程基础,熟悉Matlab工具,从事无人机路径规划、智能优化算法或智能系统研究的科研人员及研究生。; 使用场景及目标:①研究复杂三维动态环境下多无人机的协同避障路径规划问题;②掌握蚁狮优化算法(ALO)在路径规划中的应用与实现机制;③为智能交通、无人系统控制、自动化调度等相关课题提供算法参考与代码支持; 阅建议:建议结合Matlab代码深入理解ALO算法的具体实现流程,重点关注目标函数构建、动态障碍建模与避障策略设计等关键模块,同时可参照文中提及的其他智能优化算法(如PSO、GWO等)进行对比实验,进一步提升算法性能分析与工程应用能力。
代码下载地址: https://pan.quark.cn/s/a4b39357ea24 Git在全球范围内被公认为最为流行的分布式版本控制系统,其在软件开发行业中占据着不可或缺的地位。Git-2.21.0-64-bit 以及 TortoiseGit-2.8.0.0-64bit 是两款专门为Windows操作系统设计的Git相关软件。Git-2.21.0-64-bit 代表了Git的命令行版本,而TortoiseGit则是一个图形化界面工具,它为用户呈现了一种更为直观的操作体验。 Git的主要优势体现在其分布式架构上。每一个通过Git克隆得到的仓库都是一个自给自足的、完整的文件库,其中包含了所有的历史版本记录以及修订追踪详情。因此,即便在缺乏网络连接的环境下,开发者依然能够在本地执行版本控制任务,例如进行提交、切换分支以及合并代码等操作。这种架构设计显著提升了开发效率,特别是在处理大型项目或进行团队协作时更为明显。 Git的分支管理功能是其另一项突出的能力。开发者借助简单的指令即可迅速完成分支的创建、切换合并,这一特性对于并行开发、试验新功能或解决bug等问题提供了极大的便利。例如,开发者可以开辟一个新分支来实施新功能,在开发完成后将其整合回主分支,而不会对其他团队成员的工作造成干扰。 TortoiseGit是Git的一个补充工具,它将Git的操作指令无缝嵌入到Windows资源管理器中,使得Git的使用体验类似于常规的文件管理操作。TortoiseGit-2.8.0.0-64bit.msi 文件正是这个图形化界面的安装包,它提供了右键菜单的快捷方式,让用户能够更加便捷地进行版本控制活动。与此同时,TortoiseGit-LanguagePack-2.8.0.0...
内容概要:本文系统阐述了物理信息神经网络(PINNs)在求解布洛赫-托雷(Bloch-Torrey)方程中的具体应用,结合PyTorch框架提供了完整的Python代码实现案例。通过将物理定律作为先验知识嵌入神经网络的损失函数中,PINNs能够在缺乏大量标注数据的条件下,高效求解描述磁共振成像中自旋粒子扩散行为的偏微分方程。文章详细剖析了网络架构设计、物理约束的数学表达、边界与初始条件的处理方法以及模型的训练优化流程,充分展现了PINNs在科学计算与工程仿真领域的强大潜力与独特优势。; 适合人群:具备深度学习基础、偏微分方程知识,以及Python编程能力,从事计算物理学、医学影像、生物医学工程或科学机器学习等相关领域的研究人员、高校研究生及工程师。; 使用场景及目标:① 掌握利用PINNs求解复杂物理系统的基本方法与技术路线;② 学习如何将物理守恒律、本构关系等先验知识有效融入神经网络模型以提升泛化能力求解精度;③ 应用于磁共振成像(MRI)的微结构建模、扩散过程仿真及其他涉及偏微分方程求解的科学研究与工程问题。; 阅建议:建议者结合所提供的代码进行动手实践,重点理解物理残差项在损失函数中的构建逻辑及其对训练过程的影响,并尝试将该方法迁移至其他类型的偏微分方程(如热传导方程、Navier-Stokes方程等),以深入掌握PINNs的核心思想与工程实现技巧。
源码下载地址: https://pan.quark.cn/s/5eea35613168 依据所提供的文档资料,我们可以对RTL8211芯片及其关联的电路设计理念与技术核心进行细致的研究。RTL8211是由Realtek公司研发的网络物理层(PHY)部件,主要应用于以太网端口,能够支持10/100Mbps的数据传输速率。接下来将详尽阐释文档中的核心要点。 ### RTL8211概述 RTL8211系列芯片是Realtek为以太网应用而设计的具备高性能的PHY解决方案。该系列芯片支持多种接口规范,涵盖RMII(Reduced Media Independent Interface)、MII(Media Independent Interface)等,并且能够适配不同的连接器类型,例如UTP(Unshielded Twisted Pair)或光纤接口。 ### 文件标题与描述解析 文件标题描述均标注为“RTL8211 原理图 PDF版”,这表明该文档是一份PDF格式的原理图,主要包含了RTL8211芯片的内部构造、外部接口以及相关电路的设计详情。 ### 标签解 标签“RTL8211”进一步证实了文档的主题是围绕该型号芯片展开的。 ### 部分内容解析 在文档的部分内容中,我们观察到了一系列数字与字母的组合,这些符号代表了原理图中的引脚编号、信号名称以及电路模块等信息。通过分析这部分内容,可以归纳出以下关键知识点: #### 引脚功能说明 - **ENREG/RXER_N**: 负责注册使能接收错误中断信号。 - **RXD2_N、RXD0_N、TXD1、TX_CTL、TXD3、RXD3_N、TXD0、RX_CTL_N、TXD2、RX_CLK_N、RXD1_N*...
内容概要:本文详细介绍了基于并行物理信息神经网络(PINNs)对NLS–MB方程中孤子演化过程进行高精度预测的Python代码实现,依托PyTorch框架完成数值求解。该方法通过将非线性薛定谔型物理系统的控制方程嵌入神经网络训练过程,利用自动微分技术确保模型输出严格满足偏微分方程的物理约束,有效解决了传统数值方法在复杂系统中计算成本高、泛化能力弱的问题。文章系统阐述了并行PINNs的模型架构设计、多尺度损失函数构造策略、数据-物理混合驱动的训练流程以及GPU并行加速机制,突出了其在少样本甚至无标签条件下实现物理系统精准建模的优势。; 适合人群:具备深度学习、偏微分方程及科学计算基础,从事物理建模、人工智能与交叉学科研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究非线性色散波系统如孤子动力学的高效数值求解方法;②探索物理规律与深度神经网络融合的科学人工智能(SciAI)范式;③掌握PINNs中物理损失项的设计原理与实现技巧;④构建高性能并行化物理驱动模型,用于复杂系统的预测、反演与优化。; 阅建议:建议者结合提供的代码动手实践,深入理解物理约束项在损失函数中的权重配置与收敛行为的关系,并尝试将其迁移至其他偏微分方程系统(如KdV、Burgers方程等),同时可通过调整网络深度、激活函数或引入自适应采样策略进一步提升模型精度与训练效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值