[关闭]
@buptzym 2018-07-10T05:24:18.000000Z 字数 6284 阅读 476

给爬虫Hawk再讲个故事

原本我不再打算更新Hawk,直到去年10月某个夜里,发呆的我收到了升哥的吐槽,远程他的电脑改bug。开始觉得手气不错用着太差,数据清洗的交互匪夷所思,再后来界面太丑,一种无形的力量推动我,一发不可收拾。整整十几个周末,再加上晚上10点匆匆下班进家门,改到11点钟赶紧睡觉,就这么持续了小半年。

记得Hawk3发布那天是在杭州,我解决完最后几个问题,上传压缩包,发完公众号之后,如同大病一场,在西湖边上跑了一圈,吃了顿饱饭,修了个脚,心中的石头才慢慢落了地。

这篇文章权当是发布两个月后的总结,漫谈背后的经历和思考。它是这篇《设计爬虫Hawk背后的故事》的延伸,两年之后的再复盘。

优化细节

有朋友问这次更新了哪些新功能?我不好意思地说,优化细节。

在界面设计上,我们绘制了大量交互的草图,将重点功能予以重新组织罗列,以便鼠标移动距离变小,反复推敲了核心功能呈现的模式,让它更符合用户心智(比如数据清洗模仿了播放器设计)。

如果你吐槽Hawk3界面丑,交互难用,bug多,那是因为你没用过之前的1和2,至今我都在想,之前那么多bug和“反人类”设计,别人是怎么用的。尽管我花了大量的时间来修复bug,但依然有用户反馈了五六个很严重的问题。我还确信,Hawk3里至少还有十几个严重的bug,鬼知道代码的哪个角落里藏着一个大魔王呢?

我司的一位大神说,看一套软件,尤其是分布式软件做的如何,只要看单元测试的覆盖率就行了。“测试驱动开发”虽然被提过很多次,但对这种个人项目,从开始时懒惰就战胜了原则。所以Hawk的单元测试是多少呢?0

其他严重的问题还包括:文档不全,示例工程极少;视频不完整,讲解速度太快,简单听一遍很难消化。因为精力有限,只能优先保证软件的质量,文档不好还可以随时更改,然而作为一款桌面软件,每次更新迭代让所有客户升级客户端的代价太大了。

另外,当你满心期待地询问用户对Hawk的需求和反馈时,就会发现这种收集方式是很困难的。使用Hawk的用户一定都是高效能型的,他们时间宝贵,任务众多,其对Hawk的的观感,在使用前5分钟就已经决定了:不论背后做得再好还是再差,很多人是不会有完整的观点的。如今各类软件和游戏铺天盖地,究竟会有多少人会对一款用完即走的爬虫软件产生用户粘性呢?更遑论产生浓厚兴趣呢?

再次回到“客户端埋点”这个问题上,它能收集用户实际的操作和完成的任务,进而帮助迅速了解用户的真实想法。只是因为改造成本略高,更要租用埋点服务器,直到Hawk3也没能实现有意义的埋点功能。因此,不要指望用户给你定义什么是“好的需求”,用户是懒惰的,而开发者则必须勤奋地去思考和探索。

少既是多

在实际落地时,需要对细节有充分的重视。但在营销和给人讲故事时,却要我们抓大放小,抓住重点忽略细节。

市面上的爬虫软件非常多,实现的技术手段列都列不完。你的Hawk有什么能耐让用户去使用它呢?这是个核心问题,关乎于设计它的目的:即使是不会编程的用户也能低成本地获得数据。

在花了很多时间分析用户将大部分时间用在哪里,如何理解使用逻辑和犯错原因之后,我竟然发现,80%的用户至多只用到软件中20%的功能,撑死就是手气不错和少数几个清洗模块,对其余80%功能的存在都茫然不知。因此,我们将80%的改进投入在打磨原有功能上,增加稳定和易用性:追求大而全没多少意义。

我还想出一个“小芳用开源租房分析软件勇斗二房东“的营销故事:基于Hawk的租房工程,能抓取像自来水一样的的实时租房数据,判别虚假房源,一键导出到Excel和可视化分析,有段子有干货,再加上微博和微信的病毒式传播,一个能还算吸引人且反映Hawk特点的故事就讲成了。

哎,做减法需要勇气。这让我想起老板的一个问题:如何用一页PPT,和尽可能少的文字,给别人讲清楚几年来做的工作?曾经认为不可能,但经过多次优化后,一页PPT竟绰绰有余。越是高端上档次的广告,惜字如金;越是乡村风的宣传,一张大红纸密密麻麻全是字。

软件的思维模型

Hawk是款好用也是难用的软件,但它的问题在于非常陡峭的学习曲线,刚开始你会对着界面完全不知所措,但理解其思维模型,突破临界点后,心中会浮现出“原来如此”,于是一马平川。

任何一个正经的软件,都有其主轴和思维模型:
- Photoshop的主轴是图层,每个图层都有自己的透明度,特效,蒙版...最终效果是多个图层的混合。
- Excel的主轴是表格,思维模型是表格cell的计算,改变输入后,输出随之改变。

Hawk的主轴是流(迭代器,或一行行的数据),一切功能都是围绕它而服务的。其思维模型是不同模块的拼接,进而组合成更复杂的模块和任务。真正理解这个概念后,Hawk的使用顿时豁然开朗。然而,这种模型让程序员理解起来很容易,但对普通用户来说有相当大的挑战,因此Hawk还需要一次思维模型和交互的优化革命。

Hawk当然做不到Photoshop和Excel那样的强大稳定,但也不是美图秀秀或那些奇葩的页游的傻瓜化UI:一个大大的按钮:“点我!一刀9999级”。那样的突兀破坏了应有的美感,如同树上长了一个大蘑菇。

如何在不破坏模型,同时在易用性上达到平衡呢?VSCode作为一款非常火爆的编辑器,给了Hawk大量参考:一方面它极易入门,维持简单的内核,按需扩展插件,避免了不必要的复杂。另一方面它的“交互演练场”很有意思:它给了用户一组简单任务,从而快速学习操作。而这块,Hawk要优化的实在太多。

不过,想想那些使用Hawk的用户吧,他们可能是程序员,或是白领和数据爱好者,但应该很少玩”暖暖“这样的穿搭养成游戏吧?既然是这样,让我们暂时继续钢铁直男风格的界面吧!

桌面 or Web,还重要么?

去年,我最纠结的是Hawk的部署和使用方式:它应该是web化的,用户用任何浏览器登录网站,即可配置数据任务,在服务器上实现抓取,灵活性不言而喻。

为此我曾学习了大量React前端知识,还开发了Python编写的etlpy,它是函数库而非Hawk一样的集成环境。虽拥有一些重要的概念和创新,但是用起来极其缺乏手感和反馈:流的概念太抽象,使用难度太高,我自己都不愿意用。它必须依赖强大的前端,而我的前端水平,做这款产品需要至少1年,工作繁忙,只能放弃。

一年以后,面对这个问题,我反而有了新的理解。

先从技术层面考虑,开发web版需要重写代码,设计前端,更要考虑租用服务器和IP地址,还有巨大维护成本,在现有环境上是不可接受的;再者浏览器有沙箱限制,不少功能实现起来很困难,而桌面版反而则容易得多,桌面程序真的是邪魔么?

我们再想想,2000年火的是桌面程序,后来是网站,再后来是app,再后来是小程序,可到了2017年,一个创业者说他做了个app,会有投资人感兴趣么?人们关注的点,已经不在于产品呈现的形式,甚至不在于其背后的服务,而是概念:比如人工智能,爆款文章,甚至虚拟货币,很多人连虚拟货币是啥都不知道,却为之疯狂。经济早已从实入虚,人们的关注更是”虚“到了一定境界。

如果web化是绝对趋势,那为何Photoshop,各种工具还是客户端的?如果全球化是普世价值,为什么英国脱欧,特朗普上台呢?Hawk是桌面还是web根本不重要,用什么语言开发也不重要。重要的是它解决了用户什么问题。

再深一层说,它的想象空间在哪里?然而Hawk作为爬虫,在这个段位上已经输掉了。你说你做了一个超牛的爬虫,投资人肯定会说“保持联系”。我们能看到一个确定的上界:成立一家几十个人的公司,每年营收上千万也不是问题,然而它最终一定会成为贩卖数据的灰色公司,标榜大数据却面对监管胆战心惊:这与我的梦想差距太远了。你说,我再用js将其重写一遍,又tmd so what?

对Hawk的批评

我更愿意去听批评,因为能比听赞赏更能增进对问题本质的理解。

其实,Hawk的关键问题根本不是桌面还是web,那只是呈现形式,而是太封闭了。作为设计者,我只能听到少数几个用户的意见,大多数人问了几个问题便消失在人海;用户独立在各自的工程之中,贡献和设计无法共享,有问题难以讨论,没有形成良好的社区环境。

为何继续改进它?

对一个工作压力不小的算法工程师来说,抽出大量时间来更新Hawk是极度奢侈的事情。压缩的只能是少得可怜的个人时间。那为何要继续更新它呢?

Hawk的更新升级伴随着工作后的几年的跌宕,Hawk1是处在低落时期的自我证明,2代则是状态向好后的普惠天下。到了2017年-2018年的第3代,状态则复杂得多,工作非常繁忙,一切都要tradeoff,心情大起大落,它是沉淀反思后的产物,以致从这篇文章的风格就能看得出来。

一方面,它的开发拥有极高的迭代效率:在大公司,个人想推动一项决策是非常困难的,90%的环境不受控制,一个接口都要反复沟通多次,效率很低。而Hawk这样的工具,可能要一个不太协调的10人团队开发一两年,这不是没有可能。

更重要的是,它实现了远程社会化协作:以我和升哥为核心,五六个热心朋友出谋划策,我们却从未谋面。相比于公司内面对面的重量级协作,基于微信和碎片化时间的轻盈互动却充满力量:困扰许久的问题,竟然能被好友短短几个字戳地恍然大悟:没有职业压力和上下级的顾忌,创意碰撞反如泉涌。

我曾经崇尚振臂一呼的个人英雄主义,但后来的这些经历让我体会到了协作的美德。在最近的一次Hawk的线下聚会中,我提出写公众号的文章的时间不够,导致产量极低,一位在HR行业浸淫十年的朋友一针见血地指出:软件可以协作,为何文章不能协作?一份充满思维碰撞干货满满的好文章重要,还是苦心孤诣却差强人意的纯原创重要呢?

那篇《全链路思维》总结说:从兴趣出发的开源软件,能有机会从技术,产品甚至运营上进行思考和锻炼。我觉得这就是它对我最大的价值:有难得的机会,在很低的成本下,实现灵活的社会化协作,在小型的演练场去实现和落地想法:相比于漫天飞舞的虚拟概念,能做实际落地的事情是很重要的。

开源:打江山易,守江山难

你用开源和免费引起了用户的注意,然而作为爬虫应用,用户还是需要大量的学习和劳动才能让Hawk产生价值,他们满心希望地打开软件,期待一个开箱即用的甜品,没想到却是一大盒子零件的一脸懵逼,更难以找到像样的维护和支持,很容易想象到他们的失望情绪。曾经我对这个问题淡然一笑,现在却重新重视起来,它是问题的核心。

一款软件的成本,除了开发,大部分来自维护和支持。打江山时,将军临阵,热血沸腾,情怀可以让一群战士冲锋陷阵,我一个人小半年凭着一股拼劲就能把软件做完。然而守江山才难,要付出大量时间,当用户找上门提出咨询时,如何支持?此时讲情怀早已不够,纵然兄弟们能坚持三个月甚至半年,后面的支持又如何进行呢?

在上一篇文章中,我们谈到了开源的意义和价值。然而彼时未曾讨论的问题,是开源和商业的关系。中国传统文化讲求情怀和贡献;忽略商业和服务:不少人认为,物质才是有价值的,而服务应该是免费的,因而盗版软件横行;你能接受餐厅高额的菜价,但若服务员要求小费,一个白眼肯定甩过去了。

这一年来,我阅读了大量商业书籍,深刻地认识到,商业和开源从来不是矛盾的。即便我们打的是造福用户并做好Hawk的情怀牌,而非低俗的“赚钱”,一个合理的商业模式也是必须的:付费才能促进共赢:用户通过付费获得了更好地产品和服务,产生更强的粘性;开发者有了鼓励和经济支持,便有了更多的动力去优化它。金钱重新优化了用户和开发者的注意力和资源配置,直接量化了服务的价值。”穷则独善其身,达则兼济天下“,在远没达到财富自由的条件下,不谈盈利是违反自然规律的。

那Hawk的合理商业模式是什么呢?我能确认的是,像文章开头讲的故事那样,除了通用功能,它一定要走向行业定制,为房地产或金融等行业提供专业方便的数据抓取和分析服务。尽管模式如此重要,我们却依然在探索之中,作为程序员的我,至今依然想不清这个问题。

改进和终极形态

Hawk是一个C#实现的流系统,第一步要解决的是这些技术问题:

这些问题想解决也不太难:如果你是程序员,应该听过flink,它是流算法的工业界标准,实现了任务恢复,异步流控,自动负载均衡等各种功能。秉承着不重新造轮子的理念,Hawk的底层执行引擎可以被很容易地替换成flink。

第二步,是将人工智能引入Hawk,我们用手气不错实现了网页采集的智能化,但是数据清洗还完全依赖于人工。通过对用户大量任务的自动学习和仿真,AI能自动推断最合理的工作流,从而简化到给定一个网址,即可完成全部任务。这项工作其实是AutoML(自动机器学习)的一部分,依赖于收集大量的用户行为和任务。

那Hawk的终极形态是怎样的呢?让我们打开脑洞,想像爬虫背后的概念:数据和计算。Hawk会最终形成一个去中心的系统的一部分:

举个例子,有用户开发了针对不同租房网站的任务(管道),我们就能在上层轻松地将它们组合成全局租房的数据流,系统自动去重和规范化后,便可随时分析数据得到结论。其他用户还可以调用你的租房流,在更大层面去讨论城市和经济的未来。未来的数据源也远不止web,也能来自各类传感器,API和服务商,它最终能实现一个基于实时流的分布式数据系统,数据和信息像空气一样被每个人共享,从而产生最大化的价值。

曾经我对这种虚拟的概念不够重视,但从无到有的开创性工作,不才是真正有价值,无数技术人苛求的方向么?

献给妻子的礼物

我知道你在吐槽什么,那篇《全链路思维》的文章中提到的“辛辛苦苦开发的开源软件,发布后缺少维护进而无人问津,发布根本不是终点”。而在发布后的两个月内,这种令人担心的现象居然真的梦想成真了,近一个月,Hawk被我降级到了谷底,没有更新任何功能,几乎没有答疑。以至于这篇文章,都花了我三个周末才写完。

改进Hawk的那段时间确实艰难,过年前的几周,从周五晚上改到周日晚上,出门后眼睛都变花了,担心视力一落千丈。工作上的事情不能有任何闪失,很多时间都在纠结中度过。但是后来想开了,就当通关我心仪的游戏远哭5(PS4上的一款游戏)吧,游戏机从此落灰。

我只能集中地做好几件事情,因为除了工作,还有更重要的事情:结婚。我大概能明白为什么老外写书和程序,都会感谢家人。因为不能耽误工作,就只能压榨陪伴家人的时间了。婚礼的大部分细节,都交给了她和我的父母,我真的是去“参加了自己的婚礼”。我在这半年多的时间,除了一多半时间的出差,还把极其有限的时间用来改进Hawk。那么多周末,我在家里顶着大油头,穿着大裤头光着膀子改代码,媳妇没有任何怨言,做好饭把热饭热菜送到我面前,还各种支持和鼓励我,我非常感谢她,Hawk是我送她的礼物。

我也感谢老板对我的支持,他对我非常认可,我也没有让Hawk影响工作;感谢升哥和众多朋友的支持,他们给了我继续改进Hawk的动力。如果你对Hawk有任何想法和建议,都欢迎给我留言。

一切还没有结束,一切还刚刚开始。Hawk如此,生活和工作更是如此。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注