编译原理,值得学吗

2014-02-26 00:28:14 +08:00
 chenyg32
v2ex的各路大神怎么看?
今天问了编译原理的老师,学了编译原理究竟有什么实用,老师说主要是用在新软件的开发上,至于那些C++,Java的编译器根本不需要我们来改进。所以我想问,学了编译原理对一个偏向开发型的计算机科学与技术的学生的职业生涯的帮助大吗?虽然说技多不压身,但同时开的课还有人工智能,我只能2选1,能否给个建议?
11344 次点击
所在节点    程序员
44 条回复
rebornix
2014-02-26 09:40:42 +08:00
楼主想多了,学了人工智能对职业规划影响也不大,还不够入门的。推荐编译原理,无论是原作还是译本作者的水平都是极高的。
yueyoum
2014-02-26 09:57:31 +08:00
说一句很偏激的话:

LZ你的职业规划是如何? 一辈子搞IT,写程序?
那别管了, 只要是课,只要是知识,只要是感兴趣的, 管他编译原理,人工智能,都学。
你觉得学了这些知识对你的职业道路有坏处吗?

但如果你的规则最终是要干其他行业,那就省省力气吧。
有这个时间,还不如写写web后端, android/ois开发。


总之一句话:人的精力是有限的,努力不能换来成功。
你要有明确的人生规划,并且确定最佳的实现途径。
hhkbp2
2014-02-26 10:41:43 +08:00
有时间精力两门都学
没时间精力只能选一门的话,选那门你觉得没什么用处的
shakoon
2014-02-26 11:01:13 +08:00
编译原理可以认真学,比较接近的形式语言和自动机这个课就不用花太多功夫了
zzNucker
2014-02-26 11:03:43 +08:00
不过话说回来我觉得龙书还是不错的,我们学校用的是《编译原理及实践》,也还好,不过有的地方还是弄本龙书参考参考比较好。
ianva
2014-02-26 11:38:51 +08:00
大学学编译原理缺少实践啊,不好玩就很难学,现在想学是因为确实学好了可以玩很多东西,比如创建自己的规则,比如 markdown,实现一些能很很容易解决问题的 dsl,比如 jade,stylus,还可以做自己的语言,如果说前端是为了改善用户操作网站体验的技术,那么编译原理肯定是为了改善程序员写代码的体验的技术而存在的,如果编译原理玩的好的话绝对是很有乐趣的事。

如果学编译原理最好还是自己搞点乐子比较好,找一些可应用的东西,可以产出,比如 antlr,flex+bison 等等容易出成果的工具玩玩,然后学编译原理就很有动力了
ianva
2014-02-26 11:40:21 +08:00
学一个东西不是为了学而学啊,应该是因为自己觉得它确实有趣,让自己的一些想法得以实践才是目的
jianghu52
2014-02-26 12:01:11 +08:00
惭愧的很,这两门课我上大学的时候根本没接触过,不敢说哪边更有助于楼主,不过作为一个半路出家,到现在已经有6年编程经验的人,可以说写感受给楼主参考。

首先,先要说明一下什么叫做内功。在我看来,内功这个东西就是你没办法用某一个时间点,单独的一个工作来量化的东西。他是那种随着你的经历的提高,思考的深入,而慢慢的发酵的东西。所以这样的东西在你学习的初期永远不可能立马见效,甚至在你工作的前一两年都不一定用的上他。但是当你向着更高层次发展,不再局限于单纯的完成某个coder任务的时候,你就会需要他的。

如果把一个程序的实现当做一个完整的故事来说的话,编程实际上只占用了不到10%的情节。我们敲入的字符如何变成最原始的0与1,这部分就是编译原理要教给我们的东西。

我们有不同的编程语言,不同的语法,但是对于CPU来说,他只有0与1.学习了这种不变与变之间的规则转化,最大的好处在于当我们开始在乎性能,需要考虑结构的时候,编译原理能提供给我们很大的参照。打个比方,编译原理就属于程序世界的底层规则,大家都知道掌握了这种规则的法师一般都是比较牛逼的。

至于人工智能,老实说我到现在也没明白这课到底讲的是什么,就不发表评论了。
ianva
2014-02-26 12:05:53 +08:00
把编译原理当做内功是种很功利的想法,其实学会编译原理是有很多乐子的,如果知道学会它能不能给自己带来啥乐趣才是很关键的,至少个人觉得能创造规则的造物主感觉绝对是非常有趣的
SErHo
2014-02-26 12:15:31 +08:00
创造一门编程语言和一个操作系统,是很多程序员的梦想。
luyiyuan129
2014-02-26 12:34:57 +08:00
选修编译原理,旁听人工智能
stupid
2014-02-26 12:36:46 +08:00
这门课很难学,很晦涩,考试很痛苦,that's all。
nettie
2014-02-26 12:54:07 +08:00
非常值得学习,请认真学好。
brickgao
2014-02-26 13:00:44 +08:00
人工智能也要用到编译原理呐 建议还是先选编译原理

编译原理算是基础课程之一,虽然学了之后并不会直接用到,但是对程序的理解还是有很大的帮助的。
miaoever
2014-02-26 13:24:29 +08:00
现在的《编译原理》课程所讲授的内容已经很工程化了,其中所包含的技术在现实工程中大量的使用,比如写 parser 来解析 http 请求,比如实现一个诸如 CoffeeScript 这样的 DSL,这些都是工程实践中可能会遇到的。很难想象一个合格的程序员会不懂得编译原理知识(至少是前端知识)。

所以,最好不要抱着是在学多么高深的理论这种心态,学编译原理就跟你学编程、学算法是一样的,都是你必须掌握的基本工程技能。

当然,编译后端、语义的设计等等就是更有意思也是更博大精深的领域了,深入进去,你会发现一个更广阔的世界。
shoumu
2014-02-26 14:05:19 +08:00
个人觉得关键还是实践吧,我们《编译原理》课程设计是要实现一个C0编译器,当你独立把这个东西搞出来,你会发现不仅你学到了编译的知识,编程能力,算法设计能力等等都会有一个很大的提升,挑战性很大。龙书的话建议还是慢慢啃吧,会很痛苦,多实践。
人工智能的话也同样,我个人觉得两门课对于理论要求都是比较高的,如果你能够在掌握好理论内容的基础上做好实践,选择哪一门课对你的锻炼都是非常好的。
christianwong
2014-02-26 14:43:10 +08:00
如果你以后打算从事计算机这一行强烈建议你学编译原理,如果根本不喜欢计算机不打算做这个,那就学人工智能吧,学一学考个试能过就行了,毕竟编译原理比较难。
julyclyde
2014-02-26 14:44:04 +08:00
如果考试放水,保证你能过关的话,只需要学正则文法
chisj
2014-02-26 15:58:48 +08:00
很有意思的课程,强烈建议学。
akira
2014-02-26 17:33:03 +08:00
编译原理,如果可以的话,其实我建议所有做编程的人都学。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/101881

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX