从事IT行业的人分为两类:纯技术人员和非纯技术人员。然而学习的方法和套路是相同的。

在讨论编程时,最常见的领域是软件工程。它基于计算机科学和应用数学的基础。虽然不需要成为数学家或计算机科学家就能成为软件工程师,但对于大多数人来说,有时候基本的编程概念也很难学习。

拿数据分析师这个行业举例,如果想要升职成为算法工程师,就必须自己去尝试编写代码来完成特定领域的业务。对新手来说,学习数据分析的第一个门槛是机器学习。因为这个很多人误认为需要很好的数学基础才能掌握机器学习相关算法,例如贝叶斯概率、线性回归等等。但实际上并非如此。

为了帮助广大新入行的自学者,我们来分析一下常规的三种学习方法:自上而下学习、自下而上学习、其他方法。同时会列出一些概念的优缺点,以及一些值得考虑的替代方案。

文章目录

  • 自下而上的学习
  • 自上而下的学习
  • 如何学习
    • 如何学习阅读?
    • 如何学开车?
    • 如何学习编程?
  • 如何学习机器学习?
  • 如何学习数学?

在学习领域中,『自下而上』和『自上而下』两种学习方法是非常重要的。它们在各种学科中都有着广泛的应用。但最关键的是,要学会如何将这些方法运用到实际工作中,解决问题。解决这样的问题需要将问题与实际结果联系起来,最终得到一个结果或者解决方案。这种解决方案可以是人工的也可以是通过机器程序进行计算得出。

而这两种学习方法的不同之处就在于如何让学习者接触到学习内容。『自上而下』学习法一般定义为让学习者沉浸在主题的完整背景中。例如如果想学打乒乓球,会直接给学习者一支球拍和另一个人进行对打。而『自下而上』学习法则是让学习者只接触到学习理论知识,例如打乒乓球涉及的动力学和物理学,而不会涉及到球桌和球拍。

自下而上的学习

像『数学』这种研究领域,使用逻辑来看待数学问题,是自上而下的学习方式。其优点在于能够给学习者提供主题的完整概览,帮助他们更好地掌握系统性学习。但是这种方法也有缺点,尤其对于没有这样基础或者专长领域的人来说,会导致学习难度增加。

『自下而上』的学习方式虽然有很多优点,但也有其缺点。大部分的学校和科学研究都是基于这种方式进行教学和学习。这就是很多学生毕业后,虽然知识丰富,但是在工作中经常摸不着头脑的原因。回想一下高中或本科学习时以及可能从事过的基础学科,例如数学、生物、化学、物理、计算机等等,老师是不是仅仅教了知识,很少教实际应用的事情。就像打乒乓球的例子一样,即使你对空气动力学、材料学、物理力学掌握得非常透彻,但是从来没有真正意义上拿过球拍和其他人上阵对打,那么永远不会成为一名乒乓球运动员。

然而『自下而上』的学习方式还是有很多优点的,我认为最重要的一点是学习者能够获得对主题的完整理解。通过花费时花时间去掌握每一个组成部分,将问题分解成小的、连贯的片段,使得学习者能够有系统性的理解。在编程领域,理解语言、框架或工具的重要部分是一个长期且困难的过程,但『自下而上』的学习方式可以帮助学习者做到这点。另外这种方法适合学习者希望对知识有更深入的理解,为以后的应用打下扎实的基础。这种的学习方式,提供系统性和结构化的理解和思考,但应该结合其它学习方式来达到更好的效果。

自上而下的学习

『自上而下』的学习方法,是一种面向宏观的、实用的过程。它让学习者可以沉浸在学习的主题中,更好地了解整个领域的广角。这种方法的重点是给出问题或主题领域的全局概览,而不是深入探究特定组件的工作原理。

在编程领域中,自上而下的学习方法可以应用在给新开发人员一个需要使用不熟悉语言或工具集完成的项目。这种方法不是依赖于对孤立组件的掌握进展,而是让学习者通过探索和实验来理解各个部分。这样能帮助学习者获得一个完整的项目概览,更好地掌握整体结构和设计思想,从而更好地解决项目中的问题。这种的学习方法能帮助学习者从一个宏观层面上理解整体架构和运作机制,这样能帮助学习者在更广泛的角度上思考问题,更容易找到解决问题的方法。

『自上而下』的学习方式在某些情况下可能会让学习者感到困惑,因为没有足够的细节和背景知识来理解概念的实际应用。比如如果在编程中,学习者只知道字符串和数字的差别,但是不知道如何将它们转换成相应的数据类型,那么就很难进行编码。这就是『自上而下』学习方法的缺点之一,不能为学习者提供足够的背景知识和细节来理解主题。

举个最简单的例子来说字符串和数字的区别。

>>> 1 + "1" 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'

如果想成为一名技术专家,在实践中运用工具来协助他人,而不是成为一个研究学者,而是全天候谈论概念。学习目标不必涵盖所有相似领域,因为存在不同学习目标。尽管一旦有了一个可以整合抽象知识的上下文,我们就可以回头来学习任何喜欢的东西。工业开发人员不是计算机科学家,而是工程师,应该在实践中运用知识,而不是沉迷于理论。

自上而下的学习方法是一种非常实用的学习方式,特别适合那些对宏观概念感兴趣,希望快速实现自己项目目标的人。这种学习方法基于目标而非对组件的深入研究,可以让学习者更快地掌握所需的技能和知识,并将其应用于实践中。就比如说我们要做一个用户画像的分类,我们不需要重新造轮子去写逻辑回归公式,而是直接使用现成的第三方包调用就可以直接获得结果。这就是自上而下学习方法的优点,能够让我们更高效地完成我们的目标。

如何学习

如何学习阅读?

回想起自己学习阅读的过程中可以发现,其实从产生兴趣开始就是最重要的一步。而我现在教育我的孩子阅读也是一样,首先从产生兴趣开始,比如给孩子看好看的书籍封面,从而产生阅读的兴趣。

接着会直接进行发音阅读而不是拼音,这样能让孩子尽早掌握正确的发音。同时还要记住最常用的单词、它们的发音以及如何拼写。这些都是有助于培养孩子阅读能力的基础。

我们还要教孩子学习启发式的方法来处理未知生词,这样才能让孩子独立思考,掌握新词汇。在有(无)父母的监督下通读书籍,不仅可以保证孩子阅读的质量,还可以提高孩子的阅读兴趣。

但是孩子不懂为什么要读书时,也要给一些实际的例子。比如读电视节目(广告)的字幕,或是读有关他喜欢的主题的故事,例如汪汪队等。这些都能让孩子意识到阅读的重要性,并且在日常生活中阅读标志和菜单,孩子会意识到阅读能带给他们带来的好处,比如拥有更多的词汇量,能够独立流畅的阅读习惯,可以阅读越来越复杂的书籍。

然而在孩子的早期阅读教育中,并不需要过于强调词类定义(动词、名词、副词等)、语法规则、标点符号规则以及人类语言理论等内容。这些可以在孩子阅读能力基础扎实之后再逐步学习。

如何学开车?

你会开车吗?你是怎么学会开车的?

学习开车其实非常简单,只需要去驾校报名学习,在驾校里学习驾驶技巧,然后参加驾考,就可以拿到驾驶证。

在报考驾校的时候,我们一般不会学习汽车的历史、内燃机理论、汽车常见的机械故障、汽车的电气系统、交通流理论等等。但是事实上,我们仍然可以在不了解这些内容的情况下安全驾驶。因为我们根本没有必要了解这些知识来更好的驾驶车辆。

这些知识对我来说可能没有多大吸引力,甚至学了之后也不能在开车过程中有什么帮助。如果在路上车坏了,我会打电话给道路救援,让专业的人来维修。因此我们真正需要学习的,只有安全驾驶的技巧和遵守交通规则。

如何学习编程?

在我开始编程之初,我对编码和软件工程的含义完全一无所知,只是随便在Excel里解决工作上的问题,甚至修改电脑游戏以更好地享受游戏体验。然而,当我开始深入学习编程和软件工程时,我发现这是一个很有趣的课题,从语言理论到数据类型、控制流结构和数据结构。

初学编程时遇到的命令行问题、编译器问题和路径问题让我感到非常困扰,因为没有人能指导自己因此走了很多弯路。

随着深入学习编程,发现它可以解决很多问题,也能够在重要的系统上担任专业软件工程师。更进一步学习了如何创建图形用户界面,还做了一些游戏脚本。

编程不再只是一种抽象和深奥的东西,发现它可以让我用代码来解决问题,并且能让其他人使用。发现自己热爱编程,它不再只是一件无聊的事情。这也是我和许多像我一样的开发人员能够将数年的时间、精力和成就投入到自己真正热爱的事情上的原因。编程是一种有趣而又具有挑战性的领域,它不仅可以解决实际问题,还能带给我们无限的创造力和乐趣。对我来说学习编程是一次有意义的旅程,我相信对于每一个像我一样的开发人员来说也是如此。

如何学习机器学习?

那么对于机器学习这个主题,应该如何处理呢?很多人都会选择通过高校课程的自下而上的方式来学习机器学习,但我强烈建议采用自上而下的学习方式。不要从数学基础开始,也不要从理论开始,更不要从算法实现头开始。

我建议你首先学习如何使用免费且易于使用的开源工具和固定框架来解决简单的预测建模问题。通过多个小项目的练习来增加复杂性,同时通过公共开源项目来展示你的作品。

一些人可能会说这样学习机器学习是徒劳无功的,但这是世界一流的从业者学习和继续学习的方式。不要听信那些想割韭菜的人,重要的是要记住,像学习阅读一样,学习驾驶,学习编码一样,可以通过实践和练习来学习机器学习,而不是通过学习理论和数学。这不仅是我学习和练习机器学习的方式,同时也帮助了我的数千名学员。

如何学习数学?

当深入探索机器学习中的数学主题(如线性代数、微积分、统计学、概率等)时,可以使用完全相同的自下而上的学习方法。我们可以选择一个重要的目标或结果,并将其作为镜头、过滤器或筛选主题来研究和学习获得该结果所需的深度。

假设选择研究线性代数。目标可能是了解 SVD 或 PCA。

这些是机器学习中用于数据投影、数据缩减和特征选择类型任务的方法。

采用自下而上的方法可能包括:

  • 使用高级库(如scikit-learn)来实现该方法并获得结果。
  • 在低级库(如NumPy/SciPy)中实现该方法并重现结果。
  • 直接使用NumPy或Octave中的矩阵运算来实现该方法。
  • 研究所涉及的矩阵算术运算和矩阵分解操作。
  • 研究近似矩阵特征分解的方法。

更多推荐

抛弃旧有思路,获得全新IT技能的突破