对一年编程开发经历的思考

Posted 观阅之余

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对一年编程开发经历的思考相关的知识,希望对你有一定的参考价值。

推倒重来是否可以接受?


年前,公司有个项目,要求合并公司内部的两个平台,这事交给了主程负责。这两个平台,是公司另外一位程序员基于.NET开发和维护的。交给主程后,他将基于Python和mysql重构整个系统。主程希望开发出一套接口,然后两个平台通用。我在这个项目中负责其中一个平台的前端接口的对接。作为开发领域的职场萌新,我初期并不觉得这样的任务,对于主程来说会是怎样的难题。

初期老板给主程大概一个月的时间,后来这个时间延长到两个月,然后过年了,3月份,5月份,7月份...在这期间,旧系统正常维护,新特性不断添加,我主要还是在和.NET工程师配合。3月份之后,我渐渐意识到,主程在做一件很大胆的事,而且是他一人在做,他要把整个旧系统推倒重来。5月份的时候,公司聘请了一位项目经理,负责新系统的开发进度管理,同时辅助主程开发。除此之外,项目经理还负责技术部规范化管理和布局。这个时候,新系统的开发进入一个新阶段。项目经理着手梳理旧系统全部功能、数据库表,新系统已开发功能、数据库表等。产品负责整理功能点,我主要整理前端现有的接口文档。5-7月份,新系统的开发效率比较高,虽然我每天并没有多少接口可以对接,新系统的工作重则都集中在了后端。后端开发也从主程一人,增加到四人,他们基本每天都加班,这种工作状态应该还会再持续一段时间。

在我意识到,这是个很艰巨的任务后,开始担心项目负责人会不会低估新系统上线的难度。如果他们肯花更多的时间和成本,这个难度有可能被抵消,但是如果被迫赶时间的话,新系统势必要面临一些问题的考验。新系统在动工之前,期望可以比旧系统更加好用,但目前的计划是保持和旧系统一致。而我不认为保持一致就会让工作难度降低,因为旧系统是经历了至少一年的考验,但新系统并没有这样的经历。虽然主程、项目经理都是经验丰富的开发人员,但这种事情他们也不敢给予百分之百的肯定吧。除此之外,还有一点很重要:开发人员对功能点的理解是否到位。为了保持和旧系统一致,就不能在业务上存在差错,不然就本末倒置了。产品在测试新接口的时候,就业务流程提出了一些待修改的问题,往往是一些违反业务流程的问题。此外,出于赶时间的原因,一些比较小的功能都被滞留开发了,积少成多,这在以后也会成为一道坎。还有一点令我在工作中感觉棘手的是,后端开发会随着开发的推进调整接口规范,这也会给整个工程增加难度。不过好在,项目经理安排的工程进度都在有条不紊的进行着。

他们都能看懂我写的代码?


他们都很聪明,即使我没有给他们讲解我是怎么写的我会天然地认为,新来的程序员可以在比较短的时间内,看懂我写的代码。但是,我忽略了一个问题,能不能理解别人写的代码,这个问题和智商无关,而与背景知识有关。因为我已经接触这个项目一年了,而且开发了很多新功能,但是对于第一次接触这份代码的人来说,他们完全没有任何背景知识,他们想要理解,就必须学习。而他们学习的难度,和我写的代码的简单度有关。如果我能在代码里多加一些注释,使用简单的设计,统一变量声明的规范等等,他们的学习成本就会降低不少。即使是我自己后来再去看自己写的代码,也可以快速看懂。

有的时候,我们并不清楚,我们为什么开发软件。可以肯定的是,肯定不是为了开发而开发。如果只是单纯的为了编程,我们很有可能会故意把软件做的复杂,或许是为了让自己显得比别的程序员更聪明,从而有种成就感。其实,如果把事情做得简单而不是复杂,大家甚至会更羡慕你。因为你帮助他们降低了理解代码的难度,帮助他们节约了宝贵时间和精力。顺便说一句,软件开发是为了帮助其他人。

开发完记得测试


开发后测试自己写的功能是否可以正常跑通,是非常必要的步骤,而且在这个过程中可以收获很大的成就感。我在测试的时候,会考虑各种自己可以想到的边界条件,即使没有条件,也会创造条件。很多时候,开发人员会预知哪里潜藏着问题,即使专门的测试人员或产品在测试的时候并没有发现。产品可以测试出来的是表象bug,开发人员会依据开发逻辑发现本质bug。但问题总是难以避免,有些时候,刚一上线,就能发现问题。

新版本的测试应该被给予足够的重视,测试条件也应该足够好才行。上线后出现的问题,多是因为测试时样本不够导致的。测试在我看来是开发环境中重要的一环,但是我很少有精力去研究一些有用的前端测试手段,公司也没有这样的环境。不管怎样,我对自动化测试,保持积极的态度,也希望今后能够真实地接触。

基础的重要性


计算机科学是一门到处都充满抽象的学科。David John Wheeler有一句名言“计算机科学中的任何问题都可以通过加上一层间接层来解决”,这句话几乎概括了计算机系统软件体系结构的设计要点,计算机整个体系从上到下都是这样设计的,体系里的每一个组件又都是按照这种层次结构设计和组织的。计算机科学的确是靠着这一层又一层的抽象与封装解决了巨量的问题。而抽象性直接增加了这门学科快速入门的难度。掌握基础的好处,是可以开发出简洁的程序,比如设计模式、数据结构和算法的合理使用。此外,拥有基础,也能快速解决问题。

曾经在开发中遇着一道难题,有个获取数据列表的接口,可以按页返回数据,但每次最多返回7条数据。每条数据都有一个时间戳,数据是按照时间戳由大到小有序返回的,但时间戳的间隔不定。现在需要获取某个时间范围内的数据,如何办到。这个问题并没有看起来那么容易解决,如果是简单的按页获取数据,直到找到那个时间范围为止,这势必要花费时间,尤其是选择的时间范围是N年前:每次只能获取7条数据,万一这7条就只跨度7天呢?这得请求多少次才成?即使一次派发N多请求,还是会让人等待很久。因为被查找的列表是有序的,使用折半查找或者其他查找算法,可以缩短查找时间。当然,里面还牵扯到其他问题的解决,比如时间范围如何确定等。问题的解决,带来成就感,也让人意识到基础的重要性。

以上是关于对一年编程开发经历的思考的主要内容,如果未能解决你的问题,请参考以下文章

java编程的思考

Shell编程(基础)

转行做编程开发是怎样的体验?

纳尼?10岁的熊孩子就会编程开发APP?

首发| 牛津博士教小朋友学编程 开发多种编程工具 一年拓5省1100所学校

10个C#编程和Visual Studio使用技巧