当下从事IT行业无非是纯技术人员和非纯技术人员,但是学习的方法、套路还是一样的。
在谈论 『写代码』 时最常提到的领域就是软件工程,它基于计算机科学和应用数学的基础。虽然没有必要成为一名数学家或计算机科学家才能成为软件工程师,但对于大多数人来说,有时候基本的编程概念也很难学习。
就拿数据分析师这个行业来说吧,如果想进阶成为算法工程师,那肯定需要自己尝试去写代码来完成某些特定领域的业务。对新手而言学习数据分析的第一个门槛就是 『机器学习』,因为这个很多人误认为需要很好的数学基础才能掌握机器学习相关算法,例如贝叶斯概率,线性回归等等,其实可以不用那么纠结的。
这里为广大新入行自学的小伙伴分析一下常规的三种方法, 自上而下、自下而上、其他方法。还会列出一些概念的优缺点,以及一些值得考虑的替代方案。
@[TOC]
『自下而上』 和 『自上而下』 的学习方法已应用于诸多学科,最需要的是知道如何应用与实际工作解决问题。解决这种问题需要将问题和实际结果联系起来才能够处理,最终指向提供一个结果或者解决方案,这个方案可以是人工的也可以是机器程序计算的。
不同学习方式的区别。
- 『自上而下』 的学习一般定义是使学习者沉浸在主题的完整背景中的过程。也就是说如果想要学习打乒乓球,会直接给你球拍跟人进行对打。
- 『自下而上』 的学习是让学习者只接触学习理论知识,比如打乒乓球涉及的动力学、物理学。但是不会涉及球桌和球拍。
自下而上的学习
选择一个例如『数学』这种研究领域,使用常规的逻辑来看待数学问题,基于目标通过技能、能力、理解力自然地引导学习。
问题是这种方式仅仅是对那些有着一定基础或者专长领域的人才有意义而已。
『自下而上』的缺点
学校的大部分内容都是围绕着这种方式来教学、学习的。许多技术和科学研究领域也都是通过这种方式教授的。这就是为什么很多学校的学生出来之后虽然知识储备很丰富,但是一干活就傻眼的原因。回想一下高中或本科学习以及可能从事过的基础学科,例如:数学、生物、化学、物理、计算机等等。是不是老师仅仅教了你知识,却很少教实际应用的事情。
还是拿乒乓球举例,无论你对空气动力学、材料学、物理力学掌握得多么透彻,但是从来没有真正意义上拿过球拍和其他人上阵对打,那么永远不会成为一名乒乓球运动员。
『自下而上』的优点
但是还是有很多优点的许多优点。我认为其中最重要的是学习者能够获得对主题的完整理解,只要花时间掌握每个组成部分(也就是常说的系统性学习)。将问题分解成小的、连贯的片段。在编程世界中,理解任何语言、框架或工具的重要部分是一个漫长而困难的过程。
在学习一门新语言时,自下而上的方法对于需要在高层次上理解一个概念以便对转向另一个概念充满信心的学习者很有用。例如使用自下而上的方法学习 JavaScript 的基础知识可能涉及学习原始值,如数字、字符串、布尔值、数组和 null/undefined,然后转到对象和函数,最后转到范围和控制流。理想情况下每个概念都将建立在以前的概念之上,为学习下一个知识点做铺垫。
自上而下的学习
是一个一个面向宏观的、实用的过程,让学习者沉浸在主题中。自上而下方法的优先级是为问题或主题领域提供更广泛的视角,而不必详细介绍特定组件如何协同工作。将自上而下学习应用于编程的一个很好的例子是给新开发人员一个他们需要使用不熟悉的语言或工具集完成的项目。自上而下的方法不是依赖于对孤立组件的掌握进展,而是让学习者通过探索和实验来理解各个部分。
『 自上而下』的缺点
说真的我听过很多次『 专家』这样说:
你必须先了解理论,才能使用这个技巧,否则你不能正确使用它。
我同意结果一开始是不完美的,但改进甚至专业知识不仅必须来自理论和实践基础。但是失去了目标导向的学习努力是耽误时间的。
自上而下的学习也有缺点。很多时候会对概念的理解不完整。学习者可能掌握的仅仅是协同操作,没有清晰的路径来理解基础组件如何协同工作。
举个最简单的例子来说字符串和数字的区别。
>>> 1 + "1"
Traceback (most recent call last):
File "", line 1, in
TypeError: unsupported operand type(s) for +: 'int' and 'str'
如果你想成为技术员,在实践中使用工具来帮助其他人,而不是成为研究人员,天天动嘴皮胡扯。不需要涵盖所有相同的领域,因为有不同的学习目标。尽管一旦有了可以整合抽象知识的上下文,就可以回过头来学习任何喜欢的东西。工业开发人员不是计算机科学家,而是工程师。
『 自上而下』的优点
自上而下的学习方法对一些学生来说特别有利。就个人而言我对编程的兴趣是由数据的处理和应用,可以让我可以实现自己完整的(大部分)工作项目。最初这与进行命令行测验和通过脚本做一些简单的游戏辅助工具。除了学习的动力外,自上而下的方法也是实用的。对于许多学习者来说,目标是只学习理解或实施非常具体的概念所必需的内容。在这种情况下,自下而上的过程将是多余的甚至可能浪费时间。
好比说你要做一个用户画像的分类需要用到逻辑回归公式计算,但是我们没有必要从头写逻辑回归的公式,直接应用第三方包调用直接可以计算结果了。毕竟老板们要的是结果,而不是说你能写公式啥的。
如何学习阅读?
回想一下你是怎么学会阅读的?
比如我现在教我的孩子读书:
- 从产生兴趣开始,比如好看的书籍封面。
- 是直接进行发音阅读而不是拼音。
- 记住最常用的单词、它们的发音以及如何拼写。
- 学习启发式方法来处理未知生词。
- 在有(无)父母的监督下通读书籍。
但是孩子不懂为什么要读书,只是单单从兴趣出发,例如:
- 阅读电视节目(广告)的字幕。
- 阅读有关他喜欢的主题的故事,例如汪汪队。
- 我们外出时阅读标志和菜单。
同样他也获得了可以跟踪并看到改进的结果。
- 拥有更多的词汇量。
- 能够独立流畅地阅读习惯。
- 可以阅读越来越复杂的书籍。
以下是他目前阶段没有必要学习的内容:
- 词类定义(动词、名词、副词等)
- 语法规则。
- 标点符号规则。
- 人类语言理论。
如何学开车?
你会开车吗?你是怎么学会开车的?
我们在报考驾校的时候一般不会学的这些,例如:
- 汽车的历史。
- 内燃机理论。
- 汽车常见的机械故障。
- 汽车的电气系统。
- 交通流理论。
直到今天,我仍然设法在不了解这些内容的情况下安全驾驶。事实上,我从没想过要学习这些内容。因为我对这些东西没啥兴趣,而且学了之后也不会帮助我在开车过程中有什么帮助。
如果在路上车坏了,我会打电话给道路救援。
如何学习编码?
最初,我开始编程时对编码或软件工程的含义一无所知。
经常会使用 Excel 中处理一些工作上的问题。也会修改了电脑游戏(金山游侠)更加愉快的玩耍等等。
当我开始学习编程和软件工程时,那是在工作以后是。因为对编程一无所知,因此有着这种想法,想从头学习:
- 语言理论
- 数据类型
- 控制流结构
- 数据结构
当我们开始编写代码时,受到是在命令行上并受到编译器问题、路径问题以及与实际学习编程无关的一大堆问题的困扰,因为没有人能把这个窗户纸帮我捅破,所以走了很多弯路。
讨厌编程?
我最终开始在一些受到用户重视的复杂系统上担任专业软件工程师。然后做了一门课程,展示了如何创建图形用户界面。
还用编程做了一些游戏的外挂,比如AI打王者荣耀。
我将无聊的东西与我真正喜欢的东西联系起来:用代码可以解决问题的,其他人也可以使用。我将它与重要的事情联系起来,它不再抽象和深奥。
至少对我和许多像我一样的开发人员来说,像我这样热情而没有时间的学生可以将数年的时间、精力和成果/成果浪费在自己真正热爱的事情上。
如何学习机器学习?
那么,是如何处理机器学习这个主题的呢?
看看你现在的学习方法是不是这样:
- 你在学习自下而上的大学课程吗?
- 是否在这样的课程中为的学习建模?
我强烈建议使用自下而上的方法学习机器学习。
- 不要从初级数学开始。
- 不要从机器学习理论开始。
- 不要从头开始编写每个算法。
一旦对这些抽象知识有了联系,这一切都可以在以后完善和加深的理解。
- 首先学习如何使用带有免费且易于使用的开源工具的固定框架来解决非常简单的预测建模问题。
- 在许多小项目上练习,慢慢增加它们的复杂性。
- 通过建立公共开源软件组合来展示的作品。
很多机构想割韭菜的那些人会说这些都是徒劳的,别理他们。
世界一流的从业者会告诉这是他们学习并继续学习的方式。为他们建模。
记住:
- 你通过练习阅读来学习阅读,而不是通过学习语言理论。
- 你是通过练习驾驶来学习驾驶的,而不是通过学习内燃机。
- 你通过练习编码来学习编码,而不是通过学习可计算性理论。
可以通过练习预测建模来学习机器学习,而不是通过学习数学和理论。
这不仅是我学习和继续实践机器学习的方式,而且帮助了我的数千名学生。
如何学习数学?
拉开机器学习的数学(如线性代数、微积分、统计学、概率等)的帷幕时,可以使用完全相同的自下而上的方法。
选择一个对重要的目标或结果,并将其用作镜头、过滤器或筛选主题,以研究和学习获得该结果所需的深度。
例如,假设选择线性代数。
目标可能是了解 SVD 或 PCA。这些是机器学习中用于数据投影、数据缩减和特征选择类型任务的方法。
自自下而上的方法可能是:
- 在 scikit-learn 等高级库中实现该方法并获得结果。
- 在 NumPy/SciPy 等低级库中实现该方法并重现结果。
- 直接使用 NumPy 或 Octave 中的矩阵和矩阵运算来实现该方法。
- 研究和探索所涉及的矩阵算术运算。
- 研究和探索所涉及的矩阵分解操作。
- 近似矩阵特征分解的研究方法。
目标动力,你可以让你的好奇心定义学习的深度。
按照这种方式,学习数学与学习编程、机器学习或其他技术学科中的任何其他主题没有什么不同。
它的效率很高,而且很有趣!
#机器学习##数据分析##学习方法##什么基础也没有,怎么自学编程#