对于新入门的程序员或者即将要学习计算机软件开发的人员来说,打好基础是非常关键的,但是我感觉网上的很多资料,对于什么是计算机基础,说的都比较官方和笼统,新人不愿意看;或者说的都是计算机操作系统、数据结构和算法等,这肯定没有错,但是对于新人来说,意义并不大,这篇文章将结合笔者多年的编程经验,给新手说清楚什么是基础?
不当杠精,接受现实
对于新手来说,有些知识是需要先死记硬背的,例如语法,一些成熟算法等,这些东西前期不需要纠结的太多,记住就行了,每个人其实都站在了巨人的肩膀上,无论你现在有什么样的成绩,以后打算取得什么样的成绩,都是在前人不断总结的经验上,再有其它的创新,所以接受一些既定的事实是非常重要的。这并不是让大家不要问为什么,而是强调,不能在牛角尖里出不来,知识在没有形成体系的时候,最好的建议就是加大知识的面,让自己的知识形成体系,先把语法之类的东西死记硬背下来,这是必须要经历的一个过程。前几年是进步最快的时候,需要不会的,先记下来,可能慢慢你就会了,知道了,理解了,懂了为什么了,有一种豁然开朗的感觉了,如果找不到这种感觉,那你需要找个前辈,请教一下。
1、基础就是计算机知识体系
什么是知识体系?简单来说就是你所掌握的知识,一种是理论性的研究,一种是建立在理论性的研究上的应用,对于计算机来说,数据结构和算法就是理论性质的研究,操作系统的进程调度就是建立在这种理论上的实际应用,所以要建立一套完整的知识体系,应当重点学习对理论的应用,注意,这里说的是对理论的应用,而不是对理论的研究。这里对于新手的建议就是,不要深入到各种复杂深奥的数据结构和算法中去,掌握计算的几种基本结构和算法就可以了,具体要掌握的几种最重要的理论,有下面几种:
2、队列
计算机中很多事情,都用到了队列,生活中也经常排队,所以要理解排队是非常必要的,队列可以让我们在计算机资源不足的时候,把要做的事情,放到队列里,慢慢做。当然生活中有人插队,计算机中也有人插队,这里就有一个概念,就是公平和非公平,对吧,是不是很好理解。如果大家刚好开始学习计算机软件编程,一定要自己去实现一个队列。
3、常用数据结构
常用的数据结构是必须要学习的内容,无论你学什么语言,数据结构都是必学的内容,常见的数据结构有:
- 链表,包括单链表和双向链表
- 数组
- Map或者字典,原理都是一样的,KV的结构。
- Set 集合,不重复
- 栈 FIFO
- 各种树 二叉树、红黑树、B、B+
- 图
对于新手来说,掌握前4种即可,后续有兴趣,可以多研究下剩余的3种。
4、缓存
计算机中经常用到了缓存,对于一些我们经常使用的数据或者资源,往往会放到缓存中去,下次再用的时候,就能很快的拿到需要的数据,缓存不管是在操作系统、框架、应用层面,都应用广泛,缓存是1个空间换时间的例子,当然,也有时间换空间的例子(例如压缩)。如果你要学习缓存,就会学习到各种的缓存策略,如果你要学习LRU,就可能会用到队列,你看,知识是不是一环套一环的呢?到这里是不是对知识体系,有一点体会了呢?
当前比较经典的缓存如memorycache redis 都是KV类型的内存型缓存,平时也可以自己用Map,数组,弄个临时缓存,灵活多变,掌握缓存的思想即可: 当一个数据需要重复利用的时候,把它缓存起来。
备注: 深入学习,需要解决缓存一致性问题,不过这个东西,后续慢慢学吧,不急。
5、池化技术
你可能在以后,会经常遇到线程池、连接池、内存池等各种池化技术,池子这种技术和缓存有点类似,但是也并不完全一样,池子里面的资源,往往是因为创建和销毁,太耗费时间或者其它,才需要放到池子里面存起来,而且要严格控制池里的对象的数量,和缓存是不一样的;刚开始学,可以简单的学习下连接池就可以了,知道是干什么的,怎么用的,就可以了。比方说java连接数据库,就需要用到连接池,那么你可以思考下,为什么要用连接池?不用会怎么样? 连接池里面的各个参数都是什么意思?为什么要这么设置。如果都理解了,你就理解了其它类型的池的技术,相信以后你自己遇到类似的问题的时候(资源创建和销毁耗费大),也可以想到,是不是可以用池?
6、接口的概念
这个应该放到比较靠前的地方,计算机中的接口,无处不在,生活中也有很多的接口,只是你没有意识到,那么什么是接口呢? 比方说电视机的遥控器开关,就是1个接口,你按下音量键,声音增大或者减小了,这体现了什么思想呢? 这种思想是把功能暴露出来,把接口内部怎么做的,隐藏了起来。
所以你不需要知道当你按下音量键的时候,遥控器到底做了什么,而只需要知道,只要我按下音量键,就能增加或者减小音量,这是一种非常美妙的体验,普通人也可以控制电视机的音量,如果没有良好的接口设计,可能控制电视机的音量就会很困难。那么计算机也是如此,如果没有接口这个思想,你编程的时候,需要关心茫茫多的细节,会陷入到细节中出不来,没有操作系统接口,编程会特别困难。你需要学习到的是,仔细并且谨慎的设计你的接口,把内部实现隐藏起来,让它用起来像电视机的遥控器那么简单。
7、小就是美
对于新入行的程序员来说,可能会犯一个错误,把所有的代码,都放到了1个文件中去,或者写了1个5000行的源代码文件,这是一个很让人伤心的事情,可能会是你的同事,也可能是自己,因为在之后的日子里,维护这段代码,将会痛不欲生。对于新手来说,一定要记住的一件事是,写代码占用了你1个星期的时间,后续的几年中,你都在维护它,或者进行二次开发,维护这段代码的时间,会占代码寿命的90%,代码一定要容易维护。请记住,一定要把代码拆分成小文件,这里的难度,在于定义小,什么算小 ?从java的角度看,大于500行可能就需要拆飞成2个文件。拆飞的原则就是,按功能进行拆分,你还记得接口的概念吧,把功能以接口的形式提供出来,尽量把复杂的内部实现隐藏掉。
暂时就写这么多吧,后续有时间了再写更多的关于编程基础的知识,学号了基础,还要学习一些基础之上的内容,切合工作实际的内容才能体现你的工作能力,光学基础也不行,所以对于新手来说,学基础的同时,还是要善于总结日常工作中遇到的问题和解决办法,不仅总结自己遇到的,还要总结团队遇到的,还要关注业界遇到的问题,这样才能迅速的成长起来,建议大家弄一个小本,把知识都记下来,每天进步一小步,人生才能迈开一大步,哈哈,老男人的情怀又开始泛滥了。
全文完。