可见优势:UI层面的2D,3D绘制,复杂的UI界面的开发,语音、图像等的开发,游戏开发,金融
隐性优势:数学是最NB的抽象,数学学得好,编程的那些抽象都是小意思
如何弥补一些网络和计算机知识的匮乏:多看代码,多写代码,google,stackoverflow
数学专业能力千万不要丢。
等你入了行了,有了基本的工作经验后,机器学习,数据挖掘,图像识别,人工智能等大量的东东等着你,这些意味着高薪机会和高大上的各种有趣的应用场合。
知道我多羡慕你吗!眼珠子都要瞪红了。
比如欧莱雅那个实时上妆的应用,要应用人脸检测,关键点检测,实时跟踪。
人脸检测倒是数学用的不多,关键点检测要用到形状回归,形状回归要用到一堆统计方面的知识。实时跟踪,现在一个非常好的跟踪算法的数学基础是压缩感知,压缩感知是陶哲轩一次接小朋友放学时和另一个教授聊天聊出来的。
当然,欧莱雅这个做的很烂。iOS下勉强能看(iOS有人脸关键点的API),安卓下完全不能用。很烂的原因,我猜他的开发者就是个调包侠。这就是程序员不懂数学导致的。
要做好,光这些还不行。还要用到仿射变换,图像融合,Image Morph,Color Transfer(这个要用到主成分分析),还有各种样条啊,插值啊 ……
你说不懂数学做得好吗?
只有编程牛了你的数学优势才会体现,因为大部分程序员是碰不到数学的。而且只有数学很厉害你的优势才会大,因为编程牛的人数学也不弱。所以需要什么就去学什么,不要固步自封。
我也是数学专业的,握个爪。07年我刚到土豆网工作不久的时候,有个google的工程师应邀来访问座谈,好像是个老印,当时我问他:数学系毕业生在Google做的工作有什么不同。他的回答是:大家做的工作都差不多,不会因为你的背景不同有太多差别。他背后的意思应该是:别看我是CS专业,数学也不差啊!
虽然做图像处理、搜索、推荐、计算广告、data mining需要比较专的数学知识,但理工背景的程序员花些时间都能搞明白。但有些方向会有很大的优势,比如加密算法,需要有数论的知识储备;工程力学计算,需要对数学、力学有深刻的理解。某些应用数学、计算数学专业本科就学的东西,CS博士阶段才会分方向去深究。以上并非扯淡,我有同学在航天部、卫星发射中心做火箭/导弹轨迹计算,也有做椭圆曲线加密算法商用的,也面试过做石油力学计算的数学系背景的候选人,但这些方向毕竟岗位有限,跳槽难,薪资也不一定高。
从iOS开发来看,工作前期不管是什么背景,差距应该不会太大,多练代码吧。数学专业的最怕把自己端着,一定要搞研究啊,最次也要去做搜索排序算法、推荐引擎什么的,这种想法要不得,先好好把代码练好才是正道。
这两年在创业公司做技术管理,之前在大的小的互联网公司做web开发,搜索引擎方向做了很多,更偏向于架构设计、性能优化。有一次入职的时候,技术老大看了我的背景问:你是要做research还是engineering,我回答:工程更有意思。
前段时间用HTML5 SVG做图表类的项目,就需要有一个算法实现,在平面坐标系里给几个点,然后用光滑曲线连接起来。感觉是比较有难度的。我虽然大学读数学,但是贝塞尔曲线没有怎么接触过,还是要靠查资料才能慢慢搞懂。其实,数据结构,算法,数学在编程中都有用处,看你接触的项目类型多不多吧。