网站建设发展方向有哪些,视频营销网站,注册监理工程师,wordpress rewrite本文是介绍如何成为一个Geek#xff0c;一个真正的计算机高手。 适合有成为IT领域技术大牛的人参考。 写给大一新生和所有向深耕IT领域的人#xff0c;避免走一些弯路。 第一门入门的必备功课-语法与算法
什么是计算机#xff1f;
用来做运算的机器
电子计算机在运算方面… 本文是介绍如何成为一个Geek一个真正的计算机高手。 适合有成为IT领域技术大牛的人参考。 写给大一新生和所有向深耕IT领域的人避免走一些弯路。 第一门入门的必备功课-语法与算法
什么是计算机
用来做运算的机器
电子计算机在运算方面和廉价的计算器原理并没有区别。 什么是冯诺依曼架构
冯诺依曼结构也称普林斯顿结构是一种将程序指令存储器和数据存储器合并在一起的存储器结构。
核心的内容只有两点存储和运算
我们可以将输入的数据进行运算还能将运算结果进行存储。
而且能利用存储的数据进行判断按照判断的结果实现程序流程的改变就是循环和判断。
按照这样一个架构我们就可以编写程序了可以将很多运算和跳转的指令存储在计算机中存储代码的这一段内存称为代码段在运算过程中用产生的结果改变内存中的数据。
执行到判断跳转的指令时根据内存中的数据修改PC寄存器的值这个值是一个地址这个寄存器始终将要运行的指令的地址来修改程序执行流程。这样我们就实现了判断的逻辑和循环的逻辑这两种逻辑可以将人类逻辑转换成程序执行流。
为什么要从一门高级语言-C语言学期而不是底层
上一个问题中描述的是运算跳转两种指令指的是汇编语言的主要指令。
这种操作是很细节的直接操作寄存器CPU和内存。
我们在学习计算机入门需要培养的是什么是逻辑。如果太关注硬件细节对新手太不友好当我们通过高级语言来训练好逻辑之后再去学汇编语言就已经具备了逻辑能力学起来才会容易这是一个循序渐进的过程。
为什么要选C语言而不是别的高级语言来入门这是因为C的灵活是其他编程语言无法比拟的。设计一个编程语言其实是融入了设计者的哲学思考C语言的基础语法很简单但是真正的设计是博大精深的所以在这里很难完整地阐述为什么选择C语言的原因。
如何学C语言
这时你可能会去找一本C语言的书来读 你可能会看到这本觉得C语言太复杂了书这么厚。
实际上对于新手来说只需要掌握最基本的语法这本书过于严谨和全面。
你可以选择一本轻薄的教材用一下午快速掌握一下基础语法运算循环判断函数指针和数组。 有这些内容你就可以去做任何事了。
什么是算法
你接触过什么算法欧几里得算法秦九韶算法...
他们就是一套计算的方法可以解决某个特定的问题步骤比较机械特别适合计算机来执行。
在计算机的世界中除非你是过于底层的设计嵌入式开发芯片设计别的所有领域这里提到的算法都是核心。
我们编写一个程序一般是为了解决一个问题过程中用到一套算法。统计数据库中学生的数量需要一套算法。张一鸣正是发明了一套推送算法创立了字节。图灵奖得主中因为在算法领域取得突出贡献而得奖的占多数。
一个思想上有深度的算法的诞生标志着一类人类社会中的问题可以用计算机来实现了。
如何学习算法
算法是核心而且软件领域只有两种事情别人的代码我们要读懂还有自己要写的代码要有编码能力。
当你学了算法后对编程逻辑就有了驾驭能力。
我建议从oi算法入手参加一些蓝桥杯CSP认证之类的比赛。能力强有机会的可以去参加ACM。如果你能力一般那就是以赛代练训练能力。如果你能力强可以去当赛棍。
当然算法竞赛和实际问题区别是很大的你不能短时间用算法编写程序不代表你比竞赛选手在计算机实际应用中的能力就差。参加比赛可以训练一定的编码能力。大一的计算机新生适合做一些算法竞赛具备这个必备能力。
我建议学习资源可以选择acwing网站和《算法竞赛进阶指南》
我们没必要一上手就是数据结构看着冗长的代码用算法竞赛的写法培养一下能力最重要。
当你有了对基础算法的掌控能力后要仔细学习数据结构。
了解IT的各个领域 当你可以驾驭一门编程语言之后你就可以几个小时内学习一门高级语言。只需要看最基础的语法就可以上手了。要在实践中学习。要有查阅技术社区博客和官方文档的能力。
IT领域中别人开放过的项目的代码你是不可能全部读完的要想去认识只有培养去理解的能力和查阅资料的能力按照需求出发去选择性学。
可以学一下别的编程语言和数据库相信你这时学习这些内容并不需要多长时间。
这样你已经提升了认知打开了计算机的潘多拉魔盒。你可以了解任何一个方向选择你所喜欢的方向进行深耕网络安全云计算后端开发前端开发游戏开发人工智能。你有自学看懂这些书籍的能力因为你有了编码能力。
学好核心内容
计算机核心课程
考研所考的内容是数据结构与算法操作系统计算机组成原理计算机网络这几门是计算机的核心。
至于编程语言和数据库等知识实操永远是第一位的。就像没有每天看游戏角色数据而不去玩的电竞选手。核心的是编码能力和认知这些学科概念没任何用处会实操即掌握。因为计算机世界中一部分是别人写的代码一部分是自己写的。自己写需要逻辑能力而这些学科是别人写的代码给了你一个接口你可以用你的编码能力来认识来使用。但是发明者起的名词只需要灵活掌握。
我们知道清华姚班的姚期智教授删除了老化课程加强了核心学习引导学生在本科阶段培养自己的专长。
核心课程
回到核心课程中这些核心课程相对有必要按照科班教科书式地学习。而且也是考研所需要的内容所以我们也不得不系统学习概念来获得一定的应试能力。
操作系统
程序员必须对操作系统掌握好操作系统就是一个大程序一般书会从抽象层次来开始讲述什么是抽象就是不给你具体代码来讲述想要写的程序的逻辑。这个过程需要慢慢来理解。
程序使用的操作系统和服务器使用的操作系统是Linux我们必须熟练掌握Linux的命令。
这里推荐MIT的CS计算机操作环境导论学会Linux的命令才能进行开发。学Linux系统的操作和学习操作系统理论知识不存在先后关系根据需求来学。
学好操作系统基础知识之后去看Linux的内核源代码从具象层次将操作系统理解透彻才能成为大牛。推荐《深入理解LINUX内核》。
计算机组成原理
可能是考研专业课中的瓶颈涉及硬件层次的计算机架构操作系统处于硬件和应用程序之间。
要想学好计算机组成原理可以学一点数字电路如果不做硬件开发的话数字电路理解即可简单涉略没必要进行设计。也要学习一定汇编语言这对于操作系统和计算机组成原理都是很有必要的。
当然直接拿计算机组成原理和操作系统的书来学也是可以的但是这样可能就需要就好的抽象理解能力了。
计算机网络
网络的基础知识是比较简单的。理解网楼哦层次架构记忆协议就可以。 计算机与基础自然科学的关系
物理学
其实目前技术应用上并没有关系我们最底层研究到数字电路但是数字电路是逻辑门的设计用不到电压和电流等电学知识哪怕你是嵌入式开发者芯片设计者也是不需要电学的。跟别说力学相对论和量子力学了。
物理对于计算机毫无意义吗也不是摩尔定律失效是因为芯片设计碰到了量子力学时代是向前发展的基础自然科学对于你认知的提升有帮助。可能有些人也有计算机与物理结合方面的志向但是物理学与目前真正的计算机核心毫无关系根据自己需要完全可以不学。
生物化学与计算机的联系是更小的。
数学
如果你的目标只是进厂那么也许对于你来说更重要是业务能力后端开发前端开发游戏开发是最基础的工作都是具备编码能力工作经验就可以胜任的。这时候很多码农就提出了数学无用论。
但是你要想自己设计一套算法研究密码学人工智能做一个真正的高级人才而不是码农数学的要求是相当高的。最核心的是线性代数概率论离散数学。当然你需要的不是应试能力是真正的数学能力。
我们常说计算机行业饱和了其实不然现在的世界是不缺少码农的码农是可以社会培训几个月速成的但是高级人才在我国都是缺口。BAT都没有实力养一套自己的加密算法。中国的第三代黑客也是处于断档网络安全人员急缺。
僧多粥少很多人忙于过度无意义内卷来试图通过分数更高来获得竞争力。其实也可以换一个思路重剑无锋在绝对的实力面前一切技巧都是徒劳艰难之业当累日月。你可以选择一个自己愿意沉下心来钻研的方向进行深耕会学到真正的技术随大流是必不讨好的。 如果你把每一天当成最后一天来活的话,你就会轻松自在。 ——Steve jobs