当前位置:首页 » 编程软件 » 编译原理网课知乎

编译原理网课知乎

发布时间: 2023-07-04 14:23:21

‘壹’ 计算机基础知识对程序员来说有多重要

非常重要,必须认真学习。
学习基础知识从来都是枯燥的,而且很多时候会给我们一个错觉,就是基础知识没有用。这主要是因为,我们未来工作以后,更多的是面向应用,更直接的就是面向工具的使用,基础知识基本是不可能直接拿出来用的,所以,大家就会觉得我只要懂应用方面的知识就好了,基础知识根本不需要去学。
就拿程序员来举例:
很多的程序员培训机构,他们并不会教任何的基础知识,直接就是教编程语言,然后设计一些案例做练习,3个月-6个月基本就结束。这样教出来的程序员能够写代码吗?当然是能的,不然这些培训机构早垮了。而很多大学本科4年读完的应届生,说不定写代码都没有这些培训几个月的学生强,大学4年对于程序员来说难道就是白费吗?
并不是的。
基础知识决定的是你未来的高度,可能你作为一个初级、中级程序员,你不一定会用到数据结构、算法编译原理。但初中级的程序员就是你未来几十年的全部吗?
如果是的,在你30多岁的时候,应该就会面对裁员了并且很难找到下一份工作。
程序员是一个干到老学到老的工作,每天都需要去学习一点新的知识,技术也是在不断的演进,需要去了解未来的技术发展方向,这样才能够一直产生价值。而基础知识是什么呢,就是当你对技术了解越深入时,越需要用到的东西。
例如:你要做大数据的工作时,你需要数据建模,需要在海量的数据中抽取自己需要的数据,还需要不影响系统的性能,运算速度更快。那么你就必须要了解算法,了解时间复杂度。如果你曾经大学时好好的学习了这些知识,并且时不时会温习一下,那么你更高更快的胜任这份工作。
但是,对于一个只是了解应用知识的程序员来说,他需要想办法学习你用4年时间堆积起来的知识,而且还不一定有可靠的老师能够教他。
再举个例子,现在华为需要一些技术人才,来做他方舟编译器的迭代,待遇非常可观。
而这时,对于懂数据结构、懂算法、懂编译原理的人来说,查的无非就是一些应用实践的知识,这些知识只要有基础、有环境,1-2周就可以上手。
但是对于只懂应用知识的人,他可能就是看都看不懂,华为也就不可能去招聘这样的人。
所以,程序员也是有高低之分的,有的年薪百万,有的年薪可能就十来万。谁不想拿百万年薪呢?可能他们也觉得某些知识没有用,所以没有去认真的学吧。

‘贰’ 想自学it,该怎么学

想要自学it,得明白以下几点
1. 应该选择什么编程语言
可能困扰编程新手最多的一个问题是【我应该学什么编程语言】或者【我需要学习哪些课程才能做出一个web、一个app】,很多人一直纠结这个问题,陷入了东学一点、西看一点的死循环,到头来啥也没学好,这会很浪费时间。
刚上大一的时候,我也很想知道应该选择什么编程语言。我问了很多人,网上各种查资料,但所能得到的答案都很片面,多数对这个问题答非所问,总是回答说“某某编程语言难”,“某某编程语言性能好”。其实作为初学者,我们对计算机体系都不了解,就不要过多地去纠结性能,或者难易等因素,原因我等下再说。
如果你有明确的方向,那么很好选择。如果你想做算法、机器学习方向,那么python是最好的选择。如果你想做web开发,javaphp等都可以。如果想做一些更底层的工作,那么就可以选c。当然这是建立在你有明确方向的基础上。可是,很多人都没怎么接触过计算机行业,特别是和我一样刚入学就被调剂到计算机专业的人。对这些同学来说,各个编程语言就只是个名字,除了叫法不一样,你根本不知道它们有什么差别。所以索性不要纠结了,我替你选一个吧。
如果你是在校大学生,那么你有大把连续的时间,就先学习c,然后再学c++。我个人是学c入门的,也许很多人不理解我为什么推荐学c,因为c和c++都很难、很复杂,看起来并不适合入门。然而正是它们的难和复杂才能让你更好地理解计算机系统【计算机系统不是指操作系统】。学习编程不是学习编程语言,而是学习一个计算机生态,即一个庞大的知识体系。只会编程语言而不理解整个计算机的体系,就像只会写字而写不出好文章。了解c/c++和了解计算机系统是极为贴合的,向下可以帮助你更容易地理解操作系统、编译原理、计算机网络、计算机组成原理,为什么呢?因为较为底层的东西很多都是用c实现的,和系统的贴合度极高,很多教材源码甚至教程,在讲述这些知识的时候都是用c或c++作为媒介。而向上,c++面向对象的机制,也可以做出一些应用,譬如五子棋游戏等,也不会显得那么枯燥。花个小半年时间了解c和c++,之后你就会觉得看书、看资料可以轻松很多。
如果你是一个上班族,但是刚刚学习编程,可能学c和c++对你来说有些复杂和困难,因为学习它们确实是很需要时间。你们不像在校生那样有大把的连续时间,而零碎的时间去学习一个比较复杂的东西效果不见得有那么好,所以可以先学一些【更容易见效】的编程语言,从python入手吧,至少能快速做出一些小应用,不至于丢失了兴趣,但是真的要入门编程又还得看看与计算机系统相关的书籍,这样才能更深层次地去编程,譬如【深入理解计算机系统】这一本书可以读很多遍,这本书把整个计算机系统给串起来了。

2.学习编程,我需要学习哪些课程?
我要学哪些课程?我为什么要学习如高数、离散数学、线性代数、概率论等课程?
这个问题也是之前困扰了我很久的问题。不过我现在想通了,对于【高数、离散、线性代数、概率论】等课程,很好解释,做算法的同学肯定知道为啥要学习这些课程。机器学习中会大量用到上述提到的课程,所以会比较好理解。对在校生而言,学校开设的很多课程我们不知道为什么要学,我们很疑惑,不知道学它有什么用,这个时候我们就会很纠结,还会产生抵触情绪。这很正常,因为我们学习得不够深入,自然不能理解它们的用处。
在我看来,大学本科课程更多的是面向“面”的教学,即什么课程都教给你一些,但是又讲得不那么深入;而工作或者读研,更多的则是面向“点”的学习,用到的知识更专。本科时,学校也不知道你以后是去搞算法、还是搞架构、还是搞服务器开发,甚至去搞硬件,所以学校需要你学很多课程,至少有个了解。对学生来说,一方面可以从中选择自己感兴趣的点;一方面也可以对未来的就业方向有些启发。所以即使像数电、模电等课程,虽然之后可能用不着,但是你也要学,并且会花费大量的时间。虽然你最后不一定去搞硬件,但是这些课程也会让你更容易去理解一些知识,比如cpu中的逻辑器件。
如果你在大一的时候就有一个明确的定位,知道自己今后想从事哪方面的工作,课程与课程之间是可以调一下优先级的。不过像大学物理,这种课程确实是对编程没有帮助,但是像我前面所说的,大学教育更注重广度,大物等课程可能就是为了给你普及生活常识吧。
其实,大学教育的问题是普遍存在的,我认为我们学习一项技能的时候,应该采取的是项目驱动式学习,即需要用到什么东西时不会了再去学,而不是先填鸭式的都填进脑子,并且在学习的过程中我们还不知道它这是干嘛用的,等之后用到了,甚至不记得自己学过,反而查资料才会想起:哦,原来我之前学的xx科目是这个用处啊,可是我当时并没有好好学。很多时候学生时间的浪费可能还是要怪老师、怪学校,他们一开始没给我们做好充分的课程介绍。所以,在经过比较多的编程和项目实践后,我认为一个比较好的学习方式是,改良版的项目驱动学习法。即:
学习一段时间,做个小项目,将做项目遇到的问题记下来,针对性地学习相关知识,然后再实践,再学一段时间理论,让知识成网状发射状地变大。当然,项目驱动式学习有一个弊端,就是每次学习的知识都是项目所需要的,很零碎、不成体系,所以需要改良,即在采取项目驱动学习法的时候每天抽一段时间去完整地读一本书,或者一个相关问题的完整介绍,这样就很容易把一些知识成体系地串起来。这样一段时间下来,慢慢的,你就知道我们为什么要学那么多科目,学这些科目能干什么。

谈到数据获取,可能最容易想到的是爬虫,爬虫是一个在知乎上被说烂了的话题,所以我不想多说它是什么。很多时候有人觉得爬虫简单,为什么呢,因为有现成的框架,所以获取少量的数据就比较容易。但是当你需要爬取的数据很大的时候(比如我之前抓取了知乎500万用户的数据,在下班的时间、用自己家里普通的pc,计算机性能并不是那么好,比不上服务器,又要在不被封IP的情况下抓到这么大量的数据,然后对数据进行清洗,最后还要可视化展示),使用现成的爬虫框架就并不是那么容易实现了。况且,我需要抓很多数据源,并不是一锤子买卖。所以我选择去开发一个系统,即在现有的框架下进行二次开发,搭建一个属于自己的爬虫系统,并植入一些算法。我在系统中添加了很多中间件,直到现在,它还可以在10分钟内就部署一个能抓取大量数据的爬虫应用。

‘叁’ 非计算机专业为什么学c语言知乎

对于题主的问题,我觉得有点大了,这个问题就好像我问一个学习金融的人这样一个问题:对于非金融专业的学生,怎么入门金融学?

OK,我先说说我对计算机的理解吧,因为我觉得这对学习计算机比较有好处。

我所认为计算机是什么呢? 他是一种辅助设备,能够拓展人类的能力。能够轻易完成人类很难做到和很费时间和精力才能做到的事情。

Okey,理解说完了,开始干货:

计算机分为硬件和软件,硬件就是你看得见摸得着的,软件是你看得见摸不着的。介于题主是想说入门,我就不推荐计算机有关硬件的东西了,我主要推荐的是软件的方向。

通常对于计算机专业的人来说,了解计算机的硬件组成是非常有必要的。因为这不单单只是告诉你现象,还告诉你的本质。

学习计算机的软件(还有硬件):首先,你要看一本叫《计算机科学技术导论》的书(事实上不管你专攻硬件还是软件,这本书看看绝对没错),这本书包含了很多的基础内容,
比如2进制(“计算机世界”的语言,计算机非常笨,哦,也就是cpu非常笨,只能明白01010101,其他的统统不知道),
计算机硬件的组成(运算器,控制器,存储器,输入输出设备),
汇编语言(因为010101对于人类来说过于麻烦和难以理解,所以就把一段010101用几个字母定义,例如“mov”),
然后就是c语言,一些很懒的使用汇编语言的程序员觉得汇编语言还是不够方便,所以就发明了高级语言---c语言。(可以看出来计算机的发展史真的是一群很懒的人的奋斗史:),我希望有幸成为他们其中的一员。)
当然,里面还说了很多其他的东西。

看完了《计算机科学技术导论》以后,好吧,这是开胃菜,正菜开始上桌了。

C++ 。推荐书目:《C++ primer》 ,C++是一门计算机高级语言,计算机语言是拿来干什么的呢?就是和计算机交流的,你看,你和英国人说话要说英语,要和广东人说粤语,要和荷兰人说荷兰语。一样的道理。随着“hello world”在那个黑黑的界面中显示出来的时候,你甚至会怀疑:这TM就是编程?!
哦,这只不过是万里长征中的第一步。后面还有好多有趣的东西呢。
你要开始了解什么是变量,什么是常量,什么是循环,什么是类,什么是判断语句,什么是继承,等等等等。
如果你学习完了语法部分(就是上述说的),那么,恭喜你,基本上已经可以和别人说:我学过编程了。

好嘞,开始下一步:

因为题主的研究生是金融的,而且boss是做risk management的,那么算法就是必不可少的了。
《算法艺术及信息学竞赛》 这本书还不错,介绍了一些基本的算法(当然里面不会告诉你怎么进行风险管理,那是金融专业的事)。我只是粗略的过了一遍,所以就不献丑了。不过研究算法感觉就像在原始丛林里面爬山,一般人进去就跪了,有了大量的经验以后才能生还。

《数据结构》 ,在计算机科学或信息科学中,数据结构(英语:data structure)是计算机中存储、组织数据的方式。通常情况下,精心选择的数据结构可以带来最优效率的算法。(来自维基网络),这是修炼的内功心法之一。

《操作系统》,了解了操作系统的原理以后,才能更好的操作我们正在使用的系统。属于中级的课程吧。

《编译原理》, 如果说计算机语言是魔法咒语的话,编译原理就是告诉你,这些魔法咒语是怎么生效的

《计算机组成原理》 哦,这个非常有趣,和操作系统有很大关系,但是这个是从硬件的层次上面(大部分来说)来解释计算机的组成

《软件工程》 估计题主暂时看不到这里的了,什么是软件工程呢?我的理解就是,把写软件规范化。形成一种规范以后好处就不言而喻了。

实话说,在学习的过程中会出现很多问题:
比如说语言选择的问题,你会听说JAVA无所不能,C#简单方便,python优雅至极,php开发速度快到带你飞。
我个人觉得,语言不是重点,语言只是个工具而已,重要的是人,就好像我们都会写中文,为啥俺和莫言的差距咋就这么大呢!
个人建议是:发挥各个语言的优势,在不同的情况使用不同的语言。
比如说:
1.想要开发个简单的网站,PHP是不二的选择(你可以想象用C++写网站的“快感”么?)
2.windows下的程序,C#绝对是王道,还有比微软自家的东西更懂自己的么?
3.android开发,平台的限制,最好还是用JAVA。
4.考虑到性能问题,如果你是个大神(那是不可能的,如果这样你就不会问怎么入门了)那绝对会使用到C++,对于一般的凡人,JAVA的回收机制以及够用了。

如果你想要买书,个人觉得最好不要买国人写的,因为国内大部分都是你抄我我抄你的节奏,最好买国外的书。图灵系列的我觉得不错。

我个人觉得,学习计算机并不神秘和复杂,甚至有些可怕的简单,有付出,就一定有回报。因为计算机的严谨性,他永远不会出错,你给出了正确的方法,就会得到正确的结果。

这里推荐题主一个小网站,名字叫做提问的智慧:
http://www.beiww.com/doc/oss/smart-questions.html

‘肆’ 计算机在大学能学到东西吗 知乎

计算机在大学能学到东西。
计算机硬件与软件相结合、面向系统、侧重应用的宽口径专业。通过基础教学与专业训练,培养基础知识扎实、知识面宽、工程实践能力强,具有开拓创新意识,在计算机科学与技术领域从事科学研究、教育、开发和应用的高级人才。本专业开设的主要课程有:电子技术、离散数学、程序设计、数据结构、操作系统、计算机组成原理、微机系统、计算机系统结构、编译原理、计算机网络、数据库系统、软件工程、人工智能、计算机图形学、数字图像处理、计算机通讯原理、多媒体信息处理技术、数字信号处理、计算机控制、网络计算、算法设计与分析、信息安全、应用密码学基础、信息对抗、移动计算、数论与有限域基础、人机界面设计、面向对象程序设计等。

热点内容
播放这个wifi密码是多少 发布:2025-02-07 22:34:54 浏览:99
视频存储时间长了有雪花 发布:2025-02-07 22:24:34 浏览:568
哈佛f7x怎么区分配置 发布:2025-02-07 22:22:34 浏览:771
广州python培训 发布:2025-02-07 22:22:26 浏览:199
陆金所的交易密码是什么 发布:2025-02-07 22:19:25 浏览:320
如何删除平板储存密码 发布:2025-02-07 22:10:29 浏览:747
php微信授权登录 发布:2025-02-07 22:10:27 浏览:378
怎样编程时钟 发布:2025-02-07 21:59:38 浏览:562
夸克编程 发布:2025-02-07 21:43:43 浏览:530
电源450适合哪些配置 发布:2025-02-07 21:25:24 浏览:433