我的技术成长之路比较野,也比较特别,几乎所有的技术都是靠自学。
我从小就喜欢打电子游戏,小学二年级时接触了第一代游戏机,属于黑白机,就是一个非常简单的黑白显示屏,游戏数量也很少,零用钱基本都上交给了它,没钱玩的时候,居然被我破解了,投币口的设计是直筒式的,我就拿了一个铁飞轮投了下去,居然通过了,可以玩。后来类似的东西找不到了,发现更简便的办法,就是拿一根直尺一捅,就可以了,机器基本就被我霸占了,后来玩大了,居然捅给别人玩,最后被老板发现了,书包被扣,让家长去赎回,免不了一顿胖揍。
从哪以后迷上了电子游戏,为这事挨揍不计其数,一把心酸泪啊。最高战绩,街头霸王三代,一个游戏币,干掉其他人三十多个游戏币,几个人排着队跟我对战,老板说我这一个游戏币太值了,玩了将近一个小时多。
94年,高一时,第一次上微机课,Apple,只能玩BASIC程序。老师能教的也不多,不过正好给了我一个名正言顺的理由,买了台小霸王学习机,边打游戏边玩BASIC。
95年买的第一台电脑 486 cpu dx66,4M内存,256M的硬盘,目的也是奔着游戏去的。
玩了一年DOS游戏,那个年代的游戏,需要配置各种EMS, XMS,还得确保640K的低端内存留有足有的空间,才能启动的了游戏。DOS年代玩游戏能学到不少东西,Windows年代玩游戏基本就是玩。
为了这个,自己买了本DOS 6.22的书啃。游戏玩的没意思了,就开始继续学习QBasic,Turbo C, Turbo Pasical.
高二下学期开始,买了本《21天Visual C++入门》,开始自学 Visual C++ 1.0版本,这个是我学的最认真的一个,每天中午要么去我同学家,用他的电脑,把书上个每一行代码都敲一遍,看看运行效果,居然理解了C++面向对象;要么跑去电脑公司、网吧无偿帮忙安装系统,配置游戏。
自学过程碰到许多许多的问题,当时贵阳玩程序的人不多,找不到人问,也没网络条件。只能不断买各种技术书籍,电脑报,大众软件等各种杂志学习。
学C++碰到问题玩不下去时,就改去学Pascal,同样玩不下去,就去学Basic,然后又是C++,正所谓他山之石可以攻玉。学dbase,foxbase 。。。。。
由于时间都在学编程,玩游戏,高考挂掉了,去了贵州工学院(贵州工业大学)读计算机及应用的大专。
发现大学的编程课程,基本都是我自学过了。
大二的时候,遇到贵人之一,教我们离散数学的老师 Bruce Duan, 他发现我VC++编程还不错,就叫我帮他做事。
当时他正好有个项目, 想在 AutoCAD r14 做二次开发,建立房屋结构的三维模型,进行建筑工程量预决算的计算。AutoCAD当时的二次开发要用Visual C++ 6.0。当时除了一个1.4M大小的API WinHelp格式帮助文件,其他什么资料都没有,API就真的是API说明,一个例子都没有。要命的是,AutoCAD我一点都不熟悉,当时大概花了1个多月,硬是把它啃下来,实现了标线网格参数化创建,柱、墙、梁、板、门、窗的建模,以及相应的体积,表面积计算。
去他的公司演示,里面有六七个已毕业一两年的开发人员,在搞Oracle开发,聊天的时候,问起我在做什么,我说在做AutoCAD的二次开发。他们问我 难吗?当时我认为他们是前辈,技术经验都应当比我牛多了,我还没毕业,我能搞定的事,对他们来说也应当不成问题,就谦虚的说 ”不难,挺简单的", 顿时他们脸都黑了,冷场。后来我才知道知道他们每一个人都尝试过,都搞不下去,所以他们集体认为我太傲了,是在装B该遭雷劈。
AutoCAD项目夭折了,也就没再继续,但是至少证明我能做点事,后来开始给我不断给我商业项目做,他只管给需求,用什么技术,如何实现,到交付部署,全由我自己决定,只要我能交付就可以。
从 VB6.0 + VC6.0 为广东省文化厅开发《24式太极拳》多媒体教学光碟;
ASP + ADO + Oracle 为贵阳市国土局开发《土地收益管理系统》;
到大三 (2000年)的时候,为贵阳市煤气公司开发收费管理系统,与贵阳市商业银行对接,煤气用户可以去银行柜台缴纳煤气费用。
用VC++ MFC 写Gateway为银行提供服务,普通WinSock无法应对并发请求的压力,现学Complete IO来处理并发请求,以及如何制定通信包协议与格式,和如何处理包粘粘问题。
ASP + (ATL COM+) + ADO + MSSQL 做管理系统,05年之后流行的AJAX,当时我在ASP上就已经实现了,煤气度数录入,录单员要求在录入的过程中,必须不能有页面刷新动作,只能通过背后异步提交实现。
在2003年之前,都是跟着他做项目,有项目就做,没项目时,就泡书店看书,就是不断在学习;或者是上CSDN (id: zhq2000) 去帮人解答各种问题。在做项目过程中,我从都不需要他担心或管理我该做什么,他也很放心,我能够顺利交付,任何技术问题,我都会自己寻找解决方案。他要做的事就是,每天晚上,到我家坐在我身旁,点支烟,时不时问我搞的怎样了,然后在凌晨两三点的时候,带我去吃各种宵夜。想想真是怀念那个无忧无虑自由自在的时光。
这段经历对我来说,很重要,给了我许多实际的问题,针对问题如何自行制定解决方案,如何爬出各种遇到的坑,交付后的自我回顾,我总会问自己,再来接一次的话,有哪些地方是我不满意的,可以改经的,如何改进,如何优化,有没有另外不同的实现方式。
同时,由于这些项目都是一个人独立完成,也迫使自己不断去寻找如何用更少的工作量获得更多的有效产出。这个也是我后来会从 微软线路 转 JAVA线路 转 Ruby/Elixir 线路的核心原因。
2003年到深圳的第一份工作,是在一个做呼叫中心项目的公司,去面试的时候,公司老板李耘李总问我,会不会Delphi midas, 我说有接触过,不太熟midas, 让他借一本书给我,一周之内我会学会midas,并用它实现一个邮件代理服务器作为demo。一周之后准时交付,获得工作。再过三周后成为项目的主力,带领团队到广州的省劳动厅呼叫中心做现场开发。这个过程也没人需要管理我如何做事,需要的是告诉我目标、方向。
随后我所在的每一家公司,当我的老板是一件很爽很轻松的事情,他不需要费力气管理我,只需不断的给我新的目标及指导,我总会在他的预期内做到最好的交付。
我不喜欢有人管我,喜欢有人指导我。我一直在思考如何才能不被管理,我的方案就是,不断自我管理、自我学习、自我改进,当你做到符合对方的期望,甚至超越期望,你就不需要被管理。不断有人在给你指导方向,是一件非常幸运的事。
因此,我会自己不断去学习新的技术,新的方法、理论,为下一个阶段做积累。技术对于我来说,更多是一种乐趣。挑战自我,创造价值也是乐趣。
敏捷强调的是自管理,突然发现我已敏捷了许多年 :) 。
我也在利用自身的经验,去挑选与我有某些方面类似伙伴一起共事,帮助他们,引导他们。