程序猿大学生活的真正技能修炼(二)
面向过程和面向对象
面向过程就是你没有一个属性的概念,在C语言中,你只有函数,你传递的是初始化参数,函数是你想怎么写就怎么写,没有什么固定的特点和需要做的事情。但这的确与现实世界不相符,因为现实世界是分类分群的,但过程函数这种东西是你进入以后就从第一句到最后一句,你也不能选择其中的莫一部分了。
面向对象是一种非常好的编程思想,为什么这么说?因为他就是和现实世界一致的东西,用类来组织功能,有封装性、继承性和多态性,这简直太棒了!因为现实生活中,我们就是这样的。打一个比方,去医院做体检的时候,去参加体检的人就是一个类,我们就称之为体检者,但体检者只是全世界所有人中的一部分,所有这部分体检者是从人这个基类继承来的,然后这些人去体检的时候,每个人都是先去办手续、填资料什么,这就相对于初始化,每个人都是这个类中的一个对象,初始化是每个对象都必须的。然后每个人除了基本的体检项目还可以自己选择其他的体检项目,这就是你调用这个对象所在类中的方法是决定的。你会发现,每个人去参加每个体检项目的时候,都是去某个室内听从医生的指示做完动作就可以了,这个过程就是通过对象调用类中的方法啊,你想一想,不管你检查什么项目,那个医院的设施和医生和体检方式是不是都在那啊,这就是类里定义好的方法啊,有体检者需要体检什么项目直接去就可以了。而且,每个人的体检报告肯定是不一样的,那这就是多态性啊。你看啊,这个过程就是面向对象,如果是面向过程会是怎么做》如果是面向过程的话,那就很复杂了,就是假如一个人说要体检,好,然后,他需要体检哪些项目,当他把这些想好以后,然后得为他量身定做他的体检服务、体检方法和体检流程,然后制作体检报告,甚至在最开始还需要为他修建体检设施,然后一步步进行,如果有另外一个人也说要体检但是体检的内容肯定不一样,然后又得重新设计一遍,就算一样你也得根据他量身定做一份,因为原来所做的一切是原来那个人的,这要是写代码的话就是要写两份,顶多你可以复制一下,那假如有第三个、第四个、带五个...第一百个人呢?而面向对象就很好地解决了这种问题。
数据结构和算法
数据结构是什么?就是数据的存储、处理嘛!这不就是一个程序内部数据格式相关的问题?那算法就是比这个复杂一点了。。。大部分时候我们所接触的就是类似一个数学问题去解决是有没有更好的方式,更快或者更节省空间?其实这部分内容跟操作系统的一些进程调度、跟性能优化什么的有很多大关系,但其实你并不能利用这个做出一个什么东西来,因为他只是为你自己服务的,你只能在终端看一看效果,但这种东西是基础,必须有一定掌握,很多公司应聘时都考这些内容。以后你就会发现,很多实现机制会用到这些内容。
计算机网络和web
计算机网络是什么,是从电线、电波到你从电脑、手机上看到各种内容的整个体系的实现过程,各层次涉及的内容真的是太多,所以,也不用太过纠结到底什么原理,你只要对整体有所掌握就行了,因为你即使对任何一个知识点都清清楚楚也不代表你会编程实现。但是,当然,你得有概念!那什么是web,web就是网络咯,就是体现在你手机、电脑上所有跟联网有关系的上层内容,建立于操作系统之上,网络连接、反馈、呈现等等(或许这样讲不是十分准确,但大家想办法理解就好了)。这里必须知道的就是最重要的HTTP协议,当然,他的下层什么TCP/IP自然也是少不了的。需要明白的是你仅仅会个C语言、会一个C++是做不了这些事的,你需要掌握动态网页知识(JSP、PHP等)。在这里里面还会涉及许多什么web服务器的知识等等。
计算机组成原理和操作系统
其实简单来说这就是一个底层和调度层的关系嘛。计算机没有操作系统当然也是可以运行的,那为什么还要操作系统呢,就是为了能够更好地分配资源、调度进程等等呗,没有操作系统,没有操作系统,计算机只是实现了一些什么二进制存储、任务执行的功能,然后操作系统封装了所有的底层,呈现出更丰富的本领,同时运行很多程序啊,丰富的图形界面啊等等。软件是运行于操作系统之上的,实际上是由操作系统去调度底层的功能和分配资源。
嵌入式和桌面应用
物联网的同学都知道,可能天天都跟些单片机、节点打交道,当然了,单片机是没有操作系统一说的,用裸露的芯片执行程序,当然也是因为他有专门的用途,而且太小也没有那么多资源来装操作系统,虽然你可以设计很复杂的C语言程序。那这和桌面应用是有区别的,如果你想嵌入式开发,特别是嵌入式系统,那你会C语言和汇编就够了,因为你要做的是各种驱动和算法结构。但如果是桌面应用,就比如操作系统之上的一个应用,尤其是网络应用,你得涉及HTPP、FTP等等服务协议请求响应,还有图形化界面。现在最重要的一种用应该算是浏览器网页的web应用,因为其出色的B/S结构确实大多时候比C/S结构略胜一筹。