一份项目小结及思考

项目进行到了一个阶段,是时候做一次小结了。

1、个人成长

就我个人而言,大致可以归纳为:

程序员熟练工(项目开始前有过1年半工作经验) --> 编程熟练工 --> 初步成为带有项目/产品意识的程序员(涉及需求、团队培训、项目计划)

2、技术成长

涉及到的技术包括:

  • 基于Eclipse的IDE开发:Editor,Debug框架,GUI等
  • 需求描述工具
  • 代码生成技术:EMF、MWE、Xpand
  • DSL (领域建模语言)工具Xtext

涉及到的开发流程包括:

  • 需求讨论、追踪(英文)
  • 项目开发要件:编码风格(Java,  Xtext),代码审查
  • 单元测试框架(TDD)
  • Build相关
  • 修改bug

3、遇到并解决过的难题

3.1、技术/工具升级

Xtext在两年半的开发中版本变更频繁(0.7.2 -> 2.3.0),而且还在不断升级,面对这种升级可以采取下列应对措施:

  • 跟踪技术变化,化被动为主动
  • 调整代码结构,将API/程序结构变化产生的影响减到最小
  • 建立升级评估模版,把升级的工作纳入可控状态

3.2、运用抽象避免重复开发

项目开发中很多功能点和要求大致相似,为了避免重复编写冗余代码可以采取:

  • 函数级抽象:避免大函数,尽量提高函数的可重用性
  • 充分利用API:避免每个人自己重复编写API,学习并充分利用框架提供的API并进行相关的修改,编写自己的API
  • 公共模块/插件:提高复用

3.3、频繁出现的需求变更

可以通过下列几个方面尝试改善需求对开发的影响:

  • 树立正确的心态:要正视需求变更,烦躁情绪不能解决问题,还不如好好考虑如何面对

  • 追踪需求变更:需求变更往往通过聊天、邮件、会议的方式提出,因此一定要对客用户提出的变更要求进行记录,可以通过文档、邮件或wiki来进行;切记,一定要和客户确认相关的变更内容,以及认可对项目开发可能产生的影响!

  • 技术准备:在项目开发中,尽可能地使代码和设计变得灵活,这样可以减小需求变更带来的影响

  • 流程准备:思索需求变更的原因,并纳入到项目开发的流程中

    • 自己是否考虑得不周全?比如异常流程

    • 自己是否理解了对方的意思?用自己的理解重复对方的需求

    • 是否缺少定期的需求沟通?比如每周例会,周报等

  • 学会拒绝:对于客户突然提出的需求,要能够依据之前的项目计划进行调整,必要的时候可以拒绝或调整开发计划

3.4、公共资源和培训

在项目开发中,会积累很多技术资源,但由于资源分散在各个人员中间,因此很容易出现

同一个问题重复解决,信息得不到及时分享这样的问题,可以采用下列方式解决:

  • 集中搜集的资料:文档、书本、文章
  • 集中项目编写的技术文档:设计、评估报告
  • 每个成员都可以访问并可以添加
  • 定期组织技术交流

3.5、临时方案(walkaround)

很多时候,为了赶上项目进度或遇到困难的问题,会采用临时方案(walkaround)。可能是将配置写死,或者是直接修改开源组建的代码。

虽然可以暂时解决问题,但是会对后续的开发产生不良的影响:

  • 避免为补丁打补丁,要即使修复
  • 能够追踪项目中应用的临时方案
  • 及时作出决定:是重新设计还是将临时方案永久采用

3.6、如何解BUG

BUG环节,除了要修复现有问题,还要做下列工作:

  • 要明确BUG是什么?
  • 要了解为什么会出现这个BUG
  • 是设计问题?
  • 是编码实现问题?
  • 是需求不清或是理解有误?
  • 如何处理困难的Bug
  • 开发没有问题,发布后出现BUG:是否Build过程有问题
  • 不可重复出现的BUG

4、软技能

4.1、沟通能力

  • 英文能力至关重要。
  • 清晰地阐述技术方案。
  • 提出有效/有意义的问题。
  • 理解并重复客户的需求,对方的观点。
  • 有效的邮件沟通。

4.2、了解业务知识

  • 了解工具相关的业务知识(开发中的实际需求)。
  • 了解工具在整个项目开发流程中的位置。
  • 能够区分重要/次要的功能点。

4.3、学会思考

依据实际项目要求,思考各种备选技术的优缺点(团队的熟悉程度),选取合适的技术。

思考团队成员问题背后的需求,并予以相应的支持(或者找到外部支持)。

通过不断反思,逐步改进开发过程中的问题,在项目进度允许的情况下为团队成员的自我提升创造条件(任务分配,技术资源,及时沟通)。

 

你可能感兴趣的:(思考)