学习新知识的过程总是痛苦和逆人性的,古往今来皆是如此,否则也不会有十年寒窗苦读一说。
相信此刻看这篇文章的你,经历的寒窗绝对不止十年。
从小学开始算起到大学毕业,绝大多数人起码经历了16年(跳级的神童与学霸除外),读完硕士那就是19年,如果再继续读个博士再加三年(如果你足够幸运能够如期毕业的话)。
与十几年寒窗苦读所经历的煎熬相比,学习一门新编程语言就算是相当容易了,你所需要花费的时间仅有前者的十分之一不到,而且也无需昂贵的学费。
在《异类》这本书中,马尔科姆.格拉德威尔提出了一万小时定律:想要在任一领域成为专家,都需要通过10000小时的积累。一万小时是什么概念呢,假如你每天持续学习3小时整年不间断的话,你需要持续学习9年。当然我们大多数人不必成为专家,我们更多的是要掌握一门技能,能够作为学术研究或职场工作的趁手工具,能熟练主要语法,不耽搁研究或工作进度,掌握解决问题的方法即可。我在学习R语言阶段仅用了6个月左右的时间(我指的是无死角的系统学习,case by case的解决问题不算),累计500小时,不足一万小时的1/100,也足以应付毕业论文、以及日常工作应用了。
可为什么还是有很多人觉得编程语言那么难学呢。究竟应该学些什么、具体怎么学、有没有捷径呢?
我复盘了自己3年前学习R语言的经验,结合给部分网友提供问题咨询以及学习建议的经历,给出自己的答案。
一万小时定律是对成为专家的极为苛刻的要求,它本身是有价值的,但是有一些潜在假设。即你所花费的每一小时都是有效率的,至少不是在原地踏步或者把时间浪费在无关紧要的细枝末节上。为此你需要有明确的学习目标、要有专注和高质量的学习时间投入、要有实时的激励与反馈系统、要能阶段性的突破舒适区,及时踏入更有挑战性的学习区间。
简单来说就是要刻意练习,而非低水平重复。这也是《刻意练习》这种书中作者安德斯•艾利克森博士所强调的刻意学习法则。该法则适用于绝大多数需要投入大量时间才能熟练掌握的技能领域。
为什么你觉得R语言难学?
首先来说说为什么有很多人会觉得学R语言很难。我猜大部分觉得学起来很难的同学,应该都是文史社科类专业。这些专业所使用的研究方法以定性研究居多,对数学、统计、计算机与编程等知识几乎是绝缘的(当然财经与管理类专业应该会接触一些比较浅显的数学与统计学课程,但是编程这一块儿也近乎空白)。
专业背景导致与编程知识绝缘,这是造成你对R语言恐惧的头号大敌(不要问我怎么知道的,因为我也是文科生)。
专业背景造成的恐惧感简直贻害无穷,它让你相信编程就不应该出现在你的生命里、你是属于那种不适合也不可能学会编程的人,那是属于计算机专业才有的特权、让你误以为即便要学习这个也没有理工科有编程基础的人学的好。
曾经听到过一句特别有感触的话:我一个文科生为啥要学习编程,我以后又不当码农。
专业背景导致专业课程范围狭窄,无形中构筑了一度墙,让你与编程绝缘。
专业背景构筑的藩篱使得你将自己定位成一个不适合、不可能、学不会、学不精、学了没用的人。
专业背景甚至无形中构筑了你未来的职业围墙,让你直接对编程敬而远之。(文科生就应该去做不和数字打交道、不和代码打交道的工作,计算机和理工专业才应该去学编程、去当程序员)
如今已经21世纪了,人工智能已经越来越多的应用于改造我们的生活与工作,AI与人类竞争工作岗位的趋势越演越烈,那些存在高度重复性、流程性的工作领域或者环节,是极有可能被计算机替代的,而编程是推动这一趋势的推动力。这个世界变化的速度让你我难以想象,而专业背景,那是工业革命时代用来输出熟练工人、发挥分工与专业化的优势而设立的学科制度,如今却成为了束缚学生们职业生涯最苛刻的天花板,但它在互联网与大数据时代,脆弱的不堪一击。如果你停留在专业背景给你创造的保护伞下,刻意逃避、疏远、畏惧编程的话,你与这个时代的脚步将会愈行愈远。
这里我想表达的不是人人都应该成为程序员,都应该以编程为生,而是你要打心底改变一个观念:编程像你学过的任何一门学科一样,它是一种工具,并不神秘;编程一点儿也不难学,只要想学就可以学会,与专业背景无关。
学习R语言的二号大敌是学习方法,不科学的学习方法就算让你学上一万小时,你也大概率成不了这方面的专家,甚至只是学了一些零零散散的知识皮毛,一直在原地踏步,低水平重复。我遇到过一些提问者,简单聊过几句,看过他们的问题与困惑之后,就大概知道它的问题出在哪里了。
有的人之前完全没有接触过R语言,仅仅是因为导师要求或者专业论文必须,在没有任何基础的情况下,就开始copy网络上或者相关文献上收录的有一定难度的代码(比如一些爬虫类的、算法类的),这样问题自然就层出不穷。虽然说这种“干中学”的方式也不失为一种快速上手的方法,但是成本极高、效果极差。
具体来说,你遇到的很多问题,本应是入门基础书中的常规内容,当你在没有系统学习入门书就直接上手复制代码时,需要借助网络、参考书、甚至身边你能接触到的人一个问题一个问题的咨询,因为你不知道之后还会遇到多少问题,所以这种外部求助的方式接下来也不知道还需要浪费你多少时间。其次,这些本应属于入门级的简单问题,任何一个都能阻断你的研究进程,你会苦恼、烦躁,会对R失去兴趣甚至产生厌恶,更有甚者,会怀疑自己的智商。
这些困扰或者让你烦躁的问题,你甚至仅需哪怕一周左右的时间系统的看过任何一本R语言基础书,那么几乎半数以上都可以迎刃而解,而且你还能节省下来大量精力用在研究上,可你偏偏试图走捷径,结果走了一条世界上最难走的路。
- 急于求成让你弃正求邪
- 捷径带来自食恶果,进而苦恼、烦躁、厌恶、甚至自我怀疑
然后你彻底弃疗了,从此与R语言说拜拜,坚定而果断,头都不回一下。
为什么我会有如此真切的感受呢,因为这确实就是我自己曾经走过的路哇,当然我自己跳出来了,但是仍然还有很多同学在重复着这条路。
为什么要学习R语言?
这个问题涉及到学习R语言的动机,也是前面提到的刻意学习原则第一步。为什么要先制定学习目标呢,原因很简单,如果你不能量化它,你就不能掌握它,这是目标管理中非常重要的一条规则。如果没有目标,学习过程就容易变成无头苍蝇到处乱撞、浅尝辄止。你能一路扛过高考并不是因为你是天才,而是因为有高考分数线在约束着你,让你神经时刻紧绷,不敢懈怠;你能挺过大学毕业、研究生毕业,也是因为有赚学分、拿学历、找工作、发期刊这些目标在时刻提醒与督促着你,让你不敢肆意妄为、惶惶度日吗。
试想一下,你说你要学好R语言,但是为什么要学,你说不清楚,所以你没有压力和约束,也不知道学多久、学到什么水平算好,所以你没有规划、行动上拖沓与懒散、没有惩罚措施,你觉得即便放弃了也不会对你造成太大损失,所以你很难学好。
我来说说当时我自己的学习动机吧。
起初是为了画好图表,因为平时学术研究以及实习都需要画很多图,之前只会使用Excel画图,画的不仅丑而且能支持的图表非常有限,于是在网络上了解到R语言是数据可视化非常专业的工具,但是需要先学会编程。
再后来要写毕业论文,其中涉及到非常复杂的数目模型和数据处理工作,如果只用Excel来处理,没有办法保留计算过程,后期验证起来非常麻烦,这也算是我学习R语言的一个动机。
再后来面临着求职,当时了解了各个行业不同类型的工作岗位,不想受专业背景限制,想进入互联网行业从事数据分相关析工作,而R语言是这类位的必要技能之一。
实习期间画图、毕业论文处理数据、求职技能需要成了我最初坚定学习R语言的三个动机。
但我自己是一个只要投入时间学一样东西,就一定要学成体系的那种执着性格,不会满足于蜻蜓点水。所以我当时给自己制定了明确的目标和学习计划。
目标:
- 要能够熟悉全套的基础语法并能熟练运用;
- 要熟练掌握其中数据可视化模块并能灵活自如的运用;
- 要能够经得起实习期间的画图需求、毕业论文数据处理需要的考验
- 要能够经得起面试官考核(虽然不一定会考你代码,但是你熟练了至少有底气无所惧)
所以我从头到尾看完并敲完了《R语言实战》这本入门级参考书的代码,然后又陆续看完《ggplot2:数据分析与图形艺术》、《R语言可视化手册》这两本可视化方向的进阶书。那段时间刚好处于研二阶段,专业课很少、实习是自由安排时间(按日计薪的),所以我有大量时间可以用于看书与敲代码。
但是我依然觉得自己每日时间无法保障、计划容易中断,很多东西学完就忘。
后来我开通了一个微信公众号,每天恪守学习将近3小时时间,把自己每天的学习内容整理成笔记发在公众号上,累计写了350+篇R语言相关的原创文章。这种措施极其有效,成为了学习时间保障、效果保障的主要推动力。
实习期间接触的项目报告涉及大量绘图工作,我跟老板提议可否用R语言来处理,效果更好、效率也更高,而且很容易复用。当时我还心里没底儿毕竟刚学,但是先把话撂那儿万一搞不出来岂不打脸,这样学习的动力和约束就更强了,我实习期间在寝室里加班搞工作,事实证明这种倒逼机制相当成功,不仅项目效果图非常棒,而且自我提升相当明显。
周末或者节假日空闲时间,我就自己在网络上找数据,因为如果一直用书本里面案例数据,相当于一直在咀嚼旧知识,没有挑战性就不会有新认知和收获。
毕业论文写作过程中咬着牙把整个数据处理流程全部使用R语言完成,一共写了近1000+行的代码。
直到此刻才觉得对R语言知识的掌握逐渐系统化、体系化,也算是入门了,这段时间一共用了半年,500小时左右。
公众号推送起初只是为了记录学习过程、逼迫自己通过高频输出来建立牢固的知识体系,但是后期本身也成了我学习R语言的目标之一,因为只有不停往前学才能有更多的干货产生。
所以总结一下,我的学习动机和目标大致可以分类以下几点:
- 要把语法熟练到能够在实习过程中独自承担项目中的一个模块任务,并且高效的产出优质可视化报告,并得到领导认可;
- 语法要熟练到能够得心应手的处理毕业论文需要的微观面板数据及其画图工作;
- 要把语法熟练到能够胸有成竹的在求职简历上写精通R语言,并且能够经得起拷问、经得起白纸上手撕代码(虽然最后也没让我写代码,只是略微问几句,但是毕竟表情上可以表现的气定神闲)
- 公众号要每日更新,所以每天要保证有三个小时的学习时间,巩固旧知识的同时,学习新知识。
坦白说,如果严格按照目标量化原则来评估,以上所列目标很难称得上是可量化的,具体学多少才能算得上精通、经得起拷问,心里其实是没底儿的,但是起码你有了一个粗略版的目标可对照。我把网上能找到的博客、书上能显示的案例全都实践了一个遍。
R语言具体要怎么学?
刻意学习原则指出,科学有效的学习方法需要你有明确的学习目标、有专注和高质量的学习时间投入、要有实时的激励与反馈系统、要能阶段性的突破舒适区,及时进入更有挑战性的学习区间。
关于学习目标上一个话题我已经详细阐述了,接下来我就讲讲关于后面三个:专注和高质量的学习时间投入、实时的激励与反馈系统、阶段性的突破舒适区。
1)专注和高质量的学习时间投入
因为是在研二期间学的,所以每天腾出3小时学习是绰绰有余的,但是实践证明,如果你心不在焉的话,每天就算学习10小时那也无济于事。我属于那种注意力特别容易被周边事物分散的人,任何风吹草动都能把我的注意力带跑。
怎么办呢,那就选择周边学习环境,我会选教学楼最底层的阶梯教室,一般这种教室都很大很空,除了有课之外很少人去,而且夏天很热冬天很冷。对我就要这种感觉,周边人越少我越能集中注意力。周末或者节假日我就在宿舍或者图书馆里学,晚上12点以后室友都睡了我就一个人开着灯再看一会儿,凌晨的时候学习效率特别高。
当时因为计划未来职业转行,所以没有像很多同学一样去考注会、司考、注税之类的证书,学院里的公共活动和社团、讲座活动我很少参与(暴露了学渣本质),这为我学习R语言挤出了大量可用时间。
后来工作后逐步开始阅读关于学习方法之类的书籍,其中《心流》《自控力》《深度工作》《刻意学习》《复盘》这几本书,我印象特别深刻,强烈推荐,都是讲让你如何快速集中注意力,保持高质量的学习时间,才明白当初在学校的时候已经有意无意的使用了这些学习方法。
2)有实时的激励与反馈系统
只顾着学,没有反馈与激励是极其糟糕的,很容易让你陷入学了没用的自我怀疑中。所以我找到了几种反馈方式:
随着推送的原创内容日益增多,腾讯给我的公众号陆续开通了原创保护功能、打赏功能。这意味着你提供的原创内容价值凸显,你可以获得用户打赏,这算是物质激励了吧。
随着公众号积累的用户越来越多,内容被转载和授权发布的平台越来越广,我接到了很多广告主的广告投放邀请(这意味着你的公众号内容价值和用户价值得到了广告商的认可,具备了一定的商业变现能力,虽然我一篇广告都没有接受,毕竟情怀还是要有,广告费也不算特别多,不能向金钱低头)。
随着公众号名气的增大,我拿到了大数据培训机构的课程开发合作邀请,对方认可了我的内容价值及技能水平,认为我可以尝试着在平台上提供系统的教学课程,这样既可以补充他们在这块儿内容领域的缺口,增大影响力,自己也可以拿到一些副业收入。
再后来我在知乎上开通了专栏,并同时接私人订单,都是可视化设计相关的,点对点定制服务,直接谈价格。
在学校期间,我帮助学弟学妹们辅导论文中需要用到R语言的数据模型处理,能够用自己所学帮到别人,这是很有成就感的事情。
在公众号后台以及知乎主页,我回答、提供相关咨询服务不下100+次,无论是否有物质回报,能够解决别人棘手的问题,感觉都非常棒。
因为公众号的影响力扩散,我认识了好多同样对可视化感兴趣的小伙伴儿,我们平时经常在一起讨论问题,也相互分享关于可视化领域的一些见解以及技术趋势,这是学习R语言给我带来的最棒的资源。
以上激励与反馈中,主要有以下三类:
物质上的激励:打赏、广告、课程费用、咨询费、付费定制。
精神上的激励:指导别人处理模型、给别人提供问题咨询。
人脉上的激励:认识了一些志同道合的朋友,有很多本身就是从事互联网行业,为我未来的职业发展坚定了基础。
3)阶段性的突破舒适区
学习如逆水行舟,不进则退,学习编程也是。
如果你天天就揪着那些书本上的案例和代码不放,一遍一遍的重复敲,那你就算把那些代码倒背如流也不见得能够得心应手的应用。毕竟实际应用场景是复杂而多变的,需要你随机应变,灵活应对。
对于突破舒适区,我当初也深有感触。
筑基阶段
当敲完第一本《R语言实战》的代码时,我当时甚至就觉得自己已经精通了,因为我看到那些代码都认识,闭上眼睛都能想起来下一句代码是啥,那时候我才开始学一个月。可是现实啪啪打脸,只要我换一个新的小项目或者课题,就有强烈的不适感,很多代码似曾相识但是就是写不出来。每写一句都要翻书找代码或者到网上搜,当时感到特别沮丧。
后来我把之前学过的内容梳理了一个框架,然后丢掉了那本书,遇到困难就开始按图索骥的去找。
每周我会统计一下哪个模块那个知识点需要搜代码的次数最高,做一个频率统计。等到周末的时候,我会把那些被搜索次数最多的模块逐一再练习一遍,这样过了不到两个月,我觉得好像很少再出现基础知识突然遗忘这种情况了。
突破阶段:
只是把基础知识学熟练了,好像也就那么回事儿,我感觉又到了一个瓶颈期,于是我尝试着去做一些闭环性质的分析任务:比如去网络上抓取各类文化遗产的数据、核心期刊地域分布的数据、招聘网站的招聘信息数据、在线教育网站的在线课程数据、各省GDP的数据等公开数据,这样可以把数据抓取、数据清洗、数据分析、数据可视化等技能模块儿串联起来,形成项目闭环,锻炼自己在数据分析上的闭环能力。
为了把自己的可视化能力再突破一层,我把ggplot2这个包的英文源文档反反复复的看了很多遍,每一个图层函数的应用场景、参数说明都牢记于心,我还看了几本版式设计、字体理论、色彩搭配方面的专业参考书(其中《写给大家看的设计书》这本印象非常深刻,强烈推荐)来辅助自己提升视角设计水平。
我看了echarts官网所有的可视化组件效果图,并且所有的图表都尝试用ggplot2包重新实现,我把网易数读栏目中所有难度最高的图表全都用R语言临摹了一个遍。除此之外,我还调研了很多国际知名财经周刊《商业周刊》《华尔金日报》《经济学人》以及知名咨询公司《贝恩》《罗兰贝格》《尼尔森》的大量图表,总结提炼他们的视觉风格。
为了写出更加优雅的代码,我阅读了很多R语言高阶编程指南(《R语言编程指南-任坤版》强烈推荐这本),还硬着头皮阅读一些比较知名包的项目源码,从中学习模块化、面向对象编程的知识,并给自己的每一个项目都制作项目模板,规范代码书写以及代码风格,这样你的代码质量会更高,更易于维护。
输出阶段:
我接受了一个培训结构的课程合作,把自己学过的课程化知识整理成一门课程体系,算是对过往学习的阶段性总结。
我开始接付费定制,挣了一些零花钱,虽然不多但是对于一个未出校门的学生足以大大改善生活。
后来入职以后,我把自己在空间可视化方面积累的技能悉数沉淀成部门技术文档,也用在了平时多个分析项目结果呈现中。
为了保持自己对这些技能的熟练度,即便工作以后练习的相对少了,每月我还是会单独抽出几个小时的时间看看过往的代码,练习一些新的知识,如果曾经付出过巨大努力而收获的技能,仅仅因为使用场景变少了而被荒废那就太可惜了。
总而言之,学以致用,稳步提升对于突破技能学习的舒适区,进入更高阶的学习区间非常重要。可能每个人的进阶方式不同,但是进阶的步骤不容忽视,否则会面临着止步不前。
R语言学习具体要学些什么?
这是一个没有标准答案的问题,我只能根据自己的经验来勉强回答,可能每个人给出的答案都会略有不同,跟各自的专业/职业背景有关,但是其中必定存在一个最大公约数,或者说是交集。在产品研发领域有一个专业名词叫做“MVP”,大意是说做产品不能求大而全,要先做一个最小化可用版本,先满足用户最基本需求,抢先占领市场,之后再根据用户反馈,快速迭代,站稳脚跟,市场瞬息万变,机会稍纵即逝。
对标到R语言的学习,我们每个人也都需要一个自己的内容“MVP”,我的MVP是这样的。
基础语法
导入导出:黏贴板导入、txt、csv、xlsx、sql等数据导入导出
数据结构:向量(vector)、矩阵(matrix)、数组(array)、数据框(data.frame)、列表(list)
基础函数: 循环语句(for/while)、判断语句(if else) 自定义函数(function)
实践应用
数据抓取:RCurl、rvest、httr、XML、xml2
数据清洗:plyr、tidyr、lubridate、dplyr、jsonlite、rlist、%>%
文本分析:stringr、jiebaR、wordclound2、topicmodels、RTextTools
数据可视化:ggplot2、shiny、rmarkdown、leaflet、ggmap、sf、sp、rgdal
如果你能按照以上所列用心搞懂每一个包的核心函数用法,并且能够锲而不舍的保持高频练习、阶段性总结与复盘、阶段性突破,那么熟练掌握R语言并非什么难事。
当然每个人都应该拥有自己的学习路线和风格,不必强求千篇一律的模式,只要你时刻牢记学习目标、投入高质量的学习时间、构造合适的激励与反馈系统,最后在适当的时机勇敢突破舒适区,走进更高阶的学习区间。时间会证明一切,你不需要一万小时就可以成为高手。
学习R语言能给你带来什么?
这个问题就更千人千面了,曾经也有非常多的人问过我,我说说我的看法。
比较显性的,因为学习了R语言,我实习期间表现还不错、论文数据处理还算顺利、毕业offer拿的也还算顺利(虽然这个可能相关性不大),这意味着转行成功,进入了高速发展的互联网行业, 成为了一名数据分析师,这也是之前给自己制定的目标。
认识了很多志同道合的朋友,有研究前端、开发产品、数据可视化等专业科班出身,这意味着我身边有很多权威人士,当自己遇到问题再也不愁解决了。
切实的给自己带来了物质回报,虽然不算太多,但是毕竟自己种的瓜吃起来还是很甜的,虽然要看天吃饭。
开始入门编程的那一刻,由于专业背景带给自己的观念束缚就开始松动了,我发现自己走进了一个新的世界,越往前走,风景越好,我终于开始理解中学时代那句邓爷爷说过的话——科学技术是第一生产力这句话不是空话,是真的。
再后来但凡遇到可重复性的工作,我都先尝试使用编程的手段来解决,特别是工作以后,这对我的工作效率有了大大提高。我发现自己面对未知和不确定性的能力增强了,心态也更加坦然了。用了同样的学习方法,之后我又陆续学习了Python、SQL语言,这要放在2年前那是不敢想象的。
你会发现只要你使用科学的方法去学习,专业背景给你造成的限制根本奈何不了你,它就是只纸老虎,你拳头一出它就怂了,可就怕你先怂。理工科和计算机的同学,它们也会面临着新语言学习的困难,如果方法运用不当的话,也会困难重重,处处碰壁。
不要因为专业背景而禁锢你的技能树,那样你会失去很多人生中的重要机会。
最后免费分享给大家一份Python全套学习资料,包含视频、源码,课件,希望能帮到那些不满现状,想提升自己却又没有方向的朋友。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、Python练习题
检查学习结果。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【
保证100%免费
】