文章目录
0. 题记
四年前,也就是2016年的5月,我从祖国的大南方深圳转战到北京,正式从一名数据分析统计员(量化统计分析)成为一名自豪的C渣渣 “程序猿” \ “攻城狮”,从此很快乐地New对象。
下文是自己的一点经历和一些不成熟或错误的经验,请谨慎批判性阅读。
1. 为什么要面向对象?
1.1 面向过程它不香吗
上学的时候,课堂上必修过C,用Matlab搞过建模比赛,都是面向过程,根据问题,写各个函数,main调用函数解决问题,即使有属性什么的,都放在struct中了,面向对象是啥?为什么要面向对象?
1.2 我这算是学习了面向对象
大三的时候选修的C++,正好遇到上课的老师还在怀胎,本来一个学期也没几节课,又有一半的课她请假了,更没去过实验室。就这样,一行C++代码都没写的情况下,算是把这门课学完了。
最后,好似知道C++好似比C多了一个class,每次解决问题的时候还得先建立一个类,再new一个对象?类中还得分public,protected,private,为什么要这样,创建类好麻烦啊!直接一个function它不香吗?
以上种种抱怨,都是因为没做过工程,没面对过复杂问题,不知道项目project、解决方案solution为何物。
2. 初步接触大工程
2.1 来来来,入职第一步,熟悉环境
在北京,试用期的2个月,我是在惶恐和紧张中度过的。周末也不敢出去玩,看公司的技术文档,调试项目,学习新技术,菜鸟教程一直是自己的入门首选。一个120多个project的客户端工程,当时光安装IDE(vs2008),部署环境,编译过,跑起来,就用了整整一天。
入职第一周学习使用这个客户端(股票交易客户端),用客户端支持的VB语言(老一代炒股软件必备支持语言)重写一些自己之前用Matlab写的回测模型(量化策略回测),模拟运行策略。
是的,小弟进的是金融软件公司,没在猪都能飞起来的互联网。
2.2 优秀而龌龊的单例
第二周开始,我的老大就开始测试我水平了,让我做一下客户端的回测功能,增加回测结果评估指标的计算,保存虚拟委托,成交,持仓,让我先写一个方案。
我根据自己前面所看的,发现项目中有多个地方使用单例这个设计模式,正好我的这个回测也可以用单例,一个大中心,根据回测模型的requestId区分不同的策略,计算,保存各个值。后来(多年?)想想,用什么单例啊,一个策略对应一个回测处理对象它不香吗。
3. C++代码要怎么写?
3.1 如何建立一个类?
这个简单,项目中有的是类,copy一个,改改就是自己的了。哎,程序猿,特别是我这种半吊子,copy是一个必备的技能,知道怎么copy,copy哪里,copy后怎么改都是需要实力的嘛。
3.2 代码怎么写?
说真的,我当时真的遇到了一个大大的问题。*try…catch什么时候用,每个方法中都要用吗?对自己写的代码会不会引发异常?会引发什么异常?额,这完全没有概念嘛。
那,都加上下面这个万能的try…catch吧。
try
{
//your code
}
catch (...)
{
//your exception handle
}
这个**…**简直不要太香。
3.3 后来老大发话了
老大说你这样写代码不行啊,都是try…catch影响程序性能。像这种不是文件读写,数据库连接,没必要加try…catch嘛,指针为空,数组越界什么的,自己用if语句判定就行,别用try…catch,浪费呀。
哦!!!???
4. Linux好难呀
4.1 我可能是个编程小天才?
搞完了上面的模型回测小小功能,我马不停蹄用不到2周就搞定了金仕达V8T行情对接。对比另一位同事用了2个月也搞不定另一个行情对接,老大觉得我简直是个编程天才啊。
天知道,我只是把我的小组长写的对接V6T的整个project复制了一个,换个名,然后更换下使用V8T的dll和lib库,这个工作就弄好了。之所以用了2周,还是需要调试时间的嘛,顺便向小组长请教下大概流程。行情是如何订阅,如何回来,怎么解析,这些还是要知道一点的嘛。
哎,天才个屁,运气好点,有了一个好小组长,和一个现成的项目,哈哈哈!
4.2 我的新任务——爬虫
老大可能觉得我实力大大的有了,有一天他直接问我和另一名同事,你们搞过python吗?
我的回答是,就简单学习了一下。
“我们的客户端F10一直不完善,股票信息,股东信息一直没有,你爬爬交易所,别人的,如同花顺,搞一个我们自己的金融数据库吧!”
搞一个金融数据库?What the Fuck!没事儿,没事儿,我不断安慰自己,初入猴圈,有的是冲劲,正好最近在菜鸟教程上学习了Mysql,搞起。
证据在此,当时爬网页的时候写的文,python爬虫—post抓取查询数据简单说明,还有几篇别的。
4.3 什么鬼啊?我搞垮了一台服务器
爬到数据了,当然要存库了。然后我期待已久的Linux操作来了,纯命令模式,简直不要太高大上。我有点兴奋呀,直到我想删除一个文件夹下的所有文件,使用了下面的命令:
rm -rf /*
朋友圈为证:
4.4 其实项目(功能)是可以无疾而终的
虽然,后来没有被炒鱿鱼,金融数据库也搞起来了,但是在客户端取数据做展示这一块迟迟没有搞(需跟另一位前端同事对接)。后来别的更急的项目来了,这个就不了了之了。小弟也最终只是练了一把Linux和python的手。
5. 完美对象New不来,还是找一个吧
5.1 我们相遇的平台
17年的时候,开始搞新的极速交易客户端,支持python策略量化交易。在做这个项目的时候,遇到了很多问题,python锁,多线程冲突崩溃,内存不够,下单慢等等。自己也感觉遇到技术瓶颈,一些性能问题解决起来有心无力。
18年,在教一个测试如何用python在客户端上写策略,进行测试的时候,我们一起吃了个饭。后来多个周末,相伴第一次去游览了故宫,景山公园,北海公园,后海,南锣古巷,国家图书馆,动物园,颐和园,圆明园,朝阳公园…
我终于有了一个不用New的对象,从此能更好面向对象啦。
6.后记
2019年6月21日,历时3年零2个月,我结束了我第一份程序猿工作。在这里,从小白变成了老白,Ctrl+C,Ctrl+V用的炉火纯青,但坑好似越来越多,在被埋之前,我脱坑了。
后来的工作或平时中,用python搞过自动化测试,学了一点点前端,用Django搞过自己的简单网站,学了一点点java,搞了一点点C#,还在继续使用着C++。
自己好似,终究没有深入过某一门技术,都是在不断的项目功能驱动中,用着纯中文的搜索,在性能不太行,代码可猥琐的道路上蹉跎前行。