Tinyfool的Blog

这就是我,Tinyfool,郝培强!身高180,体重240,标准的中年老胖子。 有妻有女,无房无车,现居上海,程序员。

Browsing Posts tagged 开发

书接上文《在路上—Tinyfool的程序员生涯(大学篇)》。

在学校最后的日子

前文提到,大三那年我差点被学校开除。那次我的父母也被学校召唤了去,那对他们来说是一次耻辱的旅行。

在我们机械系的办公室,他们听到的我们系的老师们给他们讲述我是怎么样一个不上进的垃圾,如何拖了整个机械系的后腿。于是他们对我已经出离失望了,所以没有一点点愤怒,只是失望。

不过,在他们拉着垂头丧气的我去学校门口饭馆吃饭的时候,路遇了很多跟我差不多大或者比我还大的学生,对我很客气的说,郝老师好。这是因为,就在不久之前,我给学校的最大一个系的学生们做过几场Office的培训,至少有400-500人参加过那个培训。那之后,他们的心情和表情明显有了好转,似乎明白了我一直以来都在想些什么,我有什么样的追求和梦想。

那天晚上他们和我有次长谈,他们说我学机械学不下去也无所谓,只要我以后有自己的饭碗,不管做什么他们都支持。不过大学如果能凑合上就争取凑合上完,毕竟只差1年就毕业了。之后,他们找了一个对我们学校来说很牛的关系,在加上我们系里面个把还算喜欢我的老师的配合,我顺利留了下来,没有被开除。

那年假期,他们还拉着我去了鞍山西道(注一),带我见了一些招聘程序员的网站,问他们要不要大学没毕业的人之类的。有些乐意招聘没有学历的人,甚至对我还有些兴趣,有的所用的技术我一无所知。那些网站的办公室都有点破烂,我也不懂他们怎么能挣钱,去了那一趟后其实我更加迷惘。不过不知道我当时去看过的公司,有没有现在已经大发了的。

之后就熬到了大学毕业前,最盛大事件的就是所谓的双选,不过我从来没进入过我们学校任何一个双选场次,因为我对未来很迷惘,不知道是该进去表现自己,还是不进去争取不被他们选走。

刘老师曾经问过我对未来有什么想法,我说没想法,那是非常真实的,我真的很迷惘。他知道我没有参加双选后,问我想不想留校做网络中心的老师,还想推荐我去他的一个大款朋友的公司里去,我都未置可否。每天在我都在幻想未来会是什么样子,期望有张明确的路线图掉在我的桌上,如果照着做,一个月就能做出来巨牛无比的网站或者是软件,然后被雅虎或者微软收购,一夜变成大富翁。

最后,我没有选择留校(以我的成绩也许也很艰难,不过如果动用关系也许又不难,谁知道),去他朋友的公司,也没有参加双选,没有任何就业协议。

所以,我成为了学校就业率里面的一个污点,老师们鼓动我们这些污点去成都参加一个大型招聘会,还有些已经签了协议想追求更好机会也一起踏上了征程。那两个星期里,我们每天大早,走到成都的各大高校,吃各种好吃的早点,然后钻进各大招聘会,扔一份简历。期间,我还冒充N个同学,帮他们面试编程方面的工作。但,我自己就投了一两份。那段时间过的很快乐,我喜欢在成都那样的城市里面闲逛,但是也很短暂,最后,我没有任何就业协议的离开学校去做一个老师的项目。而这个项目就在天津,就在我父母的单位,中海油的塘沽分公司,当时叫做渤海石油。

项目还没做完,我就毕业了,收到了邮寄来的毕业证。

项目做完后,我跟老师交接了一下,回到了家里。之后三个月,天天都在上网,聊天,看贴,写程序。三个月后,没有作出什么伟大的程序,也没有雅虎和微软的高管来电话找我。倒是我妈去交电话费带回来三个月900多块钱网费的账单(那时候是01年,我们那边还没有adsl也不能包月),大发雷霆,甚至用扫把打了我一顿,说我不去上班只知道在家里乱花钱。

第一份工作

那天晚上,我再次上网找了一个聊过几次技术问题的天津网友,问了问天津哪里有招聘会。第二天,打印了几份简历,我就去了那个招聘会。我进门口看到一家公司写着找网管,凑过去聊了几句。来招人的是一个很帅的人事经理,懂点技术,他说需要网管,能写程序更好,他们是一个电子厂。我觉得聊得很愉快,留了一份简历,留了家里电话,就离开了招聘会,回家。

到家,我妈告诉我已经来电话说我被录取了。她很高兴,虽然我的工资只有1200,而且要离开塘沽,去天津市区上班。

网管的工作,最痛苦的部分就是经常要趴在别人的桌子下面,去重接那些仅仅是松动的网线,抑或者是把打印机关了再开,开了再关,检查有没有卡纸等等。

我乐意去做这样的工作,一方面是我不知道以我当时的能力经历,能找到什么更好的工作,也不想去尝试;另外一方面,我觉得偶尔劳筋骨也是有好处的,对于我自己的发展是有利的。从01年到03年离开天津前,虽然也做些软件开发,但我从来没有甩掉网管的头衔。

其实就算是这个网管工作,刚刚开始做的时候,我觉得自己也没有足够的能力,怎么做掐水晶头,做网线做电话线,等等,我都是到了公司现跟人学的。网管的工作非常枯燥无味,但是对逻辑分析能力的培养还算是有点用处。我经常要在对某个老机柜完全不了解情况下去解决里面出现的线路问题(连线上的标签都丢光了),要帮助别的工作人员恢复系统和数据,要用一套复杂的流程复位打印机,要用更复杂的流程复位税控、报关等设备,甚至因为我们直接跟国外某大公司业务往来紧密,我还曾经必须多次在国内的病毒中心报告某病毒之前,人工隔离杀死病毒,恢复被病毒干死的防病毒系统等等。

但除此之外,我是相对自由的,可以参加公司的开发工作,参与新产品研制。

那段时间,因为身份比较模糊,我没有主要担负任何产品的设计。不过因为比较爱扯淡,经常作为我们研发部领导的顾问,什么项目都掺活一下。

比较有意思的项目是一个跟手机内部排线插座接口的项目。那时候,手机越做越小,手机前盖后盖之间排线连接的插座也越做越小,而且结合很紧密,打开很费力且容易损坏。所以我们的手机测试仪连接手机上盖下盖的时候,反而不能用原装的插座,需要做方便接触,且对插座完全无损伤的接口。原装插座非常小,但是上面有20-30个触点,传输数据和取电都需要的。我们当时的方案非常的复杂,用一个有机玻璃方块作为底座,上面打上跟触点数目对应的孔,放置上直径是1毫米,甚至更细的弹簧针(注二)产品试制的时候,损坏了很多钻头和弹簧针,最后才成功。所以仅仅就一个简单的接口,即使不考虑试制时物料的浪费,成本也是非常高的。

后来这个接口终于成功了,但是还存在两个问题,就是生产成本很高,而且损坏的太快,寿命不够长。后来我发现,手机前盖后盖的连接插座,是不一样的,一个凸出,一个凹进去,凸出的那端,触点在插座的连接平面上也是存在的。于是我想到了一个很简单的方案,就是按照连接插座的尺寸和触电分布,定制柔性电路板,在电路板上作出一样的触点,然后在柔性电路板下垫一个橡胶垫,把凸起的插座按在电路板上对齐,就会很稳定的接触上。这样就省掉了一半的复杂昂贵接口的成本,凡是凸起的插座都可以用这个方案来解决,而这样的一个柔性电路板,才几块钱的成本。当然如果是凹进去的那一端,就仍旧需要使用昂贵的接口。我提出的那个方案不算完美,不过在很多产品的测试仪上都使用了,在我离开那个厂子的时候,还在一定范围内使用。

当时我立项并一直在做的项目是,我想做一个基于GBA的GPS导航仪。为了这个我学习了GBA开发,翻译了GBA的硬件手册,也认识了很多同样有志于GBA游戏或者应用开发的朋友。有一个哥们叫azhong,他也翻译了同一本手册,我们成为了朋友,经常聊GBA的技术问题。前两天,他通过另外一个朋友知道我来到了盛大,在公司的内部通讯系统里面找到了我,原来他05年就进入了盛大一直干到现在,现在已经非常有成绩了。我们两个人在8年后第一次见面,真是内牛满面。

而这个导航仪项目,我也算初步有成果,我把一个细节很清楚的天津地图扫描到电脑,最后在GBA上面实现了对地图的浏览。GPS芯片和GBA的连接,数据通讯,在硬件组的同事帮助下也搞定了。不过这个项目最后还是没有什么太多结果就结束了。我曾经的梦想是,给GBA加上外置的键盘,做上面的PDA程序,地图程序,等等。

后来,我零星做了一些GBA游戏开发的尝试,也都限于还可以的DEMO而已。那时候,我曾写过一个极简单的DEMO(注三),放了一张很沧桑的大木船的图片,木船移出屏幕后,打出几行字,写着“你的心是不是还想着远航,欢迎加入GBA大航海开发项目,布拉布拉布拉”。就这么一个简单的DEMO,当时吸引了百十号人参与,大家都非常热情,有人写出来了数万字的剧情,然而我,在巨大的群众热情面前,才发觉自己连带一个最小的三四人团队的经验都没有,汗流满面,慢慢的没有任何动作,拖黄了这个项目。上个月,在Twitter上面,我还遇到了当年写了上万字剧情的兄弟,聊起往事,羞愧难当。

后来随着上游厂商的erp化,我们也开始选择购买还是开发erp,后来的结论是买了其中的一个erp。但是公司的工资系统和考勤系统是自己开发,当时我是实际编写者。我从那时开始正式使用Borland C++ Builder,因为它显然比VB强大,而又是C++跟我当时的学习方向比较吻合。这两个系统其实做的都很垃圾,不过在当时我还是很自负的,觉得已经做的不错了。当时我甚至想过“不过话说回来,中小公司的各种软件实在是一个巨大无比的市场,我要是有精力的话,我一定要把现在这个简单的工资计算软件做成一个非常强大的人力资源管理系统,中小公司的钱不挣,天理不容啊! ”。而且还认认真真的分析了当时公司面临的一些管理问题,有文章为证“公司人事管理一体化工程-前言”。

但是后来也许是因为我这两个平台的开发进度不够快,或者对其他部门的需求满足不够,也或者是其他的一些我不知道的原因,公司最后倾向于自己购买人事工资管理软件,虽然我觉得他们购买的产品并不好,而且太贵。

在此之后,也许是因为这些事情,也许是公司大了需要更复杂的网络管理,公司的人事总监对我的工作范围做了调整,要求我只做网管,不参与任何新产品,考勤软件也交给别人去接手。我要求专职开发,不再做网管,他也以我招聘近来的时候主要任务就是网管而拒绝了,我积愤难平,觉得自己虽然没有做成什么大项目,在各个项目里面还都是起了些作用,而且自己的发展方向也不想被限制在网管上,郁闷的干了几天,离开了这个公司。

在2年半的时间里,我成为了一个还算凑合的网管,了解了一点公司内部网络管理的知识,其实后来的职业生涯里面基本上这些都没有用上。玩了2年左右的GBA开发,后来,我还做了几年,后文会提,不过基本上也跟屠龙之术一样,没有帮我赚到什么钱,也没有作出什么伟大的软件或者游戏。用Borland C++ Builder做了相对复杂的人事管理、工资和考勤的软件,工资管理实际上是我用BCB真正开发的一个真正的程序,真正的有还算复杂的界面逻辑,用上了Sql Server数据库等等。期间为了帮助其他的项目,我还研究过PC摄像头,研究过Windows驱动开发,但都没有任何成果。这些日子也不算完全蹉跎,但是回想起来在技术方面进步很少,在公司里面,我一直是什么都会一点的,那种多面手的形象,但其实又没有什么东西能搞的比较好,相对失败吧。

我当时也有过反思,也许一开始不该去一个小公司(注四),也许应该去一个牛程序员多点的地方,自学找不到方向,很痛苦,进步也很慢。当然,如果你仔细看,你就知道我其实根本没有挑选过公司,只是去了在招聘会上第一个看到的,且收了我的简历的公司。

敬请期待续篇《在路上—Tinyfool的程序员生涯(职业生涯篇二)》
========================

注一:基本上可以理解为天津的中关村地区

注二:我以前扯淡机械制造工艺的时候提到过这个针,全部从日本进口,一根就几十元,虽然直径只有1毫米甚至更小的型号,但是是中空,带有弹簧和两边的针的,结构基本上类似于传统的表带两头的弹簧针,我是用显微镜看过不慎折断的这种针的结构的。直径这么小,它的加工工艺是如何的,我曾经跟一些国内不错的机械厂的技术人员聊过,完全无法想象。即使是我们用来给有机玻璃方块打孔,所需要的机床,和钻头,也都是跟我们合作的一个天津大厂的最顶级设备了。

注三:写这个DEMO时,遇到技术问题我还写了一篇Blog,是我技术Blog的第一篇。现在看出写Blog的好处了吧,一转眼就算是7-8年了。

注四:其实厂子也不算小,技术部10来人,办公室人员100来人,工人上千。不过软件开发力量不多,能直接教我的人几乎没有。

缘起

这两天,有人让我做为一个牛人写点回忆录。

这件事情吊诡在于:

  1. 其实我写过回忆录,只是那是很早以前,写在《Tinyfool的开发日记(静态已不更新)》里,叫做《我这10来年(Tinyfool的程序人生)》,写于2004年。以现在的我看来,那是一篇很装屄的东西,跟我写过的大多数东西都一样,刚写好的时候沾沾自喜,几年后再看的时候羞愧难当。
  2. 此外,我也不是牛人,虽然随着年纪越来越大,朋友慢慢都变成了牛人,也认识了一些新的牛人朋友,但是我仍旧不是一个牛人,也谈不上成功。

不过,我还是愿意写点东西,原因之一是我有点微观历史情节,总希望自己的东西未来可以给某段历史做个注脚。此外,成功经验我虽然没有,失败教训我是有的,可以分享下,也不算是白失败一下。

题自

几年前,XuYou老师(@mathena)假期回国的时候送了我一本英文原版的《Founders at Work》,他说希望我和Huoju(@ virushuo )可以学习书里面的伟大的公司的创始人们作出伟大的事业来。说起来惭愧,我连第一节,也就是PayPal创始人的故事都没看完,这可能也是我们的事业并没有伟大起来的原因之一吧。但是这个书名,这种聚一堆大牛来忆苦思甜的模式,我都喜欢得非常。所以,当图灵准备引进姐妹篇《Coders at Work》的时候,我就很自不量力的申请了其中Joshua Bloch访谈的部分的翻译。谁知道,居然申请成功了,翻译的一个月非常痛苦,我当时才迟钝的发现,翻译技术文章是一回事儿,翻译技术大牛的访谈完全是另外一回事儿。

这两天,图灵开始征集这本书的译名,我想到的是《码农在路上—大牛们的程序员生涯》,估计不会被采纳,所以自己先废物利用下,用做此文的标题吧,不过请大家注意,我不是大牛,看此文时千万注意这点,此外,我不是在讲成功经验,我基本上是告诉大家我是怎么一路二把刀下来的,希望大家不要走我的弯路,有些是因为没有人指引,有些是自己执迷,有些是运气不好,有些是愚蠢。

我的成功评价标准

每个人有不同的成功标准,文章既然是我写的,我就从我的角度谈起,我的维度很多,一一考量。

吃方面,我每天想吃肉,想吃菜,想吃巧克力,想吃米饭,甚至想吃大虾,螃蟹,反正是能满足我口味的东西,我都吃的起。偶尔请老婆请朋友吃顿人均50-100的也请得起。那么就算成功了,暂时我对价位更高的食品也没有什么急切的渴求。

穿方面,我没有讲究,衣服裤子舒服就好,鞋子不漏就好,有了老婆以后,这点也很成功,很幸福,总是穿合身的衣服和鞋子。

住方面,我们家在天津有房子,虽然是父母的,但是还算够大,我和老婆还有孩子跟父母一起住,也能住下。不过自从03年离开天津以后,我就没有在那边长期居住过了。03年刚到北京的时候住在公司的宿舍(就是公司在东北旺租的民房,三室住五人那种),后来跟大牛yayv老师(@yayv)同住过一年左右。后来我父母来过北京住过2-3年,直到最近我搬到了上海,老婆也来了,我们两人现在住70多平米的一个两室。说起来,租的房子大多数时候都满足了我所有的需求,唯一的烦人在于这么多年来搬家次数太多,而我一到搬家的时候就会患得患失的,扔东西不舍得,搬东西又懒得搬,经常会痛苦很久。03年到找到老婆前,我曾一度以为自己可能会单身一辈子,所以,从来没有考虑过买房子的问题。同期,我的一些朋友买了房子,有些还住在里面,安顿了很多年,有些最近卖了房子套了很多现(比如huoju)。如果从投资角度来看,我没有投资房产是失败了,于是即使自己的收入虽然一直增长,但是总资产的增长总是大大低于身边朋友的CPI,当然也低于整体社会的CPI。然而这是必然的,我当时觉得会单身,所以不买房也是一个我认为很好的选项。其次,我一直没存下什么钱,当时家里也没有多少能力资助我,所以,即使我穿越时空回到03-05年,对自己大喊“记得买房子啊”也是没用的。当然同理,对我自己大喊“要买百度/google/Apple股票”也不会有任何用处。所以,此项我失败到家,有了老婆孩子,但是还没有房子,不能让她们跟我安定的待在一个地方,总是搬来搬去。

行方面,我现在的主要交通工具是自行车,每天骑着上班骑着下班。偶尔打车,或者蹭huoju和yusheng老师的车。最近几次大雨,我都坚持了骑车来回,有一次连雨衣都没有,浑身湿透;而最近一次,虽然穿了暂新的从迪卡侬买的短款雨衣,但是因为没有雨裤,上半身完全没事,裤子的大腿部分全部湿透。汽车以我的收入来算,还是可以买得起的,尤其是如果以yusheng老师作为榜样的话(他的二手切诺基才两万买的)。但是,我和老婆都没有驾照,我懒得去学,她也不想去。而且在上海,上牌照貌似是很贵的。而且,按照我老婆的消费观念,不买房是不能买车的。所以,这项也只能算失败的。

消费方面,单身汉的时候,我的消费能力还是很强的,买过16M,32M,128M,256M的各色mp3,都是在最贵的时候买的。买过GBA,买过一个Moto手机,6-7个Nokia手机。买过一个iPod Nano,两台台式PC,一台笔记本PC,一个Macbook。有了老婆后,给她买了一个Macbook,两个手机,给自己买过一个Nokia E61i,买过一个Wii,最近买了一个很贵的iMac27,还买了一个iPhone 3G(之前参加TechWeb年会,抽奖抽了一个iPod Touc,要感谢主持人炳叔)。这项难说成功与否,总之,买不起房子的很大原因在这里面,当然最重要是房价一直在飞涨,稍等等不买,然后不发大财就不会再有机会了。因为有了老婆孩子,以后可能要抑制一下这些消费了,不过很难,我最近不是买了iMac27么?之前还买了个佳能的450D,虽然我顶住诱惑,什么镜头都不买,只用标头。

技术方面,我的技术路线一直都很摇摆,从高中算起,94年到现在15年多,我换了无数的技术,最近比较关注Mac/iPhone/iPad平台。没有一个技术钻研到了足够的深度,也没有作出任何被广泛使用的程序。所以只能说很失败。

挣钱方面,我刚毕业的时候工资是1200,后来一直在涨,目前为止还没有在职工资下降,或者换了工作,工资下降的情况。但是,CPI在一直飞涨,虽然一般生活也算是越来越好,不过房子完全没可能买起。工作快10年,从来没在一个即将上市的公司待过,也就没有得到过期权套现之类的好处。外包程序没做过几个,收益总体也很少。自己创业的公司也没有被收购的,也没有被VC的,也没有上市的,所以,基本上还是很失败的。

所以,总体来说,我的工作生涯10年,还算是挺失败的;写程序15年,也挺失败的。

我的程序员生涯(大学篇)

高一(94年)正式接触电脑的时候,学习的是GWBASIC,在闭塞的环境里,不知道有PASCAL也不知道C/C++。当时天津计算机奥赛选拔,我参加的时候,没有BASIC的题目只有PASCAL,我一个关键字没没见过,胡乱答完了题目,而且得了第一。哦,不是,那是逗你们的,如果是大牛的回忆录有可能,我的不会有那么牛屄的,很简单,我根本没有名次。高三临毕业的时候家里给我买了电脑,那时候看到的最亲切的就是Visual Basic 3.0,因为它也是Basic,因为它可以很简单拖拖拽拽,加上点代码就可以写出个程序,当然最重要的是它有中文的帮助,学习起来比较简单。当时,同时买的盗版盘里面,还有Delphi2.0,虽然看着更酷,我也很喜欢,但是我实在是没有学过PASCAL,总是用不惯Delphi。

高中三年,我都和一个同学一起看一本叫《Borland C++ 3.0中文手册》的巨厚无比的书,然而我真正看到Borland C++ 3.0的时候,已经是在大学了(97年)。

整个大学里,我主要是在用Visual Basic写程序,自觉是Visual Basic绝顶高手。那时候,有位师兄叫李阳东(他现在在支付宝做架构师),天天说我用Visual Basic不长进,应该学习Visual C++,我当时不明就里,因为他最爱看的书是《深入浅出MFC》,我被彻底弄糊涂了,这东西到底是Visual C++呢?还是MFC呢?用VC写过几次程序,不习惯里面的很多概念,MVC啊,序列化啊等等,最后也没有真正碰过。不过因为Visual Basic有诸多限制,而且我喜欢看手册,所以大学期间我是吧Win32API手册看了无数遍的,算是把Win32API的逻辑搞得比较清楚了吧。也许我一直学不进去Visual C++原因就在于它的手册无法让我学会它吧。

大学的时候,比较有意思的是,有一次我用Visual Basic写了一个程序,图标跟Visual Basic开发环境完全一样,然后有一个随机数来选择,有1/3的概率会弹出一个对话框说,“警告:微软正版检查程序发现,您正在使用的Visual Basic是盗版,一切法律责任自负”;2/3的几率是执行我改过名字的真正的开发环境的可执行文件。然后,我把这个东西安装到另外一个也用Visual Basic的师兄机器上,他真的被我骗了,很正经的分析这个软件是怎么检查出来盗版的,还大惊小怪的跟我们每个人说。其实我们那时候还没有接入互联网,局域网也玩的不熟(我参加学校的一个计算机知识比赛的,因为不知道同轴电缆的T型头叫什么而令我们机械系惜败的,而那次比赛后我倒是挺有名,因为机械系三个参赛人员,只有我说话…),那时候其实微软也没有激活之类的机制。

去信息中心混之前,中间有一个阶段我非常痴迷Borland C++ 3.0,那时候,世界上很多著名的东西都是用它写的。Borland最早提供的DOS下的图形库很差,有人写文章说明怎么用320×200的256模式画图,那时候多激动啊。现在的年轻人可能无法理解,DOS时代巨多流行的游戏都是这个分辨率下的,知道怎么在这个模式下画图就等于知道怎么做游戏了。于是我在那个模式下重复发明了很多轮子,自己的画线函数,方块函数等等,但是就是没做出来游戏。后来,又有了DOS下VESA显卡的驱动方法,每个人就更激动了,你的DOS程序也可以像Windows那个样子了,每个人都在写自己的窗口库。最有名的是UCSDK,我当时自己也在写,从头研究,研究一个方块的四个边框和背景的颜色差异,怎么作出Windows的按钮的效果。我当时写了一个仿Windows界面的画板的程序,为了保存文件,我还去找BMP和PCX的文件格式说明,那时候找点资料好难啊。所以那时候CSDN出的《程序员大本营》光盘大家都非常喜欢,觉得是无价之宝一样的东西。

现在想那时候真是愚蠢,很多同学没见过Win95(学校机房默认都是DOS,当然很流行自己裁减Win95,然后用最少的磁盘带到学校机房,安装上去,玩上面的记事本和画图程序。我们学校最高记录是三张软盘搞定。很多同学,2年后,学校机房大面积换代以后才真的用过Win95),在学校痴迷DOS下模仿实现窗口效果,我高三毕业前有了电脑就见了Win95,我也痴迷在DOS下模仿实现窗口。那时候每个人都以为自己可以写个Windows出来,那下面有多少底层服务,多少内核代码,多少图形界面代码,多少人月,我们都天真的漠视,甚至想都没想过。那时候,我们国家整个软件行业都以为软件强国梦就在眼前,觉得UCDOS/Super DOS远胜微软的PDOS,觉得WPS在,微软的Word就没戏。

98-99年左右,我们有个师兄给化工系做网站(他现在是腾讯的高层),得到了一个拨号上网的帐号,启了我的互联网的蒙,那时候第一次知道了Google,ICQ,OICQ(现在的QQ),163等等。

于是我就开始学习php3和Asp,貌似是先学php3的,那时候拓展名默认还是php3。但是因为我有Visual Basic的基础,我更喜欢Asp一些。当时还学习了一点Flash,那时候也是Flash的早期版本,4.0好像是。那时候学校搞了一个网站设计比赛。我就用Flash画了一个城墙,找了一个矢量的鸟,网页一打开鸟会从一头飞到另外一头,然后,城门左边有个告示,大概说我这是个什么什么网站,好像是叫微尘网城之类的(我很喜欢微尘这个词,大学的时候装屄的方式就是什么什么都叫微尘,当然没有几个人看到了能想到这个词源自佛教中一粒微尘中也有三千大千世界的无限装屄的境界,直到后来出现了个青岛微尘),城门右边是一个登陆框,输入帐号密码后,进入后面一个界面,是一个简单的论坛的样子。实话说,做的还是挺好看的。

不过可悲的是,那时候都是用台式机,我用软盘带着我的网站去参赛的时候,学校的机器Flash版本比我的机器的低,貌似是3.0。动画效果都在,样子也基本对,但是输入框之类的都看不到,大概好像是Flash 3.0还不支持那些输入控件。我演示的很失败,本来很灰心,不过下面有个和蔼的略胖的男老师说,兼容性有问题没事儿,你就说说你要实现的效果就好了。于是我人工跳转到了后面的论坛,把我所有的设计都讲了一下。

最后得了一个最佳技术奖,因为除了我以外,所有的参赛作品都是纯页面,虽然有的还真的算好看。那个男老师是信息中心的主任刘老师,他甚至想让我拿整体第一,因为在他眼中,只有我那个能叫网站,其他的都是网页。不过其他老师都不同意,所以给我专门单开了最佳技术奖。比赛后,他找我聊天,让我参观信息中心,问我有没有兴趣搞学生网站。那时候,我们已经知道四川的一些学生网站,比如成电的一个网站(当时暴有名,现在记不得叫什么了,离开学校就没再关注了),川大的望江楼等等。

于是在大学的后三年左右,我就一直泡在信息中心的一个办公室里面,24小时有网络,带领了几个同学搞起来了一个学生网站我心飞扬(曾经也是教育网排得上号的不错的学生网站,唉),我甚至经常逃课,一天到晚泡在里面,甚至晚上不回宿舍等等。

那是一段非常野蛮的成长,非常快意,也非常迷惘,我也没真的学会太多技术。因为完全没有人管束,自由自在的想学什么学什么,学过3DMax,当时想做变形金刚的动画,……没做出来。当时学校没有学生邮件系统,我又搞不懂Exchange Sever,当时老师们考虑过一个邮件软件,不过性能貌似不好,名字我已经记不得了。而当时Win2k默认带有一个Smtp服务,可以接收邮件。我就用Visual Basic写了一个pop3服务,可以把Smtp服务收下来的信通过pop3收走。整个程序是跑通了的,不过那时候我连多线程都不懂呢(毕竟Visual Basic当时不支持,我又没有玩Visual C++),所以程序是基于事件模型的,同时只能有一个人收信,其他人只能等待服务处理完另外一个人。学校最后当然没用我这个方案,当然我也没有真的那么提案过,只是想想而已。

那时候,我们的网站提供了校内新闻,电子书(刘老师用离线浏览器抓下来,用sed处理的。几年前,我用类似方法帮朋友做过垃圾站),mp3下载,论坛等等。除了论坛用了ubb,其他都是自己开发的程序。我们有3-4个人做程序,一个美工,一个外联。外联的这位美女现在在某卖电脑的世界五百强公司做客服方面的工作,当年,我对她可寄以厚望,以为她在那家五百强至少可以做到亚太区销售总监之类的呢。我们做mp3下载的时候,一度没有新歌的mp3来源,她单枪匹马的在逛街之余让当地最大的一家音像店,同意免费给我们提供所有新歌的CD,而我们在下载页面给他们做点小文字链广告就成了。那时候,国内网站靠广告能盈利应该还不多,我觉得她当时简直就是个商业天才,可惜现在只作客服方面的工作了。

当时我们还提供免费空间服务,为了解决免费空间和mp3下载的空间问题,老师还把一台100G硬盘的sun5000服务器的管理权限给了我。那是多么巨牛无比的机器啊,它待的屋子二十四小时有空调吹着,而我们学生宿舍到了我毕业那年才有的风扇。可惜那时候我几乎一点Linux/Unix的经验都没有,就把一堆mp3上传到了sun5000了事儿,真是暴殄天物。

我的学业

我小时候对一切机械都感兴趣,据我父母称我2-3岁就把家里缝纫机给拆坏了,我完全不记的,我记忆中,拆掉的闹钟,收音机就不计其数了。上学对物理、化学、最感兴趣,后来对电学开始感兴趣,再到后来喜欢上计算机,一切实体的东西都不感兴趣了,就喜欢那个屏幕和背后的逻辑。

从小学到高中,我都还可以算做成绩优秀的好孩子,中考的成绩,如果不计算体育和政治的话,我可以排到全校第一。曾有不少老师对我寄予厚望,不过我高中后面一年实在是太逍遥,高考下来自己的估的分数连专科都没有过。不过好在下来了一看还在本科线内,填志愿也完全懵懂,那时候我爸带我找了个明白人去问,人家问我喜欢什么。我说计算机,他说计算机和英语以后是工具,人人都要用的,还是报点实在的专业好。于是最后报了机械系,选了西南石油,因为我家是石油系统的。当然也怨不得人家,现在不了解,反正我上大学的年代,报考计算机类专业的分数要求都是很高,我的分数报考计算机专业的话,绝无可能录取。

上了大学,一开始还好,我上高数课前半年,如鱼得水,发现凭着高中的底子,一点不听讲,中期就考了第三名。然而这是大悲剧的开始,后半年我也不好好听讲,经常旷课,最后完全没有弄明白微积分。最后,补考了。这一门没有学好的结果是,所有需要微积分基础的课程,比如公式里面有微积分符号的课程,我几乎都要补考。大三那年,貌似累计了11门补考。学校本来都要开除我了,后来家里找了很硬的关系疏通,我才得以混到毕业。

整个大学生涯,就是革命史曾经考过优,工程化学是优以外,其他课程大多都是刚刚及格,或者还不及格。

我倒不是多悔恨那么多的旷课,我很悔恨没有学好高数,令我没有机会学好物理,工程力学等等我本来是很有兴趣的学科。

下篇《在路上—Tinyfool的程序员生涯(职业生涯篇一)》。

查尔斯·狄更斯老师的《双城记》里有句非常著名的话,我每次看到都心潮澎湃,所以看了无数次《双城记》总是在那两句话前后打转。心说,开头就这么好,正文无论如何也无法让你觉得精彩了吧?

原文是,“It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of Light, it was the season of Darkness, it was the spring of hope, it was the winter of despair, we had everything before us, we had nothing before us, we were all going direct to Heaven, we were all going direct the other way–in short, the period was so far like the present period, that some of its noisiest authorities insisted on its being received, for good or for evil, in the superlative degree of comparison only. ”

译做:“那是最美好的时代,那是最糟糕的时代;那是智慧的年头,那是愚昧的年头;那是信仰的时期,那是怀疑的时期;那是光明的季节,那是黑暗的季节;那是希望的春天,那是失望的冬天;我们拥有一切,我们一无所有;我们全都在直奔天堂,我们全都在直奔相反的方向–简而言之,那时跟现在非常相象,某些最喧嚣的权威坚持要用形容词的最高级来形容它。说它好,是最高级的;说它不好,也是最高级的。”

我认为对于程序员来说,我们正在经历最美好的时代,当然也是最糟糕的时代。

美好的原因在于,这是一个充满机会的年代,近十年每次我们以为世界一切尘埃落定的时候,就会出现新的惊喜。如youtube、facebook、twitter等等,甚至包括了iPhone以及即将上市的iPad。世界上无数聪明和勤奋的人们正在努力,告诉我们一切还早,我们还活在一个迅速发展着的世界。只要世界还在迅速发展,谁知道你会不会就是下一个twitter、下一个iPhone的发明者?甚至是下一个马化腾,虽然现在腾讯如日中天,但是如果时间倒流到99年,甚至01年,大多数心中可能还是会觉得那只是个玩物吧?

然而,糟糕其实也正在于此,前面的机会多,陷阱就多。人们天生就是风险躲避者(某个名人或者是名著里面说的,可惜记不清了,无法拿来掉书袋了),这也许就是独裁百试百灵的原因。人们总害怕错误的选择,所以变得犹豫起来。现在这样的时代,你就有无数可以犹豫的事情,因为很多事情还在发展中,不知道谁会笑到最后。最近仍在胶着的战斗很多,如,Wifi和3G(我认为赌局还没开场),微软和Google,微软和苹果,苹果和Google,苹果和Nokia等等等等。

这些战斗的结果,对普通用户来说,只是买什么产品,用什么产品的问题。对开发者来说则是抱谁的的大腿,跟谁混的大事儿。

所以我们这些久经沙场而没有发达的家伙,总是对面前的选择感到胆战心惊,甚至养成了父母问你吃什么都会大发雷霆,大喊“不知道”的选择恐惧症(我的症状非常严重,出去吃,绝不点菜,在家里一律随便。但也有可能是看Monk看多了闹的)。

之前我和赵姐夫(@Jeffz_cn)霍炬(@virushuo)方块(@KrzyCube)还有很多人在twitter上面大侃过一次这个问题,有兴趣的可以看看Cat Chen的评论、以及赵姐夫的整理、和方块的整理(我们的讨论很长,但还算有趣吧)。

现在,我已经远离了Windows阵营,做Web开发用Php,做客户端只做Mac客户端软件,还做一些iPhone开发。我认为每个程序员都应该至少用一用Mac OS X。

原因如下:

1、操作系统的竞争到了一个新的阶段

Windows虽然仍旧是实质上的老大,但是操作系统的战争早已不是10年前的样子。随着Web应用的大行其道,很多人的电脑,都已经成了名符其实的上网本或者上网机。

Window/Mac OS X/Linux/Unix几大主流平台上都有了流行的Web浏览器,只要你不是一个执着的IE粉丝,那么如果你的主要任务是Web浏览,现在几大操作系统的体验已经非常接近了。其他的基于互联网的流行软件,一般也都有比较好的跨平台支持。例如,聊天工具,Gtalk全平台覆盖,Msn全平台覆盖,现在甚至连一向被人看作很封闭的QQ,实际上也有Linux版本(虽然口碑很大,但是还有lumaQQ这样的替代产品),Mac版本(口碑不错),iPhone版本了(最近刚更新过,很不错)。

我们甚至看到了上网本这一硬件类别的产生。互联网成了计算机的中心,这很大程度上降低了微软的垄断优势。

3-4年前,我切换到Mac OS X的时候,除了招商银行等少数应用以外,我没有觉得任何的痛苦。那时候,我主要开发服务器端程序,程序的运行环境是Linux,在Mac OS X这个Unix上面开发,其实很方便。

程序员可以在不同平台切换并不重要,重要的是,我们这些程序员的衣食父母已经可以自由的在各种平台上切换了。这就给了我们去尝试Windows以外平台的可能性。

很多人在比较Windows和Mac OS X的时候,有一个误区。因为他们自己是长期的Windows用户,对很多Mac OS X的细节很不喜欢(右键、按钮位置等等)。但是作为一个开发者,你要注意的是用户。我希望你们设想一个场景,一个从来没有用过电脑的人,他们学习Windows和Mac OS X,他们会更喜欢什么。我想更多人会喜欢Mac OS X,如果我的设想是对的,那么未来是属于Mac OS X的。

2、iPhone以及未来的iPad

iPhone是近10年来,我看到的最革命性的硬件产品。虽然他的功能,除了多点触摸、加速度传感器以外,大多数我们都在Nokia和其他竞争者的产品中见到过。我用过Nokia2002年的产品7650,iPhone的所有功能它几乎都有(没有wifi,但是有gprs),但是用起来跟iPhone就是不一样。

那么区别在哪里呢?05年我买iPod Nano的时候,看到盒子的时候,我吃了一惊,因为盒子最显眼的地方写的不是“容量:4G”,而是“可以容纳1000首歌,xxx张照片”。这家卖水果的公司突然让我明白,用户其实关心的是那个叫mp3的东西可以容纳多少歌,而不是从比特的角度,从存储的角度他的容量是多少G。多少G多少M的容量,是实现“容纳多少多少歌”这个目的的一种手段。我们总是太过care手段,忘了我们的目的是什么。

做产品的时候,很多人也是这样。如果你是第一次看电视购物卖手机,也许你就会想把手里面的iPhone扔掉,去买那些垃圾。因为你听介绍的时候,你会觉得全世界最好的手机就在那电视里,叫做“XX全能王”。从功能列表来看,它们简直是世界上最好的产品,但是如果你真的拿到手,你也许会发现那东西3分钟死机,也许什么操作都很慢,也许摔了一下就坏了。那个时候,我估计你会领悟到,功能多当然好。但是功能列表不会包括“不会3分钟死机”,“操作不会很慢”,“摔一下不会坏”。手机,或者任何产品对你最重要的不是功能多,而是好用。

iPhone让我发现原来手机上也可以有这么好用的浏览器。这是个纯技术问题么?不是,要知道Nokia很多手机用的浏览器内核和iPhone毫无二致,都是Webkit。但是操作起来看看,大家知道iPhone出来没有多久,所有网站手机流量最大的就是iPhone了,这不是靠运气啊。我有个Nokia E61i欧版手机,可以用wifi,但是用它的浏览器,实在是不方便,每次都要重新选择wifi,打开网站也很慢,打开了以后,放大缩小也很不方便。

好的体验仅是其一。更重要的是水果公司在iPhone这个产品上开发了AppStore,这是近10年来,我认为在软件行业最重要的一个东西。1976年2月3日比尔盖茨发表了著名的《An Open Letter to hobbyists》(给爱好者们的一封信),事实上开启了商业软件的道路。然而,商业软件从诞生起,就受到盗版的诅咒。从全球看,表面上微软是盗版的最大受害者。没错,从金额上看,是这样的。但是实际上所有的第三方开发者,才是盗版的最大受害者,他们中的很多人因为盗版而丧失了成长为微软这样企业的机会。

AppStore不能完全杜绝盗版,但是它从发行和支付渠道出发(跟iTune Store如出一辙),很大程度降低了盗版对第三方开发者成长带来的风险。很多单枪匹马的第三方开发者,凭借做iPhone软件发家(当然一个市场是有容量的,你不能指望它超越自己的机极限)。很多开发Mac软件多年的人,没因为开发Mac软件发家,但是因为移植了一个简单版本到iPhone发了家。据说,因为开发iPhone只能用Mac OS X,这成了近两年对Mac电脑销售最大的拉动。很多人为了开发iPhone程序而购买Mac电脑。

就在这时iPad来了。价格在2000-3000之间的上网本,应该是最近和未来,电脑市场一个很重要的增长点。这个价位可以吸引很多买不起电脑(可能更多是不舍得买电脑)的人。另外,关注上网这个概念简化操作,也可以让很多觉得电脑太难用的人们,来购买电脑。可惜,基于Windows的上网本在用户体验上实在是乏善可陈,往往仅仅是一个屏幕更小的Windows而已。

Windows在PC上面的优势本来有机会拓展到其他平台。在WinCE和Palm,微软实际上获胜了。但是之后就固步自封了,现在iPhone出来了,WinCE实际上已经没有什么大机会了。上网本和触摸设备,本来也是Windows有巨大优势的,但是微软实在缺乏在用户体验方面的努力(你去看看各种基于Windows的触摸查询设备吧,居然需要点一下然后鼠标光标蹦过来,然后才能点!!!!!!!)。

iPad的发布会,并不让人多么惊喜。这是因为iPad和iPhone战略在水果公司是紧密结合的,iPad包含了iPhone的所有革命性,然后把尺寸放大。发布会开到结尾,说到电池时间和价格的时候,我才开始兴奋。

iPad意味着什么?意味着一台便宜的上网本;有电脑的用户也不介意购买一个,买不起或者不舍得买电脑的人可能会买;因为便宜,所以医院和餐馆等可能会购买作为内部管理系统(医院信息系统,点餐系统);学校可以买做教育用途(电子书包)。意味着,我们可以在电脑上面写文档累了的时候,躺在床上抱着它听歌,看看书,玩个游戏。

这个产品如果操作的好的话,可以造就一个比iPhone更大更好的软件市场。

3、Mac OS X是Unix

对于大多数做服务器端开发的开发者,服务器端开发也许就意味着Linux下的C/C++和Java。Mac OS X是真正的Unix(符合标准,有授权,合法的可以用Unix商标)。大多数这类开发,你可以在Mac OS X下做,在Linux下执行。少数涉及到Linux和BSD内核不同的应用,稍微麻烦一点。但是如果你做到这个级别的话,我想你也不在乎了。

大多数基于Linux的开源软件,大多数为Unix架构设计的程序,都可以在Mac OS X下正常工作。虽然有很多软件编译起来,会遇到很多稀奇古怪的问题,但是放心,你在不同的Linux版本间编译的时候遇到的会更多。虽然Mac OS X下面的自动软件安装工具也会有各种各样的问题,但是放心,Linux下的也是。

Unix文化最经典的管道和脚本,Mac OS X也支持的很好。

Mac OS X是一个非常好的平衡,Unix式的命令行、脚本能力它全部具备,而且带有一个非常好用高效的GUI。所以不管你是CLI(命令行界面)控,还是GUI控,你都应该可以玩的很好。

有人问我Mac OS X是不是一个很好的学习Linux的途径。我不得不说,你要是真的玩转了Mac OS X(CLI+GUI)的话,你真的无需去学习Linux,用就是了。尤其是,学习Linux是为了学习服务器管理的人们,真玩转了Mac OS X,Linux有什么区别?

4、开拓你的视野

一段时间以来,我研究自己发展的过程中的瓶颈的时候,发现一切瓶颈都不来自能力,都来自视野,来自于给自己设置的愚蠢的极限。这么说,是因为我发现,我想做一辈子的程序员,而我也乐意学习新的知识,我也确实擅长不停的学习新的知识。

只是每经一个阶段,一旦我发现自己长期没有什么进步的时候,就会发现原因就是我已经不知道前面的路在哪里了。在.net出现之前,我已经是一个微软几乎所有产品的专家(但我不是MVP),我可以不借助ATL自己写Com组件,我写过IE和Outlook插件,等等。但是到了.net时代,我的心疲惫了,我决心不再跟随微软的脚步。

这两年,尤其是09年,做了一些iPhone开发,Cocoa开发(Tiny4Reader),做了些服务器端开发(GinkgoTek.com),我又开始像刚开始接触电脑那样的激情澎湃了。

对大多数纯Windows程序员,Mac OS X的GUI和基于Unix的CLI都是新的天地,哪怕你不真的从事这两方面的开发。在这些领域看到的东西对你的开发都是有利的。

腾讯是一个大家印象中很不注重用户体验的公司(老程序员视角)吧?但是现在QQ已经有了Mac版,iPhone版,而且iPhone版本已经多次打磨,已经是一个相当好用的iPhone应用了。年前我去了趟深圳,见了他们的iPhone开发team,他们很重视用户体验,也做了很多的尝试。而腾讯更多其他平台开发的工程师,也开始更加关注用户体验了。

对绝大多数Windows程序员,关注用户体验的经验和意识都不足,使用Mac OS X有利于提高这些方面的素养。

最近我在参与翻译《Cocoa® Programming Developer’s Handbook》,从中知道,我最崇拜的Tim Berners-Lee爵士,就是在Mac OS X的前身,NeXTSTEP操作系统(NeXT公司产品,乔布斯创建的公司,后来被买回水果公司,这个操作系统和原有MacOS一起,成了Mac OS X的前身)下开发的人类第一个浏览器WorldWideWeb的,打开了人类的Web时代的。

附,本文引发的一些相关的讨论:

招聘广告

腾讯即时通信部门大力招聘 Mac/iPhone 平台开发人员,欢迎联系和推荐。
工作地点:深圳腾讯大厦

可以Mail简历给我,我帮你转发给腾讯有关人员。
我的邮箱:Tinyfool@gmail.com