本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1,前言
\
看到很多同学在讨论怎么学习编程的问题,
一个是学习方式很迷茫,一个是学习心态有问题。
今天给大家讲一讲编程学习的道和术。
听着挺玄乎的啊,其实很简单的。
\
2,一般的学习方式
\
先说术,也就是做法:
\
有的说看官方文档。
但是太庞杂,而且还有很多英文的,看不懂还靠翻译。
\
然后有的是看一些视频教程。
然后这个也没有找到一些比较好的教程,而且大多付费。
\
另外就是看一些博客。
有些博客确实写得不错,但是它也不是那种成体系的,适合持续、系统的学习。
用到的时候来当作查资料还是不错的。
\
然后是看书。
一些书确实是比较适合系统性学习,但是看起来确实也是挺费劲的。
而且经常很多书的示例代码也不全或者版本、内容过时了。
\
3,最有效率的学习方式
\
这里我说一下,实际上我觉得最有效率的一种学习方法:
那就是不要怂就是干,实战实战再实战。
\
给大家看一张图啊,这个是各种不同学习方式的知识留存率。也就是学完了能记住的程度。
你看,无论刚才说的看文档、看视频、看书、看博客,其本质都只是停留在第一层:被动学习。
除非你在学的过程中,认真去跟着敲代码、实践,不然效果都很难保证。
而实践,是除了教会他人之外,最有效率的学习方法。
当然教授给他人,这个难度比较高,需要你有一定的表达能力。
一般我们工作中只需要做到自己会用就够了。
\
所以我们就只说下这个实践。
你在实战过程中,主要目的还不是为了学知识,而是为了做成一件事。
做这件事的同时才学到了它所依赖的各种知识。
实战中,是在有目的性地寻找解决问题的办法,就是它是有着一些故事性在里面的。
\
什么是故事性?
就是人是很难纯粹记住一些抽象的、虚的概念的,
但是却能很轻松地记住一个故事,尤其是一个实际发生在自己身上的事情。
普通的学习方式学到的,只是知识,很容易忘。
而实战中学到的,就不只是知识了,还有解决问题的经验和教训,
教训我们都知道,常常都是很深刻很难忘的。
\
另外做一件具体的有价值感和成就感的事,去驱动你去主动探索,
大大提高学习兴趣和乐趣,避免太过枯燥,半途而废。
\
4,拿学习Qt来说
\
就拿Qt来说吧,怎么学。
先简单查查资料,熟悉下它是什么,有些什么优缺点,
哪些行业在用,哪些产品是它开发的,能做到什么效果。
了解这些,因为我们的目标不简单是为了学某个技术,而是你要用这个技术,学会做些什么事。
比如开发各种功能牛逼的、界面酷炫的软件。
\
好下一步想做了,怎么办?
得安装开发环境。
想以后做事效率高,怎么办?
对开发环境一顿熟悉。(利其器)
\
然后就可以直接开始实战了。
先搞个最简单的demo,研究研究。比如传说中的helloworld。
对着那个工程仔细去看,有任何不知道的,或者不太清楚的,就直接去搜。
简单的工程研究透了,就逐步增加难度,开发一些有点具体功能的程序。
然后逐渐丰富程序,不只功能,界面也不停调整美化。
注意一定要自己去敲、去试。
看得懂别人的代码,不代表你就能写得出来!
\
还注意,看工程的过程一定要带着问题去看:
比如程序的总体流程是怎样的、
核心数据是什么、做了哪些处理、数据是如何展示的、
程序有哪些模块、各个模块或类之间的关系是怎样的、
用到了哪些设计模式或方法、
哪些内容可以抽出来成为通用的组件或模板,为我所用。
这就和刚才说的各种学习方法有着本质的区别,那些方法基本都是在教你一个局部的知识点。
而阅读完整的工程,是可以从全局的视野来学习,怎么真正写好一个有规模的软件。
\
5,学习编程的心态
\
这里就说到这个道,也就是心态问题。
学编程,归根到底,实际上就是一个积累的过程。
\
所谓的技术大神,无他,唯手熟尔。
有经验的程序员为什么厉害,就在于他已经使用过各种各样的类、功能组件了。
即使以前学的时候很难的技术点,搞了一遍之后,以及简化成一个随时可以调用的模块了。
当开发一个新东西时,有80%的内容直接从自己积累的代码库里掏出来就能用。
只需要学20%新的内容就可以了。快速能干完一个事情。
\
而新手做什么东西都是从头开始学,所以如果是新手,
不要总是问怎么能快速学习,不要总想走捷径!
唯一的捷径,就是在最短的时间,把各种技术实操一遍,并总结成自己特有的代码库!
你要做的就是快速接触、使用各种技术点,而且一旦用过,要达到下次使用时迅速就会调来用。
如果记不住,那就书面化存起来,就是一定要转化为自己的经验。
做过的事情,一定不要重复花时间再次研究。
这样你慢慢就会发现,你做事情会越来越快,开始在效率上和别人拉开差距了。
这就是学编程的所谓道。
\
6,以积累的心态学习
\
遇到的一个新的类,就赶紧去翻一下头文件,看看有哪些接口,为什么这样设计。
这样以后你就不是只会这一个接口,而是对整个类都熟悉了。
就跟你工具箱新添一个新工具一样,赶紧看看说明书它有哪些功能。
\
qt的类的API设计是比较优美的,它里面很多接口都是那种特别通俗性的那种用词,
我经常直接写代码的时候直接根据想要的功能,猜着敲这个函数名,
语法提示直接一点,经常就能找到想要的接口来使用。
但即使找到了想要的接口,我也经常去翻翻头文件,看看还有哪些接口,说不定有更好用的。
而且Qt的类就那么几百个,常用的不超过100个,你一天熟悉一个,很快也都能熟悉的差不多了。
\
所以着急没有意义,实战起来,不停地在学就够了,量变会产生质变。
就是这样,编程就是这样一种实战+积累的过程。
你对这一个类库里面各种类,尤其是这种常用的类用的越熟,你以后写代码的效率越高。
就是这样一点点,写各种不同的程序,各种小功能,
然后组合你学到的各种内容,写些复杂的功能。
再最后一个完整的系统性的程序,也是由这一点点功能拼起来的。
\
就以这种方式,你学起来的印象是非常深的,
因为你学的时候都是目的性很强的去寻找答案的一个过程。
你一旦查到的资料你就记下来了,以后你只要用到类似的东西,
你都会联想到我在做什么东西的时候用到过,为什么用到的。
\
以上,就是我认为就是学习效率最高的方法,以及正确的学习心态。