多面手
我在那家公司待了近两年时间,我几乎参与了公司所有的业务开发,从分销app,到商家数据分析软件,从爬虫技术,到商家引流软件,我还根据自己的专业知识,用一个月时间给公司开发了一款商家财务分析应用,由于是创业公司,在开发过程中所有的东西几乎都要自己把握,从需求的细化到编码到测试,还有最后的发布上线,以及软件运行过程中的应急措施,虽然不一定都要自己操作,但这些都要了解。不像我后来进的大一点的公司,我发现这里管理上似乎比较自由,公司搭建的jira任务管理系统基本上形同虚设,客服有问题都是通过聊天工具发送的,优点是简单方便又高效,而每个正式开发人员几乎都有登陆服务器和数据库的权限,这并不会带来多大的安全问题,因为开发人员就十个左右,方便管理,而且这些数据是淘宝开放给服务商的,并不存在多么核心的机密,数据只有在云服务器内网才能获取,一旦有什么管理上的限制,测试工作将变得十分不便利。或许等人多了,管理上会更加严格一点,但是在当时我真正感觉到了一个小团队灵活高效的一面,沟通成本非常低,每个开发都是有足够权限的一员,在关键时刻发挥着自己的作用。
当时不知道什么缘故,有一台服务器发来短信报警,cpu百分之百,韦哥去见客户去了,王哥也不在,部门里没有一个管事的,大家都在看这个问题,却都一筹莫展,我当时也在查找各种解决方法,最后用一个jstack命令发现了其中的原因:
while(iterator.hasNext()){
//处理过程
//iterator.next();
}
一个新人不知道哪里抽了筋,把 iteraor.next()这段代码给注释掉了,导致程序陷入死循环状态,cpu骤增,赶紧修改代码重新发布,终于降下来了,在这么多代码中发现一个bug,大家都以为我很厉害,其实我不过是使用了一些工具命令罢了。韦哥知道这些事,又气又喜,说道:“要避免这么低级的bug容易,但是要找到这么一小段代码却是需要一定技巧的。”他让我做了有关这方面的技术分享,当时我觉得自己很有成就感。还有一次,服务器又出现了异常,我通过“df”命令发现磁盘满了,原来是有几个上百G的日志文件,我又迅速做了处理。总之在公司里我除了后端开发,还做了不少服务器运维的工作。
至于操作系统的选择,相对比较自由,有一个同事,自己的笔记本上装着linux系统,然后给自己的办公电脑也装上了该系统,整天用着各种命令,似乎很酷的样子。因为平时运维比较多,对linux系统有一种亲切感,于是我也在办公电脑上装了linux,紧接着前端的同事也装了,我尝试过脱离eclipse,用vim+插件的模式编程,无奈一开始效率不高,就放弃了,但当时见过一位牛人在vim进行rails的开发,不禁生出几分敬服,这是一种非常有极客范儿的工作方式。
我原本并不懂什么前端,公司配有专门的前端人员,但是在我设计那款财务app的时候,这一切却需要我独立完成,原来培训的时候就接触过一些简单的html,js脚本,写过一些简单的页面,但让我为整个app做前端,还真有点强人所难,幸好我是一个好学的人,更想体验一把将产品的整个制作过程全部控制在自己手里的那种感觉,因此我向公司申请了钥匙,周末一个人过来学习研究,一步步把页面做出来。一开始我用的是原生的js,做了一个表格后,负责前端的超哥看了后,呵呵笑道:“这个实在太挫了,表格线条这么粗,颜色这么重。” 我烦躁地说道:“刚开始嘛!” 超哥道:“不需要什么都自己写,前端有框架的,可以用下highcharts,easyui框架。比较适合这种数据分析类app,没有多少交互的。” 说完,便把官网链接发给我,我看了官网上几个demo,真的有一种如沐春风的感觉,在html上加几个标签,写一段简短的js脚本,就可以实现许多酷炫数据可视化效果:
于是,经过再次地摸索和咨询,我独立开发的财务app终于可以发布了。现在想想,前端工作也是比较考验编程技巧的,如果真的全部靠自己把这些饼状图,柱状图给写出来,当时的水平还真做不到,经过这些事,我更深刻地体验到了开源框架的强大,也明白了“不重复发明轮子”的原则,以后凡是要是实现某一套功能,我习惯于到开源网站上看看有没有现存的实现,毕竟一行一行自己敲代码是很费时间和精力的工作。话又说回来,你用再多的开源框架,对你的编程技能并不会有太大的提高,万一没有开源的实现,必须靠自己写,那该怎么办呢?而且就算有现存的框架,也不一定适合当前的业务场景。记得自己维护爬虫项目的时候,想改造现有系统,看看能不能通过框架实现,查了很多资料,Heritrix,Nutch都研究了下,最后发现如果把现有的针对特定网站的抓取功能强行插入到这些框架中,就像把牛头装在马的身上一般,不伦不类,而且有些大材小用,有些框架webmagic倒是比较适合当前业务,但是用了之后开发起来就不大灵活。最后还是决定抛开开源框架,针对现有项目的实际情况进行重构改造,使用模板方法和策略模式,将变化的与不变的部分分离,防止后续开发过程中重复编写类似逻辑的代码,改造之后,项目的可扩展性和可维护性大大提高,而且可以在多台机器上配置部署,这些是我带领两个实习小弟一起做了,中间做了不少沟通指导,也积累了一些经验。后来我离开公司,这套东西还一直在发挥作用。因此,我现在觉得“不重复发明轮子”仅仅是工作原则,目的是快速实现可观的效果,但并不能作为学习原则,程序员在业余时间还是要研究下现有框架的原理,运行机制,并习惯思考:这个轮子还有什么需要改进的地方吗,如果让我发明这个轮子,我会怎么做。这也是我最近常常研究spring源码的原因。
作为开发,我竟然还要写专利申请和融资报告,当时公司已经有四款上线的软件了,由于我接触过不少,笔头功夫也不赖,韦哥就让我写了软件的相关技术说明,其实也不难写,就是对软件的技术架构,业务逻辑,性能测试结果进行描述,刚开始写得比较简略,韦哥看了道:“写得很精要,可以再具体点。”我觉得这就是需要描述的全部内容了,但写得太简略审批者可能会看不懂,也看不上,于是便照葫芦画瓢,根据以往的专利申请,添加了不少描述性的内容,放了一些图表进去。至于融资报告,因为我是会计专业的,而且公司的业务也比较简单,主要是收取软件的订阅费,服务费,我专门对公司的会计业务作了一些的说明,融资调查那天,近十位投资方的工作人员到了公司,在一个会议室聊了一整天,期间一个中年大叔还专门过来向我了解了下公司产品和技术方面的内容,虽然老板没让我们做什么准备,但是我本人总有一种预感,好像投资人会对团队成员作一番考察,于是早早地把要说的话在心里酝酿好,他只是简单地问了几句,我尽可能回答地通俗清楚一些,避免那些专业生涩的表述,在阐述业务上,我尽量避免“淘宝”、“电商”这些词汇,因为我知道投资人看重的是公司的大数据方向,他们不一定懂技术,可能会觉得电商业务性太强,于是把重点放在了数据分析技术上,还亲自模拟了公司的爬虫神器。“可以!”他拍拍我的肩膀,又走进会议室了。
麻雀虽小,五脏俱全,新人到创业公司,只要积极肯干,还是可以得到许多锻炼机会的,在近两年时间里,我不单单熟悉了java编程(web应用,爬虫),在前端开发,服务器运维,需求设计,带领小组、架构选型等方面也积累了一些经验,还经历了公司的早期融资及其后的发展,以后可以聊聊后续的经历还有我个人的一点感受。
java达人
ID:java_daren