我出门买了本Lucene in Action和Java语言的入门书,然后就回家过年了。春节假期7天,我女朋友和父母在打牌看电视,我在另外一个屋子,看这两本书和写一个基于Lucene的搜索系统,我设计了一个XML的出入协议,索引的导入格式用XML,我写了一个Java版本的web server作为系统的底层,查询用REST形式返回XML的结果,一个配置目录里面用配置文件设置查询字段,排序字段,自带索引整理,切换不同的查询方法,只需要在url选择不同的配置文件名即可,带简单日志。
7天的时间,写完了2000-3000行的代码。然后节后就给我们的客户上线测试,一启用,就把它们原来的搜索速度从高峰的时候几分钟没有结果,变成稳定在几十毫秒内。他们的日搜索量因为用这套搜索,从日4000增至8000,后来增至10万。
在他们搜索量20-30万后,这套代码才做了第一次大改进,性能提升到百万级。后来我们接入了更多的客户,这套代码不断改进,最高单机支撑2000万次搜索。后来几经改进,代码增至1万8000以上。后来,我就没关注过行数了。
这套代码发展出来的系统,曾经服务于,饭统网、大众点评、FTChinese、六间房、盛大云中书城,以及我们公司当年几十个小客户。日最高搜索在3000万左右,应该至少完成了几亿次搜索。
(我职业生涯中写过大小上百个业余的side project,大多数没有发布,大多数行数都在3000行以上。)
===========
既然有人点赞,再讲一个故事。我们上海泰尼现在还没倒闭,靠的是一套排版系统,我们从底层支持苹果iBook Author的格式,这是一个非常复杂的打包格式,类似于网页,但是有大量网页不支持的排版格式和CSS3标准的东西。12年,我们公司快到穷途末路的时候,我突然有个疯狂的主意,要做这个非常复杂的东西。但是我跟我们的主程,也就是现在的CTO老师 @陈勇辉 老师说了这个idea,这个猪头听不懂。
于是我在出差去做演讲的三天路上,写了一个原型,实现了一个XML DOM解析树,一个简易的CSS解析树,写了一个简单的iBook Author的格式分析文档,利用我分析出来的文件格式,写了一个可以显示某本iBook Author电子书一页的信息的一个Demo,刚才查了下代码库,大概不到900多行。
交给主程看,给他讲解思路和文件格式的细节。然后第二天,他看懂了,然后这个项目的具体代码我就没有参与过了。这个项目现在大概有2万6000行左右。前后已经给公司赚了200万左右。公司没死因为这个项目。
我今天晚上一边看着电视,一边刷知乎,还一边断断续续地写了300行的Go程序,是个协议格式解析,所以代码有点多,如果用C++写可能也有500-600行,如果我把整个协议都解析完肯定会超过1000行了。
说实话,没什么感觉,属于日常小训练。
大多普通人觉得跑个3000米要累吐血,对职业运动员来说,3000米不过是个热身运动。
如果程序难度不高,而且全神贯注的话,一天2000+行也不会很困难,当然并不是2000行没bug的代码,以后调试排错可能需要3-4倍的时间。