免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: shenlanyouyu
打印 上一主题 下一主题

[其他] 程序员有必要学习程序编译原理吗,不服来辩! [复制链接]

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
11 [报告]
发表于 2015-07-08 10:38 |只看该作者
有兴趣了解了解还是不错的,就好像小时候对一个玩具咱总想拆开看看里面是啥样,怎么个工作原理一样。

论坛徽章:
6
2015年迎新春徽章
日期:2015-03-04 10:16:53操作系统版块每日发帖之星
日期:2015-08-04 06:20:002015亚冠之鹿岛鹿角
日期:2015-08-05 16:51:182015亚冠之全北现代
日期:2015-08-07 17:14:392015亚冠之武里南联
日期:2015-08-11 15:33:03数据库技术版块每日发帖之星
日期:2016-02-02 06:20:00
12 [报告]
发表于 2015-07-08 12:15 |只看该作者
个人觉得不学编译原理只能算是码农
对底层比较了解采了算是程序员吧

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
13 [报告]
发表于 2015-07-08 13:14 |只看该作者
我们学校没有开这门课,导致到现在我都觉得很多地方不理解,现在没有那么多时间去学习了。。。

论坛徽章:
2
极客徽章
日期:2016-12-07 14:07:302017金鸡报晓
日期:2017-01-10 15:13:29
14 [报告]
发表于 2015-07-08 13:33 |只看该作者
1、程序员应该学习编译原理吗?有什么作用,说出你的观点。   真正的程序猿就算不能很熟悉,也必须要要了解的。个人观点,如果只是日常对别人的程序进行维护或者修改,或者看的懂代码来讲的话,这不是真是的真正意义上的程序猿,也不需要学习汇编
2、你是否研究过自己所使用的编译器?

还没到那个水平,仅仅停留在使用编译器的层面上

3、是否清楚程序编译的整个过程?



Debug 算么?有时候会要了解一下,不然程序出错是 根本不可能查得出问题出在哪的

4、分享一个自己处理过的棘手的编译错误。


5、分享自己学习程序编译相关技术的收获。

6、分享学习程序编译相关的原理对自己写程序的帮助。

论坛徽章:
1
摩羯座
日期:2013-11-29 18:02:31
15 [报告]
发表于 2015-07-08 14:01 |只看该作者
1、程序员应该学习编译原理吗?有什么作用,说出你的观点。
必须学习。不止是编译原理,什么计算机体系结构,OS,等都要学习。在我看灭,程序员那可以是集大成者,不能
将自己只是定位于码工,要做个全面手,这样写程序才会处处逢源。
       
2、你是否研究过自己所使用的编译器?
做的是嵌入式软件,使用的是富士通16位MCU编译器Softune,在编译嵌入式C时,才发现编译器的强大,有时候,
编译器已经为我们提供了很强大的功能,自己就不用再实现了。印象比较深刻的是,在写汇编代码时,要在函数名
前面中个下划线,因为一般的C函数编译后,编译器都会自动添加一个下划线的。查看了它的启动代码Start.asm中,
发现其中居然能用宏定义,以前在写汇编时可没有使用过像C一样的宏定义。

3、是否清楚程序编译的整个过程?
这个就比较固定了。包括:预编译-->编译-->汇编-->链接。
预编译:主要是对#符号进行处理,替换。,消除注释,检索特定的编译指令,比如#pragma
编译:就是词法分析,语法分析,构建语法树,产生汇编,这个是编译的核心。
汇编:将汇编代码变成机器码,这只是翻译的过程了。
链接:将生成的目标文件链接成一个整体,生成可执行文件EXE或Hex文件。

这只是编译的一般过程,各个编译器针对不同阶段,做出了不同的优化。开成了各有特色的编译器技术。

4、分享一个自己处理过的棘手的编译错误。
就在前两天,自己通过VBA来自动生成代码,在VBA中使用了vbCrLf表示换行,结果编译时出现奇怪的错误,说什么
无效字符\15 \34,查了好处,根本看不出来,在代码中宏定义也不高亮显示了。搞了好长时间,无意中将vbCrLf改
正为Chr(13)就没有问题了 。


5、分享自己学习程序编译相关技术的收获。
学习编译原理后,才知道,原来程序的编译分了这么多的过程,以前在上学时,总是不知道编译和链接的区别,以为是
一回事。现在知道了编译技术,对程序的理解更加深入了。特别是在学习了代码段,数据段,堆栈段后,写程序真是的
上升了一个境界。不再是从前那种糊涂了。
另外,从老外的代码中看到,居然还能使用#Error和#Warning来实现编译时错误检测,程序顿时觉得高大上起来。

6、分享学习程序编译相关的原理对自己写程序的帮助。
学习了编译相关原理后,由于软件中存在很多的宏引定义,引用来引用去,自己都晕了。
学习编译原理后,知道这不过是个预处理过程,设置编译参数为只进行预编译,然后就停止,
可以生成.i文件,是宏替换过以后的文件,再查看代码,就彻底明白宏是怎么换的了。

评分

参与人数 1信誉积分 +6 收起 理由
shenlanyouyu + 6 很给力!

查看全部评分

论坛徽章:
1
15-16赛季CBA联赛之青岛
日期:2015-12-20 00:00:43
16 [报告]
发表于 2015-07-08 19:07 |只看该作者
自己感兴趣就学,不学也没什么。主要是太多的人道听途说,说什么编译原理难学,说编译原理难的绝对是不懂编译原理的的人。我实在搞不懂,你没在高校大企业搞前沿方面的科研,就学别人五六十年前就总结出来的算法和数据结构居然说难(编译原理不外乎这几种数据结构:栈,表,树,图等。)

论坛徽章:
2
水瓶座
日期:2014-06-12 08:22:39IT运维版块每日发帖之星
日期:2015-08-05 06:20:00
17 [报告]
发表于 2015-07-08 22:17 |只看该作者
1、程序员应该学习编译原理吗?有什么作用,说出你的观点。
         程序员肯定要学习编译原理,如果想成为一个好的程序员,一个源程序翻译到机器代码的过程啊,编译的词法分析和句法分析那些在搜索引擎里用得到吧?看到开发数据库也需要编译的。不要以为,自己不去开发“语言”,编译原理就没有用啦,它能让你从根本上理解编译器,这对怎么提高程序的效率,怎么变出漂亮的程序很有用...当然貌似如果从事,“人工智能”这一块的话,编译原理也非常重要。无论是工作上还是业余中如果想编一点稍微有一些智能的程序,必然要用到。目前大家都在用的正则表达式是用编译原理做的,那只是一个很小的应用例子。大一点的应用可以做到一定的技术先进性,从而让你在本行业站稳脚跟。比如可以用语法分析来分析出一段用户上传是否含有代码,从而让你的网站更健壮。分析和分解用户输入的SQL语句,理解是否有害和是否有SQL注入。在业务软件中结算方面允许用户输入条件表达式和四则运算,允许用户自定义结算公式或条件,使软件上一个档次。甚至可以实现自己创造的编程语言,以后编程全用自语言来做,然后编译成老板要的那种语言。有的公司要JAVA,有的公司要C#,C++,VB等等你都不必每样都费心了。这样做还有一个好处,你的源程序其实是自语言,目标代码则是社会上公认的源程序,所以是可以公开的。如果以这种技术为核心技术开公司的话,则有着技术上更高一层的先进性,这种核心竞争力是很值钱的。试想,你公司的员工只会用自语言,他们跳槽的机会就少了。而你公司的用户总是可以得到全套的他们认为的源程序,则市场机会就大了。别的一般软件公司可不敢给出全套源程序,总要多少保留一点的。
      总之,我觉得编译原理十分重要,我现在也在学。只是缺少一本合适的教材。

2、你是否研究过自己所使用的编译器?
         没有仔细深入的去研究,不过对于自己编程需要的编译器还是十分用心的去学习了研究了下,能够用到的功能现在已经十分的得心应手了。

3、是否清楚程序编译的整个过程?
        C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件

4、分享一个自己处理过的棘手的编译错误。
          未初始化变量更常出现于类中,成员的初始化一般是通过构造函数的实现来完成的。
class Foo
{
private:
    int m_nValue;
public:
    Foo();
    int GetValue() { return m_bValue; }
};

Foo::Foo()
{
   
// Oops, 我们忘记初始化m_nValue了
}

int main()
{
    Foo cFoo;
    if (cFoo.GetValue() > 0)
        
// do something
    else
        
// do something else
}
注意,m_nValue从未初始化过。结果就是,GetValue()返回的是一个垃圾值,if语句的两个分支都有可能会执行。

5、分享自己学习程序编译相关技术的收获。
       在学习程序编译的过程中,编译技术其涉及计算学科抽象、理论、设计三个形态,含有基本问题求解的典型思路和方法,从系统级再认识程序、算法最恰当的知识载体,将使我们的程序设计能力得到升华,并促进系统能力的提升,对于培养我们的计算思维,程序设计与实现,算法设计与分析,计算机系统的认知、开发和利用等
方面十分的有帮助。可使其从语言实现机制的高度理解局部变量与全局变量的差别,这必将使我们更容易理解与运用高级语言从事程序设计,达到“知其然又知其所以然”的学习目标;而在“编译原理”的学习中深化“高级语言程序设计”及“数据结构与算法分析”的若干核心内容,又可以使我们从语言实现的角度更明智地选择数据结构,并按照问题的实际需求运用高级语言进行程序设计。

6、分享学习程序编译相关的原理对自己写程序的帮助。
        可使其从语言实现机制的高度理解局部变量与全局变量的差别,这必将使我们更容易理解与运用高级语言从事程序设计,达到“知其然又知其所以然”的学习目标;而在“编译原理”的学习中深化“高级语言程序设计”及“数据结构与算法分析”的若干核心内容。

评分

参与人数 1信誉积分 +6 收起 理由
shenlanyouyu + 6 很给力!

查看全部评分

论坛徽章:
40
水瓶座
日期:2013-08-15 11:26:422015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之乌兹别克斯坦
日期:2015-03-27 14:01:172015年亚洲杯之约旦
日期:2015-03-31 15:06:442015亚冠之首尔
日期:2015-06-16 23:24:37IT运维版块每日发帖之星
日期:2015-07-01 22:20:002015亚冠之德黑兰石油
日期:2015-07-08 09:32:07IT运维版块每日发帖之星
日期:2015-08-29 06:20:00IT运维版块每日发帖之星
日期:2015-08-29 06:20:00IT运维版块每日发帖之星
日期:2015-10-10 06:20:00IT运维版块每日发帖之星
日期:2015-10-11 06:20:00IT运维版块每日发帖之星
日期:2015-11-10 06:20:00
18 [报告]
发表于 2015-07-09 09:14 |只看该作者
你要这么定义 天下没有几个敢自称程序员了

lxy572535121 发表于 2015-07-08 12:15
个人觉得不学编译原理只能算是码农
对底层比较了解采了算是程序员吧

论坛徽章:
208
巨蟹座
日期:2013-09-02 09:16:36卯兔
日期:2013-09-02 20:53:59酉鸡
日期:2013-09-05 21:21:45戌狗
日期:2013-10-15 20:51:17寅虎
日期:2013-10-18 21:13:16白羊座
日期:2013-10-23 21:15:19午马
日期:2013-10-25 21:22:48技术图书徽章
日期:2013-11-01 09:11:32双鱼座
日期:2013-11-01 20:29:44丑牛
日期:2013-11-01 20:40:00卯兔
日期:2013-11-11 09:21:32酉鸡
日期:2013-12-04 19:56:39
19 [报告]
发表于 2015-07-09 09:25 |只看该作者
什么东西做到深处,都要了解原理,才能做得更好,更稳定
如果只想在这个行业当个过客,挣点儿钱除外

论坛徽章:
0
20 [报告]
发表于 2015-07-09 11:30 |只看该作者
1、程序员应该学习编译原理吗?有什么作用,说出你的观点。
个人觉得应该学习。
这让我想起美国德国的制造业了,人家制造的是母机,是生产机器的机器。在软件行业,其实我们的差距也蛮大的。一般的程序员就像传统行业中某机器的使用者,至于这些机器是怎么制造出来的并不太关注。显然,我们充其量只是软件行业金字塔的中层,离高层还有很远的路要走。

个人感觉,未来是人工智能(机械智能)的天下,如何让机器和人类互相理解,将来依靠的就是程序员,其中关键的程序员就是金字塔上的那一小部分人,这一小部分人必须能深刻理解计算机和人类语言,而编译原理就是必然精通掌握的。至于其他程序员,只要是基本高等教育流水线出来的学生都是胜任的。

就像我们一般人看别人翻译过来的外文书并没有大问题,但对于追逐尖端技术的人来说,英语是必须掌握的,依靠翻译,比较会遗漏,更有可能会有时间差,还会发生错误。雾里看花,再美也有距离!

2、你是否研究过自己所使用的编译器?
毕业好久,忘了。
3、是否清楚程序编译的整个过程?
毕业好久,忘了。
4、分享一个自己处理过的棘手的编译错误。
毕业好久,忘了。
5、分享自己学习程序编译相关技术的收获。
毕业好久,忘了。
6、分享学习程序编译相关的原理对自己写程序的帮助。
毕业好久,忘了。

附:我不需要那本书,因为不编程。参与是因为兴趣。现在回想,当年大学没有好好用功真是失误,事到如今才发现,没有扎实的基础,想要‘爆发’的时候根本有心无力啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP