【原创连载】张国强的故事(一) 小捌哥

(《周五下午》http://www.z5xw.com/ 周刊独家刊载)

周五下午,持续关注IT人的职业发展。

 

开篇:我的故事

我叫张国强,性别男。

我在北京工作,搞IT,现在的工作地点在北京上地高科技产业园区。该园区坐落于北京郊区,四周原先是大片的荒地和农田,我每天跟耕作的农民伯伯们一起,日出而作日落而息。有人说我是码农,其实我不是,我跟农民差距很大,我看见农民伯伯们卖了自己的土地,拿到了几百万甚至上千万的补偿金,开上了奔驰宝马,实现了财务自由,而我的财务自由恐怕还遥遥无期。

我不是码农,我是产业工人,我在厂房里工作。上地聚集着大量顶着高科技光环的企业,比如IBM、百度、联想、金山、方正、汉王,等。

我的简历上写着:7年从业经验,但是我觉得远不止7年,上学期间我还创过业,加起来就超过十年了。

我在简历上写着,“工作经验异常丰富,对IT行业有深入理解和独到见解”。我是看大家都这么写,纯跟风。

我不敢说自己的工作经历有多么丰富,只不过在这一路的跌跌撞撞上下求索之中,腆颜作为一个“过来人”,我能问心无愧地给自己交上一份成长的答卷:即便答卷上的分数不高。

我的职业选择

我是科班出身,大学阶段所学的专业都是计算机。我原以为毕业之后自己就将成为一个“光荣的软件开发工程师”。现在回头一看,当时的想法真是幼稚可笑。

本科时我就读的计算机系分两个专业:“计算机科学与技术”和“计算机应用与技术”,这两个专业除了名字不同,所学的课程内容竟然毫无差别。等我本科毕业,又过了两年,这种状况终于有所改变:两个专业最后合并成了一个。

我上学那会,计算机专业属于热门专业,以为不愁工作,等到本科毕业才发现压根不是那么回事。也并不是找不到工作,而是各种机会摆在眼前,不知道哪种选择才是对的。有人说“先就业后择业”,有人说“先择业后就业”,有人说做一名光荣的程序员,有人说搞IT没前途,有人说考公务员才是正道,有人说还是读研、读博才有前途。

你说我该信谁?

在大三期末那个夏天的傍晚我跟几个哥们在学校后门的“河南面馆”吃完一大碗河南烩面并且就这一碟花生米喝了3瓶啤酒下肚之后,我花了三分钟对我的人生做了深入的思考:我坚信自己应该搞IT,我要学比尔盖茨,我说我要创业,我要做互联网英雄(其实当时世界范围内的互联网泡沫早就破了,搜狐网易在那斯达克才1美元一股,大家都觉得这些互联网公司完蛋了)。

但是父母拍醒我说公务员和考研也得准备,一开始我还不以为然。但是有一天我跟班上的学习委员在打乒乓球的时候起了争执,他打不过我,还说我打球不讲究,故意整他。我说你打不过我就别废话,打球跟人生是一样一样的,不是你整残我,就是我整残你。那哥们一摔拍子说,打球好有什么了不起的,有本事你考研究生啊。我说考研究生有什么了不起的,是个人都考得上。学习委员冷笑,说你考来试试,你能考上我就把我的姓倒过来写。我说,我不但要把你的姓倒过来,我还要把你给倒过来。

结果我就读研了。

我没有后悔读研这个选择。后来的工作证明,“高学历”很重要,它是我们顺利攀登上职业发展更高阶梯的基础,换句话说,很多学历低的人,在往经理、主管、总监、CEO、主任、院长等职位上走的时候,他们都必须先把学历的不足补上,硕士学位、博士学位、MBA都是必要的。

读研比读本科还要轻松许多,所以我就利用课余时间打工,从做技术开始。我依然认为,写代码是计算机专业的唯一正途,做一名软件开发工程师是光荣的,于是我就开始兢兢业业写代码。

从做技术:“软件开发工程师”开始

软件开发工程师的主要职责是写出良好、健壮的代码。好的软件开发工程师首先要有非常扎实的计算机技术基础,特别是对于算法、数据结构的掌握是一名好的软件开发工程师必须拥有的,设计出来的代码复杂性低可以让程序具备极佳的运行性能。软件开发工程师要有很强的编写代码和调试能力,能在很短的时间内查出程序的问题所在。要对新技术充满热情,对于新生事物要有强烈的求知欲。

我从大学开始就一根筋地学技术,这为我日后的稳步发展打下了坚实的基础。我从Pascal开始,然后就是C语言,Java语言,HTML,Perl,Javsscript, Flash动画,然后是Delphi,VB,Borland C++,VC++,VJ++,Visual InterDev,Power Builder,SQL Sewver,MFC,Cisco CNNP,各种网络协议,随着时代的发展,技术的变迁,后来又开始学.NET,AJAX,JQuery,PHP等。曾几何时我用的最多的语言是Javascript和Vbscritp,靠着用这两种脚本语言编写ASP动态网页,做网站,赚了点小钱,足够支付我的一切生活开销,而且常常还可以奢侈一把。

回想那个时候,大家都崇尚技术,当时很多人都看不起脚本语言,人人得而唾弃之。科班出身的人都觉得,脚本语言这种“解释型的语言”跟“编译型的语言”相比,简直就不是编程语言,只有非科班的人(比如物理系的、电子系甚至化学系的那些业余爱好者们)才喜欢用脚本语言。所以其实我当时也很心虚,做网站的时候常常带着负罪感,认为自己是“科班出身的耻辱”,干的是见不得人的勾当,不道德。

但是耻辱之余我又心安理得的麻木,尤其是用我写的代码换回了“大把”的人民币以后。如果按照现在的衡量标准,我可以理直气壮地说我当时的行为是绝对正确的:技术既不是什么神秘的东西,也并非高不可攀,技术就是用来为人服务的,也只不过是谋生的一种手段。所以,如果你说你懂C++你就一定比别人高,或者你说你懂PHP你就一定比别人低,这种见识是可笑的。用现代功利的评判标准可以得到一个公式:

最挣钱的技术 = 最好的技术

我一直都奔忙于各种小公司和学校之间,做各种技术类的兼职工作,甚至还跟几个臭味相投的猥琐男一起,成立了个“工作室”,给工作室起的名字庸俗不堪,我现在都不好意思说。

经同学介绍,我们承接各种软件开发和网站开发的活计,一个工作室成员专门出去跑项目,跟学校的“计算中心”合作,做了不少学校信息化的应用(我也可以厚颜无耻地说我是最早一批搞教育行业解决方案的鼻祖)。

我们承接过一个医疗器械的亿万富翁的一个“医疗门户网站”的项目,以及一个“旅游网”项目,这两个项目都失败了。我们做完了“医疗门户网站”,但是亿万富翁不给钱,说他手下的总经理背叛了他,他忙着坐飞机去讨债,手里没钱。

我虽然没有从亿万富翁同志那里拿到钱,但是他手舞足蹈地向我们灌输过一些成功经验的教导作为补偿。他曾经向我们谈起过他的生意经,当时他主推的好像是一个专治“高血压”的器械,他说,“高血压是富贵病,只有好吃好喝的有钱人才能得这种病,所以他专做高血压,赚钱就要赚有钱人的钱。”从学校出来以后,我也听好几拨人都讲过同样的话,我也尝试过想找几个有钱人去掏他们的口袋,结果一直都没成功,还反被他们掏走了我口袋里的钱。

“旅游网”项目没有成功的原因是,当时的信息化环境不好,大家都只重视硬件而不重视软件,认为花几万、几十万如果买几台电脑、服务器摆在那里才像话,软件这玩意儿看不见摸不着,好像他们花出去的钱就凭空消失了,这种傻事任谁人也不会干。

当然凭着我们这几个学生的关系其实找不到像样的项目,于是我又去找了一些大小公司打工。那时候其实没有什么大的、像样的、“民族软件企业”(貌似现在也没有),全是“小作坊”。在那些公司里我并没有得到足够有益的训练,无非是学会了使用现代化的快速开发环境(IDE)操作数据库,增删改查,是个彻底的代码工人。

在软件开发的过程中,既没有严格的需求分析,概要设计,也完全没有架构设计、设计模式的概念,编码也没有任何规范,当然更没有测试,所以软件质量根本无法保证。但是当时我聪明地认为,代码的可维护性是很重要的,于是我写了很多注释。不幸的是,我不停地修改我的代码,却忘了改注释,最后那些注释和代码完全驴唇不对马嘴,丧失了其本来意义。

幸运的是在进入研究生阶段之后,我开始在一家技术驱动型的小公司打工,从而终结了自己“代码工人”的命运,开始更多关注复杂系统的架构设计层面的问题。这家小公司是由北大计算机系下海的一名老师创办的,他是个技术狂人,曾经主持过全国的“金税”工程项目(该项目是“三金工程”的一部分,即:金桥工程、金关工程、金卡工程)。该老师的COM/COM+技术水平被认为在国内可以排到前三,在软件系统架构设计、可扩展性(柔性)软件应用开发模式、软件组件化模式上有深厚造诣,他自己独立设计和研发了一套软件构件平台,通过提供用户界面的可编辑性和运行时(Runtime)可配置的实例生成(类似于微软公司在.NET框架中提供的“反射”技术)来提供类似编写Word文档一样的应用程序开发模式,让业务人员也可以随时不用编写一行代码就可以构建自己的软件应用。这款平台通过各种共享软件代理机构和组件销售网站面向海外销售(国内没人买,只好卖给老外),所以我们只开发了英文版,使用纯英文的开发和测试环境。

我加入这家公司的时候,微软公司的.NET Framework 1.0刚出来不久,我们设想,构件平台应该能够包容市面上所有的异构组件,自然也应该包括.NET。我们开始研究如何让COM、MFC、.NET、HTML DOM甚至FLASH等互融互通互操作(Interoperability),他们的对象实例可以相互暴露,他们可以通过接口互相获取和调用对方提供的服务。当然这个技术难题很快就被攻克,我们重新构建了新版本的产品,还写了一篇文章投递给《程序员》杂志,当时接待我们的编辑叫霍泰稳(这哥们后来好像创办了InfoQ中文站)。我们讨论之后决定写一个系列,在《程序员》上连载。这篇文章不但被《程序员》杂志发表,而且还被收录进了微软的MSDN文档库中。

在所有的那些小公司做兼职的经历让我得到了一些收获,包括:

1)      掌握了最新的、紧跟时代的开发工具和编程语言,能快速开发出“各种”应用程序;

2)      对复杂软件架构设计有了较为深入的理解和实践;

3)      在英文的操作系统、开发环境下进行开发,阅读英文技术文档;

4)      挣了点小钱;

自然有得必有失,由于我不注重专业基础知识的学习(我旷课),所以我的专业基础知识很不牢靠,这导致我只能以应用系统开发为主,缺乏基础性算法设计的能力。

(《周五下午》周刊独家刊载  未完待续)

原文地址:https://www.cnblogs.com/TZSoftBlog/p/2218137.html