非计算机专业人员如何成为专业人员的学习之路
前两天一兄弟给我打电话,他的问题是自己想好好学习计算机编程技术,但是自己想学的东西太多,不知道从何学起,而且学到的东西也在工作中无法用到。这也是我曾经遇到过的问题,因为我也不是计算机专业出身,所以今天我就说一些我对这个问题的看法。
我认为认识一个事物,首先要去了解这个事物的整体,然后再去研究它的内理。就像我们认识一座大楼,我们第一步要先从大楼的四周去看这个大楼的结构,第二步去看这个大楼内部的整体的支撑骨架,第三步才是去研究每一层的结构和房间部署。假如我们首先就从其内部细节开始研究,由于我们对这个事物的整个结构没有了解,就很有可能在一个地方徘徊,可能就在大楼的一层中徘徊,根本就不知道楼上还有几层,也不知道这个大楼的整体骨架,犹如盲人摸象,只能知道其中一部分。纵然最后认识清楚了,也需要耗费很多的时间,走很多弯路。
计算机专业的人从大学开始学习计算机相关知识,他们从《计算机原理》等这方面的书籍了解到最基础的计算机硬件知识,然后再从《计算机操作系统》等书籍了解到整个操作系统的实现和编程环境,再进而通过《编译原理》《计算机网络》等书籍了解到计算机编程语言的原理和网络原理,再进而学习各种我们平时用到的C, C++, Java等编程语言进行应用开发。他们将计算机基础、网络原理到计算机编程应用之间的整个知识体系都学习了一遍,所以他们在工作中遇到一些问题,就很容易解决,从而进步很快。还是拿大楼举例子吧,他们是从大楼开始建的时候,打地基开始学起一直到大楼完工,所以他们会对这整个大楼的结构都很了解,纵然有些细节方面不是很清楚,在需要的时候花一点时间去看一下就好了。
综上所述的结论是,计算机专业的人是将整个计算机相关专业的知识体系建立起来了,在这个基础上再去发展学习,无往而不利。就像金庸小说中的张无忌练过九阳神功后再学其它武功后就能够迅速的学会。
非计算机专业的人通过自学或者社会上的一些培训机构学习到计算机编程这门技术,他们能通过编程语言开发出一些东西,能完成工作中的任务,当然一般都是工作在应用层。但是他们没有对计算机专业知识进行过系统性的学习,对基础知识缺乏了解,故在遇到一些非业务逻辑、牵扯到底层的一些东西的时候,他们就会茫然了。网络通信的过程,编译器的优化,数据结构的优化,多进程多线程编程等等,这些是他们所欠缺的。就像是盖楼房,地基没有打好就在上面开始加砖盖墙,倒是必然的。这也是为什么有些非计算机专业的人很努力的去学习,学MySQL,学PHP,但是进步依然缓慢的原因。因为对计算机专业知识这所大楼的整体结构、整体骨架没有了解,所以就找不到最合适的学习方法和学习路线,纵然付出很多时间,进步依然缓慢。
综上所述的结论是,非计算机专业的人对这个计算机专业的知识体系没有进行过系统的学习,对这个知识体系没有了解,所以不知道该从何学起,学习进步很慢。就像一个建一个楼房,地基没有打好,是没有办法垒高的,必然会倒。
下面说一下我的学习历程吧,刚开始工作一年的时候,总想着完成工作才是目标,所以在遇到问题的时候就不断的去问Google去问百度再不行就得问别人,反正一切以解决问题完成工作为目的,在这个不断搜索不断询问的过程中,慢慢发现“地基”的概念,知道自己没有基础知识这块,对知识缺乏系统性的学习。在第二年的时候,开始买书去学习MySQL数据库原理,去学Linux操作系统,去学编译原理。这个学习过程很是坎坷和经常间断,这个过程就是我那个兄弟现在处于的一种情况,想学的东西很多,却不知从何学起,而且花了很长时间去学习编译原理,在工作中也不能用到,而且在学习过程中还有很多不知所云的东西,心情很是浮躁,一会学习Javascript一会学习编译原理,一会学习Linux操作系统。这个过程持续了大概半年多,学习成果真的没有多少,但是最大的收获是我在这个工程中慢慢的对这个知识体系的认识慢慢清晰起来,慢慢的知道自己该学什么了,而且心情不是那么浮躁了,而且还明白了这个学习阶段并不是一个短期工程,需要一个长时间的积累。这样工作第二年的多半年就过去了。
然后,我开始计划用两年的时间将大学里计算机专业的学习书籍都看一遍,完成非专业向专业方向的转变,之所以用两年,是我在很好的完成我的工作之余才去干这件事,因为我觉得生存下去是最重要的,我不能不顾工作,而将大部分时间和经历都放在学习上,工作不好,就会被淘汰,生存就是问题。所以我会在我很好的完成工作之余才去做这件增强自己能力的事情。我从《计算机组成原理》开始了解计算机相关的硬件和最基础的知识,比如主板、CPU、CPU时间片、中断等知识;而后从《计算机网络》学习网络通信过程,比如TCP、UPD、路由规则等网络知识;而后从《计算机操作系统》学习进程调度,文件系统等系统环境知识;而后从《Linux操作系统》中学习Linux操作与系统知识;而后从《编译原理》中学习编译器的相关知识,学习到编程语言的运行原理;而后从《C程序设计》学习C语言知识,从《C++程序设计》中学习C++,学习C/C++语言是为了去学习一些用C/C++开发出的一些底层的软件,比如分析Nginx源码、PHP源码等;而后从《数据结构》学习数据结构,如链表、堆栈、HashTable等;而后从《设计模式》中学习到那些以前不知所云的工厂模式、装饰器模式等。这些知识虽然不多,但是这些方面的知识是整个计算机专业知识体系里面的最重要的几部分。当学过这些知识后,我发现我对整个计算机专业相关的知识都清晰了很多,工作中对一些底层的东西也越来越清楚了。能够跟运维一起商量操作服务器的一些设置,因为我学过操作系统,能够跟PHP大牛去谈PHP源码的一些东西,因为我学过C/C++,看过源码。
计划用两年,但其实一年都没用了,就完成了我的两年计划。其实有些事情你去做的时候比你去想的时候要简单,要快速。接下来,我会研究更多的开源东西,比如Hadoop大数据处理,Sphinx搜索引擎的内部实现,还有Linux的源代码去更深的了解系统知识。回头想想,其实学过的东西还是那么一点点,要学的东西还是那么多,不过,我现在是对计算机越来越感兴趣了,由之前的谋生手段到现在的爱好,我知道我要去学什么,我知道我要去干什么了。
所以我要对跟我一样不是专业出身的兄弟们说,每一份付出都是有收获的,收获迟早会来到你的面前。
书是人类进步的阶梯,扎扎实实的去学吧,一步一个脚印的去学,不要浮躁,不要急功近利,慢慢的你就会发现自己在不断的蜕变,可能用不了多长时间,你就是一个专业的人了。
推荐几本书给大家,我觉得这几本书是不错的。
其他书籍:《把时间当做朋友》《暗时间》《人性的弱点》《四书道贯》
专业书籍:《计算机组成原理》《数据结构-使用c语言》《现代操作系统》《深入理解计算机系统》《计算机网络》《编译原理》《C程序设计》《C++程序设计》《设计模式》《程序员修炼之道》《鸟哥的Linux私房菜》《设计模式》《精通Linux C编程》《C Primer Plus》
来源:https://www.cnblogs.com/CCJVL/p/3198779.html