我的程序员之路之黑窗口程序开发

上篇文章《我的程序员之路之大学毕业之际,初入职场》,给大家介绍了,我刚毕业,初入职场的场景,窘迫异常啊(文章移动学堂地址:
http://www.ydxt.com/case/hotdetail?caseId=161&froms=2&zttshareId=3081)。

自从毕业后,接触到开发工作,这个时候的我,也算有几个月的工作经验了,对开发工具delphi也算是有一定的了解了,可惜,在做功能开发的时候,我还是有一种朦胧的感觉。上篇提到,我开始是在界面开发组,后来公司人员大变动,被调整到服务器组了。这个时候的我,开始了面对黑窗口的日子。

进入服务器组后,因为公司比较小,组长和原来的组长都比较熟悉,所以也比较了解我的开发能力(比较差)。我发现一个现象,客户端界面组大家都很忙,而我也很忙(给我安排的简单任务,都要弄很久,一直在忙嘛),服务器组,感觉大家都不是很忙,至少感觉老大(组长)不怎么忙(后来发现是他效率高),给我安排的工作量也很小(后来才明白主要是我能干的活太少),给我印象比较深的是,他让我做了一个很基础的练习。

题目其实就是我们现在常用的一个函数ReplaceAll(字符串替换函数),即,写出一个函数,参数分别为:数组a和数组b,功能:去除数组a中包含数组b的部分(大家想想字符串替换就明白了,当时我还不知道有字符串替换这个函数,囧。。。),返回:数组c。条件只能使用基础类型,即:int,char,数组,不能使用String类型,不能使用数组copy函数。

现在看来,这个题目很简单,十分钟就能写完。但,当时的我,写了三天,又花了几天修改bug,也就是说差不多花了一个星期才完成。完成后,给老大(组长)测试的时候。老大说,师兄(一个同事,跟我一个学院毕业的,人很聪明)10分钟就能写完。我当时觉得“这么快”,心里只能默默的无语。

在那之后,又写了一些小功能、一些练习,用到了像Delphi比较经典的socket控件——交通灯等等。不过,这段时间所写程序都有两个特点,一、都是很基础的写法,很少用到IDE提供的函数;二、那就是基本没有界面,要么只有一个按钮的界面,要么连按钮都没有的黑窗口。我问老大(组长),为啥都是黑窗口,他的回答是“效率高,稳定性好,很多程序逻辑本身没有问题,但界面有时不稳定,会导致程序不可靠。”我当时,反正是迷迷糊糊的,不太明白,只是觉得有道理。

迷迷糊糊中,又工作过了,一段时间,有一天,公司刘总找到老大说,江西电信的短信 关,需要升级协议,让他安排人开发。老大想了想给刘总说,让我来做。刘总看了看我,问老大“行不行啊?”(满满的都是怀疑,我心里不爽啊)。老大说,“应该可以做”。老大问我“能不能做”,我说“能做”(其实,我连是啥工作都不知道,以前只是听说,给不少电信 关开发程序,但从没见过)。

老大见我有信心,就把以前的代码找到并发给我了。这里需要说明一下,就是服务器程序的代码,没有版本管理,也没有在服务器上,都在老大的电脑上。我们把程序开发好,把源码发给他,他再处理。现在想想都觉得不可思议,但又确实是这样过来的。而老大呢,是一个充满了神奇色彩的人物,电脑里,任务栏一直是98的样式,桌面是纯色背景,文件夹命名,从“新建文件夹”到“新建文件夹(33)”,而且,从来不会因为找不到文件,也不使用window的搜索文件功能。而且,干过不少破解的活,比如公司用的财务软件(嘿嘿),再比如公司后来禁止使用U盘的程序等等都是出自他的手笔。听公司刘总后来说他仅高中学历,所有技能都是自学的。牛逼人物成长例子摆在眼前,让我充满了信心。

言归正传,老大把旧程序源码发给我了后,让我先看看,我立马发现没有界面,启动就一个黑窗口。然后,。。。然后就没有然后了。代码很少,就两个单元(Delphi里的源码文件的一般称单元,似于java里的“类”文件,即java文件),估计也就几百行代码吧,所有的功能逻辑都在代码里!拿到文件后,看了大半天,最后发现看不明白,又看了一天,发现从数据处理上,感觉能看懂,但整体功能上,还是不明白。老大问,我看明白没有,我说看明白一些(站在现在的角度看,其实就是没有看明白),他给我讲新 关的功能的。我听完后,觉得好像并不是很复杂,大概就是一个接收短信转发短信功能。里面大约会用到socket、多线程这些技术点。另外就是,短信协议内容了,当时协议也是公司之前定的。不是像移动的CMPP那样的协议。所以,协议相对来说,其实很简单,就是socket连接上,然后,做一个安全校验(登录),之后,收到内容,就是大概是“长度# 码#内容”这样的格式数据,发送成功后,给一个特殊不可见字符(好像是#200,类似于java里的char(200))作为成功标示回执。

在做这个 关期间,有两件让我印象深刻的事情,由于需要接收短信并转发,在收到回执前,需要临时保留短信,我为此,使用了一个长长的字符串数组(好像是65535,因为不知道还有TStringList这样可以自增的列表),然后,接收短信字符串后,往数组里非空的元素存,如果有短信成功,则把数组中,对应的元素清空。我辛苦的循环,居然,可以保证正常数据存放(没有考虑大流量,因为那时候,觉得65535长度的数组,应该够用了,后来才发现,自己差点写了一个链表)。写了大概半个月吧!给老大看,发现很多bug问题。这时候,老大传授了一个习惯,就是“代码写完了,自己先在脑子里运行一遍。”,具体来说,就是自己从上到下的,模拟计算机数据传输计算。并不是是一个很复杂的活,但很少人会这么干。但往往事半功倍。我尝试了几次,发现自己一般模拟30行,就差不多乱了。另一件事,就是当我把bug问题调整完,发给老大看,他却叫师兄一起看我的写功能。师兄看完后,说了句,“为啥不用TStringList(字符串列表)”,尼玛,我才知道,有这样可以自增存放字符串的好东西。原来系统(IDE)还有这么多好东西。我发现,我写的这代码,使用List能少写很多代码。

修修补补,总算是开发完了,但,测试是个麻烦事情,因为,没有人给我的程序发短信,我也没办法转发出去。必须到生产环境中测试。就这样,就上生产运行环境了。用公司的测试账 ,可以收发短信。终于完成一个功能了,哈哈!

可是,刚放上去,运行不到一天,江西电信的人,就打电话说,收不到短信(因为当时这条线短信业务少,要不然早发现了)。。。。赶紧查原因,查了几天,改了两个边界bug,又放上去了。这次没敢高兴。因为没什么把握。果不其然,不到半天,又出问题了。。。

大家想知道出了什么问题吗?我又是如何解决的呢?后面的开发之路到底还顺利吗?我又是如何度过的呢?敬请关注!我将在下期中,为大家详细介绍!

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年2月8日
下一篇 2017年2月9日

相关推荐