大家好,今天来为大家解答计算机编程基础知识这个问题的一些问题点,包括学习计算机编程需要什么基础知识也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

本文目录

  1. 计算机基础知识都包括哪些
  2. 学编程需要什么基础知识
  3. 学习计算机编程需要什么基础知识

计算机基础知识都包括哪些

基础知识重要,但是具体来说,哪些点重要呢?

今天我就试图总结一下,也欢迎大家补充。

信息的表示和处理

计算机如何表示整数:有符号数和无符号数,尤其是如何用补码表示负数,数字的取值范围。

计算机如何表示浮点数,为什么小数的二进制表示法只能近似表示十进制小数。

数值的转换、移位

这几点非常重要,因为几乎所有的编程语言都有数据类型,而最基本数据类型必然包括整数和浮点数。

搞不清这些表示和运算,在编程中就会遇到一些稀奇古怪的问题。

从汇编层面理解程序的执行

顺序、分支、循环、函数调用、数组、结构体等在汇编层面是怎么实现的,寄存器和内存是怎么使用的。

理解了这些其实也就理解了冯诺依曼计算机体系结构,这是计算机学科一个基础性的东西。

知道程序在底层是怎么运转的,对于学习各种虚拟机有很大的帮助,比如JVM,它要解析执行的是字节码,字节码本质上要表达的就是这些东西,只不过有所扩展。

理解了栈帧,就能理解函数调用的本质,递归,以及尾递归的实现。还有安全相关的概念,如缓冲区溢出这个臭名卓著的漏洞及其防范办法。

进程和线程

程序员必备的知识,不了解这个,简直是无法编程。

需要掌握进程的地址空间,代码在哪里,堆在哪里,栈在哪里。

要准确理解进程和线程之间的关系,为什么说进程是拥有资源的基本单位,线程是CPU调度的基本单位?

进程切换和线程切换之间的区别和联系。

他们是如何创建,执行,有哪些状态,状态之间的转换。由此会涉及到并发和并行,线程之间的竞争和合作。

锁的本质(硬件层面),乐观锁,悲观锁,死锁等问题。

线程的实现方式,用户级线程和内核级线程的对应方式。

在编程的过程中,有些知识点会直接使用,如多线程编程,锁。还有一些概念能用到很多地方,例如CAS,不仅仅是编程语言的概念,还能在更新数据库时使用。再比如你理解了线程的实现方式,迅速就能掌握go语言中并发的手段:goroutine。

存储器的层次结构

Tomcat用了多线程执行请求,Redis用了单线程来处理请求,Node.js也用了单线程来,这是为什么?秘密都在存储器的层次结构。

人类制造的计算机设备之间有着巨大的速度差异:

总之,CPU超级快,内存比较快,硬盘非常慢,网络更慢,这个速度差异是IT行业的一个核心问题,人类想了很多办法试图去弥补这个差异:多线程,缓存,异步,多路复用,硬件层面的DMA。

记着下面这张图,每当你遇到某个软件的特性的时候,想一想和它有什么关系:

数据结构和算法

它的重要性我罗嗦过很多次了,不用再重复了,我就举个最简单的例子:理解了B+Tree才能理解MySQL的InnoDB的索引,理解了索引才能更好地优化查询,对吧?

计算机网络

现在的程序基本上都是网络程序,所以这也是一个必备的基础知识,学习计算机网络的一大好处就是和工作直接相关,能直接使用,比较有动力。

HTTP协议肯定跑不掉,TCP,UDP也得会,尤其是TCP可靠传输的原理:如何在一个不可靠的网络中进行可靠的传输,这是无数前辈总结的经验,一定得掌握。

要理解什么是通信协议,也许某一天你自己就需要定制一个协议来传输数据。

分组交换是什么意思?协议分层的本质是什么?什么叫无状态的协议?

Socket相关的编程更是重点,尤其是涉及到服务器端高并发的时候,如何维持和处理这些海量的socket,epoll等技术就得上场了。

还有非常重要的HTTPs的基本原理,也是网络安全的精华所在:对称加密,非对称加密,消息摘要,数字证书,中间人攻击。

数据库

不多说,关系模型、范式、SQL、索引、事务等知识都得掌握,尤其是要了解他们的实现方式。

分布式的基础知识

这些已经偏向应用层面了,但是现在很多系统都是分布式的了,分布式就变成了一种基础知识。

系统通信:RPC,消息队列等

负载均衡的原理

CAP原理,BASE原理,幂等性,一致性模型(强一致性,最终一致性.....)和相关协议(两阶段提交,Raft,Paxos......)

数据分片:取模算法,一致性Hash,虚拟桶

基本的设计思想

下面这几种设计思想对我影响很大,需要大家特别注意。但是掌握起来却很不容易,需要在实践中不断地体会:

正交:各个概念之间可以独立变化

抽象:抛弃细节,找到本质和共性

《深入理解计算机系统》一书中提到:“指令集是对CPU的抽象,文件是对输入/输出设备的抽象,虚拟存储器是对程序存储的抽象,进程是对一个正在运行的程序的抽象,而虚拟机是对整个计算机(包括操作系统、处理器和程序)的抽象。如果你对这句话透彻理解了,说明对计算机系统的认识已经很深刻了。

分层:我只想和我的邻居打交道,如网络协议,Web应用开发。

分而治之:大事化小,小事化了,架构设计必备。

关键点来了,怎么学习呢?

我原来的方式是先看书,看了很多书,数据结构,操作系统,汇编,网络......这种办法的最大问题就是枯燥(嗯,那时候还没有码农翻身这样用故事讲解技术的文章)。

理论多,实践少,很多知识点体会不深,等到参与的项目多了,Coding多了,这些知识点才慢慢地鲜活起来。

一种更加有效的办法是从工作中用到的知识点出发,从这个知识点向外扩展,由点到线,由线到面,然后让各个层次都连接起来,形成一个立体的网络。

切记,学习是一个螺旋上升的过程,想要上升就得深度思考,多问几个为什么。

比如工作中用到了Redis,你在学习过程中发现这个Redis用了单线程来处理读写请求,为什么要这么做?对于成千上万的请求它是如何处理的?然后再联想一下别的软件:Tomcat为什么不这么干?想回答这些问题,需要发掘很多基础知识。

这样做的次数多了,积累到一定程度,量变就会引起质变,整个系统就被你看透了,你的知识又扩大了一圈,更多的疑问出现了......

学编程需要什么基础知识

学编程要具备一定的基础,总结之有以下几方面:

(1)数学基础从计算机发展和应用的历史来看计算机的数学模型和体系结构等都是有数学家提出的,最早的计算机也是为数值计算而设计的。因此,要学好计算机就要有一定的数学基础,出学者有高中水平就差不多了。

(2)逻辑思维能力的培养学程序设计要有一定的逻辑思维能力,“逻思力”的培养要长时间的实践锻炼。要想成为一名优秀的程序员,最重要的是掌握编程思想。要做到这一点必须在反复的实践、观察、分析、比较、总结中逐渐地积累。因此在学习编程过程中,我们不必等到什么都完全明白了才去动手实践,只要明白了大概,就要敢于自己动手去体验。谁都有第一次。有些问题只有通过实践后才能明白,也只有实践才能把老师和书上的知识变成自己的,高手都是这样成材的。

(3)选择一种合适的入门语言面对各种各样的语言,应按什么样的顺序学呢?程序设计工具不外乎如下几类:1)本地开发应用软件开发的工具有:VisualBasic、Delphi、VC++(C++Builder)等;数据库开发工具有:VisualFoxpro、OracleDeveloper、PowerBuilder等。2)跨平台开发开发工具如Java等。3)网络开发对客户端开发工具如:JavaScript等;对服务器开发工具如:PHP、ASP、JSP、ISAPI、NSAPI、CGI等。以上不同的环境下几种开发工具中VB法简单并容易理解,界面设计是可设化的,易学、易用。选VB作为入门的方向对出学者是较为适合的。

希望对您有帮助。

学习计算机编程需要什么基础知识

我觉得应该根据你的工作需要或者说你的发展方向而定。基本上两大类吧:C/C++和Java。比如,如果你要做企业级应用的你应该学习Java和C#;如果你想做嵌入式,那么应该学好C语言;其他情况下,在你不知道要做什么之前你可以选择学习C/C++。学会这两大类中的一类,对于你学习其他语言都将是比较轻松,包括脚本语言,动态语言…… 1、我的入门是从学习C语言开始的(其实课程是C++),这是我们学校的公共课,我上课比较认真(虽然老师讲得很差,而且一段时间后,我就发现自己的基础掌握比她好,当然理解深度没她好),因此,我认为对于完全没有基础的人而言,听别人讲比较容易入门。当时的教材是学校自己编的,挺烂的。 建议一(以C/C++为例),对于刚想进入编程的人(就是从来都没有接触过编程的人),最好是听课的方式(自己看的话估计要很慢,而且很痛苦),可以找视频或者培训等。C语言推荐入门教材:谭浩强的C语言,最新版是第三版,不过第二版应该也可以了(蓝色的)。说明一下:坚决不同意直接看K&R的《TheCprogramminglanguage》,这本书绝对不是初学者可以看懂的,里面讲语法的并不多,语法都是合在程序里面讲。不过这本书非常好,入门以后一定要看的一本书。 当然可以从C++直接入门,C++之父强烈推荐从C++直接入手。C++推荐入门教材:钱能的C++(红色的,清华大学出版),这本书第一版不是ISOC++,不过比较经典,作者现在也出了第二版了,第二版好像不是太好。国外的最好的入门教材据说是:《AccleratedC++》作者是Koenig和Moo夫妇,非常厉害。他们的著作还有《c陷阱与缺陷》《c++沉思录》。《AccleratedC++》这本入门的书我没有看过,我觉得还是先找本国内的书好好看,看的差不多了,国外的经典书籍随便看就会觉得很有味道,否则你可能会很受打击。 入门的书至少要看两三遍(要彻底理解哦):)。如果是C++,我建议后面类的部分至少要理解三到五遍。说明一下,c++模板的部分可以先不用看,如果有兴趣的话,等把c++学的差不多了,我觉得可以把模板、STL、泛型编程结合起来学习,这个又是一个很大的工作量了,又得下很大的功夫。所以说,C++博大精深啊。 建议二、学习过程中要结合简单的算法,像冒泡还有类似c语言程序百例这样的小例子做做;更进一步应该做点大一点的项目,最好是控制台程序。或者你已经着手学习win32、MFC或linux,你也可以结合平台做点小的项目。 那时我其实并没有考虑那么多,因为我不是学计算机的,因此我就把参加一些计算机之类的考试当作学习目标。我当时其实C++语言基础已经很不错了,但是上机实践很少(那时我没有电脑),因此参加省计算机二级,全国计算机三级和全国计算机四级考试,结果上机都没有通过。我很郁闷,二级的时候是我不知道怎么样进那个DOS界面把题目调出来,三级的时候是很快就编好了,也通过运行了,可是成绩出来却不及格,四级的时候是编好了,可能是我那题目比较难,好像用了两次循环,结果那破机器竟然承受不了。后来一乱就毁了(当然主要是上机太少了)。不过我那些上机都没有去补考。二级和三级的时候是自恃水平已经远远超过考试要求了(^_^,见笑了,可能是因为等级考试还是比较简单的),四级的时候则因为自己已经通过高级程序员考试,觉得补考上机好像没必要。(我高程和四级都是在2003年考的)。 建议三:定位学习方向(见附录一)并好好学习计算机基础知识。在你还不确定学习方向,或者你还在大学本科期间,那么我认为应该先把计算机的基础知识好好学习一下。我认为计算机必学的基础课程而且要精学——首先是数据结构,其次是操作系统、软件工程,数据库。这四门课不管你将来想从事哪个方向的基本上都会用到。当然,有时间的话,其他基础课都是应该掌握的,离散数学、组成原理、体系结构、网络、编译原理甚至跨学科的。方向是很重要的,因为知识其实是无限的,一个小小的领域就够你研究很久了。本科生可能还没有什么方向的感觉,但是到了研究生你一定要清楚自己到底想要做什么,要往哪个方面发展,不要盲目学,瞎学乱学,否则最后可能看似什么都会,其实什么都不会。 我也曾经学习过Java一段时间,这篇文章既然是谈编程语言的入门学习,我也简单说一说。因为有了比较C++扎实的语言基础,所以Java学起来比较轻松。我先找了国内一本薄薄的教材很快看了一遍(几乎都理解,但是只看了一遍),空闲的时间配合清华张孝详老师的java视频。以后其实才算我真正要开始入门JAVA的学习,我用了是《corejava》中文第六版(本来想用候捷翻译的第二版的《ThinkinginJava》,发现被同学弄丢了),这本书我差不多用了20天才把里面的知识都搞懂,当然包括程序风格的模拟,最重要的时我把有关GUI编程的那三章里面的程序例子几乎可以默写出来(当然,那是因为我理解了,其实这样就变成了我的知识了),里面的API我也记得差不多了。(说明:Java里面的GUI编程没什么用处了,建议大家先跳过,GUI不是Java的长处,如果以后需要的话再查手册或者再记忆学习)。 其实学习了C++以后,学习Java是比较容易了,但是建议不要两种都学啦,他们的用途是不一样的,你应该熟悉其中一种,更重要的是熟悉其应用领域所需要的专业知识甚至平台,以及使用他们的企业,有创业计划的还应该考虑一下他们的应用领域,最重要的是思考他们的潜在的应用领域。 对于初级的学习就讲到这里,接下去的学习其实都是高级部分,先不介绍了,因为:一、我自己都还没有学懂,这里乱吹会误人子弟。二、高级东西的学习很多,有很多选择,又需要很多繁琐的知识,可能也一下子没办法讲清楚。

关于本次计算机编程基础知识和学习计算机编程需要什么基础知识的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

点赞(18)

猜你喜欢

相关推荐

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部