上周逛山西路军人俱乐部,偶然看见《人月神话》40周年中文纪念版,翻了几页感觉不错,就买回来看看。记得大学时老师推荐过,一晃过去了十年,工作也有八年了,如果是刚毕业或只做几个人的小项目时读这书跟做过几个数十人到数百人的项目之后再读感觉肯定大不同。书的开头就说明这里谈的是大型系统的开发,如果一直是几个人的小团队看到书里的论述或许会觉得匪夷所思。主要内容实际才二百多页,却经常有闪光的格言警句给予你阅读时的快感,这里首先摘录一些:
表面上看起来好像没有任何一个单独的问题会导致困难,每个问题都能获得解决,但是当它们相互纠缠和累积在一起的时候,团队的行动就会变得越来越慢。(第1章 焦油坑)
对于系统编程人员而言,对其他人的依赖是一件非常痛苦的事情。他依靠其他人的程序,而这些程序往往设计的并不合理、实现拙劣、发布不完整或者文档记录得很糟。(第1章 焦油坑)
对于创造者,只有在实现的过程中,才能发现我们构思的不完整性和不一致性。(第2章 人月神话)
用人月作为衡量一项工作的规模是一个危险和带有欺骗性的神话。它暗示着人员数量和时间是可以相互替换的。人数和时间的互换仅仅适用于以下情况:某个任务可以分解给参与人员,并且他们之间不需要相互的交流(第2章 人月神话)
向进度落后的项目中增加人手,只会使进度更加落后。这就是除去了神话色彩的人月。项目的时间依赖于顺序上的限制,人员的最大数量依赖于独立子任务的数量。(第2章 人月神话)
对于计算机系统而言,尽管它们通常没有花费几个世纪的时间来构建,但绝大多数系统体现出的概念差异和不一致性远远超过欧洲的大教堂。这通常并不是因为它由不同时代的设计师开发,而是由于设计被分成了由若干人完成的若干任务。我主张,在系统设计中,概念完整性应该是最重要的考虑因素。(第4章 贵族专制、民主政治和系统设计)
概念的完整性要求设计必须由一个人,或者非常少数互有默契的人员来实现。而进度压力却要求很多人员来开发系统。(第4章 贵族专制、民主政治和系统设计)
设计师将709的操作集合设计得如此丰富和充沛,以至于只有一半操作被客户经常使用。(第5章 画蛇添足)
任何管理任务的关注焦点都是时间、地点、人员、项目内容和资金。(第10章 提纲挈领)
新的系统概念或新技术会不断出现,必须构建一个用来抛弃的系统,因为即使是最优秀的项目经理,也不能无所不知地在最开始解决这些问题。抛弃原型概念本身就是对事实的接受——随着学习的过程更改设计。(第11章 未雨绸缪)
实际上,重大灾害是比较容易处理的,它往往和重大的压力、彻底的重组、新技术的出现有关,整个项目组通常可以应付自如。当时一天一天的进度落后是难以识别、不容依法防范和难以弥补的。(第14章 祸起萧墙)
记忆衰退的规律会使用户——作者失去对程序的了解,于是他不得不重拾自己劳动的细节。(第15章 另外一面)
当然,我认为全书最精华的部分其实是第16章 人月神话,因为它把这些年我的隐约的感觉用精炼又充满思辨的语言表达出来,不要忘记,这是在40年前。这里简述一下该章的论证思路:
1.所有软件活动可以分成两种任务:根本任务和次要任务,根本任务是打造构成抽象软件实体的复杂概念结构,次要任务是使用编程语言表达这些抽象实体,在空间和时间限制下将它们映射成机器语言。
2.所谓根本(essence)是指软件特性中的固有的困难,所谓次要(accident)是指出现在目前的生产中,但并非与生俱来的困难。那为什么构造异常复杂的抽象概念结构是根本问题呢?这里涉及现代软件系统中的几个无法规避的内在特性:复杂度、一致性、可变性和不可见性。
复杂度:计算机存在很多种状态,这使得构思、描述和测试都非常困难。软件系统的状态又比计算机的状态多若干个数量级。同样,软件实体的扩展也不仅仅是相同元素的重复添加,而必须是不同元素实体的添加。大多数情况下,这些元素以非线性递增的方式交互,因此整个软件复杂度要比非线性增长多得多。
一致性:物理学家坚信,必定存在着某种通用原理,或者在夸克中,或者在统一场论中。软件工程师却无法从类似的信念中获得安慰,他必须掌握的很多复杂度是随心所欲、毫无规则可言的,来自若干必须遵循的人为惯例和系统。许多情况下,因为是开发最新的软件,它必须遵循各种接口。另一些情况下,软件的开发目标就是兼容性。所以很多复杂性来自保持与其他借口的一致性,对软件的任何再设计,都无法简化这些复杂特性。
可变性:软件实体经常会遭受到持续的变更压力。部分原因是系统中的软件包含了很多功能,而功能是最容易感受到变更压力的部分。另外的原因是软件可以很容易地进行修改——它是纯粹思维活动的产物,可以无限扩展。简言之,软件产品扎根于文化的母体中,如各种应用、用户、自然及社会规律、计算机硬件等。后者持续不断的变化着,这些变化无情地强迫着软件也随之变化。
不可见性:软件的客观存在不具有空间的形体特征。当我们试图用图形来描述软件结构时,发现它是很多相互关联、重叠在一起的图形。这些图形可能代表控制流程、数据流、依赖关系、时间序列和名字空间的相互关系等。在上述结构上建立的概念控制的一种方法是强制将关联分割,直到可以层次化一个或多个图形。除去软件结构上的限制和简化方面的进展,软件仍然保持着无法可视化的固有特性,从而剥夺了一些具有强大功能的概念工具的构造创意。
3.基于第2点描述的根本问题,现有(这里的现在指的是40年前)的高级语言、面向对象编程、人工智能、“自动”编程、图形化编程、更好的编程开发环境和工具等等都只是在解决次要困难上的一些突破。即这些进步都是解决软件构建上的巨大困难之术,所有针对软件开发过程中次要困难的技术工作基本上能表达成以下生存率公式:
任务时间=∑(频率)*(时间)
而工作的创造性部分占据了大部分时间,那些仅仅是表达概念的活动并不能在很大程度上影响生存率。
4.因此,必须考虑那些解决软件上必要困难的活动——准确的表达复杂概念结构。这里作者给出了一些当时认为的有希望的办法:购买软件提供商的产品、需求精炼和快速原型、增量开发、卓越的设计人员。
以上是我所认为的全书之精华论述,四十年后再看还是熠熠生辉,其间计算机硬件性能的提升诚如摩尔定律所言,而软件开发的生存率却远达不到这般飞速,原因正是如上所说之大型软件工程中的根本问题。
相关推荐
内容概要:本文详细介绍了如何使用Modbus RTU协议实现西门子S7-1200 PLC与ABB 510变频器之间的通信,涵盖硬件接线、参数设置、PLC编程以及触摸屏配置等方面的内容。首先,确保硬件正确连接,包括RS485接口的接线和终端电阻的设置。接着,调整变频器和PLC的相关参数,使其匹配并支持Modbus RTU通信。然后,利用西门子标准Modbus库进行PLC编程,实现对变频器参数的读写、启停控制及频率设置等功能。最后,介绍如何在WinCC中配置触摸屏,以便于监控和操作变频器。文中还提供了调试技巧和常见问题的解决方案。 适合人群:从事工业自动化领域的工程师和技术人员,特别是熟悉PLC编程和变频器应用的专业人士。 使用场景及目标:适用于需要将西门子PLC与ABB变频器进行通信集成的项目,旨在提高系统的自动化水平和控制精度。通过本教程,读者可以掌握Modbus RTU通信的具体实现方法,从而更好地应用于实际工程中。 其他说明:文章不仅提供了详细的步骤指导,还包括了一些实用的经验分享和注意事项,帮助读者避免常见的错误。此外,还提供了一个带有重试机制的参数读取模板,用于解决偶发性的通讯故障。
内容概要:本文详细介绍了三菱Q系列PLC的QD77MS16模块在六轴控制方面的分段编程方法。首先,文章强调了前期准备工作,如硬件连接和参数设置。接下来,通过具体的代码示例展示了分段书写的思路,包括初始化、单轴运动控制、轴间协同控制等环节。此外,文中还分享了一些实用的经验和技巧,如批量传送参数、定位表格触发、异常处理等。最后,作者总结了分段编程的优势及其在实际项目中的应用。 适合人群:从事自动化控制领域的工程师和技术人员,尤其是对三菱PLC有一定了解并希望深入学习QD77MS16六轴控制的人群。 使用场景及目标:适用于需要进行多轴控制项目的开发和调试阶段,旨在提高程序的可读性和维护性,降低故障排查难度,提升工作效率。 其他说明:文章提供了丰富的实战经验和调试技巧,能够帮助读者更好地理解和应用QD77MS16模块的特性,从而顺利完成复杂的六轴控制任务。
mozart在人为、生物、沉降制备过程可能用到的input文件
近年来,由于工业、车辆和化石燃料发电的发展,温室气体的增加引起了环境问题。这项研究工作的主要目标是集中不同类型的无污染的替代燃料为基础的发电和结合一种以上的能源。在这项研究工作中,分析了不同环境条件下不同类型的可再生能源,如光伏、风能和燃料电池,柴油发电机在主电网故障期间用于独立用途。在此基础上,设计了基于ANFIS的MPPT控制器,并在Matlab环境下进行仿真。本文的研究目标是基于ANFIS控制器的混合多种可再生能源并与带有储能装置的电网整合以及最优能量投入。设计了系统模型,并在Matlab仿真环境下建模,分析了不同条件下的系统性能。最后,基于IEEE 1547标准对仿真结果进行了评估,证明了该系统的有效性
1、文件说明: Centos8操作系统texlive-breakurl-7:20180414-23.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf texlive-breakurl-7:20180414-23.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
内容概要:本文详细探讨了永磁同步电机(PMSM)控制系统中滑模观测器(SMO)与锁相环(PLL)相结合的技术,尤其关注相位补偿的应用。文中首先介绍了SMO的基本原理及其存在的高频抖动问题,随后提出了通过PLL进行相位补偿的方法,解决了观测波形与实际波形之间的相位滞后问题。通过加入比例积分补偿器,进一步提高了系统的稳定性和精确度。实验结果显示,在加入相位补偿后,观测波形与实际波形基本重合,转速估计更加平稳,三相电流波形也变得圆润对称。 适用人群:从事电机控制研究与开发的工程师和技术人员,尤其是对永磁同步电机控制有一定了解并希望深入理解滑模观测器和PLL相位补偿机制的人士。 使用场景及目标:适用于需要提高PMSM控制系统精度和稳定性的场合,如工业自动化设备、电动汽车驱动系统等。主要目标是解决滑模观测器输出波形与实际波形之间的相位滞后问题,从而提升整个系统的性能。 其他说明:文章提供了详细的代码片段和调试技巧,帮助读者更好地理解和实施相关技术。同时提醒了一些常见的调试陷阱,如补偿量过大导致的过冲现象以及低速时的特殊处理方式。
内容概要:本文深入探讨了光伏交直流混合微电网在离网(孤岛)模式下的双下垂控制策略及其Matlab/Simulink仿真模型。首先介绍了交直流微电网的结构,包括直流微电网、交流微电网和互联变换器(ILC)。接着详细解析了各部分的控制策略,如直流微电网的电压电流双闭环控制、交流微电网的恒压控制和下垂控制、以及ILC的双下垂控制策略。文中还提供了多个关键代码片段,展示了具体的控制算法实现。此外,作者分享了仿真过程中遇到的问题及解决方案,强调了参数调整的重要性,并展示了仿真结果的有效性和稳定性。 适合人群:从事微电网研究的技术人员、研究生及以上学历的研究人员,尤其是对光伏交直流混合微电网感兴趣的学者和技术爱好者。 使用场景及目标:适用于研究和开发光伏交直流混合微电网的控制系统,旨在提高系统的稳定性和效率,尤其是在离网模式下应对负载突变的能力。目标是通过仿真验证控制策略的有效性,为实际应用提供理论支持和技术指导。 其他说明:本文基于Matlab2020b版本进行仿真,建议使用相同或更高版本的软件环境。同时,文中提到的一些参数设置和代码实现对于理解和优化微电网控制系统具有重要参考价值。
内容概要:本文详细介绍了利用MATLAB、YALMIP和CPLEX实现高比例可再生能源电力系统的调峰成本量化与分摊模型的方法。首先,通过创建无波动的平行世界,将实际负荷曲线和平滑后的新能源出力曲线进行对比,揭示调峰需求的本质。接着,建立了优化调度模型,考虑了火电机组的爬坡约束和抽水蓄能电站的能量平衡,确保模型符合实际情况。最后,采用Shapley值算法进行成本分摊,精确地分配调峰成本给各个参与者,特别是针对波动较大的新能源发电厂。 适合人群:从事电力系统研究、优化调度、能源经济分析的专业人士,以及对电力系统调峰感兴趣的科研人员和技术开发者。 使用场景及目标:适用于评估和优化含高比例可再生能源的电力系统调峰成本,帮助政策制定者和电网运营商更好地理解和管理调峰成本,促进公平合理的成本分摊机制。 其他说明:文中提供了详细的MATLAB代码示例,展示了如何通过编程手段实现复杂的优化调度和成本分摊模型。同时,通过对实际案例的数据分析,验证了模型的有效性和实用性。
内容概要:本文详细介绍了半车悬架系统的被动-PID主动控制技术。首先解释了半车悬架系统的重要性和传统被动悬架的局限性,随后深入探讨了PID控制算法的工作原理,并通过Python代码展示了如何构建PID控制器并应用于半车悬架系统。文中不仅提供了详细的代码实现,还讨论了参数调整的方法和注意事项,如防止积分饱和、处理微分项噪声等问题。此外,文章通过仿真结果对比了被动悬架和PID主动控制的效果,证明了后者在提升车辆行驶平顺性和操控稳定性方面的显著优势。 适合人群:汽车工程专业学生、从事车辆控制系统研究的技术人员、对车辆动力学感兴趣的科研工作者。 使用场景及目标:适用于希望深入了解半车悬架系统控制机制的研究者和技术开发者,旨在帮助他们掌握PID控制的基本原理及其在实际工程项目中的应用方法。 其他说明:文章强调了实际应用中的挑战,如执行器的物理限制和仿真与现实之间的差异,提醒读者在实践中需谨慎对待这些问题。
内容概要:本文深入探讨了微电网能量调度问题,特别是如何利用微粒群算法(PSO)实现经济调度、环境友好调度和优化调度三大目标。文中详细介绍了微电网的基本概念、组成元素(如DG、MT、FC),并逐步解析了PSO算法的应用流程,包括初始化微粒群、定义适应度函数、更新速度与位置、处理约束条件、更新历史和全局最优解等关键步骤。此外,还讨论了如何通过设置合理的参数和策略(如动态惯性权重、随机重启机制)提高算法性能,以及如何应对实际应用场景中的挑战,如负荷需求的变化和设备特性限制。最后,通过具体的案例展示了PSO算法在微电网能量调度中的优越性和实用性。 适用人群:从事电力系统研究、微电网设计与运营的专业人士,以及对智能优化算法感兴趣的科研工作者和技术爱好者。 使用场景及目标:适用于需要对微电网进行高效、低成本、环保型能量管理的场合,旨在帮助相关人员掌握PSO算法的具体实施方法,从而更好地解决复杂的多目标优化问题。 其他说明:文章不仅提供了理论分析,还包括了大量的Python代码实例,便于读者理解和实践。同时,提出了未来的研究方向,如引入预测模型和多目标优化算法,进一步提升系统的智能化水平。
Manufacturer: Sapphire Model: RX 560XT Memory Size: 8192 MB GPU Clock: 1226 MHz Memory Clock: 1750 MHz E353 RX560 XT GDDR5 256Mx32 8GB 300e/300m (C) 1988-2010, Advanced Micro Devices, Inc. ATOMBIOSBK-AMD VER015.050.000.001.000000 353L1SFC.O49 CCC Overdrive Limits GPU Clock: 2000 MHz Memory Clock: 2100 MHz PowerTune Limit: -50% to 50% Limits TDP: 85 W TDC Power: 105 A Battery Power: 120 W Small Power Power: 120 W Max. Power Limit: 120 W Max. Temp: 85°C Temperature Target: 75 °C Memory Support 8192 MB, GDDR5, Samsung K4G80325FC Memory Timings (Samsung)
内容概要:本文详细介绍了针对电热综合能源系统优化的一种数据驱动的分布鲁棒优化(DRO)算法。首先,利用拉丁超立方抽样(LHS)生成大量初始场景,确保样本分布均匀。接着,通过k-means聚类将大量场景压缩为少数典型场景,减少计算复杂度。然后,构建基于1-范数和∞-范数混合约束的概率模糊集模型,使用YALMIP进行建模,并通过CCG算法迭代求解最恶劣场景下的最优解。实验结果显示,相比传统鲁棒优化和随机优化,该方法不仅降低了平均成本,还显著减少了极端场景下的设备过载率。 适用人群:从事电热综合能源系统优化的研究人员和技术人员,尤其是那些需要处理不确定性和多离散场景的专业人士。 使用场景及目标:适用于需要在不确定环境下进行电热综合能源系统优化的场景,旨在提高系统的鲁棒性和经济性,降低运营成本和风险。 其他说明:文中提供了详细的MATLAB代码实现,包括场景生成、聚类、模型构建和求解过程,并附带了一些实用技巧和注意事项,如收敛条件设置、并行计算加速等。
超过100个项目组成的项目资料
内容概要:本文详细介绍了基于FPGA的2PSK调制解调器的设计与实现,涵盖调制端和解调端的核心模块,如基带成型、载波生成、混频、带通滤波、载波恢复、低通滤波和判决等。文章强调了滤波器参数在MATLAB中设计并通过Verilog实现的方法,以及跨平台移植过程中Quartus和Vivado之间的差异处理。同时,提供了关键模块的代码解析,包括载波生成模块、FIR滤波器实现和跨平台约束示例。实测结果显示,该系统在Artix-7和Cyclone IV上均能稳定运行,误码率在Eb/N0=8dB时可达10^-4量级。 适合人群:具备一定FPGA开发经验的工程师和技术爱好者,特别是对数字通信和Verilog编程感兴趣的读者。 使用场景及目标:适用于希望深入了解2PSK调制解调器内部机制并进行实际动手实现的研究人员和开发者。目标是掌握FPGA开发中的关键技术和跨平台移植方法,提高系统的性能和稳定性。 其他说明:文中提供的完整工程已开源在GitHub,包含Quartus和Vivado两个版本,方便读者下载和修改。此外,文章还讨论了一些常见问题及其解决方案,帮助读者更好地理解和应用所学知识。
全新设计门户资讯模版,显示器宽屏时代的到来,各主流站点均调整宽度为1190px,因此本模板宽度也采用这个宽度,另外改模板论坛支持宽窄切换,美化设计界面包括,门户首页,资讯表页以及文章内页(您可以添加多个此类样式),论坛首页, 版块页,帖子内页,等等相关页面~ 模版经过为期一个多月的设计并测试,兼容目前各大主流浏览器,用户体验超赞,是款不错的模版风格! Spacia是一款discuz模板,非常适合做时尚门户,资讯类网站,比较熟悉discuz的朋友可以使用模板安装,为了方便小白,提供了整站带数据压缩包,通过教程恢复可以达到和我的演示图一模一样。 特别说明 1.压缩包内包含整站,模板,DIY文件,整站安装说明 2.Discuz是GBK版本,模板是GBK版本。
内容概要:本文详细介绍了如何使用MATLAB实现基于动态窗口法(DWA)的路径规划算法。DWA是一种广泛应用于移动机器人、无人船、无人机和无人驾驶汽车等自主移动设备的路径规划方法。文中不仅提供了完整的MATLAB代码实现,还附带详细的注释,帮助读者理解每一步骤的功能和意义。主要内容包括机器人参数定义、地图和目标设定、主循环逻辑、动态窗口生成、最优路径搜索、位置更新、碰撞检测以及地图绘制等功能模块的解析。 适合人群:具备一定编程基础和技术背景的研究人员、工程师和学生,特别是对机器人技术和路径规划感兴趣的读者。 使用场景及目标:①研究和开发移动机器人、无人船、无人机及无人驾驶汽车的路径规划系统;②理解和优化DWA算法的关键参数配置;③进行仿真实验,验证算法的有效性和鲁棒性。 其他说明:本文提供的代码可以灵活修改地图信息和坐标位置,便于在不同的应用场景中进行实验和测试。同时,代码中包含了丰富的注释,有助于初学者逐步掌握DWA算法的工作原理。
Rabbitv2.0主题为SEO而生,是一款专注于SEO优化用途的WordPress主题,专为博客、自媒体、资讯类等类型网站SEO优化设计开发,自适应兼容手机、平板设备,支持前端用户中心,可以前端发布/投稿文章,同时主题支持专题功能,可以添加文章专题。 功能介绍 添加站外链接自动添加nofollow属性并新窗口打开功能,更符合SEO规则; 美化GO跳转页面,用户体验提供升; 添加了GO跳转功能,更符合SEO规则; 首页全屏轮播图,用户体验提供升; 首页上下滚动广告,用户体验提供升; 首页随机广告,用户体验提供升; 列表置顶轮播图,用户体验提供升; 文章左右翻页,用户体验提供升; 首页轮播样式优化,用户体验提供升; 优化标签列表页,更符合SEO规则; 优化标签显示,色彩化用户体验提供升; 文章页增加复制弹窗提示,防止内容被恶意盗取; 首页滚动公告,用户体验提供升; 去除分类category,更符合SEO规则; 彻底禁止WordPress缩略图,节省空间承载; 增加编辑器插入短代码功能,用户体验提供升; 增加公众号吸粉功能,关注访问隐藏内容; 增加文章密码保护功能,用户体验提供升; 增加展开/收缩功能,用户体验提供升; 增加回复可见功能,用户体验提供升; 读者墙,展示用户与读者信息; 禁用古腾堡编辑器,优化编辑体验; 以下为原生自带功能(原生版) 响应式设计,兼容手机和平板等移动设备; 自主研发的前端用户中心; 第三方社交帐号登录(可支持微博、QQ、微信登录); 支持手机注册功能; 支持全新高级菜单功能; 文章投稿、发布功能; 文章专题功能; 文章版权设置,可添加多种版权模板,文章可选择适用的模板; 文章打赏、点赞、收藏、分享、阅读模式功能; 当前文章作者信息小工具; 首页幻灯片轮播、头条推荐内容设置; 自主开发Themer框架,支持后台自定义面板设置;
基于51单片机protues仿真的手速测试游戏设计(仿真图、源代码、AD原理图、流程图) 题目:游戏手速测量仪 要求:理论上是测量每分钟按键按动次数(可以定较短的时间如10S,统计按动次数再乘以6)。显示每分钟按动次数和平均按键反应时间。 提示:固定时间的定时。按键或者键盘。 资料:仿真图、源代码、AD原理图、流程图
内容概要:本文详细介绍了使用COMSOL Multiphysics软件的PDE模块构建多场耦合的混凝土碳化模型的方法。该模型综合考虑了化学反应、扩散传输等多种物理场的相互作用,旨在深入研究混凝土的碳化过程及其耐久性。作者通过定义CH、CSH、C3S和C2S四种主要物质的浓度变化方程,并设置了合理的边界条件和初始条件,利用COMSOL的内置求解器进行了模型求解和验证。结果显示,模型成功模拟了混凝土碳化过程中各组分浓度的变化,特别是在碳化初期CSH浓度快速下降而CH浓度逐渐上升的情况。此外,还探讨了温度、湿度等因素对碳化过程的影响,并提出了改进模型的设想。 适合人群:从事建筑材料研究的专业人士,以及对多物理场耦合建模感兴趣的科研人员。 使用场景及目标:适用于需要深入了解混凝土碳化机理的研究项目,帮助研究人员更好地理解和预测混凝土的耐久性和性能变化。 其他说明:文中提供的具体方程和代码片段有助于实际操作和模型复现,同时也强调了模型验证的重要性,确保模拟结果的准确性。