2022年程序员接活 .pdf
《2022年程序员接活 .pdf》由会员分享,可在线阅读,更多相关《2022年程序员接活 .pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、: (一)项目确立一年前, CSDN 的外包频道, 一家贸易公司寻求开发业务系统。我注意到这家公司和我正好在一个城市, 索性就跟了一帖,写了点简要的个人开发情况,当然最重要的是附上了自己的手机号码(当时CSDN 外包频道还不限制这个信息的)。第二天就接到那家公司总经理的电话,这让我多少有点意外,电话中,双方客套两句后,约定好周末面谈。和以往面试一样,我带上个笔记本(上面有以往开发的项目演示版)按照约定好的时间,准时去洽谈。地点是在对方的办公室,一进会客室,给我第一感觉整齐、清新、优雅、绿色;窗外则是宁静的半岛和微澜的海浪,心情顿时感觉非常畅快。电话中那位非常绅士的总经理,年纪大概45 岁左右,
2、我们的谈话直奔主题。我先简单介绍了一下自己的情况 (工作和开发经历) ,用笔记本演示自己以前开发过的两个类似项目情况,他则不时地提几个关心的问题。然后, 他简单地将自己公司的需求告诉我,并把现行的系统的主要功能演示给我看了看。整个谈话过程中,我印象最深刻的是他最后时刻说的话:“我看了你以前开发的系统演示,认为你完全有能力开发我们的系统;我也不打算再寻找其他人来面试,因为我的时间不允许我这样做。 你如果觉得刚才我们谈到需求内容和开发价格都合适,那么我们就此开始合作。”我是个程序员,他是个商人,我们的合作就此开始。正文: (二)需求确定1 有了第一次的面谈,我对这家公司的整体印象不错。说起来,我以
3、前去过不少公司(自己工作过的公司或谈项目去过的公司),尤其是从事贸易的公司,还是第一次见到办公室这样让人感觉如此舒服的。简单说一下我需要开发的系统,其实并不复杂, 就是一个典型的贸易系统,主要功能是管理公司的产品、客户信息,然后给客户报价、生成合同、给厂家下生产单等等。当然,这每一个模块中都会有很多特定的需求,例如,产品的价格组成,当某些价格组成发生变化时,系统需要自动更新到所有可能产生影响的部分去。(那位非常绅士的总经理,为了叙事方便,给他取个名字吧,就叫Gentleman 吧)Gentleman 把他们现在使用的系统,发了一份给我,在我看来这个系统简直就是一个学生的实习作业。 无论从系统的
4、性能上,还是操作的界面上,逻辑的条理性上, 都存在很多的问题。但就是这样的系统,Gentleman 居然使用了近7 年的时间,这让我感到很惊讶,甚至于难以理解。 而 Gentleman 经常在需求的沟通过程中,提到他们原先的系统如何如何实现,我心中总是会非常不舒服,觉得拿这样原始而粗糙的系统来与即将开发的系统相提并论,我认为是对我的轻视或者说低估。对了,需求中有个重要的部分,那就是数据同步。因为Gentleman 长期定居在国外,每年只回国两次,每次大概一个半月,平时他都是通过IM 和 Email 来管理他的公司。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -
5、 - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 17 页 - - - - - - - - - 正文: (三)需求确定2 我用 2 天时间,把他们原先的老系统的所有功能,都学习 了一遍,在自己大脑中已经有了一个比较清晰的轮廓。其实行业软件,大家只要熟悉其业务流程,就会感觉非常简单。因为从程序实现上来看,主要工作就是数据库的表结构设计,以及相关前台界面的操作合理性。Gentleman 在他回 CA 国之前,约我再见一次面, 并给我发来一份他自己整理的需求文档( 20页左右)。因为我白天要正常上班,而他的返程机票已经订好,所以我们只能约定好晚上见面。这次,
6、他约我的地点是一家五星级酒店的自助餐厅。用他的话说, 他不知道该去哪合适,只知道这个地方吃饭还比较自在,他喜欢这的环境。这家自助餐厅给我留下的印象,就是用餐的外国人比中国人多,当然 Gentleman 给我的感觉也有点像个外国人,只是和我说话的时候还是用中文而已。我们边吃边谈系统的需求,他把自己需求文件中描述的内容,再给我讲述一遍。而且讲得非常仔细, 生怕我有不明白地方。其实他说的大部分内容,对于一个有8 年开发经验的程序员来说,完全没必说得这么细致。当然,我也不打断他的思路,只是默默地听着,因为我不想让他以为我很狂妄。我看着他认真的神情,思想反倒有点走神,脑子里寻思这一个问题:我什么时候能像
7、他这样工作和生活?就系统的需求,我们聊了大概有3-4 个小时,从自助餐厅到酒店大厅的会客区。Gentleman想把他所有能想到的想法和问题都告诉我,因为他明天就要飞回CA 国, 这半年内,再也没有这样好的沟通机会了,毕竟Email 中的描述只能停留在字面上。那夜, 我回去后,脑子里并没想任何系统需求,只是一直在想:我什么时候能像他这样工作和生活?正文: (四)系统整体设计1 需求大致上了解以后,我开始着手系统的整体设计工作。首先,从应用角度上来看,这个系统是准备在一家30 人左右的公司运行,而且Gentleman需要在自己的笔记本上安装一套系统,并与国内公司这边进行数据同步。另外, 他们公司在
8、每年的春秋广交会期间,都会带产品去参展,期间有5-6 台笔记本需要使用系统,以便随时给客户报价。所以说,各个数据库之间的同步,是这个系统的一个非常重要内容。其次,我开发系统有个习惯,即在完成系统功能的同时,比较注重界面的设计。这个习惯,也让我在这个系统上多花了30-40%的时间( Gentleman 对于界面并未做任何要求)。但我认为是必要的,我们程序员在写程序的时候,都使用IDE 工具,我个人的感觉,如果这个开发工具非常丑陋或看起来别扭,在开发系统的时候,是会非常不舒服的。同理,业务人员每天都是使用这套系统来工作,如果系统的界面非常差,操作起来很别扭,那工作简直就是遭罪。还有,系统的整体框架
9、。我没有采用以前开发过度系统框架,虽然这样能节省我很多时间。但我仔细考虑了一下, 由于这个系统对于时间要求并不紧迫,而我也想积累更多的系统框架,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 17 页 - - - - - - - - - 所以最终决定在原框架的基础上做许多升级改良,以便更试用于这套系统。(不少程序员开发系统,是一套框架多处使用。我认为如果时间不是很紧张的情况下,完全可以设计更好的方案。 这样在接下一单项目的时候,就可以有更多更好的系统演示给客户看)系统的功
10、能就像人的五脏六腑,界面则是人的长相和外衣;长相虽然不影响身体健康,但绝对影响找对象,呵呵,所以说,界面是个不大不小的问题。正文: (五)系统整体设计2 Gentleman 回 CA 国后的一个月内,他仍然每周都给我发过来最新的系统需求,其中有专题性质的 (例如: 某处的价格算法,以及价格调整的系列影响),也有系统整体性的需求调整。我则有条不紊地地分析着每份需求文件,从这些需求文件中,我能感觉到Gentleman 对这个系统的期望值很高,因为他不仅是在提需求,甚至是在做程序设计工作,哪些部分需要加按钮,这些按钮完成什么功能,具体某个字段是下拉列表显示,还是弹出窗口等等。在此期间, 我并未急于做
11、实质性的业务程序开发工作。我从Gentleman 的众多需求文件,逐步整理和设计出系统的几个核心表结构,在这几个核心表结构还没有相对稳定之前,我是不会写一行业务程序代码的,这是原则。 当然,我的程序框架的改进工作是一直在同步进行的,因为程序框架部分和业务程序部分几乎是平行的,只需要在框架中考虑到几处重要的StatusBar 和 ProgressBar,以及系统的整体显示风格即可。(即便如此, 在后续的开发过程中,还是出现了需要调整核心表结构的情况,当然这是后话,暂且不提)随着核心表结构的设计过程,我的脑海中正在一步步地形成整套系统的数据脉络(主业务数据流和辅助数据流) 。与此同时,Gentle
12、man 经常在发送新需求文件的同时,询问系统的进度情况。 而此时的系统进度只是在我脑海中,在一份数据库表结构文件中(我没去写非常详尽的设计资料, 因为一个人的系统没必要把过多的时间放在文档上,文档工作是对于协同开发小组比较重要的) ,我无法让Gentleman 感知进度的情况。我只是告诉他正在做系统的设计工作, 我也没发送改进好的程序框架给他看,我认为把一个半成品给对方看,还不如不给对方看。Gentleman 很理解我的工作,虽然我的当前的工作汇报只是停留在口头上。噢,又忘交代了,Gentleman 在成为商人以前是学计算机专业的,不过,我至今还不知道他是否当过程序员。中间插一讨论篇程序风格,
13、本篇与这个项目开发有些关系,但并不纳入到正文中。欢迎各位程序开发高手积极讨论一下。讨论篇 1:程序风格程序是什么?不同的角度有不同的看法,比较经典的论断是程序 =数据 +算法。数据是一套系统的核心,他的地位是不可动摇的,好比人民的温饱问题。算法是什么, 算法是系统的引名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 17 页 - - - - - - - - - 擎,算法的好坏优劣决定了程序执行的效率。但随着现在硬件技术的提高,很多程序员已经淡化了算法的重要性,以完成功能为标
14、准,这是可悲的事情。依我的看法,程序不光是数据+算法,那只是程序的行体部分;程序还需要有风格,这才是程序的神态部分。 只有形神兼备的程序, 才是一个优秀的程序。 程序风格又包涵哪些内容呢?在解释这个问题之前,我们先设想一下,如果一个闭月羞花的美女,出口就是脏字;如果一篇行文洒脱的文章,字确写得东倒西歪;如果一座雄伟的山峰,上面确寸草不生。那样是不是很煞风景?程序风格是什么?程序风格就是一个程序中,在数据内容以外所体现出来的内涵,它表现在程序的各个方面。 从使用者的角度: 主要体现在程序的整体显示风格(颜色基调、 图标风格、字体大小)和交互风格(数据组合方式、功能区划分、操作流程);从程序开发者
15、的角度,它包括项目的管理、源文件的组织、代码的风格、注释的写法。对于一个人的项目, 程序的风格就取决于你的个人风格。程序员在锻炼开发技术水平的同时,应该同时培养你的程序风格。恭候拍砖!正文: (六) Coding 1 程序的风格和核心数据库表基本确定后,我开始了系统的模块设计和编码工作。我的基本思路是, 按照程序模块的重要性,逐个模块实现。单个模块的设计和编码同时进行的,完成好一个模块,就发送给Gentleman 审核,以模块程序为交流载体,方便双方沟通。夜晚 22:00 后,静夜孤灯下,一杯水,一个人。时而低头沉思,时而握笔绘图,时而指走键盘,这就是我平时工作的画面。一行行代码,一个个画面就
16、这样跃然屏幕上。系统中最先做到是产品管理模块,大家可能会认为这样的模块应该是比较简单的。是的, 如果只是实现新建、编辑、删除功能的话,肯定很简单,但我确故意要将简单的东西复杂化。厨师的水平高低,不在菜上,而在于做菜的功夫上。我在实现产品管理模块时,考虑到很多问题。如何将主货号和详细货号关联?主货号中的哪些字段应该与详细货号中的相同,两者之间应该怎么显示和编辑最合理?程序实现的过程中,哪些模块可以共用,哪些字段需要冗余?编辑某个货号的时候,应该怎么显示其他货号的详细内容作为参考?怎么让业务员输入最少的信息即可完成操作?上面这些问题,有Gentleman 提到的,更有Gentleman 没提到的。
17、我认为系统的开发过程,就像一段外语的翻译过程,有人是直译,有人是意译,孰高孰低,明眼人一看就知道。至于其中多付出的劳动,虽然只有自己知道,但同样可以体现在你的劳动成果中。在我的观念中, 开发系统不仅仅是为了开发而开发,应该再提升一个高度,至少要让自己满意。后来证实我的思路是正确的,Gentleman 对于我的程序实现方式,很满意, 或者说赞赏。以至于他总是说我聪明,能准确地理解他的意图,并恰当地实现出来。具体体现在他的需求文档中,以往那些琐碎的、近似设计的描述少了,他只提他想要的结果,具体实现他已经不名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - -
18、- - - - - 名师精心整理 - - - - - - - 第 4 页,共 17 页 - - - - - - - - - 用操心了- 这正是我的目的。我和 Gentleman 的关系,开始有点像Partner了。正文: (六) Coding 2 自从编码开始后,项目开发工作似乎进入了正轨。这套系统的编码过程中,有一个十分麻烦的地方,那就是货号价格的变化,需要更新多非常多的地方。 这些都是Gentleman 在常年的工作中总结出来的,他心中非常清楚。他只要一看这些价格数字, 就能知道哪些是正确更新后的,哪些是未更新的。可我在短时间内确是很难做到的这一点的, 因此,我单独写了一份价格更新对照表,
19、虽说整理着份文件花了不少时间,但磨刀不误砍柴功,这份文件在后续的工作中发挥了重要的作用。因此, 我认为在开发过程中,对于那些容易混淆或需要非常仔细的地方(例如:本系统中的各种价格组成、公式、更新对照等),应该单独写份文档作为项目参考资料(这份文档一定要准确无误) ,即便是一个人开发系统,也有必要。就像Windows API 参考文档一样,当程序需要调用具体API 函数的时候,只要查一下参考文档就可以了,完全没必要去记住那些具体参数, 因为短时间内去记住那些参数,是不现实的。随着开发的过程,对于那些经常调用的部分,自然就熟悉了。编码的过程, 是对设计的逐步修正的过程。设计时理解不准确的部分,在
20、Coding 的过程中,都会逐一发现。很多人羡慕一个人开发系统,其实一个人开发系统的优势和劣势同样明显。优势在于整个开发中,省却了所有的开发沟通时间,因为整个系统(哪怕是非常细小的环节)都了然于胸;劣势就是孤单, 遇到任何技术问题都必须自己一个人去解决,解决问题后的快感也没人分享。这个劣势在后续的开发中,给项目带来了一点问题。正文: (六) Coding 3 编码的工作是辛苦的,远没有程序设计时的天马行空,需要的是严谨的工作态度、良好的编码习惯和相对完整的开发时间。对于Part-Time 开发者来说,很多人觉得非常辛苦,主要是因为没有完整的开发时间。项目的开始阶段,一般开发者都能保持相对高的开
21、发热情,但一旦进入编码的中期,这种热情支撑下的开发进度就开始疲态尽显。我也是遇到了同样的问题,项目进行了3-4 个月左右的时候,开发进度明显比预期的低了很多,就连大洋彼岸的Gentleman 也能明显感觉得到。Gentlman 开始有些着急了,经常在Email 中询问开发进度(其实就是催促开发进度),并主动提出快速开发奖励。我非常清楚Gentleman 的心思,首先,他是想在下一次的广交会之前使用上这套新的系统,以便提高工作效率;其次, 他是认为我当前的系统开发质量比他原先预期的要好,所以很乐意提高开发费用。面对相对优厚的额外奖励(这是 Gentleman 高明的名师资料总结 - - -精品资
22、料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 17 页 - - - - - - - - - 地方) ,我也很想提高效率,但由于种种原因我很难进入快速开发状态。多说两句当时的情况,权当为自己开脱吧。其一,项目进展到3-4 个月左右的时候,我老婆正到预产期,我可爱的女儿来到了这个花花世界;其二,在去年轰轰烈烈的A 股牛市中,我这新股民怀着快速发财的梦想,在5500 点的高位杀入了大量的资金,结果亏损严重,致命的是这些资金有大部分不是自己的存款。这让我承受了巨大的精神压力,几次出现失眠的情况。仅此两点,大
23、家就可想而知我当时的状态了。心态上无法进入工作状态,时间上无法保证开发时间,一个人的战斗,孤立无援, 我把项目带入到了最艰难的境地。正文: (九) Coding 4 面对 Gentleman 的额外奖励,我深感惭愧,虽然内心很想加快开发进度,但当时的心思确又很难聚焦到项目开发上来。这样浑浑噩噩的状态大概延续了一个月左右,项目的开发进度比预期已经差了一大块。我几次想在Email 中告诉 Gentleman 我的痛苦, 但炒股导致的心理失衡问题,怎么能让他去承担后果。我问心有愧啊!即便在如此情形下,程序的代码质量还是我把握的第一要素。要么不写, 要写就一定要保证质量, 我绝对不会做杀鸡取卵这样的事
24、。盲目上线带来的一定是后续更大量的补救工作,同时也会影响客户的信心。这一点,应该也是Gentleman 欣赏我的地方之一。随着春季广交会时间的日益临近,Gentleman 已经感觉到项目无法在此之前完成,但他表现得非常大度。不仅没有过多地责怪我,相反还继续鼓励我,额外奖励依然有效,只是要求我全力把程序开发好。Gentleman 的做法,让我非常感动,我时常自己在问自己:如果我不能及时调整好心态,不能坚持把项目开发好,对得起Gentleman 这样的好人吗?我的名言:生命就是折腾与被折腾的过程。这浑浑噩噩的一个多月,其实就是我个人心态的筑底过程,而这心态铸底成功的因素中,我清楚,有Gentlem
25、an 一份功劳。伴随心态的调整成功,项目开发也重新步入正轨。当然Gentleman 也从 CA 国飞回到本市,开始筹备公司的春季广交会的展览。准确的说,此时此刻,系统的编码工作已经完成了80-90% 正文: (十)数据库选型个人项目中, 心理层面的问题需要自我调节,技术层面的问题同样只能独自解决,下面就写点技术问题。在这套系统的数据库选型中,我是经过一番思考的。从我个人技术熟悉程度上来说,是对DB2 和 Sql Server 比较熟悉。但对于30 人规模的中小型公司,没必要选用过大的数据库,Oracle、DB2 这类首先被PASS 掉了,在 Sql Server、MySql 、Sybase A
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年程序员接活 2022 程序员
限制150内