参加工作四个月了 -- 关于项目开发,项目管理,技术学习,有效沟通和开发技巧的总结

自从2013年7月3日正式入职以来,已经参加工作将近4个月。加上毕业之前两个多月的实习,这样算来在这个公司也工作了半年的时间了。并且在这个月,我经过了试用期,正式成为公司员工。在这里对这几个月的工作做一下总结。


首先简单列举一下在这几个月里,我所参与的项目以及在每个项目中所做的具体工作。


项目列表




以下部分是我在工作中的感悟

 


一    关于业务和需求


经过这几个项目,我认识到对于一个新项目来说,理解业务和需求是非常困难的,主要原因是我们不了解客户所在的行业。例如,我们要开发作业区统一采集平台这款软件,但是对采油采气这些业务流程不了解,对使用人员的工作方式也不了解,导致前期理解需求花费了很长时间。所以真正的人才应该既是技术专家,又是某个行业的业务专家。


所以在项目前期一定要做充分的讨论, 以确保项目组中每个人对项目的理解一致;并且充分和客户沟通, 确保客户和开发人员理解一致,开发人员之间也要进行有效的沟通。此外,领导在开关于项目的讨论会时,应该尽可能的让开发人员参与进来,这样有助于尽快对项目有一定的了解。

 


二    关于开发过程中遇到的问题


由于前期对项目的理解不充分,又迫于时间的压力,必须开始动手编码,在编码的过程中肯定会引入错误。并且在开发的过程中,自家各扫门前雪,每个人只会关注自己负责的一部分,很难有时间和精力去理解别人写的代码,这样导致每个人对于项目都没有整体的把握和理解。


另一个影响开发的因素是项目组中人员的变动,由于对项目的理解不充分,后来的人融入项目组需要一段时间,这样就造成了一种浪费。所以,应该尽量保持项目组中成员的稳定。


有时随着项目的进行,感觉代码越来越多,越来越混乱,难以管理。这种现象其实是由于对项目没有整体的把握。


开发人员在写代码的时候,没有遵守一定的编码规范,也没有遵守一些必要的设计原则,这会严重影响代码的质量和软件的结构。关于编码和软件设计方面的总结,已经写入《编码规范》中。


开发模式和协作方式非常重要。我们在做开发时,基本上是按界面分工,每个人负责一个界面,或者有的人专门负责一个功能,然后每天把写完的代码传到服务器上。其实这未必是最好的开发模式。找到一种高效的开发模式,能在很大程度上提高生产率。开发模式有很多种,比如瀑布式开发,增量开发等,还有最近兴起的敏捷开发等。由于经验所限,我对很多开发模式也不了解,只能在以后的工作中慢慢感悟和总结,尽量摸索出一套能适合移动开发的有效的模式。    

 


三    关于项目后期维护


由于项目在开发过程中没能较好的保证质量,没有一定的扩展性,这就导致后期维护时候改太大,成本太高。所以开发的时候花一些时间和精力提高质量是很有必要的,如果开发的时候引入的错误和不合理的地方太多,会给后期修改带来很大的麻烦。


出现的问题尽量由代码的作者维护, 即能提高效率也能保证修改的正确性, 避免改动牵扯其他模块。在对应云盘BUG的过程中,我深刻认识到读懂别人的代码太难了,第一个原因是不理解项目的需求,第二个原因是每个人的思维逻辑相差太大。


鉴于前期考虑不周全,开发时间紧张等情况,可以肯定的是第一次写的代码不可能是完善的。比如每个人写一个界面,到最后发现这些界面上有很多重复性的东西;在项目开发过程中,有时需要添加新的功能,这时只是将新功能追加上,导致功能的堆砌,使软件结构趋于混乱;由于前期对需求和业务不是很熟悉;有些代码可能是在一种比较模糊的状态下写的,随着项目的进行,对业务和需求理解的才会越来越清晰,对项目中各个模块的划分和各模块的职责也能比较清晰。所以,高质量的代码是不可能一次写成的。鉴于这些问题,我认为做以下两点是很有意义的。


我认为开发完之后,最好花时间把所有的代码核查一遍,代码的作者负责讲述代码的逻辑,项目组中的其他人理解作者的逻辑,并提出疑问。这样既能对软件有整体的认识和理解,也能有效的发现和解决问题。可以发现很多高质量代码都会有一个author,还会有一个checker。


如果对软件的质量要求比较高,在开发完之后有必要进行代码重构。代码重构的概念是这样的:在开发完成后,在不改变原有功能的条件下,通过调整程序的结构让代码变得更清晰,更具可读性,让软件更具健壮性和可扩展性。很多高质量的软件都是在一次次的重构迭代出来的。

 


四    关于学习和进步


每个人都不能拒绝学习与进步,否则就会被淘汰。另一方面,通过学习让自己变得越来越好,能力变得越来越强,本身就是一件很有意义的事,也会在这个过程中得到快乐。


要养成学习的习惯,最重要的一个前提是认为学习是有用的。很多人说做java的学习C++没用,其实大部分底层代码都是C/C++写的,要能读懂,语言是基础;也有人说设计模式没用,其实设计模式是软件领域最精华的东西,会让提升软件设计能力;也有人说做软件的,学习网络知识没用,这也是错误的,下面会有一个例子说明这一点。


有时知道一个小问题或小技巧, 就可以节省几个小时甚至几天的时间,一个很小的知识点,可能会帮上大忙。下面举两个例子说明这一点。


在物联网项目中,使用了公司总部的ESP框架,android端直接下载表单对象并序列化到android本地,但是在反序列化的时候并没有得到需要的信息,当时这个问题也拖了好几天。最后我进入到ESP平台的源码中,发现表单对象中我们需要的字段被transient关键字屏蔽了,也就是说这个字段在序列化的时候不能被序列化到本地,所以反序列化时得不到这个字段的信息。总部的人联系之后,去掉ESP源码中的transient关键字,才解决了这个问题。如果当时学java时没有注意到这个知识点,天知道这个问题要耗多久!


在移动办公的项目中,要基于华为的esdk进行二次开发。首先要做的就是根据esdk中的API连通华为的VPN服务器。但是华为给的demo中,写的确是他们VPN服务器的内网地址10.170.99.235,由于我不知道是内网地址,所以认为连不通VPN错误出在程序的逻辑上,折腾了好长时间,还是无法连通,最后给华为打电话要的公网IP。如果能提前意识到可能是私有IP,也不会折腾很长时间。其实私有IP是能看出来的,只是我没想起来。以下是私有ip的范围:10.0.0.0~10.255.255.255,172.16.0.0~172.31.255.255,192.168.0.0~192.168.255.255。而10.170.99.235明显在10.0.0.0~10.255.255.255这个范围内!


所以有时明白了一个原理, 就可以加快写代码的速度, 避免潜在的错误,还能很快的解决问题。对整个系统和框架理解的越深刻,在做应用的时候就会思路越清晰。


我认为我们不能埋头苦干,要有开放的,学习的心态。比如有很多做外包的,他们可能有些做法值得我们借鉴,我发现别人的方法很好,那我也可以使用这种方法。移动开发也是,学习别人的软件怎么设计的,项目是如何管理的,开发的时候是如何协作的,也是一件很有意义的事。如果每天只是搞自己的那一套,是很难有突破的。所以很多公司会把自己的团队打造成学习型团队。


项目组中的人要相互帮助,共同进步。提升项目组的整体水平。如果有人对开发有所感悟,希望能够分享出来。比如对某个需求理解的比较深入,发现了某个技术能解决某个问题,或者是在某个地方上跌倒过想要告诉别人避免陷阱,发现某个工具比较好用,都可以分享,可以定一个公司内部的分享会,或者将自己的感悟写下来,共享到开发部的群上。


以下是我认为现阶段比较重要的,需要加强的知识。




五  关于沟通


为了节约时间和避免错误,一定要学会高效沟通。 尤其是项目牵涉的部门比较多的时候。以下举例说明。


移动办公项目牵涉到以下三方面的人员----普联:负责移动端开发和维护;华为:VPN技术提供方;新疆:移动办公后台开发。并且我是临时接的这个项目,对项目本身不熟悉。华为方面的提供技术支持的人员也有变动,有一部分工作进行了交接。这样的话各方得到的信息就可能不同步,导致在开发过程中,很多时间都白白浪费了。现在总结一下,就是没有做到有效的沟通。


首先说一下上文提到的IP地址错误的例子。华为提供的demo上的地址是内网地址,导致连接VPN服务器花了很长时间也没连通,最后还是打电话询问的华为的技术人员。这个问题华为也有责任,既然你的技术提供出去了,不公开你的公网地址是说不过去的。当然也有我的责任,没有意识到地址可能是私有的,有自己的思维定式在里面,一般都认为以192.168开头的地址为私有地址,其实A类,B类和C类IP地址中,都保留了一份作为私有IP,这部分IP是不能出现在互联网上的。


第二个问题是关于集成文档的。在我这边连通VPN之后,新疆方面要把应用集成到华为的安全平台中去,我一听就一头雾水了,不知道说的什么意思。这个还牵扯到明确第一阶段任务的问题,我一直认为连通VPN,第一阶段就成功了,其实还包括集成测试。但是我又不知道集成是干什么的,耽误了很长时间。最后开了电话会议,原来是华为的工作人员少提供了一份说明文档。


第三个问题是关于登录验证的。移动端登入网页之前,要对用户名和密码进行统一验证。原来的实现是基于webservice,并且使用了第三方库。但是连通华为的VPN之后,所有的网络接口都必须用华为的esdk实现,   使用的webservice库肯定是用标准的网络接口实现的,所以要重写。忙了一整天,用华为的esdk写了一套发送xml soap协议的代码。然后第二天后台人员告知验证的方法改变了,所以这一天的工作白费了。这就是没有及时沟通,后台验证方式改变之后,后台开发人员应该及时告知我。



六    开发小技巧总结


有时候掌握一些小技巧,可以给我们提供很大的方便。以下是我在工作过程中总结的开发小窍门



1  避免重复制造轮子 

有时候我们要学会拿来主义,别人已经有了,我直接拿过来用就行了,自己再搞一套浪费时间不说,还不一定有别人写的好  


另一方面注意积累自己的类库,比如前段时间做通讯录,积累了一些对系统联系人进行操作的库,以后再遇到这种需求,可以直接拿过来就用了。


有效利用开源项目或框架(推荐两个网站:  开源中国 和 github), 自己很难写出这种框架,就算能实现, 也不会比别人写的更好。例如在开发通讯录时,我使用了github上的RoundImageView开源组件,还有其他一些框架也很优秀,例如异步http框架,xUtils框架实现文件断点上传和断点下载,下拉刷新框架等等。如果我们在自己的项目中使用第三方组件或框架,能打打提高开发效率。


2 android反编译

现在感觉反编译还是很好玩的,有时发现某些资源(图片)比较好,并且能应用到项目中,那就别客气了,直接反编译某个软件的apk包,把他的图片拿过来用就得了。有时候缺乏美工,让程序员做图片那是不现实的。例如在我的项目中有两处资源是反编译的qq通讯录和微信(不要告我剽窃奥,我只是拿来用用而已)。


有时发现某个软件的某些功能比较好,自己也需要这个功能,但是不知道怎样实现,那就直接反编译apk的代码就行了。在我的一个项目中,创建快捷方式的功能不会实现,反编译了腾讯QQ的apk找到了实现方法。


反编译工具推荐 apktools(反编译资源) 和 dex2jar(反编译源码)


3 多使用和体验其他优秀android软件

百度和腾讯的产品还是不错的, 网易的也不错,我都比较喜欢。可以去app商店看看有哪些好的应用,也许有的界面做的漂亮,有的用户体验超好,有的功能非常强大。

可以把别人好做的好的地方为我所用,有时候也能激发自己的灵感,拓宽自己的思路,了解最新的移动开发趋势。


4 养成查看源代码的习惯

android是开源的, jdk也是开源的,这对我们来说都是一座宝库。这些源码都是高手写的,整个理解也不可能,还要花费巨长的时间和很大的精力,所以不推荐把源码从头到尾拿来读。只要遇到问题,比较迷惑时,记得去源码里面看一眼,可能就能豁然开朗。即能较好的解决问题, 也能提升自己的能力。


如果想研究android的话,github上有很多开源项目,另外推荐一个比较好的开源app: 开源中国Android客户端。 当然,它的IOS和WP客户端也是开源的。



5 有时候使用adb命令行很方便


  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
项目开发过程中,应该按要求编写好十三种文档,文档编制要求具有针对性、精确性、清晰性、完整性、灵活性、可追溯性。   ◇ 可行性分析报告:说明该软件开发项目的实现在技术上、经济上和社会因素上的可行性,评述为了合理地达到开发目标可供选择的各种可能实施方案,说明并论证所选定实施方案的理由。   ◇ 项目开发计划:为软件项目实施方案制订出具体计划,应该包括各部分工作的负责人员、开发的进度、开发经费的预算、所需的硬件及软件资源等。   ◇ 软件需求说明书(软件规格说明书):对所开发软件的功能、性能、用户界面及运行环境等作出详细的说明。它是在用户与开发人员双方对软件需求取得共同理解并达成协议的条件下编写的,也是实施开发工作的基础。该说明书应给出数据逻辑和数据采集的各项要求,为生成和维护系统数据文件做好准备。   ◇ 概要设计说明书:该说明书是概要实际阶段的工作成果,它应说明功能分配、模块划分、程序的总体结构、输入输出以及接口设计、运行设计、数据结构设计和出错处理设计等,为详细设计提供基础。   ◇ 详细设计说明书:着重描述每一模块是怎样实现的,包括实现算法、逻辑流程等。   ◇ 用户操作手册:本手册详细描述软件的功能、性能和用户界面,使用户对如何使用该软件得到具体的了解,为操作人员提供该软件各种运行情况的有关知识,特别是操作方法的具体细节。   ◇ 测试计划:为做好集成测试和验收测试,需为如何组织测试制订实施计划。计划应包括测试的内容、进度、条件、人员、测试用例的选取原则、测试结果允许的偏差范围等。   ◇ 测试分析报告:测试工作完成以后,应提交测试计划执行情况的说明,对测试结果加以分析,并提出测试的结论意见。   ◇ 开发进度报:该报系软件人员按向管理部门提交的项目进展情况报告,报告应包括进度计划与实际执行情况的比较、阶段成果、遇到的问题和解决的办法以及下个的打算等。   ◇ 项目开发总结报告:软件项目开发完成以后,应与项目实施计划对照,总结实际执行的情况,如进度、成果、资源利用、成本和投入的人力,此外,还需对开发工作做出评价,总结出经验和教训。   ◇ 软件维护手册:主要包括软件系统说明、程序模块说明、操作环境、支持软件的说明、维护过程的说明,便于软件的维护。   ◇ 软件问题报告:指出软件问题的登记情况,如日期、发现人、状态、问题所属模块等,为软件修改提供准备文档。   ◇ 软件修改报告:软件产品投入运行以后,发现了需对其进行修正、更改等问题,应将存在的问题、修改的考虑以及修改的影响作出详细的描述,提交审批。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值