今天是在1024程序员节,想想这也是我在CSDN胡诌八扯的第4年了,正好今天写文章还给勋章,嘿嘿,来水一篇。
不过这篇文章的灵感还是来源于最近在带的几个刚入门计算机的小白,结合之前的一些经历,发现很多人学不会编程并不是不够努力,而是没有掌握方法。
所以这篇文章就跟分享一下我学习计算机的一些方法论,包括从理论层面到实践层面。

理论分析

转变思维方式

这两年听到的一个很火的词就是:内卷,确实,高薪让计算机行业越来越火爆,很多人蜂拥而至,尤其是刚高中毕业的步入大学的新生们,都是或多或少听说过什么人工智能大数据之类的新鲜名词,然后才选择了计算机,不过呀,学习编程可跟学习其它学科不一样,或者说,学习编程跟大学以前学习的那些应试课程完全不一样,很多人就是思想转变不过来,导致最终学的非常痛苦。

因为没有掌握合适的方法,导致很多人在编程之路上走的非常缓慢,并且还有一些人认为:“学不会编程就是因为还不够努力”,也有的学生觉得:“自己努力却不见成效是因为天赋低人一等”,同时社会上也有一些声音:“女生不适合学编程,思维不如男生”,等等偏见。这些说法毫无疑问都是错误的,可是为什么又会出现上述现象呢?背后的原因是什么呢?

很多刚入门学习编程的同学,虽然很努力地学习,但是感觉学到的东西好像又百无一用,落地“见光死”。这是因为,传统的学习方法得到的仅仅是由文字和数字拼成的“纸面知识”,没有经过大脑的深度处理并成功转化成自己的技能。也就是说,虽然付出了学习的过程,存储了知识,却不具备输出应用这些知识的能力。走出学校你会发现,这种“学而不用”的情况比比皆是,大部分的学习纯属虚度光阴。

当然这也不能怪自己,毕竟我们九年义务教育+三年高中奋斗,都是为了应对高考,而高考考的就是纸面知识,考的就是应试技巧,这就导致我们在大学之前建立的所有学习方法都是为了应对考试。张雪峰不是说过嘛,这个世界上的考试只要允许中国人考,最高分一定是中国人。不得不说,这是我们的优势,但也是我们悲哀,毕竟会考试并不代表实际会用。

所以在真正学习编程之前,我们就应该把自己的想法改变一下,我们为什么要学习编程?难道只是为了把它解构出来写进笔记,或者是为了做几道简单的数学计算么?显然不是。掌握知识很难,罪魁祸首是人的学习惯性,我们天生以为学习就是去一张纸上画出未来,好像知识对当下是无用的,对未来才是无价之宝,学习一门知识是为了建设自己的未来,这种想法大错特错!久而久之,大脑中形成了一个固定的模式:学习是要改变将来的命运,是为了出人头地。潜台词是:学习改变不了今天。在这种思维的主导下,学习撑了一种沉重的使命,把学习看的越严肃,掌握知识就越难。

真正高质量的学习,一定是能够让人融入当下真实的世界。学习最重要的是应用,必须让人可以与时代同步,理解身边正在发生的一切,促进我们对知识的运用和创新。换言之,通过学习,我们要与真实的世界建立有效的联系。编程即使如此,所见即所得。

从对知识的学习中获取竞争优势固然是必不可少的,但是,当你掌握一门知识的目的只是要在某些方面超越别人时,这种想法越强烈,你的起跑线就越远,学习的难度就越大。只有将学习从功利性的导向中收回来,专注于如何吃透一门知识,怎样让这些知识在今天就可以让自己变得更好,你才能真正地提高学习能力。

提高学习的能力,比学到一门知识更重要。学习,究其根本是思维方式的比拼,不是知识存储的较量,也不是学位的竞争。

要打破这种僵局,首先要改变自己的思维,我们学习编程,不是为了应对考试,而是为了应用,通过写代码来解决我们身边那些重复且枯燥的工作。

掌握学习方法

在越来越快的社会节奏和海量信息的影响下,掌握一门知识相比过去变得更困难了。和20年前相比,我们的时间不再充足,信息来源过于丰富,信息本身也更加真假难辨。在学习时,很难短时间内吸收、消化太多的信息。这正是互联网社会的副产品,它的超快节奏对几乎所有的事情都提出了考验,互联网不但让知识碎片化,也肢解了我们的思维。

现实中,人们大部分场景下的学习都处于一种“无意识”的状态,它表现为两种典型的特征:① 老师/父母让我学什么,我就学什么,即服从式学习,② 就业/培训需要学什么,我就学什么,即工具式学习。在无意识的学习状态中,你会感觉到自己不停地学习新知识,也从不浪费时间,但对知识却浅尝辄止,难以深入,甚至记不住大体的概念,只收获了对知识粗浅的印象,或者仅局限于功利性应用的部分。

学习编程并不是记住那几个关键字,也不是把书上的代码背下来(我还真见过这种),而是将这些知识100%地转化为生活和工作中地应用价值,高效能地学习也不是定好目标便勇敢无畏和一往无前地学下去,只要将计划填充所有地时间那么简单,而是要合理地安排时间,先树立一个清晰地大目标,再将其分解成三到五个阶段地小目标,这些小目标每一个都能落实,在学习时它们切实可行,能一步一个脚印,逐步达成目标,完成计划。始终在你的能力范围内走好每一步,让自己不再因为盲目地忙碌而压力重重,这样地学习之路才是高效能地。

当然在这里,一两句话并不能详述我所有的学习方法,不过我非常建议你去读一本书——《费曼学习法》。当你独自一人面对一台电脑和浩瀚无际的互联网信息时,老师起到的作用是微乎其微的,如何快速汲取到自己需要的知识?怎么验证所学知识的有效性?是否清楚这些知识点的问题所在?如何自律、拟定计划和做好时间管理?《费曼学习法》会给你答案。

一句话讲,我觉得费曼学习法是对“实践是检验认识的唯一标准”这句话的完美诠释。

提升表达能力

这一点看起来似乎与学习编程不搭噶,但实则不然,之前看过一篇知乎文章,对比了中国的程序员和国外的程序员,其中有一点深表赞同,就是沟通表达能力的差距。这个似乎也跟民族特点有关,不少美国码农,事情在没做好之前就敢说,就敢吹,而我们一般都比较谦虚,事情没做好之前一般不会打包票。

表达能力决定了你所做的技术的影响范围,决定了你的影响力,决定你的威信,决定了你的报酬。普通程序员和顶尖程序员的表达能力差别非常大,这主要还是取决于他们格局的不同。良好的沟通能力让你理解产品经理的设计思路,让你更好的展现自己的特长。

中国码农最瞧不上的外国码农,恐怕就是阿三们了,但是虽然阿三们的技术实力真不咋地,但人家就是会吹、就是会和上级良好沟通啊。看看今天美国硅谷巨头公司,中高管都被阿三们霸占完了,大家应该警觉:虽然技术很重要,但沟通表达能力同等重要,甚至更重要!

那么怎么提升自己的表达能力呢,在这里可以给CSDN打个广告,不过他们没给我钱。写博客就是一个非常好的表达方式,当你学习了一个新的技术,或者解决了一个非常复杂的问题之后,就可以写一篇博客记录一下,一方面是给自己的学习工作留痕,另一方面也是可以帮助到以后遇到同样问题的人,最重要的是,写博客就是一个总结梳理的过程,慢慢的就可提升自己的表达能力。


以上就是关于如何学习编程在理论方面的分析,首先要转变思维方式,然后要掌握高效的学习方法,最后要能够将自己的学习内容表达出来。

实践指导

以下记录了一些我在学习和工作过程中的一些方法论,仅供参考,欢迎补充,也会持续更新。

学习一门新技术

学前先问:

  1. 为什么要学这个?
  2. 有没有必要学这个?
  3. 成本是什么?回报是什么?

学习过程中:

  1. 官方教程(首选推荐)
  2. 视频教程(B站,油管)
  3. 小Demo实战
  4. 迁移到项目中

遇到一个需求

  1. 分解需求,划分模块,将大问题分解为小问题,小问题分解为原子问题
  2. 针对不同的模块提取公共条件,在此条件下解决一个一个的原子问题,然后再整合在一起
  3. 将原子问题转换为代码实现

读一篇论文

读论文之前首先要问几个问题:

  1. 这篇论文大方向的目标是什么?
  2. 这个方向目前有什么问题?
  3. 这篇论文要解决什么问题?
  4. 为什么会有这些问题?
  5. 作者是怎么解决这些问题的?
  6. 怎么验证论文的解决方法是否有效?

读完论文之后也要问自己几个问题:

  1. 我发现了什么问题?
  2. 我要解决什么问题?
  3. 能不能借鉴论文中的方法?
  4. 我的问题要怎么解决?