[转]关于项目管理、软件开发的一些思考

偶遇该文,里面的内容是在工作中时常念到的,转载收藏。

感谢原作者。

http://zhanjia.iteye.com/blog/1876344

---------------------------------------------------------------------------------------------------------------

下面总结几个曾经思考或遇到过,觉得有必要梳理一下的观点:
 
做项目的公司
    很多做项目的公司,太过于注重速度而非效率,注重结果而非过程,注重功能点而非质量,以销售为主,看重利润,对投入资源方面特别吝啬。当然,公司为了生存,这些其实都可以理解。但就我个人感觉,很多公司在这方面做得太过了。他们可能从未真正想过,如何通过N多项目,慢慢积累起来,形成自己的核心产品,或者说形成自己的核心竞争力。你也许反对这种观点,是的,你说的这些老板经常站在上面喊话:你们要将这个项目做成公司的一个产品,然后进行推广,接更多的项目。下边在听的人早已习惯了老板的这番豪情壮语,听完了就当啥事都没发生过,继续干自己的活。
    有些老板因为站得太高,看不到下面的事儿,给下面的人的支持太少;有些老板因为不懂技术,一味的控制成本,生怕被下面的人耗光了。呵,老板通常都是比较抠门的。无论是哪种情况,这种公司很难形成一个好的产品,很难形成自己的核心竞争力。有些公司只能勉强过日子,活得也挺辛苦;但有些公司却真的发展壮大了起来,日子美滋滋的。当然,这跟中国的大环境有很大的关系,只要有权、钱或关系,公司就很难倒闭,不仅不会倒闭,日子还会越过越好。最广为人知的例子当属国企了,那真的是高成本、低效率,但国企依然很有钱途,你明白的。后面这类公司其实不在我讨论的范围之内。
    就像中国的应试教育一样,我们已经习惯了某种标准,进入了某个圈套,被某种规则所束缚了,很难或不愿意跳出那个框框。如果你跟公司提建议,改善这种做事的方式,公司会告诉你,如果不这样做公司就会生存不下去。真的是这样吗?我看是一厢情愿吧?我们应该多学学《重来:更为简单有效的商业思维》(Rework中文版)一书里面的一些观点,书里面的观点非常独特而富有说服力,是一本值得反复阅读体会的书籍。里面的观点告诉你,失败并非成功之母;要想让客户接受你的产品,首先得让你自己接受;计划就是瞎猜等等原先你并不知道,原先你认为是正确的,但它却告诉你是错的的一些独特观点。
 
    我自己没开过公司,所站的角度也不同,有些因素可能没考虑到。
 
项目管理
    什么是项目管理?说得简单通俗一点,就是利用各种手段与资源,在指定的预算与时间内完成项目。时间与预算基本是不变的,资源只能有限度的调配,但手段却有无数种,正所谓有100个项目经理就会有100种管理方式。
 
    抛开一切外在的因素,项目的成败,很大程度取决于项目经理的管理水平,以下是关于项目经理的几个问题:

项目经理真的完全理解客户的需求吗?——正确理解需求,才能减少返工,项目进展会更快
    项目经理把需求完整的传递给项目组了吗?——吃苹果怕吃到半条虫,说话怕只说一半
    项目经理关心过某个功能模块的业务流程吗?——通常项目经理最了解业务流程,能够给项目成员们最好的业务指导
    项目经理登录过几次系统?用过哪些功能?这个丑陋的玩意儿真的是客户所期望的吗?——通常项目经理最了解客户的需求,这时项目经理就是最好的客户代表。可以从功能界面、业务流程、业务术语等检验系统是不是客户符合客户最初的期望,是否有需要改善的地方。
    项目经理,你有没有把客户后续的反馈意见传达给项目组了吗?——项目组的所有成员都应该知道客户的想法,而不仅仅是项目经理知道
    项目经理不正确的决策,导致项目加班加点,项目进度滞后——多征求项目组的意见,你的意见不一定是对的

以上第3、4点,通常最直接的导致客户的不满。每当你给客户演示系统的时候,客户经常会对你提的一些问题:

界面太丑
    界面的业务术语或操作提示完全是从技术人员的角度进行设计的,项目经理或分析人员到底有没有参与到这些业务流程的设计,对术语、提示进行梳理,并指导技术人员进行开发?——例如,有些技术人员在做异常提示的时候,把后台代码抛出的异常直接显示到页面了,这是非常低级的一种错误
    这个问题已经提了好多次了,我不知道为什么这么简单的问题你们就是不改?真受不了你们
    你们从来都不会主动去考虑这个事儿应该怎么做,如何改进,每次都要等到我主动提出的时候你们才会去做,最后做完了还有一堆问题,我真不知道你们想干什么?

简洁
    大道至简,大道理通常都是很简单的,简单到一两句话就可以说明白。同样,越是伟大的产品,其设计与使用会越简洁。比如苹果和Google的产品都极其简洁,但却不失其伟大之处,它们都有许多粉丝,都受到很高的评价;再如时下最流行的jQuery框架,语法也是非常简洁,但功能却很强大,而且很高效。
    同样,在做项目的时候,当你问客户希望系统的功能界面是什么样子的,客户常常会告诉你:简洁、大方。虽然这听起来很扯淡,似乎没有任何价值,问了等于白问,客户也许压根儿就没想过这事儿。但由此我们基本可以得出一个结论,简洁的确非常重要!
 
    在这个行业呆的时间越久,就越发觉简洁的重要性,但我发现身边好多人都没有注意到。
    软件的简洁性,不仅仅指系统功能界面及操作上的简洁,而是要保持软件工程的整个过程都尽可能的简洁。比如,做需求分析的时候,尽量考虑既能够满足用户的需求,又不会投入过多的资源,需求分析不一定要面面俱到。功能界面的设计要抓住用户关注的重点,如首页应该摆放什么内容,应该展现什么字段?我们经常忽略的一点是,未深入的考虑界面展现的内容对客户有什么作用,而是一味的往界面堆数据,结果给客户演示的时候,客户会问你,你有没有想过展现这个数据或者用这种实现方式有什么作用?业务流程的设计,尽量保持流程简单,清晰,易于实现。数据库的设计,尽量用最少的表,最少的字段来实现。当然有时需要考虑对数据的冗余,可能会增加表或字段,但这样通常可以减少表之间的关联性,提高处理性能,降低业务处理的复杂性,所以最终整个软件会变得更加简洁。代码上,对于同一功能的实现,也尽量用最少的代码、最简单的方式来实现,这样既减少了代码量,也使代码更清晰易懂,易于维护。
    我发现,保持软件的简洁性不仅能够减少不必要的投入、提高开发效率,而且能够提高产品的质量、更好的满足客户的需求。
    IT大佬苹果公司和Google公司的产品在简洁性上几乎体现得淋漓尽致。
 
程序员的代码不太靠谱
    在这里,我并不是想对所有程序员进行否定,只是想说明一种常见的现象。
 
    一个项目,从开始到结束,可能会经历各种各样的需求变更、功能修改或人员变动,从而项目本身潜在的问题也会越来越多。归纳起来有两大原因:

代码测试不充分
    业务不理解

先抛开测试团队与代码走查等因素,程序员首先必须对自己实现的代码负责。有些程序员,代码写完了,就不会再去看了,他们脑子里的概念是写完代码就是完成任务。有些程序员,测试自己实现的功能时,像是在走过场,跟没测试没太大区别。有些程序员,对业务不理解,但他就是不说,非得要写出不正确的代码;而有些程序员理解业务,但事实上他理解错了。
 
    我们可能经常会问程序员的问题:

这个功能你完成了吗?——答:完成了
    做完之后你测试过吗?——答:测试过了,没问题
    对于这几种情况,你都测试过吗?——答:测试过了,都没问题
    要测试仔细一点,有问题尽早修改,不要到最后交付给客户时才发现问题——答:我都测试过了,肯定没问题

这下可放心了,工作完成了,测试也没问题。可过几天给客户演示的时候,却突然冒出这样那样的问题,而且还不少,很多都是客户自己发现的。这是为什么呢?当然,软件的问题总会有,但有些确实是不应该出现的。
 
    每当我检查其他同事写的一些代码时,有些时候真的很无奈,甚至想不明白为什么会这么写,为什么会经常犯这样的错误?——真的是不看不知道,一看吓一跳!
 
    所以,有一位真正理解业务的技术人员,对代码进行检查很重要,特别是对核心代码、关键业务模块的实现流程的检查。
 
别再拍脑袋做事儿
    拍脑袋做事真的很危险:

客户提的需求别拍脑袋答应,尽量快速评估一下再答复。如果无法现场确认,回公司讨论之后再给客户答复
    客户原来已经认可或正在使用的功能,别拍脑袋随便修改,即使你的很好想法,但在实施之前最好与客户沟通确认之后再做,自作聪明是需要付出代价的
    别拍脑袋写代码,先把思路理清楚,画个流程图或伪代码之后再动手也许会更好

不要浮躁
    关于浮躁,程序员们应该有比较深的体会。只要你摆正价值观,降低姿态,怀着热情去工作,浮躁自然就会不复存在,而且工作也会更开心了。
    在这方面建议看看罗浩的《野兽派游戏》、《降级论》两篇文章,相信里面的一些观点会与你产生共鸣,使你豁然开朗,从增加自己的自信,更坚定自己的目标。
 
注重反馈,提高服务
    最后再提一下,客户的反馈很重要,客户多次提到的问题要特别关注。提高服务意识,多与客户交流,及时反馈问题。

时间: 2024-08-01 19:43:10

[转]关于项目管理、软件开发的一些思考的相关文章

简单之美-软件开发实践者的思考 03

对于软件来说,最大的软肋在于逻辑思维的不可遍历性.这是测试工作存在的一个原因. 实际的软件工程师实践证明,让对软件思想有深刻理解的软件工程师进行测试,可以大幅度提高软件质量.所以,测试工作并不比软件开发轻松,让软件开发菜鸟来进行测试是不负责任的.测试人员并不是软件开发人员的对立者.他在找出bug的同时,也要尽可能的帮助编程人员指出这种bug存在的原因以及地点.所有论点都存在一定的上下文之中.所以学习别人的论点只是理会这个论点的思路,而不要到处生搬硬套.怀疑一切. 项目管理工作的基本思路不是控制,

简单之美-软件开发实践者的思考 02

敏捷开发最注重的是人,或者说个体.目标是提高个体的主动性,提高产出效率.敏捷开发要求团队一起工作,甚至还有客户.结对编程.迭代交付,三周为一个周期,每个周期都发布可用地.经过测试的代码.2到5个周期后进行一次发布.敏捷开发积极拥抱变化,主要依靠代码重构来配合变化. 敏捷开发的优点在于发布时间短和响应需求变化,敏捷开发的缺点是可操作性差.实践者们常常走入各种各样的误区.根本原因还是人,人的主动性还有在软件开发中的行为受各种各样因素的影响. 在需求分析阶段准备两份文档.一份使用客户的术语表达客户的故

简单之美-软件开发实践者的思考 01

几天就读完了倪建大牛写的这本别具风味的作品,主要是对软件开发过程的一些思考,读后感.作者的写作方式很特别,通过叙述故事的方式讲解了软件开发的一整套流程和流程中需要注意的地方.作者的主要态度是批判的,带有理想主义的色彩,然而却是发人深省的. 这本书给我最大的收获就是在软件开发中要学会思考.思考所有步骤和方法存在的目的与意义.是否符合软件开发行业发展的趋势.作者主要涉及的是方法论上的层次,俯瞰着大地上的开发组织和人员.看到的问题和解决方案往往是直指本质的. 这里摘几条印象深刻的见解和需要识记的名词.

软件开发质量管理的一些思考

PMBOK里关于质量管理主要有3个过程: 制定质量管理计划 质量保证(QA) 质量控制(QC) 书看了5-6次,还是发现比较抽象,难以理解. 实际项目中,如何才能合理的考虑各种资源制约,更好的执行质量管理呢? 一般的正规流程大致如下: 需求分析-> 客户评审与确认-> 概要设计->内部评审-> 详细设计->内部评审->编码-> 代码审查->单体测试 -> 集成测试->问题修复-> 代码评审-> 测试确认-> alpha测试-&g

华为软件开发云测评报告一:项目管理

体验环境 体验方式:PC端 系统:Windows 64位 浏览器类型:Chrome浏览器 浏览器版本:49.0.2623.110 m 体验时间:2017.05.11 测试目的 了解华为软件开发云的项目管理服务功能,分析其优缺点: 瀑布化开发到敏捷开发的转型分析,以及未来软件开发模式的发展方向: 产品简介 产品名称:华为软件开发云 定位:软件开发云(DevCloud)是集华为研发实践.前沿研发理念.先进研发工具为一体的研发云平台,面向开发者提供研发工具服务,让软件开发简单高效. 产品slogan:

小规模软件开发团队现存问题思考若干

小规模软件开发团队现存问题思考若干 这里指的是创业初期的软件开发团队,由于面临较大的财政压力,不得不接一些外包来养活自己,然后再抽时间做自己的软件或平台的小规模创业团队.本文系自己的一点浅显的思考,观点较为浅薄,如果存在错误的地方,还望有经验的大神们指正. 一.创业初期的软件开发团队,大多存在以下几点问题: 1.没有产品经理: 没有产品经理,导致软件系统架构设计过于随意,而且项目人员搭配不均衡,最终导致存在以下几个详细的问题(1)设计思路不一致(2)软件流程不一致(3)各终端与后台字段命名不一致

华为软件开发云(DevCloud):免费可商用的项目管理工具

在软件开发技术和理念层出不穷的今天,如何更快的适应变化的环境,更好的满足客户的需求,已经成为决定从小到大各种规模企业能否活下去的关键. 天下武功唯快不破,在当今大环境中更是如此,微服务,敏捷开发,新的方法论和技术无时无刻不在提醒我们,要更快响应客户需求,更快交付,更短的迭代周期.如何在控制错误率的前提下,最大程度的提高企业的开发效率,便是每个企业重点关注的方面.Devops,微服务架构,分布式管理,种种技术和开发理念告诉我们,要靠工具:便捷的项目管理工具,高效的部署工具,稳定的自动化运维工具.

2017.07.07 IT项目管理笔记整理 第10章 敏捷软件开发

什么是敏捷软件开发方法 1.敏捷方法是一类软件开发流程的泛称: 2.敏捷方法是相对于传统的瀑布式软件过程提出的: 3.敏捷方法可以用敏捷宣言(4条).敏捷原则(12条)来概括: 4.敏捷原则通过一系列的敏捷实践来体现出来: 敏捷开发软件的特点:1敏捷软件开发更强调程序员与业务专家.用户之间的紧密合作,面对面的沟通,认为这种方式更有效 2能够很好地根据需求的变化编写代码 3频繁交付新的软件版本 4采用紧凑和自组织的软件开发团队 5更注重个体在软件开发中的作用 敏捷软件开发的方法有:1极限编程 2.

基于软件开发对嵌入式开发的思考

由于本人专业方向是计算机体系结构方向的,平时做嵌入式方面的实验以及项目较多,这个学期又学习了软件工程的课程,因此想借此机会,总结下在软件工程上面学习到的知识,并看看是否有什么能够借鉴到嵌入式方向的开发上面去. 首先我想总结下,软件开发与嵌入式开发的不同之处.作为软件开发,首先应当从用户或者用户的需求入手,明白用户想让你去实现什么功能,而到了具体的实现,有时却限制的不是那么的死.而至于嵌入式的开发,从需求入手是相同的,但是对于实现的方式,却明显不同于传统的软件开发.对于编程语言,不同的嵌入式开发平