论成为数据科学家的策略

作者: Leesper | 来源:发表于2018-06-15 21:30 被阅读219次

政策和策略是党的生命。——毛泽东

政策和策略也是任何组织或个人的生命。在我们人生的每个阶段,总会遇到各种各样的困难,要想办法,要解决问题,那么就要研究问题,抓住问题的本质和规律,从而运用实践能力将其熟练应用,进而解决问题。参加工作五年以来,我一直在不停的反思和总结自己的职业规划。一个面对现实的人,一定要睁大两只眼睛看到自己的过去和未来。一只眼睛回顾历史,看看自己走过来的路,都有哪些缺点和不足;一只眼睛展望未来,再好好想想自己的性格和喜好,以及以后的路该怎么走。思路总是在不断的自我思辨中越来越清晰的,人生的方向也会越来越明确。于是便有了这篇随笔,写下来,与大家一起交流,探讨,共同进步。

一. 我们所面临的现实

身处一个“知识密集型”的行业,可以说我们面临的现实是危机四伏。时代正以前所未有的速度爆炸式的向前飞速发展,在这样的背景下诞生了数据科学这样的新兴学科。数据科学是一门交叉学科,涉及到数学、算法和工程领域的方方面面。你想做点数据分析方面的工作,要用到各种各样的数学分支,要弄懂各种算法的适用场景;你想把算法模型应用到工程实践,要熟悉各种分布式计算框架,要会搭各种各样的分布式集群,还要会架构会调优;你想把得到的成果做可视化展示,要懂前端,会用D3.js库……这一整套知识体系和工具方法看得人头皮发麻,你就是不要命的学也赶不上技术发展的速度了。

随着年龄的增大,你要扮演的角色越来越多,时间越来越碎片化,会有各种各样的人和事来占用你的时间,你再也不能像学生时代那样安安静静坐在书桌旁边,有整块整块的时间去自由探索。更可怕的是,你的精力也大不如前,每年都有比你年轻,比你能加班,比你学历高,比你优秀,比你学习能力强的新鲜血液涌入社会,你会不会懊悔自己“年轻”的时候为什么没有努力学习?我记得很小的时候问过我妈,您这辈子最大的遗憾是什么,她说:“没有好好学习”,当时我还小,完全无法理解,现在我理解了,如果有人来问我,我的答案也是一样的,我很后悔年轻的时候没有再好好努力一把。

这就是我们所面临的现实。年轻的朋友们不要觉得自己还小,还可以有大把的时间拿来挥霍,你现在觉得自己很“轻松”,那是因为父母的年龄还不算大,你可能有了女朋友但还没结婚,还没有思想准备面对柴米油盐的生活。等你人到中年,父母年纪大了需要你的照顾,子女年幼需要你的抚养,家庭的责任加上工作的负担,自己还体力脑力不如年轻人,请问到了那个时候,你还有多少时间留给自己?多少时间能拿来实现自我成长?

年轻是一种“债务”,年少无知欠下的债,人到中年总是要还的,所以一定要有危机意识,要看到生命的整个阶段不是平均的,而是不平均的。趁年轻,趁还来得及改变的时候,用自己相对轻松的前半生,化零为整,把一些困难的,不容易对付的硬骨头啃下来,成建制成体系的构建自己的知识结构,哪怕它只是一个骨架;然后再用自己不那么轻松的后半生,化整为零,去补充、丰富和完善它的内容,在这个过程中不断提升自己的思想维度。

二. 该批判的和该坚持的

有两种错误的思想是要坚决摈弃的。一种是立场不坚定,没有勇气去面对这么多困难,觉得自己扛不住那么多艰巨的任务,很快就要完蛋了,要被时代所淘汰了,这从某种程度上讲是“亡国论”思想的变种,是要不得的,还没上战场就在心理上输了,会影响主观能动性的发挥。另一种则是心浮气躁,怕累嫌麻烦,没有耐心去做基础性积累工作,看见人家框架玩的好自己也去玩框架,盲目跟风,不愿意打基础,知其然不知其所以然,“以其昏昏使人昭昭”,妄想三两个月变成“大神”、“牛人”、“大佬”,学会了几个API就觉得自己精通“深度学习”,开始各种吹嘘,这是一种更危险的思想倾向,是“速胜论”的典型观点。《易经》早就对这种人有过非常经典的论断了:

“翰音登于天,何可长也。”——《周易·中孚》

意思是“鸡飞到天上,也就一口气的功夫,必然会掉下来的。”,在浮沙上筑高台怎么可能长久得了!而我们要坚持的,是“持久战”的思想,是要有克服一切困难的信心和决心(战略上藐视),然后讲方法讲策略,随机应变,开动脑子去解决问题(战术上重视),所谓“立志如山,行道如水”,讲的就是这个意思。所以在面对超出自身能力太多的困难和任务面前,我们一定要有充分的思想准备,特别是“打硬仗,打恶仗”的思想准备。我曾经看到过一种观点,认为应用开发领域只要编程能力强就行,数学好不好无所谓;而进入人工智能时代,数学一定要好,但编程能力一般般就可以了。一开始我深以为然,后来仔细一想,我觉得这个观点前半段是对的,后半段是错的。如果你的目标是要成为数据工程师,的确编程能力够强就行了,数学不好也没关系;但如果你的目标是成为算法工程师,那么编程能力和数学能力都要好,因为到了一定阶段,你总是要把数学和算法做“变现”的,可能你会开发一个机器学习的框架或者库给别人使用,如果你编程能力不行,你的数学能力就发挥不了价值,那就好比茶壶里面煮饺子——有东西也倒不出来。而我接下来要说的,就是怎样成为数据科学家,它是一个更高层次的东西:数据科学家 = 数据工程师 + 算法工程师。

三. 成为数据科学家的战略方针

人的生命是有限的,而知识是无限的。穷尽一生我们也不可能掌握人类全部的知识,就算掌握了也是没有意义的。所以我们首先要做的就是树立目标:“成为数据科学家”。这样就限定了一个范围,把个体有限的生命在无限知识面前的“绝对劣势”变为“相对劣势”,做到这步还不够,还要对“数据科学”这个主题进行调查研究,将它拆解成一个个的子领域,再挑其中几个感兴趣的子领域,至少成为这几个细分领域的“数据科学家”,这就把“相对劣势”变为“相对优势”,然后再把子领域拆解成一个个的目标和任务,这个过程不断持续下去,直到任务足够小,小到我可以上手做了,然后不断实践,熟练掌握,就把“相对优势”变为“绝对优势”,这就是成为数据科学家的基本方针。

“数据科学”分为分析和工程两大领域。分析强调的是对算法的理解和掌握,其本质是数学基础,你要对数学比较熟悉才能看懂算法的推导原理,因此本科上过的数学课,基础的数据结构和算法课程是很重要的;工程强调的则是对“高性能”,“高可用”,“高并发”和“分布式一致性”理解和掌握,其本质是分布式系统,其核心在于“分布式计算”和“分布式存储”技术,其核心思维是“线程思维”,是研究如何解决“C1000K”问题的策略和方法,因此熟悉服务端开发并以此为跳板日后转行做大数据软件开发是很有帮助的。下面我们就来探讨下成为数据科学家的“两阶段”战术方针。

四. 成为数据科学家的战术方针

1. 广度优先阶段

这一阶段主要是打好计算机科学的广泛的基础,为后面深度优先阶段做准备。具体的八字方针为“以重制轻,正心跬步”。也就是说以后端为主(重)以前端为辅(轻)。前端只要熟悉基本的HTML/CSS/Javascript即可,能做到独立开发一些简单的前端项目,理解前端是怎么工作的即可,这方面的资料可以参考优达学城的“前端开发工程师”和“React开发”纳米学位或者FreeCodeCamp。重点是要熟悉后端开发技术,特别是长连接服务,最好能做到用自己喜欢的编程语言实现一两个这样的网络编程框架,具体怎么写可以参考陈硕老师的《Linux多线程服务端编程:使用muduo C++网络库》,所有要用到的理论和方法这本书都讲到了。熟悉长连接服务的动机在于培养线程思维,特别是掌握如何实现“跨线程调用”的技巧,很多分布式计算框架的底层机制都是基于“IO事件循环+多线程”实现的,而这也是实现长连接服务的基本思路,透彻的理解这一技术对日后深入研究分布式系统是有很大帮助的。在这个阶段,最好熟悉下常用的数据结构和算法,这对以后研究机器学习算法打下良好的基础,而且找工作求职面试时也能用得到。

2. 深度优先阶段

有了前面的广度优先的基础,就可以在适当的时机切入,做数据科学的“深度优先”积累。具体的八字方针为“中央突破,两翼齐飞”。要突破的是“数学”,我曾经咨询过身边认识的牛人,他们都一致认为本科时学的“高等数学三件套”是基础,其中微积分和线性代数相当于是高等数学的基本思想,只要掌握到本科阶段就足够了,而现有的机器学习算法很多都是基于“统计学习”理论的,因此对概率论和数理统计要求较高,这块能学多深学多深,其他的用到什么再学什么,比如如果你研究的是“强化学习”的细分领域,那么你再学点《随机过程》,注意不要把摊子铺的太大,铺大了就容易陷进去出不来了,毕竟我们的目标不是成为数学家,而是掌握必要的工具。

然后就是掌握“大数据工程”和“机器学习算法”这两个方面。工程方面,先熟悉各种分布式计算和存储技术,学习自己搭集群,做性能调优,架构优化,熟悉到一定程度后可以研究其源代码和底层实现原理;算法方面,多读经典书籍,跟着做一遍算法的数学原理推导,多看别人的数据分析报告,多研究别人的算法建模模型,按照“数据分析——机器学习——深度学习”的顺序由浅入深,逐步培养自己的“算法感”,然后根据自己的兴趣爱好挑一两个领域,比如计算机视觉或者自然语言处理,做深入的积累。

五. 时间管理方法

光有成为数据科学家的动机是不够的,还要学会创造成为数据科学家的外部条件。形成适合自己的时间管理方法非常重要,下面我再简单谈谈自己的时间管理方法,这个时间管理方法与上面“成为数据科学家的战略方针”是相呼应的。

1. 确立目标

还是那句话,万事以“确立目标”为起点,但这里的目标就不光是“成为数据科学家”了,你可能还有一些其他的目标,比如“锻炼身体”也是重要目标之一。根据毛主席“文明其精神,野蛮其体魄”的主张,凡是四肢发达的人,头脑更发达。没有强大的身体素质是撑不起繁重的工作任务的,伟大的思想和美丽的女人,也绝不会委身于一个身体不行精神羸弱的男人。所以至少要确立一个学习目标一个锻炼目标,从精神到肉体不断超越自我。

2. 分而治之

第二步,将目标分解为活动,活动分解为任务,这个过程一直不断地持续下去,直到任务足够小,小到你觉得你能够上手去做了为止,并对任务标记优先级,定位对你来说高优先级的任务。然后准备一个周计划表,以一周为时间单位,把一周当中每天可以自由支配的大块时间梳理出来,然后把分解过的任务填进去,但是要留有余地应付突发事件。每天起床要做的第一件事就是看当天的任务清单,每天睡觉前的最后一件事就是回顾当天的任务清单,每个周日做下周的周计划。在规划好的时间内,推掉其他的一切事务以及社交活动,专心致志地做任务,每做完一个划掉一个,然后再从任务清单中挑出新的高优先级任务放入周计划表,坚持做。在做的过程中可以采用番茄工作法,每25分钟为一个番茄钟,在这个时间内不受干扰地专心做好一件事,不看手机,不刷抖音,等这个番茄钟结束之后休息5分钟,再视情况决定是继续做下一个番茄钟还是干点别的。等公交车或者排队时的零碎时间也可以利用起来,要么用来思考和整理自己的想法,要么可以听一些广播或者讲座,丰富自己的知识面。这样一环扣一环,即利用了大块的时间,又利用了零碎的时间,把自己的目标真正融入到每时每刻的生活中(“行走坐卧皆是禅”),不断地完成任务,进而实现目标,在这个过程中收获的是成就感和自信,以及厚积薄发,不断提升的自我。

相关文章

网友评论

  • 影山谜行:用罗辑思维常常说得一句话总结就是:结硬寨,打呆仗。
    遇速则不达,没有方向也不达,职责规划也好,人生目标,是确定方向确定时间的过程,也是身体力行的结果。
    读书时候,成绩差的同学总觉得成绩好的同学是仅仅是因为努力才成绩好,甚至会幻想自己努力就会成绩好,这就是忽略了别人的规划,忽略了别人的积累。
    工作以后众人间的职业差距也正在于此。
    这篇文章给我很大触动,谢谢。

本文标题:论成为数据科学家的策略

本文链接:https://www.haomeiwen.com/subject/stnmeftx.html