今日早上看到一篇文章《笨功夫是普通人终究的依靠》,有感而发,文中说的内容都是自己现在的一些主意,
本想在下面评论一下,可是如同要说的太多了,评论写不下,也就有了本文。

背单词是学英语的 “笨功夫”

故事还得从差不多十几年前的初中说起,在我上小学的时分,地点的小学是还没有教英语的,所以我的英语是从初中开端学的。
还好初中上英语课的时分,老师仍然是从 26 个英语字母教起的,仅仅会有种幻觉,那些小学学过英语的同学如同不必怎样学就能在英语上获得好成果。
但这种主意不太客观,由于在有这种主意的时分,潜意识中将他们小学几年的积累疏忽了,所以多少会有点懊丧。

九边的文章中,说到了学习英语得先背单词,背单词便是学习英语中的 “笨功夫”。关于这点深有体会,虽然我的英语是初中开端学的,
而且我对语法能够说知之甚少,可是我在背单词上可是花了不少时刻的,所以英语成果也不至于太难看。
后来上了大学,也能凭仗初高中的英语单词的积累,考过了四级。
然后做为一名程序员,日常开发的时分需求看到英文文档也能够比较流畅,当然必定不如看中文顺畅。
说这些,并不是觉得这是什么荣耀的事,仅仅想表达比较认可背单词是学习英语的 “笨功夫” 这一观念。

笨功夫之外,办法也重要

几年前看极客时刻的《数据结构与算法之美》这门课的时分,说到了一点:

数据结构和算法便是一个十分难啃的硬骨头,能够说是计算机学科中最难学的学科之一了。
我其时学习也费了老大的劲,能做到讲给你听,我靠的也是十年如一的积累和坚持。假如没有基础、或许基础欠好,你怎能期望看 2 个小时就能彻底把握呢?

九边的文章中也说到了自己的阅历,想学写代码,然后一推人引荐学习《算法导论》。
关于这个,我个人也是深受其害,十几年前我一向徘徊在玩游戏和学习之间,常常觉得自己的时刻不应该悉数还在玩游戏上,怎样也得学习一下。
然后我就会去学习,我怎样学习呢?也是跟九边相同,找那些长辈们引荐的经典教材,比方算法、操作系统、编译原理、计算机网络相关的经典书本,

仍然记得我在高三的时分就买来了一本《编译原理》,也便是那本 “龙书”(由于封面是一条龙)。
可是,这本编译原理就算让现在的我去看估计也很难看懂,所以在学习方面,个人其实走了许多弯路,跌了不少跟头。
由于学习的办法不对,这种学习自然是继续不下去的,在这种学习进程中,需求耗费许多的心力,然后自我置疑,终究抛弃。

关于这一点,九边的文章中也说到了背面的根本原因:

  • 选错教材了,你拿得太难了,不适合你;
  • 投入时刻缺乏。

这两点都是我其时存在的问题,一上来就挑选了最难的教材来看,没有考虑到自身实力能不能看得懂。
当然,挑选难的教材也不是不行,或许得投入满足的时刻去把教材看懂,条件是,有途径能够处理学习进程中的遇到的问题,
比方遇到问题能够问问长辈,又或许像现在的 GPT,假如想凭借百度这种东西或许大概率要绝望。
越过少量问题或许不影响学习的作用,可是假如绝大部分问题都没有能找到答案的办法,那换一本简单点的教材先学学基础是个更好的办法。

当然,说这些并不是为了鼓励大家去学习数据结构算法,仅仅想说,在咱们学习遇到困难的时分,或许得考虑一下是不是上面两个原因导致的。

大脑对了解的东西更感兴趣

这句话现已不记得是从哪里看到的了,可是觉得颇有道理。
有时分,咱们对某件作业不感兴趣是由于不拿手,而不是由于真的不拿手。
在进入一个相对新的范畴的时分,咱们会接触到许多新的名词、术语,会觉得特别费力。
这个时分咱们或许就会挑选抛弃了,当然,咱们也能够挑选坚持下去,
这些年我学到的一个十分重要的学习办法便是,关于新接触的东西,去多看、多想、多实践几遍,当然,这儿说的是学习编程范畴的东西。
许多东西,在咱们这样几轮学习下来,如同其实也没有太难的东西,当然也有或许我学习的东西自身没有很难的东西。
但不得不供认,就算是那些你觉得不难的东西,许多人也潜意识中会觉得自己学不会,
但实践上仅仅他们投入的时刻还不够多。

在开端的时分,我也会觉得枯燥无味,可是在了解多几遍之后,发现如同还挺有意思,尤其是运用新学到的东西处理了自己实践遇到的一些问题之后。
学习的进程大多如此吧,说到这,想起了几天前看到的《怎么获得杰出成就》中说到的一点:

有一些作业,咱们或许必须在自己厌烦的作业上尽力作业数年,才能挨近喜爱的部分,但这不是杰出成就产生的办法,
杰出的成便是经过继续关注自己真正感兴趣的作业来完成的 —— 当咱们停下来盘点时,会惊奇于自己现已走了多远。

这篇文章是《黑客与画家》作者博客《How to Do Great Work》的翻译版,有兴趣能够看看,感觉还不赖。
在实践作业中,咱们遇到的许多问题其实并不需求坚持数年才能处理,又不是研讨什么前沿范畴的东西,
可是关于一些难题需求花几天或许一两个星期去处理这种或许性还是很大的。
在这个进程咱们会对问题域中的东西越来越了解,直到终究它们不再是咱们的妨碍。

问题是能够分化的

搜狐 CEO 张朝阳这几年在 B 站上更新了许多物理的教程,当然我是全都看不懂,仅仅想起他说过的一段话:

许多东西的话,便是你看起来很杂乱,是由于你不了解,其实这个常识,
全国的这个常识和一切的东西,其实都是不难的,你把一切的再杂乱的东西,把它分化成每一步的话,
他的基本的这个思维进程的,跟你早上吃什么饭,怎样做饭,怎样打车怎样点东西,都是相同的思维进程。
许多东西你了解不了,不是由于你笨或许是你不够聪明,而是由于你,你自己认为你了解不了是吧,
许多或许由于过去的阅历啊,便是在课堂上这个答复不了问题啊,一些挫败的阅历,考试的失利导致,
你就有一种惊骇,是一种惊骇和你的认为了解不了导致你了解不了。

虽然道理是这么个道理,可是不代表物理都没学过的人能看得懂他讲的物理课,
由于问题虽然能够分化,可是一个需求有深沉基础的问题恐怕你连分化都不知道怎样分化,更不要提处理。
就如同上文说到的《算法导论》这本书,里边有许多的数学推导,许多人看不懂是由于,
从作者的角度来说,他现已把问题分化为了若干个小问题,在他看来,看这本书的读者应该是现已把握了他分化之后的问题的相关常识。
从引荐看这本书的人来看,他引荐的对象应该也把握了书中那些分化之后的常识。
可是实践是,或许也有许多人没有考虑到自身实力,然后就去啃这些大部头,自然而然地看不懂。

许多时分咱们遇到的问题都能找到恰当的分化办法,尤其是编程范畴,要不然咱们不大或许会碰到那个问题。
在摸爬滚打多年之后,咱们会发现,许多那些入行时觉得困难的点终究都不是问题了,
这是由于,常见的问题咱们基本都处理过一遍了,以致于咱们再遇到同样的问题之后,就能马上想到应该怎样去做,就现已在心中有一二三四几个过程了。
举一个比方,在学习做 web 运用的时分,其实许多东西都不懂,可是现在现已很清楚一个 web 运用大概应该是长什么姿态的了:

  • 从浏览器建议的恳求抵达 web 运用之后,咱们需求确认详细履行什么逻辑,因而需求有 “路由” 来将恳求拍发给一个详细的办法,也便是某个 Controller 里边的一个办法。
  • 在恳求的处理逻辑里边,咱们或许需求去查询数据库,一切常用的 web 结构都供给了关于数据库查询的一些抽象,直接调用封装的那些办法即可。
  • 在回来的时分,咱们要回来给客户端的实质上是纯文本的东西(HTTP 协议),可是 HTTP 相关的功用往往由 HTTP 服务器来处理的,比方 nginx
  • nginx 处理 HTTP 相关的东西,比方反向署理的 upstream 回来的数据长度有多长,需求算出来,将这个长度写入到 HTTP 头中,这样浏览器收到 HTTP 报文的时分才能精确地解析出一个 HTTP 报文包

弄清楚这些问题之后,不论换哪一种言语,咱们都能够拿来完成一个 web 运用,无非便是解析 HTTP 报文,在代码里边做一些事务逻辑处理,然后回来一串 HTTP 报文。
而这儿说到的,其实便是针对 web 运用开发中的几个大问题的分化,这些问题关于写了几年 web 开发的人来说其实都不是问题了。

再举一个比方,关于程序员来说,咱们往往需求继续地学习,当咱们去学习一些新的编程言语的时分,咱们能够去考虑一下:关于编程言语来说,它能够分化为哪些问题?
个人感觉,这个问题其实挺有价值。要答复这个问题,咱们能够回到没有今日这些高档编程言语的时分,那些计算机范畴的前驱们是怎样让计算机作业起来的。
咱们会发现,其实一开端他们是用的 0 和 1 往来不断写指令的,后边进化到汇编言语,究竟一堆 0 和 1 谁记得住?
有了汇编,去做一些操作就简单多了,比方做加法,用一个 ADD 指令就能够了。
可是有了汇编之后,还有一个问题是,不论是从开发、维护上来说,都需求对 CPU 有十分清楚的了解,比方需求了解 CPU 有哪些寄存器之类的常识,
也便是说,运用汇编仍然需求了解机器自身的许多运作机制,这无疑是一个比较高的门槛。
再后来到 C 言语的呈现,咱们就不需求了解 CPU 是怎样作业也能够写出能处理问题的代码了。
可是 C 言语仍然有一个究竟严峻的问题,那便是需求开发者手动去请求内存,运用之后再开释内存,假如程序员忘掉开释,那么就会造成内存的走漏。
所以更高档的一些言语就有了 GC,也便是说,由言语底层的运行时去帮程序员收回那些现已不再运用的对象。

扯得有点远了,回到问题自身,关于编程言语来说,它能够分化为哪些问题?
这个问题其实十分简单,只需咱们随意找一门编程言语的教程来看它们的目录就会知道,一门编程言语自身包含了:

  • 一些基础语法:如代码安排结构是怎样的。Java 是经过一个个的类来安排的,Go 是经过结构体来建立抽象然后经过函数来进行安排的。
  • 关于面向对象的言语来说:不同的编程言语会有不同的类的编写办法。
  • 基本的变量定义是怎么定义的
  • 要害字有哪些,比方十分常见的 classpublicdef 之类的
  • 怎么完成循环结构
  • 怎么完成条件判断
  • 怎么在办法中回来值。有些言语需求运用 return,也有些言语比较省事,办法内的终究一行会被作为回来值,比方 ruby
  • 一些常用的数据结构是怎么封装的。比方数组、map
  • 规范库。比方怎么履行一个系统命令这种功用。
  • 其他…

这个清单不太完好,可是也满足了,由于编程言语的相似性,咱们在了解了某一门编程言语之后,往往也会比较简单学会另一门编程言语。
可是这也并不代表,咱们能够运用这门新的编程言语去处理一些实践的问题,除非,在此之前,咱们现已运用了其他编程言语处理过相同的问题了。
比方,咱们从 PHP 转换到 Go,咱们在 PHP 中现已处理过许多数据库查询的问题了,切换到 Go 中,关于数据库查询的这一问题,咱们能够作如下分化:

  • 找到 Go 中查询数据库相关的库
  • 调用库函数来建立到数据库的衔接
  • 调用库函数来发送一个 SQL 查询语句到数据库服务器,然后等待数据库服务器回来查询成果
  • 获得查询成果,做其他处理

清楚了咱们需求处理的问题之后,其实咱们真正要处理的重要问题是怎么安排咱们的代码,从而使得咱们针对这个问题的处理方案更好维护、能更好地运用。
所以现在在学习的时分,更喜爱从实践的问题动身(究竟计算机范畴其实是更倾向于实践)。
然后依据自己拆分后的问题去找处理方案,现实证明,这样效率更高。
假如咱们从技术自身动身,咱们或许无法知悉这个技术为什么是今日这个姿态的,在这种学习办法之下,
咱们新学习的东西无法跟咱们脑子里原有的东西建立起衔接,终究只会很快就忘掉。
可是假如从咱们了解的问题动身,去寻找一种新的处理方案的时分,其实新的常识跟自己的经验是能够很好的联系起来的,这样咱们经过一个问题就能联系到不同的处理方案。

真的扯远了,说回正题。说这么多其实便是想说,碰到难题的时分咱们也不能盲目地花笨功夫,
遇到难题的时分,咱们或许能够考虑一下,这个问题能够怎么分化,然后怎么处理分化之后的问题。
假如分化后的问题是咱们能够处理的,那咱们的 “笨功夫” 那便是运用对了。

学习是为了找到学习办法

再说一个关于 “笨功夫” 的个人阅历,还是初中的时分,在初中的时分花了许多时刻在学习上,可是学习作用并不是十分显着,
多年以后,才明白,自己当初的那种学习其实是 “死学”,也便是不讲究办法的学习,免不了学了就忘。
初中的时分一个物理老师跟咱们说他学生时代,有一天在考虑问题很久之后突然 “开窍” 了,
以前没懂,现在知道了他说的 “开窍” 大概是找到了关于学习的套路。
惋惜的是,我在读书的那十几年里,并没有阅历过这样的 “开窍”,所以成果一向平平无奇。

直到自己作业以后,由于自己从小到大是那种不太拿手沟通的人,所以作业前几年遇到问题的时分也基本不会去请教他人,
那怎样办呢?那就自己想办法去处理各种技术问题呗,然后几年下来,如同自己的学习才能有所提升了,显着的表现是,学习新东西的时分会学习得更快了。
后边才懂,越来坚持学习其实不仅仅为了学到各种处理问题的办法,实践上有许多东西都是学了之后用不上的,更重要的是在这个进程中学会怎么学习。
关于这一点,陈皓有过一个经典的陈说。

学习不仅仅是为了找到答案,更是为了找到办法 – 陈皓

你有没有发现,在常识的范畴也有阶级之分,那些长时刻在底层常识阶级的人,需求等着高层的人来喂食,
他们长时刻陷于各种谣言和不精确的信息环境中,于是就导致过错或天真的认知,
并习惯于那些不费力儿的轻度学习办法,从而一点点地丧失了深度学习的独立考虑才能,从而再也没有才能打破常识阶级的约束,被困在认知底层翻不了身。

可见深度学习十分重要,但应该怎样进行深度学习呢?下面有三个过程:

  1. 常识收集。 信息源是十分重要的,获取信息源头、破解表面信息的内涵实质、多方数据印证,是这个过程的要害。
  2. 常识缝合。 所谓缝合便是把信息安排起来,成为结构体的常识。这儿,衔接回忆,逻辑推理,常识整理是很重要的三部分。
  3. 技术转换。 经过举一反三、实践和练习,以及教授教导,把常识转化成自己的技术。这种技术能够让你进入更高的阶级。

这就如同,你要去登一座山,一种办法是经过他人修好的路爬上去,一种是经过自己的技术找到路(或是自己修一条路)爬上去。
也便是说,需求有路才爬得上山的人,和没有路能造路的人相比,后者的才能就会比前者大得多得多。
所以,学习是为了找到通往答案的途径和办法,是为了具有无师自通的才能。

把时刻当作朋友

这个标题来源于李笑来的《把时刻当作朋友》这本书,书买了我还没看,可是看过他在得到的课程上这一论题的相关文章。

今日这个社会变得越来越浮躁,咱们难免会受到影响,经常会想着今日做一件事,明日就能看到成果。
但实践上,在竞争剧烈的今日,聪明人许多,又聪明又尽力的也有许多,咱们能做的仅仅承受这个现实,
然后继续在自己地点的范畴花多一点 “笨功夫”,把时刻当作朋友,就算终究咱们没有完成最初的目标,
可是回头再看的时分,会发现本来自己现已走得很远了。

终究,用吴军《格式》中的一句话来结束本文:

现实上,功夫没下够,用什么办法都是在浪费时刻。