一、初来乍到
2016年7月4日,人生中第四次抵达北京,对这座城市不是很陌生却没有好感。匆忙找到落脚的地方,和同学小聚之后,便开始准备第二天的报道。
次日,便前往Soho现代城报道,和我一起入职的员工有哈工大的研一学长、武汉大学的研究生学姐、北邮的应届生学长和清华大学的应届生师兄,所以我感到很有压力,但同时也是对我的一种挑战。我很幸运,能够在我大二的暑假有机会来宜信实习。
面试的时候面试的是Java岗,所以已经做好了Java开发的准备,而来到研发九部之后,我遇见了对我职业生涯有很大影响的Team老大(其实我开始以为他叫麒麟的(麒麟之才)),老大同我聊了很久,了解我喜欢的方向和技术,我便主动要求去做一些实际的项目,于是开始了和Scala的邂逅。
这里说明一下我对宜信的初印象:入职的时候提供入职大礼包和免费午餐,宜信的办公室命名风格独特,诸如太平洋、大西洋、火星、天王星等等此类。每周的零食和水果发放,取之不尽的coffee、奶茶等等。后来我才了解到,福利还有,转正后可以申请免费的MacBook pro和超大显示器,加班有免费的晚餐,等等。上班时间均为弹性工时,可以灵活调整。实习生一般9.30到,晚上6.30下班,午间一个小时的休息时间。
二、初出茅庐
自然地,被分配到宜学贷APP开发团队做后台,后台是scala做的。一门新的语言对我来说是一个新的开始,在这之前玩过一点spark,掌握一点spark的RDD(弹性分布式数据集)操作,所以对scala并不是特别陌生。当然了,不陌生和掌握还是有很大的差距。下面我简单介绍一下scala这门语言。
Scala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言、并集成面向对象编程和函数式编程的各种特性。对于Java开发者来说,面向对象编程应该不是什么问题,可是对于函数式编程来说,我们就是layman了。习惯了Java,开始学scala的语法倒是没什么问题,可是当实际应用的时候,你会发现面向对象编程和函数式编程有很大的不同,主要是思维方式的转变,你不再写各种控制逻辑,也不要再写满天飞的变量。这种思维的转变困扰我很久,习惯了Java命令式编程,所以改变起来不是那么容易。Scala具有非常强大的Future和Actor等高级特性,这里不做过多介绍了。
后台框架用的是Play Framework,这是一个比较新的full-stack框架,包括一个简单的无状态MVC模型,具有Hibernate的对象持续,一个基于Groovy的模板引擎,以及建立一个现代Web应用所需的所有东西。
由于play框架比较新,所以只能通过官方文档去学习,对于英语不好的我来说的确是一大挑战,不过还好有有道词典(哪里不会点哪里)。了解了框架,发现它真的很轻量级,作为一个web框架,play要比诸如SSM、SSH轻量级不知道哪里去。它自带的模板引擎和jsp很像,所以上手也比较容易。
三、小试牛刀
6天的时间,初步掌握一门语言、一个框架、配好环境。第七天,就开始了我的迭代任务。我们做的是宜学贷APP的后台,这里有必要介绍一下项目背景:
宜学贷是面向教育培训机构和个人推出的普惠金融咨询服务,为学生及学生家庭提供信用借款咨询服务,推荐便捷、广泛的资金来源,帮助学生解决资金压力,获得教育培训机会。
宜学贷填补了国家助学贷款以外的市场空白,无论是学历教育、 IT培训、语言培训或是艺术培训、职业技能培训等项目,宜信普惠均可以根据教育培训机构的特点,结合学生的具体需求,量身定制不同的“宜学贷”解决方案, 使学生可以轻松通过分期付款的形式来完成学业,形式更灵活,申请更便捷。
宜信普惠作为 “教育培训信用借款”的专业借款咨询服务机构,先后获 得“教育培训助学贷款领军企业”及“百万读者推崇的教育培训信贷服务机构”称号。宜学贷目前服务网络覆盖北京、上海、广州等近40个城市,已为1000多家全国性、地域性合作伙伴的数万名学员及学员家庭提供了便捷服务,实现信用的价值。
宜学贷官网:http://www.creditease.cn/yxd/
目前,为增强进件时效、简化申请流程,宜学贷产品线已经开发并运营了一款宜学贷APP应用,为客户提供借款申请、借款查询、还款查询等功能。
随时业务的不断发展、变化,秉承引领市场的宜信理念,需要适时推出一款全线上的宜学贷APP应用,应用更加先进、成熟的验证、防伪技术,在保证风险可控的前提下,实现借款申请、快速审核、非面对面签约、按客户时间需求选时放款、线上还款等功能,更好的满足学贷市场的需求,更好的服务于宜学贷的客户。
初来乍到,对业务的了解真是知之甚少,所以在完成每一项迭代任务的时候,都要熟悉相应的业务。总结一下自己完成的迭代任务,六个迭代周期,大大小小我记得完成这些:
完成亲属称谓后台灵活控制
完成身份证两次输入不一致时身份证信息入库;
Boss身份证展示
Boss下载合同PDF
Boss用户注销
线下合同可上传银行卡信息
完善进件联系人亲属称谓判定
完善手持身份证DAO
完成最新需求上传身份证、银行卡统一接口的编写和实现
修复一些bug
完成boss每日定时器执行sql并且展示
完善boss用户管理搜索模块
完善用户管理模块
完成位置转换成经纬度的接口,以及计算距离
增加联系人亲属称谓时错误信息返回的code码
身份证验证时,增加两次认证不一致时也入库
(BOSS)放款对账需要加关键信息并增加按日期查询
完善boss端用户管理模块(查询和注销问题)
放款对账需要加关键信息并增加按日期查询
手工改为线下签约的订单,在收到信审通知时不要重新获取签约方式
(完善)boss用户注销,删除用户token
(BOSS)放款点击按钮,必须返回提示。并增加放款列表
计算两个经纬度之间的距离
根据商家地址获取经纬度
(BOSS)可以通过输入手机号码,查询对应的机构码
定时执行进件按城市统计和每日统计的SQL,插入数据库中
找到点击任何按钮,(经常)页面意外跳转到登陆界面的原因
重构定时查询功能,完成定时执行sql
修复boss端页面点击放款详细查看后,跳出到登录页面的bug
完成boss用户注销,删除用户token后出现加密解密异常,返回错误token的错误co de码
完善手持身份证DAO
身份证信息更新改为新添
Boss端配置管理功能,原型设计
配置组各项配置的合理性校验
四、工作日常
每个研发团队都有自己团队的合作模式,我们team的代码管理工具采用基于内网的gitlab,任务进度管理由开始的Tower转而现在的Trello。每日一次的站会,跟踪进度,每个人轮流说自己昨天完成的任务和今天即将完成的任务。每周一次的技术分析会,分析如何高效地工作和学习、算法或者技术工具相关等等。不定期的小组讨论会,由于团队成员互相挨的比较近,所以有什么疑问随时提问,随时有人给你解答。老大和鹏哥离得我很近,所以每当我有什么疑问,都会随时请教他们。
学贷团队人员由产品经理、安卓团队、iOS团队、后台、测试和运维组成。我想来到宜信之后,很大的收获是熟悉了大公司的软件工程开发流程,从产品经理引进需求(开需求分析会)、到组内细化需求(把需求拆分为任务)、再到组内分配任务(开小组讨论会)、独自开发 、开发完毕后review code、Acceped Merge Request、合并到master,然后测试服务器部署、测试人员测试,最后到这一迭代版本的上线。整个一套流程下来,你会收获到不少东西。我在这里的50天,支持了6个迭代周期,平均每个迭代周期为一周左右,由于学贷是今年3月才开始做的APP,所有目前学贷还不是特别稳定,大部分的需求都是新功能而只有少部分的维护,所以对于我来说是一个很大的挑战也是一个很好的机遇。
除了支持APP的后台,还对宜学贷APP应用运维管理系统进行功能开发(boss端),由于boss端是web项目,所以我上手起来还是比较容易。而对于学贷APP,前后端分离的项目,测试起来就要自己写测试用例进行单元测试和集成测试。我觉得有必要强调一下测试用例的重要性,因为作为一名优秀的coder,可能写测试用例的时间要多于写code的时间,测试用例是对于你思维严谨性的体现,你会知道你写的code有哪些隐患和不足,减少bug。测试人员真正的工作不是给你检查出bug,正常到他们手中的版本应该没有bug,当然了,这种情况过于理想。
五、实习收获
有一点很大的感触是老大教会我的,在开始coding之前,一定要充分明白你在做什么,就是你一定要充分理解需求,充分理解产品经理的话,然后在透彻地理解需求的基础上,结合实际业务场景去coding。不要盲目地去写code,一定要明确目标。
每一次和老大探讨,老大都会教会我很多东西,12年工作经验,老大的技术能力早日超出架构师的水平,让我深深佩服。他总是能从各个角度出发思考问题,对我们不能解决的问题提出解决方案。具有很强的大局观,能够用长远的眼光审视代码、重构代码。
在这里结实了很多朋友,full-stack的老大、严谨的鹏哥、幽默的杰哥、帅气的强哥、热心的一为等等等等,在工作中给我莫大的帮助和指导,感谢你们,希望有机会能够再一起合作。感谢欣姐,对我姐姐般的照顾。再次感谢浩瑜学长内推,感谢潇潇姐对我入职前的答疑解惑。
了解了大公司职位晋升机制,在公司里晋升与否不关乎你的学历,而是你的个人能力、你的KPI、你关键时刻能够顶住压力、你的主观能动性和自驱力。以前自己经常纠结是否读研,现在我想我已经很明确了。当然,如果读研玩一些高科技的东西,也未尝不可,很多公司在部分岗位招人的时候,还会限制学历,是吧?
暑假实习之余读了几本书,分享给大家:
《代码整洁之道》:只读了前几章。感谢老大,让我学会如何写出“优雅”的code,这本书读完或许没什么卵用,但你会下意识地审视自己的代码的可读性、可维护性和可扩展性。这种意识要比你会写出优秀代码重要得多。
《大数据架构师指南》:这本书很适合想做数据却不了解大数据的人阅读,此书介绍了大数据的一些技术,诸如Spark、Hadoop、Storm及大数据可视化的相关技术和背景,会让你对Big Data有一个比较宏观的认识,清华大学出版,还不错。
《数据挖掘导论》:记得以前立过flag,不搞机器学习,独醉Java。我想可能当时太年轻了,这本书写的通俗易懂,导论嘛,没有太多复杂的数学公式,入个门还是不错的。想做数据挖掘的童鞋可以读此书入门,欢迎与我交流,一起进步。
《机器学习实战》:这本书只看了前几章,自己闲暇之余用python实现了比较简单的算法,例如KDD、决策树、Logistic回归等等比较简单的算法,大三继续看下去,把各种算法实现一遍。
《快学Scala》:学习Scala入门推荐首选,想当时六天时间一门语言、一个框架大致内容记一遍也是挺不容易的,这本书说实话有的地方翻译的不是很准确,但是入门绝对够了,写的比较易懂。如果想了解scala的更多细节,不妨读一读《Scala编程》这本书,是老大推荐的,需要pdf版的可以私戳我。
六、娱乐时光
暑假的娱乐时光非常潇洒,在传媒大学附近住10天左右之后,我便如约住到哥们寝室去了—北京化工大学,在那里:二人世界咔嚓,空调WiFi西瓜,2K15一打,雷霆火箭互杀。我想这也是为什么在北京近2个月未曾感到一丝孤独,因为有兄弟陪伴。火锅、烧烤、烤肉、驴肉火烧、海底捞、西餐、绿茶、必胜客,还有吃的最多的牛肉炒饭。我想这些都是我珍贵的回忆。
住在化工40天,节省了约3000元的住宿开支,四年兄弟情,无以表达感谢,来日方长,希望情谊长存。
七、未来展望
我想我已经决定去做Distributed computing和Data Mining了,毫不犹豫,下学期加入王老师的海量数据研究中心,希望接触到更多实际的项目。
之前把玩过Hadoop、Spark、Strom,也就是写写WordCount,搭搭伪分布式或者本地分布式环境,已经忘得差不多了,接下来抽时间细作WordCount,接触实际项目,把上述框架把玩一遍,深入了解下ZooKeeper、Hive、Pig、Hbase此类,之前了解的不够深入,当然,爬虫还是要学的,暑假之余了解了py和Scrapy,python的确是一门出色的语言,能做很多事同时也非常简洁,接着学学Scrapy,爬爬网站。至于Lucene、Nutch、Solr此类,有时间再学深入了解吧。还需要掌握下Nginx,目前做负载均衡用的还是比较多的,我们的项目也在用到。
记得和老大说过这样一句话:我只能看得到自己一年后的样子。正如老大所说,这样的人生才有意义,不然,倘若你看得到十年后的样子,岂不是人生很无聊吗?
八、特别鸣谢
我想我最应该感谢的是研发九部老大徐Sir,我的二面面试官,是您给了我实习的机会,我一直心存感激,珍惜在宜信实习的每一天,没有太多机会和您促膝长谈,只是离职前有机会和您聊一次,感触颇深。诚然,基础非常重要,我会谨记您的教诲,夯实基础,努力成为一名合格的软件工程师。
再次感谢Team老大,您这段时间教会我太多东西,不仅仅是技术,还有其他更重要的东西。您是一名出色的Leader,善于与人沟通交流,积极组织团建,带动气氛,当Team里有人遇到困难的时候,您都同他长谈,解决疑惑。您是我的榜样,我希望以后可以跟您一样出色。
再次感谢鹏哥、杰哥、一为,认真耐心地回答我每一个问题,教会我很多技术细节,希望有机会能再次合作,像你们学习。
附上我的离职申请:
最后送给自己一句话,与君共勉: