技 能|金融学生如何从基础开始学习计算机?
知乎问题:
金融本科专业在读学生,想要学习计算机,但是我真的很白痴,怎么都学不会,从学习vb血淋淋的一学期就可以看出来。因为本身对计算机不怎么感兴趣,而且本科金融专业用到电脑的机会真的没有,我不知道哪些用处大,哪些没什么用T_T所以现在想要从计算机的基础学起,求各位大神告诉我该从哪方面学起,对以后读金融研究生有比较大的帮助。
知乎回答:
首先说一下熟练运用计算机的必要性和意义。
在这个时代,如果从事专业性较强的职业,计算机应用的熟练程度、开发水平能很大程度的影响你的思维方式的严谨性和工作生产力。
思维方式方面,直接的体现就是,分析一个项目,学习计算机编程和从事涉及编程的项目开发(例如金融中的程序化交易、量化交易或者其他涉及大量数据处理和分析的研究型项目)能培养较为严谨的系统性思维,在处理各种项目时都大有裨益。
工作生产力方面,同样是要处理几十个Excel表格,无法熟练运用的人可能在很小的问题上就卡一天解决不了,枯燥的手动操作各种复制粘贴、改来改去,上司的一个需求变动就要大动干戈重新做一遍,这样的生产力是极其低下的。
目前国内据了解,可能大部分较为专业的金融从业人员都要和Excel等软件打交道,但很少能熟练运用,只知道一些最基本的功能,大部分能够通过编程或者聪明的操作方式完成的许多人还是手动完成。
如果掌握了一定的编程技能,这些耗费大部分人一天甚至几周时间的琐碎的重复性工作(比如合并100个Excel表格、为2000人打印每份收信人名字都不一样但内容相同的邀请函、按照特定方式处理较大的金融数据,从400页的网页上抓取空气质量数据用来设计某种产品),到了懂编程的人手里就只要几分钟或几个小时就能完美的解决,并且遇到需求改变时也能从容淡定的换个参数重新执行即可。甚至在一些没有计算机可用的情况中,编程仍能帮你解决问题,例如让你按照名字字母顺序排序1000页文件,如果不懂任何排序算法,那么你可能会称为无头苍蝇;如果你懂得排序算法,那么你就可以手动地来模拟计算机排序算法,把这个任务按照比别人快很多倍的速度手动完成。
计算机在许多工作中都不是必要的,但很有可能帮助你大幅提升生产力。编程教会你如何思考(Programming teaches you how to think)和解决问题(problem solving)。
明确了非计算机专业的学生,尤其是金融专业的学好计算机的必要性和意义之后,我就主要讲讲我作为非计算机专业的金融学生学习计算机的经历和一些想法,希望对题主有帮助。
非计算机专业的学生想学好计算机,要么就要有很强的兴趣、探索欲,要么就要有非学好不可的压力(比如作业无法完成),两者都有是最好的,会快速提升你的技能。另外,需要有「专业化」(professionalism)的精神,就是想把事情做专业一些,做完美一些,这样你的一个项目从一开始的简陋不断完善成美观、易用、交互体验良好、背后的设计思维一致,才有动力实现,在不断追求专业化的过程中你的水平才能进步。
对于小孩而言,他们有大量的时间探索、试错、思考、查阅,这样积累起得经验是最原始的,最直觉的,我就基本属于这种情况,就是探索——学习——探索——学习的过程。对于一个成年人,可能就没有那么多精力探索自己领域以外的东西了,因此建立起直觉可能会非常耗时。想学好的唯一的秘诀就是大量使用计算机和编程,所有东西都想想能不能用计算机来做,不会的东西多试验,或者多查资料,做的东西都不是做完就完了,多想想能不能改进——技术上、效率上、结构上等等,凡是能改进的全都改进,不断地改进,即使是一个Excel表格。在这个过程中,多激励自己,让自己有成就感。只看书、只上课学而不去大量的实践做各种小项目,纯属浪费时间。
小项目从哪里来?到处都是。如果一开使做不了我本科做的那种企业经营模拟对战,可以从课本上简单的东西来。自己实现一套二叉树欧式期权定价、美式期权定价、蒙特卡罗方法欧式期权定价,美式期权定价,不断地完善并且一般化、参数化,直到能轻松地做亚式期权、百慕大期权、敲入敲出期权、障碍期权定价。写的过程自己分析、自己设计,做出来后自己调试、自己测试,千万别看别人怎么做的。完成之后,看看别人怎么做的,能吸取到哪些教训,学了哪些新东西。你的下一个小项目,水平就更高了一点。不断地积累下去,是一切学习的秘诀。
那么,对于一个没有多少计算机基础的金融本科生,如何开始呢?我提供一些建议:
不要眼高手低,光看,不实践。把基本的办公软件学扎实,作为硕士生应该要掌握基本的LaTeX,不喜欢这套体系可以用LyX,总之文档排版系统是基本应该会用的。
开始学编程。R,Python等等都可以,把网上的简单教程看个遍,代码敲个遍,别偷懒,运行之前多预测会产生什么结果,多调整一下自己写的东西看看会产生什么不同,多思考为什么会这样。之后实现一些基本的算法,也可以实现你学的统计和计量模型,比如线性回归之类的,学一个实现一个,金融计算模型(二叉树、蒙特卡罗期权定价等等都实现一下),总之要大量写代码,遇到问题自己尝试解决,解决不了去社区看看。
学习一下数据库,推荐SQLite,免费轻量级,简单易用不用部署,在R和Python里面很方便调用。对你以后做数据密集型的研究和应用有好处,我现在做的股票数据、高频市场数据都放在SQLite数据库里面,学习一下SQL语言。
【此条仅为兴趣】如果涉及编程密集型的团队研究或者其他项目(例如设计和优化新的金融套利策略和相应的回测程序,或者开发一种最新论文中的非参数统计工具并检验),凡是有多人协作的项目,都建议学一下Git版本控制系统,开源用GitHub,闭源用Bitbucket托管你的项目,写文档、issue tracking,wiki,都让你的项目井井有条,用软件工程的方式管理各种项目,是现代项目管理基本都要涉及的。
No comments yet