« Bitcoin 的基本原理 | 返回首页 | 扯两句电厂经理 »

软件项目需要很多人一起完成可能是一个骗局

本文的标题只是一个猜想,并不是我坚信的观点。事实上,我这几年自觉学到的重要东西之一,就是如何在开发过程中分工,如何信任队友开发的组件,如何组织许多人做同一个项目。

可是,如果这是一个骗局呢?那也未尝不是一种可能。

这个世界上我们需要做的软件可能没有太多真正庞大到需要很多人合作才做的出来。需要配置产品经理,需要设计人员,需要前端开发,后端开发等等。

更多时候,你需要很多人一起来完成仅仅是因为别人都这样在做。或者是,你缺乏某方面的专业知识,需要属于这个领域的人。又或者是有些工作很枯燥,你需要一个只是打工的人来帮你完成这些枯燥的你不想干的部分。也可能是你的老板觉得你进度太慢,觉得必须想办法加快进度,他觉得增加人手或许可以……

如果你真的一个人做一个别人看起来了不起的大项目,结果要么就是被膜拜(几率很小),要么就是被嘲笑成小作坊思维。你可能也很累,觉得在做那些不得不自己做的体力活时,盼望有人帮你解脱一下。

实际上,如果你抱着己所不欲,勿施于人的思想,怎么能把自己不愿意干的活推给别人呢?当是一个团队开发的时候,这块工作不属于我就成了一个很好的借口。其实,如果一个工作过于枯燥繁琐,其实说明的是没有找到好的方法让机器代劳而已。

如果缺乏某些领域知识,对于程序员,更重要的是自己去学习,掌握它。

产品经理?如果你爱你做的软件,你就是他最忠实的用户,你比所有人都明白你需要这个软件有什么功能,怎样才好用。

如果打一开始,你就打定主义自己包干所有的活,就好象 google 当年,因为不懂 HTML ,就设计了那么一个阳春白雪的首页,用 GIMP 随便做一个 logo 一样。如果你给自己断了后路,任何活都没有人代劳,你自己就咬紧牙关自己去做了。其实整个项目的总体开发时间,未必比一个好的团队来开发长多少。当然,比一个糟糕团队花的时间肯定要少的多。

成功率也未必很低。软件质量你心里明白,它只取决于你自己的能力。

我知道,开发软件全部由一个人亲力亲为听起来很糟糕。只是,大多数人都不相信,团队开发或许更糟糕。把一个项目加到足够多的人手后,看起来就勉强可以运转了(我听说的谣言: IBM 开发维护一个软件就是用一个集团军的),不会有人会相信其实所有事情一个人来做就够了。

只是随便想想而已。

我觉得吧,如果你真打算一个人做点东西的话,最大的敌人不是你个人的精力不够;而是不够坚定,总想以后会有人进来一起干。

你获得的好处是,不会有人跟你争论设计方案,不会有人讨厌你的编码规范。如果你发现做错了,通宵改掉就行,不用担心其他人的开发受到影响。过程本身,无论是苦是乐,都是值得回忆的记忆,乐趣不在于最后的结果。而且,做完了,东西再烂,你也至少拥有一个用户。

Comments

非常赞同,协作就像上下文切换,有时成本太高啦.

我觉得,这是一个个人智慧和集体智慧的关系问题。也是1+1什么时候是小于2,什么时候等于2,什么时候大于2的问题。并不是1+1恒小于2的。

首先老板就不同意,就你一个人,如果你不干了,我找谁干?
一个人干的优点是可以随时改主意,还不需要用语言说明白,写代码是个高度动态的过程。写spec真的比写代码难一个数量级。

云风老大好流b

看到那么多肉麻的留言真心起鸡皮...

你说的对,几乎和Linus Torvalds对Open source project的评论一模一样,哈哈:
“The first thing is thinking that you can throw things out there and ask people to help,” when it comes to open-source software development, he says. “That's not how it works. You make it public, and then you assume that you'll have to do all the work, and ask people to come up with suggestions of what you should do, not what they should do. Maybe they'll start helping eventually, but you should start off with the assumption that you're going to be the one maintaining it and ready to do all the work.”

更多的内容可以在这里看到:http://h30565.www3.hp.com/t5/Feature-Articles/Linus-Torvalds-s-Lessons-on-Software-Development-Management/ba-p/440

一起开发需要对软件工程有共识才能正常运转哪。

不一定是骗局,可能大公司有钱召唤人吧.不过我自己就单打独斗做过几个不大不小的项目,给钢铁厂做小型ERP系统,给公*安局做信息管理和分析系统,代码都是几百万级以上代码量的.从页面设计到业务代码一人搞定,中间部分图片花几百块钱请人弄下,使用了各种语言html,asp.net,js,vbscript,C#,VC++,linux下C.好处是自己理解整个项目过程,维护也容易,坏处是把自己累趴下了。

单打独斗就是对,需增加人手的体力活应该由程序批量完成。开源分层分库由不同人完成组合大系统的方式最好了。

其实容忍他人才是最困难的

云风老大说的都是对的,我坚信并支持云风老大的言论。

嗯。 也许有人愿意收集整理一些事实以估计一个人的极限在哪儿。有个游戏叫“洞窟物语”,也许不大,不过一个人在程序之外同时给出了不俗的美工音乐和故事。我觉得的最大的问题是那部分枯燥的工作。
-------------------
看了前面的留言真觉得大家看到的不是同一篇文章。弄的开始怀疑自己是不是真的看明白作者的意思了。

最近也在想类似的问题,一个人的极限在哪里?从知识领域来看,软件领域的知识尚不足以导致分工(身边有太多无所不能的牛人),如果不考虑美工等软件领域之外的知识,一个人足以。从软件规模来看,1万行代码是合格的程序员所能管理,10万行也是精英可以管理的,100万行对一个人来可能比较困难,但从linux的内核、Freebsd内核等来看,也有可能实现。另外,我知道其实很多大型软件规模的水份比较足。
但是,不得不承认成本比较高,一个精英级程序员,年薪在20W到100W,更牛的程序员更是不能用金钱衡量,而一个合格的程序员可能只有5W到10W,而且可代替性更强。所以从成本、风险控制的角度,商业软件更喜欢团队作战。如果感觉自己想点什么,不是为了钱的话,那就做吧。

不同意你的观点。如果长城是由秦始皇一个人建,他首先要学习如何建筑,然后将大批的石料运到山顶上,然后堆砌起来,然后……在他有生之年能完成多少呢?只有集体的力量才能将一项事业不停的推动下去。

“如果你真打算一个人做点东西的话,最大的敌人不是你个人的精力不够;而是不够坚定,总想以后会有人进来一起干。”
支持云风的观点,要做点东西出来就不要想着依靠别人。
Just do it.

这些在《人月神话》里早就总结过了

3g手机端协议栈源代码有2g+...

云风,你就下决心写自己想写的东西吧。勇气只能自己给!

刚开始学习编程的时候似乎大家都是这么干的,想想确实节省了很多teamwork带来的流程和相互之间的影响。有能力的人,完全可以自己一个人做。

如果你真打算一个人做点东西的话,最大的敌人不是你个人的精力不够;而是不够坚定,总想以后会有人进来一起干。
==============
精辟!

所谓管理,就是一门自废武功的学问。

博主有此一论,可能是因为,他在技术上很优秀,而在管理上还不那么优秀。但我们注意到,目前世界上有很多很优秀的管理人员可以协调很多技术上很优秀的开发人员高效的协同工作,这,是一门学问。韩信带兵多多益善。

软件商品的确需要团队来成就,软件本身的确不一定. 赞同。

关键是某些工作就算某一个人终其一生也做不完。

团队开发能得到的好处也就是个人可以很轻松,甚至可以衣来伸手,饭来张口,对个人的限制极大,再加上往往各人的水平,风格不一,导致最终的产品,人不像人,鬼不像鬼。
而现实中,真正很默契的团队是很罕见的。

“就好象 google 当年,因为不懂 HTML ,就设计了那么一个阳春白雪的首页”--这个可不像是专家说口的话。人家是为了简约。难道HTML和设计页面比那些爬虫以及搜索的算法更复杂?

哈哈~最后的用户是自己~代码产业和实体产业不相等滴~

虽然有点极端,但非常赞同。创造性的人少更好,维护性的人多问题不大。

我心理很清楚你想说什么!就是一种感觉!

很认可这个观点,我的理解是:从一开始就不考虑外援,会改变自己最事情的态度和效率

其实,如果一个工作过于枯燥繁琐,其实说明的是没有找到好的方法让机器代劳而已。

这句很赞同!我现在也经常会有此博文所描述的想法

做一个艺术品,只有一个人才可以做好。规模庞大的工程,需要多个人来完成。

做一个艺术品,只有一个人才可以做好。规模庞大的工程,需要多个人来完成。

写错了是John Carmack

NT也永远属于David Cutler,quake永远属于Haruki Murakami

to:阿北

程序员怎么了?

就算你再牛也只是个程序员,狭隘的英雄主义

多人合作会使做出来的软件偏离自己当初的目的。

这不是一个骗局,是一个事实。好多人没有勇气承认。

阳春白雪≠阳春面≠清汤寡水≠谷歌首页:)用词不当哦

你就是一程序员,当领导没当好,发发牢骚

過去、現在、或許的將來
我都是一個人單打獨鬥

云风大哥,其实你可以列举一些大项目作为例子,因为我有时也发现一些好项目一旦做出了原型,开源之后,其实就是其他人使之更完美而已。我觉得原型是一个人完成的,也就是那个有创造力的idea,而所有后来人都是围绕着补漏增强而已

我非常赞同。有的时候我觉得我不太理解“团队精神”。

最后一段亮了,最后一句大亮。

很有感触。

牛人,我比你更牛

如果是核心代码一个程序员来写,这个是可能的。但是如果一个人来应付客户或者说是策划无穷无尽的要求的话。确实搞不定。

太绝对了,看什么项目了。虽然我知道云风想表达的意思

一个人做东西的话,初期还可以,但是做出beta之后如果想继续推进一个人就有点儿不够了。

跑去其它杂七杂八的东西,现在做一个产品至少要设计和编程,很少有人在这两个方面完全精通,那需要消耗特别多的精力。而且如果意志脆弱的时候没有人扶持你,很容易就放弃了。

所以,最好的就是2~3个人的小团队,设计+编程+商业,而且大家互相鼓励,足够了。

偶像偶像!~

分担压力的成分多些,一个人的工作,生活......

其实单看标题来说, 这个观点确实如前面同学说的"破绽"不少. 可能还是云风的工作局限所制. 最流行最普遍市场占比最大的Web项目, 很显然要多人协助. 最简单的, 程序员难道不需要专业人员来Photoshop画图?

有的软件开发,多一个人就离成功越远,但当一个软件足够大的时候个人的精力不足以完成。你能想象WOW一个人做会需要多少年?但这不否认一个人也能做出来,花几个世纪。

“而且,做完了,东西再烂,你也至少拥有一个用户。”

唤起类似的经历,泪流满面……

软件如果能perfect的模块化,那云风同学的观点肯定可以实现。但软件根本做不到像PC那样高度模块化。。。

支持,像Nginx作者一样,独裁一点,核心代码完全自己开发,不接受第三方模块,可以保证代码的一致性和稳定性。

云风同学的猜测应该说是大胆的,不过有不少破绽,比如假定的“项目”规模是多大?比如文中已经承认了“精力有限”是一个敌人,那么,这个问题有解么?
虽然软件开发不是建大楼那样的工程性活动,不是人越多活越快,但术业有专攻,一个人大包大揽,对于一个大型项目来说注定着质量严重下降(当然前提是团队本身的素质较高)

有点意思,不是不能是不为也

說的很對,關鍵部分的代碼還是人少的好。做成一個開放的接口,寫大量的插件還是人多地好啊。

其实多人开发的效率必须要在充分沟通的情况下才能达到,即你要把你想的和你的partner讲清楚,而你的partner也要把他想的和你讲清楚。讲清楚本来就是件很困难的事,所以我们需要图表、文档,但对程序员来说可能都是懒得做了。

所以我觉得在做一个项目之前,合作的程序员最好共同去做一个需求分析,制定出项目的目标,有一个基本的共识之后再开始具体的编程工作。

很多时候,一个项目中有一半多的人是多余的。剩下的人他们的工作依靠他们的工作态度,职业素养,专业能力,并把它当成他们的一个作品,细心呵护。

这一切,是因为跟不上的开发手段造成的

趋势,越来越,集团化,
过去,几个人能做优秀产品,
现在,一个人的精力很无助,
过去,游戏,几人一块玩,
现在,游戏,要一哄而上,
过去,你能理解全部,
现在,领域是无底洞,

从留言中看,我觉得你已经给初入门者带来足够多的困扰

你可以说整个游戏是你做的? 只有解决数学难题是一个人的工作

要理解这样一个事实,有时写需求也需要一个集团军

有一天你忽然发现周围的人都在争论,每个人听起来都很有道理,谁也不愿意接受别人的观点.此时你深感疲倦,团队看起来是世界上最不应该出现的东西.但另外的时候,你所在的团队融合了你最亲密的人.做技术的很容易陷入自己的世界,团队则能尽量避免这种情况.一个人可以作出一款软件,只是有人支持的话,懈气的时候也有人提供动力.这当然是团队的理想状态. 

相当同意,想做什么就去学什么,只要有毅力,不会完成不了的,把希望寄托在别人身上什么的最讨厌了!

  很喜欢最后那句话

其实我觉得开发软件项目最初只需要几个人就够了.. 要做好的话以后得要更多的人去完善它。

"我觉得吧,如果你真打算一个人做点东西的话,最大的敌人不是你个人的精力不够;而是不够坚定,总想以后会有人进来一起干。"总想以后能不能赚到钱,看不到项目的未来。

三人团队认为不错..

我觉得,那些有创意的项目或者软件开始的时候都是很少的人实现的,但是如果要商业化,要能够赚钱,团队协作是不可或缺的。这个就像将军带领部队作战一样,不但要有想法,还要有执行的能力。
估计云风的想法是自己像大侠那样,可以有以一挡百甚至挡万的功力。

软件商品的确需要团队来成就,软件本身的确不一定..

原来linux是1个人在写

可是,我说可是,你开发这个程序的初衷是什么呢?为自己解决某些问题?那么这个项目的所有功能完全都是从自身需求出发,如何保证可以为更多人提供他们所需要的东西呢?

写了十几年程序,从一人到几十人的项目都经历过,发现就3个左右的人一起完成一个有一定规模和复杂度的系统最有写程序的感觉。

另外,翻看了一下你以前的博客,竟然发现我十几年前认识你,和你一样曾经在校门口的网吧的机器上写程序。

这一点还真有点赞同..
这两天正在看<<黑客与画家>>, viaweb就是PG和另外两个黑客做的, 而且公司里一直只有这么三个程序员......

一个人少了点,很多人多了点。我觉得少和多之间应该有个上限,比如 6。

有时候我也这么认为,不过光靠想这个也拿不准,只能说成败论英雄了

NICE~ 说的好~ 很多时候 人多了 会产生很多分歧 尤其是找来了能力和自己差不多的 对方自认为很强的人 不但不能让产品更好 反而会让产品偏离自己的预期和想法, 甚至可能毁掉它... 其实写了这么久的代码 偶尔也有些感触 发现其实很多东西思想上都是想通的 有时候自己不想做 不是没有时间 而是有些懒..或者缺乏了当初的一些激情... 能够坚持下来做到最后的寥寥无几 然而如果一个人想成功 的确需要比别人付出更多~ :)

都已经上升到思考这样的问题了...

更多的时候真的是为了找一个人分担压力。

深有感触。

做一个雕塑当然一个人足够 盖一幢大楼一个人当然不够 也许设计是够的

一切都是若草会的阴谋

Post a comment

非这个主题相关的留言请到:留言本