人月神话中的神话(二)

【软件工程】人月神话 人月神话(The Mythical Man-Month: Essays on Software Engineering)是一本关于“软件工程”和“项目管理”的书,由Fred Brooks写于1975。有趣的是,在1995的版本中,作者增加了对自己之前观点的评价。下面是书中各章节的主要观点: 1. 焦油坑 系统产品的开发工作量是个人产品/构件程序的工作量的9倍。 编程行业在于创造,在于学习。 2. 人月神话 阅读详情

人月神话中的神话(二)

                                                      ------从游击队向正规军的转变

 
        正如《焦油坑》一章中所论述的那样,编程系统产品开发的工作量是独立程序工作量的9倍,其中相同功能的编程产品是经过测试程序的3倍,编程系统是程序的3倍工作量。说明了程序一旦规范化、系统化、产品化往往都需要付出更多的精力和人力。
 
        其实这个过程,个人认为就是从游击队向正规军的转变。简陋车库中的两个程序员就是游击队队员,做什么都快,不需要职业化。那么正规军是如何做的呢?对于《亮剑》这部电视剧,大家应该都不陌生吧。解放战争后,上级领导认识到了规范性、理论性及继承性的重要性,强迫要求李云龙等参加几个月的军事理论学习、各种战术理论研究等,从更高的角度来看待战争。其实这个过程就是一个职业化、系统化的过程,这正是游击队所不具备的。可以把我们读书的那段时间,看作是在游击队里面锻炼, 毕业进公司做产品,可以认为是完成了一次蜕变,开始向正规军转变。另外一个事例就是,大家都知道要成为一名职业化的经理人往往要比普通的经理人付出更多的时间和精力。
 
        对于任何产品,产业化团队的生产率是:1000行/人年, 不知作者得出这组数据时,有没有算上其他的人员 。 对我们自己的产品进行了一下统计,全流程的生产率是1740行/人年 ,如果算上非开发人员,估计还是比较高。有一次,曾经和几个同事聊天,说一个程序员真正一生中也写不了多少代码,大部分时间都在做设计,讨论问题,写文档。如果用这个数据来衡量,似乎是对的。 可能部分 人开始有反对意见了,每个项目我都写了很多的代码,生产率很高呢,肯定高于此值 。 想到这种场景,不由想起了我才毕业的那会儿,往往都没有想清楚,就开始写代码,写着写着发现有一种更好的方案,然后开始删除已经完成的代码,或者基于完成的代码进行修改,确实整个过程写了很多的代码,但最终在统计生产率时不会统计曾经修改过的废代码。记得当时还犯的一个错误是,为了完成一个功能,没有设计的概念,用代码堆砌,写了很多无用的代码。我们项目中就有这样的一个员工,一个函数写了几千行(而我们编码的建议是一个函数长度200行左右),当我review这部分代码时,发现函数中大量雷同的代码。 这两种现象都可以认为是不专业化的表现。在开始编码前,想想前期的投入是否充分,设计是否合理,系统架构及各种实现方案是否可行,数据结构设计是否合理,算法采用的是否合理等等,还有评审是否都做到位了。
 
        当把自己从一个游击队员变成一个预备级正规军后,在享受编程乐趣的同时,也要能忍受编程所带来的烦恼。这就要需要我们有一定的忍受力及坚韧性,才有可能成为成为一名真正的正规军。
 
        成为正规军后,还要做一些富有挑战性的事情,争取成为一名老A。
 
 
 
【人月神话】重新探索人月神话:软件工程的现实与挑战 重新探索人月神话 1. 人月神话的来历和观点 2. 读人月神话的意义 3. 推荐好书《人月神话》 阅读详情

相关推荐

人月神话读后感

终于读完人月神话了,一直没有时间写读后感,现在距读完这本书已经一个星期了。现在把自己能想到的写一下吧!     1 增量式开发。书中特别建议这种开发模式,这种开发模式最大的好处是让开发人员能够在每个阶段有一个可以运行的系统,这样开发人员每个阶段都有成就感,不会觉得枯燥。而且每个阶段开发出的系统其实都可以使用,这样用户可以使用并且有什么不对的地方可以及时纠正。我上一个系统就是采用增量式开发的,

hkhkhk180的专栏 1090

《人月神话》——The Mythical Man-Month 读书笔记

《人月神话》,畅销40年+,软件开发——项目管理必读之书。

PrettyEagle的博客 3575

人月神话(一)焦油坑、人月神话

编程系统产品、职业的乐趣、职业的苦恼、乐观主义、人月、系统测试、空泛的估算、重复产生的进度灾难

Exp.Joker 1111

重读《人月神话》(3)- 什么是人月神话

理想情况下人员数量与时间消耗之间的关系,即随着投入人力的增加,项目所需时间呈现递减趋势,这在割小麦或收获棉花的工作中是可行的;在本章中作者揭示了这种想法的误区。随着项目的推进,外部环境的变化可能会要求计划进行相应的调整,这就需要管理者具备灵活应变的能力,及时作出必要的修正以保证项目顺利进行。在单纯的数字上,这个等式是成立的,但有点软件开发常识的人都知道这个等式是不成立的,因为有太多不确定的因素在公式的背后。当发现进度落后时,通常的做法是增加更多的人力,然而,如前所述,这并不总是最有效的解决方案。

2404_87526689的博客 3470

理想汽车智驾方案介绍 4 World model + 强化学习重建自动驾驶交互环境

本帖将以 DrivingSphere 为例来解析这个过程。

地平线开发者 1921

RV1126B芯片实战:如何用这款视觉处理器SoC打造你的第一个AI摄像头项目

本文详细介绍了如何利用瑞芯微RV1126B视觉处理器SoC从零构建AI摄像头项目。涵盖硬件选型、开发环境搭建、ISP配置、AI模型部署及系统集成等关键步骤,帮助开发者高效实现边缘计算方案,特别适合智能安防和工业检测应用。

dropout6artist的博客 931

人月神话总结

人月是神话,银弹是神话,完美是神话,神话般的产品是神话般的组织的体现。

rayylee 2009

ERA5 数据集下载(2025最新 可运行)

众所周知,ERA5数据集经过了更新,尤其是在API访问和下载方式上发生了变化。2025年版的ERA5数据集为气象研究人员提供了更高质量的历史气象数据。本文将介绍如何通过新的API接口下载最新的ERA5数据集。

m0_72141699的博客 3599

【读书笔记】人月神话(一)

人月神话的读书笔记,第一章

新兴IT民工的专栏 1249

DIY压电陶瓷传感器信号放大:从拆解到JFET电路实战(附示波器实测数据)

本文详细介绍了如何利用废旧设备拆解的压电陶瓷片,结合JFET(结型场效应管)高输入阻抗特性,DIY搭建高灵敏度振动传感器放大电路。从元件拆解、参数实测到JFET共源极放大器实战搭建与调试,提供了完整的步骤、示波器实测数据及优化方案,帮助电子爱好者实现低功耗振动检测应用。

weixin_29195615的博客 391

海康网口相机不能被flexscan3d识别到MVS版本为4.6.1,flex为3.3.24在MVS中能够检测到,但是在flex中只能看到电脑自带相机,如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1048

人月神话

用了一个周末时间,把这本项目管理的巨著读完了,虽首版发行距离现在已有40余年, 但其中的某些观点仍然可用,不得不赞叹 Brooks 教授的伟大之处。跟随作者的讲述,自己对接触和管理的项目做了回顾,好多项目出现的问题,在书中早有预言。所以,只能感叹,是问题不可避免?还是现在的项目管理人员是否真的有能力去做好项目的管理工作、以及是否知道什么是重点、什么是无关紧要的东西(现实的体会,领导和客户的要求成为...

李刚的学习专栏 1万+

015、架构_配置文件_管理节点(proxymanager.ini)

该配置文件中的参数在后台配置,两种生效方式:*所有参数重启生效。*部分参数可以使用工具dbtool动态生效。动态生效命令为:dbtool-pm-load-config。配置文件“proxymanager.ini”用于设置元数据管理模块的信息。文件路径为“~/etc”。配置文件“proxymanager.ini”是普通的文本文件。默认值proxymanager-alarmconfutf8.txt。配置错误或不配置,PM无法连接MDS,无法服务。获取元数据失败超时处理时间。异常时请求启动对等回滚。

Oracle/MySQL 到 国产信创数据库|迁移 · 调优 · 信创替换 331

《人月神话》

《人月神话》读书摘要:布鲁克斯揭示了软件工程的经典误区——"人月神话"(人力与时间不能线性互换),并提出布鲁克斯定律(增加人力反而拖慢进度)。核心观点包括:外科手术式团队结构、概念完整性设计、警惕第二系统效应和焦油坑困境。实践建议强调原型验证、任务拆分、文档管理和人才价值。该书颠覆了传统项目管理思维,为敏捷开发等现代方法奠定基础,其"没有银弹"的论断至今仍深刻影响着软件工程实践。

Yang的博客 1744

【MATLAB】STM32电机调速闭环控制工程

本文提出了一种基于MATLAB仿真与STM32实现的直流电机闭环PID调速控制方案。通过MATLAB建立电机数学模型并进行参数整定,仿真验证了增量式PID算法在启停、稳态和抗扰动方面的优越性能。基于STM32F103搭建了硬件系统,实现了编码器测速、定时中断控制、PWM输出等功能。实测表明,该系统转速超调<2%、稳态误差±2r/min,具备快速响应和强抗扰能力。相比开环控制,闭环调速显著提升了动态性能和稳态精度。方案提供了完整的仿真代码和嵌入式工程源码,可直接应用于智能小车、工业传动等场景,具有较高的

unber的博客 50

基于STM32设计的智能防盗单车锁_349

本设计基于STM32F103RCT6单片机,研制了一种适用于户外环境的智能防盗单车锁系统。系统集成了GPS定位模块、ADXL345加速度传感器、4G通信模块(Air780E)、OLED显示屏、继电器模拟锁控模块等硬件,通过姿态感知实现车辆异常移动检测,在锁车状态下自动触发蜂鸣器报警并通过短信与APP通知用户。

868

《人月神话》:人月神话

在众多软件项目中,缺乏合理的时间进度是造成项目滞后的主要原因,它比其他所有因素加起来还大。   我们不禁要问导致这种普遍性灾难的原因是什么呢?   FrederickP.Brooks.Jr给出了以下几个原因: 1)估算技术缺乏有效的研究,隐含地假设一切都运行良好 2)将进度和工作量相互混淆,隐含地假设人和月可以互换 3)对估算缺乏信息,导致不会有耐心地持续地进行估算这项工作 ...

Java技术博文 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

人月神话简读

作者首先提出人月神话的概念与项目管理的困境,然后说明尽管人月神话无法达到,但仍可以通过一系列的方法无限逼近这一神话,帮助软件开发者进行项目管理。为什么人月神话无法达到?为什么软件工程的项目管理无法一帆风顺?这一方面是由于计算机技术的飞速发展,人们不得不时刻更新自己的知识与技术.采用新技术、快速开发原型、聘用卓越人才。正如作者所说的那样,软件工程可能是人类创造出的最错综复杂的一项工作,甚至,这种复杂度还在不断增加,人们能做的,只有不断学习更新的技术,探索更好的管理方法。

BradenHan的专栏 1168

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

《人月神话》——2人月神话

人月神话,人月为什么被称之为神话,去除神话色彩,我们又该怎么衡量人月?

PrettyEagle的博客 2888

【书籍】DeepSeek谈《人月神话》

人月神话》是软件工程领域的经典之作,Fred Brooks 以其在 IBM System/360 项目中的深刻经验为基础,提出了许多至今仍被广泛讨论的洞见。

所有专家都曾始于新手 1012

《人月神话》读书笔记

人月神话 读书笔记

triticale的博客 845

《人月神话》学习指南

文章目录《人月神话》学习指南原书介绍内容介绍作者简介目录阅读指南学习资料Bilibili 《人月神话》学习指南 原书介绍 豆瓣链接 内容介绍   在软件领域,很少能有像《人月神话》一样具有深远影响力和畅销不衰的著作。Brooks博士为人们管理复杂项目提供了最具洞察力的见解,既有很多发人深省的观点,又有大量软件工程的实践。本书内容来自Brooks博士在IBM公司SYSTEM/360家族和OS/360中的项目管理经验,该项目堪称软件开发项目管理的典范。该书英文原版一经面世,即引起业内人士的强烈反响,后又译为德、

努力推石头的西西弗斯 4338

杀不死的人狼——我读《人月神话》(二)

===== 二、哪些是现象,哪些是答案,而哪些才是本质? ===== Brooks在1961年至1964年间,主持与领导了被称为人类从原子能时代进入信息时代标志的IBM/360。十余年后,在1975年,他将历年来所写的有关软件工程和项目管理方面的文章汇集成书,这就是《人月神话》。无疑的,《人月神话》是Brooks十年中对IBM/360与操作系统OS360等项目的不断反思的结果。 而在我看到

aimingoo的专栏 8308

【好书推荐】人月神话

他引用了美国政府统计署的数据,显示每年全球最大的软件消费商购买的软件中,只有2%是可直接使用的,3%需要进行修改,而其余95%则成了垃圾。他的批评指出了软件行业存在的问题,并倡导专业性的重要性。该书由Frederick P. Brooks撰写于28年前,探讨了软件工程领域的现实问题,揭示了软件行业在解决问题上存在的错误方案和缺乏专业性的现象。总之,《人月神话》被认为是软件工程领域的经典之作,以其深入的思考和思想导向,震撼了软件行业,并对软件工程的发展起到了积极的促进作用。

Maynor的博客 1533
上一篇: 人月神话中的神话(一)
下一篇: 调查问卷:测试你对多核多线程的认知程度
normalnotebook
博客等级 码龄24年 647粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值