`

项目开发经验 转载

阅读更多

http://yanmouse.iteye.com/blog/606760


做开发4年来,给我一个总体的感觉是痛苦并且快乐着。相信很多朋友和我一样,解决了一个棘手的问题,更有甚者这个问题他人不能解决时,成就感油然而生。至于痛苦的方面,这可能和他人不同,我很少会为不能解决的问题而困惑,更多的是来自于团队合作和团队工作质量。有时候,会对队友很失望,无论是经验程度,还是处理人事的方法。
    对于软件开发,笔者一点体会,简单地说,为了一个共同的目标,一个或多个团队相互合作,产生一定“结果”的社会过程。个人偏好地认为是一种过程,通常来说,由项目立项、可行性分析、需求分析、架构设计和技术选型 等等。在不同的场合,这些过程增加或者减少。无论怎么样的变化,其决定性因素的还是人,处理好人事等于成功了一半。在软件工程,没有最好,只有更好,永远牢记着只做正确和适合自身的开发方法,尽量不要教条主义和理想主义。笔者曾经就犯过错误,严格地按照敏捷那套执行,开始就遇到了同事的反对,理由是他不能理解,执行起来困难重重,照搬是不行的。
    万事开头难,尤其是软件项目,把握需求是困难的,一般而言,很难做到所有的需求细节一一列出,只可能在一个相对抽象的需求上不断地“演化”,甚至发生变化。开发人员最苦恼的地方莫过于需求变迁所带来的反复开发或者修改,所谓的“Change is welcome",那是“Communism”。若要把项目致力于灵活多变,无疑是困难的。从事多年开发的同仁会感觉,如果有一个不需要编码,只需要简单配置,能够完成需求,那该多好。不过,据我所知,不管模型化建模,还是代码自动产生器都不能很好完成需要,毕竟需求是各异的。
   找不到理想中的“乌托邦”,最终还是回到现实。重担还是落在开发人员身上,开发人员面对“脆弱的”需求,尤其是架构师团,更需要抽象业务逻辑,构建需求的蓝图和界限。笔者认为成功的架构师是务实的,我见过不少“理想主义“的架构师,写出来的方案有点像“八股文”,甚至一些方案在实际情况中是“死胡同”。
    架构设计并不是越抽象越好,更不是越技术先进越好,成熟大于高新,务实大于花哨。
    说句题外话,我看到过很多同学,尤其是初出茅庐的,在简历上面写了不少的“高新”技术,动不动就是“精通”的字样,有经验的HR看都不会看这样的简历。反思一下,为什么不少公司招聘信息注明,行业经验优先考虑。不难看出业务理解优先于技术实力。技术是要落到实处来解决实现的问题的。好比钞票,如果不流通,它就是废纸。
     架构设计和技术选型之后,详细设计,一个和客户或者和开发人员内部讨论过程,无论你的角色是什么,沟通的素质是必须的。作为开发人员,要了解自己的输入和输出。作为项目经理,需要合理安排人力资源和协调团队,同时和客户互通。
   人力资源安排是一门大学问,首先需要了解团队人员的素质,主要是技术实力和需求理解能力,其中需求理解至关重要。

    项目经理好比军队中的“帅”,架构师好比“参谋”,开发人员则是前线将士。团队的执行力,往往决定项目的成败。首先,需要了解部下,一个稳定的团队是相当重要的。众所周知,IT行业是一个流通性相对比较大的行业,尤其在时间拮据的情况下,大多数通过面试手段来招募贤士,少数则是通过推荐。无论哪种方法,在短期内,知人善任是困难的,项目经理很难全面的了解开发员的才能。笔者就遇到了这个问题,开始觉得挺不错,感觉后来越来越差,人才真是凤毛麟角。当项目进行到一定阶段的时候,临时“易将”是不明智,重新招募和培训新的员工,无论是时间成本还是人事处理都是不合适的。一个权宜的方法就是培训员工,因为技术和素养是可造的。一些上了年纪或者有家庭的员工很难进行“培训”,其兴趣和精力不在于此,处理这样的问题比较棘手,至今效果不理想。
事情不能改变的时候,只能适应其规律。
    接下来,沟通和协调团队。它是双向的,逐渐地了解队友的习惯和素质,合理地安排任务的分配。笔者举一个二期开发项目的例子,见到的一个常景就是,各个队员开发个自己的小模块并且保留接口,接口之间可用性和风格各异。由于笔者偏好开发,因此有“Code review”的习惯。出于尊重前辈(笔者的年纪最小,平均小了10岁),时常在代码上面添加注释,建议修改或者改进。由于项目前期,测试用例极少,导致了目前修改后的bug不断,项目中出现了相互职责的问题。经过一段时间的调整,最终统一了意见。
    过程可以说是步履维艰,其消耗了大量的开发时间。在一个团队中,很少的人对软件的思考,过多的是实现功能性。软件作为一门艺术,开发是苦难的。如果仅仅停留在功能性实现的层面上,可以说没有什么价值。若把它定位到哲学高度,则是力于美的结合。虽然软件是虚拟的,但是它能够体现一个团队背后的智慧,从学术的角度,就是软件的制造工艺。工艺水平直接或间接地体现了软件的架构能力。提升团队的素质,应该从这个方面入手,有限地提高。顾客就是上帝。
    有时候这些上帝也比较“疯狂”,提出来很多不合理的需求。相信大家喜欢技术型出身的客户,那样会更有“人情味”。推掉不合理的需求也是一门学问,如果能够化“被动”为“主动”,那更是“艺术”。处理顾客关系,使用软件技术手段是行不通的。有意思的是,软件工程里面很少有“人文关怀”,而是过多的“工程实践”。笔者认为“人文”方面是不可少的。事实上,项目经理多不是“技术”官,而是“行政”官,不少人误解了其作用。由于时间和经验的关系,只能写到这里。针对一些问题,我会做“专题”,从行政管理到软件架构,甚至到开发实践方面,相当地欢迎朋友们一起讨论或者指点迷津。

分享到:
评论

相关推荐

    xx产品开发项目计划模板(转载)

    从提供的文件内容来看,这是一份软件开发公司的产品开发项目计划书模板。该模板覆盖了项目管理的诸多方面,包括项目概述、组织结构、资源规划、质量保证、报告机制和配置管理等关键要素。下面将详细解读这些要点: ...

    华为产品开发项目计划模板(转载).pdf

    华为产品开发项目计划模板是产品开发项目中不可或缺的一部分,需要涵盖项目的各个方面,包括项目概况、项目组织结构、项目依赖关系分析、技术方法和工具、交付件、项目计划等,以确保项目的顺利进行和成果达到预期...

    转载一个优秀的开源项目

    通常,这类文章会包含项目的简介、主要特性、实现技术、使用教程以及开发者对项目的见解和经验分享。为了深入理解这个项目,我们需要访问链接来获取更多详细信息。 【标签】:“源码”和“工具”这两个标签暗示了...

    [转载] JDBC+Servlet+JSP整合开发之-JSP项目实战

    【标题】:“JDBC+Servlet+JSP整合开发之-JSP项目实战” 在这个主题中,我们将深入探讨如何使用Java的三大Web开发技术——JDBC(Java Database Connectivity)、Servlet和JSP(JavaServer Pages)来构建一个完整的...

    软件开发人成长经历(转载)

    "软件开发人成长经历(转载)"这个主题,旨在分享一位软件开发者从初学者到专业人士的蜕变过程,帮助那些渴望在这一行业中提升自己的人们找到方向。通过阅读《程序员感语.pdf》这样的资料,我们可以学习到许多关键的...

    百度地图、高德地图、腾讯地图三位一体地图定位开发

    由于公司在开发安卓项目时,需要用到定位功能,所以需要选择定位精度高的地图SDK。现在将市面上应用最广泛的三家地图服务集成到一个APP上,实现百度地图、高德地图、腾讯地图的对比。现将整个开发步骤进行记录。 ...

    软件测试经验转载

    本文将分享一些关于这两个领域的经验和见解。 首先,对于软件测试,我们需要建立清晰的质量概念。这意味着在接手产品时,要对各项质量标准有明确的理解,包括但不限于安装卸载流程、功能性能、用户界面、错误处理和...

    原生或第三方平台上的App开发的教程、源代码项目

    1.首先从开发方面:原生开发的App每一种移动操作系统都需要独立的开发项目每种平台都需要独立的开发语言。Java(Android), Objective-C(iOS)以及Visual C++(Windows Mobile)等等需要使用各自的软件开发包,开发工具...

    WCF 分布式开发转载

    **分布式开发中的WCF技术详解** Windows Communication Foundation (WCF) 是微软.NET Framework的一部分,它为构建可伸缩、安全和可靠的分布式应用程序提供了一个统一的编程模型。在本篇文章中,我们将深入探讨WCF...

    《项目管理实践案例(第二版)》pdf

    任何未经许可的转载或引用均需注明来自“项目管理者联盟(www.mypm.net)”。如果需要用于商业目的,则必须事先获得项目管理者联盟的授权。 #### Mypm.net《案例》栏目介绍 项目管理者联盟网站上的《案例》栏目是...

    自己搭的WEB项目简易流程源码

    自己搭的WEB项目简易流程源,希望各位有空帮忙看一下代码,提出你们的宝贵意见和建议,使这个流程和开发更为方便,本源码未使用SSH框架,但借鉴了STRUTS,SPRING里面的一些东西,设计模式也没有怎么用,希望各位能把...

    51单片机开发实例100例(转载)_51单片机开发例程_

    《51单片机开发实例100例》是一份极具价值的学习资源,专为初学者和爱好者提供了丰富的51单片机编程实践案例。...无论你是初学者还是有一定经验的工程师,都能从中受益匪浅,进一步提升自己的单片机开发技能。

    IntelliJ IDEA插件开发手册

    转载的,作者忘了,不好意思. <br>这个手册主要帮助IntelliJ IDEA的开发人员快速了解IntelliJ IDEA的插件结构,并能编写自己的插件。这个手册主要包含以下内容: <br> 开发准备 IntelliJ IDEA的IoC介绍 ...

    iWebs:开发技术转载

    【标题】"iWebs: 开发技术转载" 在标题“iWebs: 开发技术转载”中,我们可以推测这是一个关于软件开发的技术分享平台,尤其是针对互联网Web开发领域。"iWebs"可能是该平台的名称,而"开发技术转载"则表明这个平台...

    图文配置Silverlight3_0开发环境(转载)

    **Silverlight 3.0 开发环境配置指南** 在本文中,我们将详述如何配置Microsoft Silverlight 3.0的开发环境,以便开始创建富互联网应用程序(RIA)。Silverlight是微软推出的一种轻量级插件技术,用于在Web浏览器中...

    JBPM的开发指南,转载过来的

    首先,你需要安装Java开发环境(JDK)和Maven,然后配置JBPM的依赖库到项目中。 #### 3.2 创建流程定义 使用BPMN编辑器创建流程图,保存为`.bpmn2`文件。 #### 3.3 编写Java代码 实现流程的业务逻辑,这可能涉及到...

    MTK开发笔记个人总结版--转载

    - **Zi输入法**:包括新建项目目录、拷贝第三方Zi文件、扩展名修改及包含到IMEResZi.h中等步骤。 - **T9输入法**:移植相对复杂,需参照提供的PDF文档进行,这些文档详细说明了资源生成的步骤。 - **CStar输入法*...

    J2ME的3D开发教程

    对于文档的传播,鼓励非商业性质的电子版本分发,但在线转载需事先获得J2ME开发网的许可。此外,教程的最终解释权归J2ME开发网所有。 #### 致谢与合作精神 在教程的编纂过程中,无数开发者倾注了热情与智慧,其中...

Global site tag (gtag.js) - Google Analytics