Cover
人最大的缺点就是,好为人师。这次也不例外,我又想做一次别人的老师。
写给谁
写给那些学完一门或几门语言之后还是只会写一些A+B之类算法题的,认真却找不到门路想精进的,真正想用技术做些事情的人。
为什么写
因为好多我认识的,上了大学开始学编程,学C语言却到现在做不出来东西的人,他们也有想法,也有做自己的努力,但是被9年的义务以及应试教育的学习方式所影响,找不到编程真正的门道。 而我写这篇文章,无他,就是站在能用技术做点东西的技术水平角度上,告诉他们,编程是怎么样的,做东西是怎么做的。
一些前提
- 编程绝对不是一件轻松的事,反而很麻烦,而且要细心,要耐心。所以经常有人说在配置开发环境这个环节就淘汰了一半的人,更何况码半小时代码debug一天这种事。所以我认为这一行能做好,必须要对技术抱有很大的热情。
- 编程也绝对不是一件很难的事。看完上面那条,你又听到我这么说,肯定是觉得我有病。如果说你要建造金字塔的话,是不是觉得这个工程很难,那么我说建造的最后在金字塔顶上放一块砖头很简单,你可能不会反驳我,那是因为之前放了很多砖头了。同理,你说想成为一名程序员,我当然说这不是轻松的事,但是如果量化下来,编程精进的每一步都是放一块砖头这样简单的事。所以不要觉得编程这件事多么高大上,多么难学。
- 实践是最重要的,甚至编程的思想或知识大部分是从实践中得到的。所以这一条的意思是说,教程可以看,理论可以背,但是看完不敲,背了敲,不编码实践是傻逼的行为。
- 看是书是没用的,或者说有些书是没用的,哪些呢,就是那些标着“27天”、“入门”、“基础”以及类似字样的书。为什么看这种书没用,首先书中废话太多,这些废话虽然也是一些细节,但是听我的,这些细节后面慢慢再了解,其次用百度获取除去细节的部分太简单了,而且编码都是在电脑上,还有一个原因参考上一条。哪些书有用呢,就是那些百度不好找的,高端算法,数据分析方面的书,是值得看的。虽然我没看过,但是我是这么认为的,也欢迎看过一遍这种书的人来打我的脸。
- 用好百度。怎么样叫用好,就是你不知道的一个知识点,你可以用关键字来找出来,很多人用书,记理论就是因为自己不知道百度什么关键词能把这个东西找出来。所以,一定要训练自己归纳关键字的能力,我们可以不知道一个语法的结构,但是每当要用的时候,可以很快的用百度找出来并且自己写出来,这才是真正的编程能力。
- 这是一件需要自学的东西。我们从小就一直是老师教我们什么,我们学什么,所以每当我们想学什么的时候,第一反应就是找一位老师教自己。现在,丢掉这个观念,试着一切靠自己解决,相信我,一旦你体验过自己解决问题的快感,就再也摆脱不了这种学习方法。
- 绝对不要舍不得运行,写代码最正确的姿势就是,对效果/数据做一点改动,跑一下看看结果,再做一下改动,再跑一下结果看看。很多东西不知道这样行不行,是不是这样写,验证方法就是简单粗暴:跑一遍看看,让计算机告诉你这样到底行不行。而不是你自己去记住每一条。
自上而下的学习
之前我们每次学一个东西的时候,总是从最基础的东西学起,比如我们从小开始学横竖撇捺然后从简单的字开始学起。当然,这种方式在最开是的时候是有效的,比如很多大学的编程入门课程是C语言。但是,让我们来思考一个问题:一个母语是汉语的人,如何最快速度的学会英语,或者说能够用英语交流?然后我们想一下,是从英标学起,一个一个单词记起的人学的快,还是一个直接去美国生活的人学的快?答案肯定是后者。所以我们得出一个结论,当我们了解一个东西是什么的时候,我们就不应该在学习下一个类似的东西的时候再从零开始学习,这是非常浪费时间的。
** 从而引出一个问题,当我们学完一门编程语言之后,如何精进或者学习其他的技术? **
答案是,自上而下的去学习。当一个只会说汉语的人第一次来到美国的时候,首先要能吃上东西吧,所以他要知道如何去点餐。然后他需要解决的问题就是:
- 哪里有餐厅
- 从家里到餐厅的路怎么走,可能还需要知道过马路的交通规则是什么样的,我们不需要知道所有的交通规则,我们只需要知道从家里到餐厅这段路上需要遵守什么交通规则就好了
- 怎么点餐?点餐用英语怎么说?
- 带够饭钱
当把这个在美国吃东西的问题拆分成这几个小问题的时候,每个小问题是不是都很好解决。
在这个例子里,我们没有去把英语完全掌握再去吃饭,也没有学习了美国的所有规矩再去吃饭。
映射到编程中,我学完了C语言,然后我想做一个小游戏。首先收起自己对做游戏的高端看法,收起自己的恐惧。来拆分一下自己需要解决的问题,然后百度每个问题的解决方法,如果一个问题比较大,那就把它拆分成多个简单的问题,然后逐步解决这些问题,就能够完成自己想要的目标了。关于如何拆分问题,逐步解决问题,这篇文章可能会有一些帮助 用C++做一个贪吃蛇游戏
在解决如何用C++做一个贪吃蛇小游戏这个问题之前,我没有做过游戏,而是先把自己需要实现的功能列出来。
然后再想如何在编程中实现这个功能,有功能不能实现的时候,就拆分,拆分不了,就百度。
所以,编程能力最终变成了拆分与解决问题的能力,也就是分治的思想。
所以,当我们使用一门完全没有学过的编程语言,该怎么做?
- 先写一个Hello World,来了解程序入口是什么
- 然后就直接上手做自己要做的东西,在这其中,可能会遇到:
- 它的数组是怎么写的? 百度一下
- 它的函数是怎么写的? 百度一下
- 它的类是怎么写的? 百度
- 它的文件引用是什么语法? 同上
总之,一切之前在C语言学过的东西,在这个语言中,肯定有同样的东西存在,就算不存在,也有替代的解决方案。当你需要实现一些复杂的功能的时候,就去百度一些这个语言的库,其实在熟悉了一门语言之后,大部分的开发都是依赖库的。所以经常去看看语言的一些优秀的库,百度搜搜,github上逛逛,收集一些优秀的库资源,在开发的时候用。很多优秀的库都有完善的文档,从最简单的例子到复杂的配置都有列出来,所以看文档是一个很好的习惯。一般性在使用库的时候,都是用一个配置/方法,跑一遍看看这个属性/方法是干什么用的,最后找到自己需要的。
结语
因为看到很多人想努力学好但是却无法突破,所以想写这样一篇文章。以上都是自己实践+总结的也是自己相信有用的,也希望会对你有用。