免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
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
41 [报告]
发表于 2015-07-13 20:52 |只看该作者
根据你这个推理 所有不是写操作系统级别的程序员都是码农? 毕竟 99.9%的程序员都是在写你所谓的应用层代码

lxy572535121 发表于 2015-07-13 16:24
我觉得确实是这样的,如果只写纯应用层的代码,其实很多代码都是可以copy的,码农这个词再形象不过了,没 ...

论坛徽章:
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
42 [报告]
发表于 2015-07-13 21:23 |只看该作者
forgaoqiang 发表于 2015-07-13 20:52
根据你这个推理 所有不是写操作系统级别的程序员都是码农? 毕竟 99.9%的程序员都是在写你所谓的应用层代码 ...

差不多吧,但也不一定非要写操作系统的才算.

论坛徽章:
39
白银圣斗士
日期:2015-11-24 10:40:40酉鸡
日期:2015-03-20 14:15:44寅虎
日期:2015-03-20 14:13:59午马
日期:2015-03-20 14:13:16白羊座
日期:2015-03-20 14:12:54金牛座
日期:2015-03-20 14:12:09双子座
日期:2015-03-20 14:11:57巨蟹座
日期:2015-03-20 14:11:44狮子座
日期:2015-03-20 14:11:29亥猪
日期:2015-03-20 14:16:24戌狗
日期:2015-03-20 14:16:40申猴
日期:2015-03-20 14:17:05
43 [报告]
发表于 2015-07-14 10:31 |只看该作者
1、程序员应该学习编译原理吗?有什么作用,说出你的观点。
学习总没坏处,但是程序员都有自己的注重点,不是学习了编译原理就能写出更好的代码,也不是没学过编译原理就不能写出好的代码.
编译原理对使用较为偏底层的语言的程序员会更有帮助,可以让他们快速定位,单对于java这种运行再虚拟机里的语言可能在编程上没那么大的帮助,其他方面就不太好说了

2、你是否研究过自己所使用的编译器?
这个还真没研究过...

3、是否清楚程序编译的整个过程?
很清楚谈不上,能说个大概而已.

4、分享一个自己处理过的棘手的编译错误。
遇到最头疼是是使用外部连接库,库的版本不对,就导致编译错误,找不到实现,这种问题要是没意思到库版本引起的,让人很抓狂的.

5、分享自己学习程序编译相关技术的收获。
没啥印象了,很久没弄想关的了,忘的差不多了
---在写6的时候想起一个,this,记得编译器有几个参数和this有关,可以改变this的位置,是作为第一个参数,还是最后一个参数,以前遇到这个问题

6、分享学习程序编译相关的原理对自己写程序的帮助。
没仔细研究过,了解之后帮助还是有的,比如C++编译后函数名,变量名的命名规则,this在编译之后的处理,每个编译器可能都有区别,有时候hook这些C++的函数就的非常小心,写错一个就hook不到了.

论坛徽章:
0
44 [报告]
发表于 2015-07-14 14:23 |只看该作者
1、        程序员应该学习编译原理吗?有什么作用,说出你的观点。
有时间和精力应该多了解下。知道了编译器是怎么编译你的程序的,你才可能编写出高效,稳健,占用内存少的程序。

2、        你是否研究过自己所使用的编译器?
了解一点,基本懂一个大概流程,
3、        是否清楚程序编译的整个过程?
印象中程序的编译过程如下图所示,分为预处理、编译、汇编、链接等几个阶段。说的直接一点就是把用高级程序设计语言书写的源程序,翻译成等价的计算机汇编语言或机器语言书写的目标程序的翻译程序。

4、        分享一个自己处理过的棘手的编译错误。
有一个工程,以静态的方式调用另一个名为Public的DLL ,两者都使用WIN32编译的话没有任何问题。使用x64编译时,DLL编译能正常通过,但编译EXE时出现Public.lib(Public.dll) : fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64'。
后来经过定位问题发现原因是include 了32位的Lib,因为我的32位和64位目标Lib的名称是一样的,所以需要将64位的Lib指向另一个目录。

5、        分享自己学习程序编译相关技术的收获。
编译原理讲述的都是具体程序的抽象,能够帮助我们了解计算机的工作原理,程序的运行过程。我觉得编译对我的最大收获是明白了一个抽象的理论是如何应用于实际解决问题的。

6、        分享学习程序编译相关的原理对自己写程序的帮助。
编译原理是锻炼程序员的思维的!它不会交给你怎么编程序,但是,你会从中学到怎么想问题。它是软件设计人员的核心,它给软件设计人员(程序员)提供了一个开发软件是怎么做的,以及一个程序怎样编写才能获得最佳的编译效果。它对一个程序员的开发 思路是很有帮助的。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:01:44
45 [报告]
发表于 2015-07-14 21:37 |只看该作者
编译原理是内功,你只学招式当然也可以在江湖上混,但想成为宗师还是需要学点内功的

论坛徽章:
1
2015亚冠之卡尔希纳萨夫
日期:2015-07-14 12:20:38
46 [报告]
发表于 2015-07-15 11:22 |只看该作者
没内在驱动 学了也白学

论坛徽章:
15
2015七夕节徽章
日期:2015-08-21 11:06:172017金鸡报晓
日期:2017-01-10 15:19:56极客徽章
日期:2016-12-07 14:07:30shanzhi
日期:2016-06-17 17:59:3115-16赛季CBA联赛之四川
日期:2016-04-13 14:36:562016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-01-28 06:20:0015-16赛季CBA联赛之新疆
日期:2016-01-25 14:01:34IT运维版块每周发帖之星
日期:2016-01-07 23:04:26数据库技术版块每日发帖之星
日期:2016-01-03 06:20:00数据库技术版块每日发帖之星
日期:2015-12-01 06:20:00IT运维版块每日发帖之星
日期:2015-11-10 06:20:00
47 [报告]
发表于 2015-07-15 11:25 |只看该作者
1、程序员应该学习编译原理吗?有什么作用,说出你的观点。
这个不能一概而论,底层程序员才需要学习编译原理,做业务开发的还是精通业务为主,再说搞PHP之类的了解编译原理有什么用呢

2、你是否研究过自己所使用的编译器?
只有很粗浅的了解,主要是熟悉使用为主,如GCC的各种参数

3、是否清楚程序编译的整个过程?
大致就是预处理、编译、链接三个过程,过程中的细节不了解

4、分享一个自己处理过的棘手的编译错误。
基本上google就能搞定,没遇到过特别棘手的问题

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

6、分享学习程序编译相关的原理对自己写程序的帮助。
曾经有一次程序异常,很久都没有解决,后来将优化等级由O3修改为O1就没出现了,这个算不算。。。。

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
48 [报告]
发表于 2015-07-15 12:20 来自手机 |只看该作者
不学也罢,能者多劳。当然我是经验之谈

论坛徽章:
0
49 [报告]
发表于 2015-07-15 13:02 |只看该作者
1、程序员应该学习编译原理吗?有什么作用,说出你的观点。
=> [如果做编译工具链开发]
[1] 你应该学习编译原理。编译或者说Build的过程包括预处理,编译,汇编,链接和装载,为此这些处理过程涉及的东西都必须学习。
[2] 大学的时候,我们用的是陈意云的书(大部分来自于龙书),主要讲述的是编译的东西,包括几个方面,如何用范式描述计算机语言,如何
用语法树的方式分析分析计算机语言,以及如果把语法树翻译为汇编代码或者中间代码。
=> [如果做应用开发]
[1] 你应该了解编译原理。开发过程中往往会有链接错误或者运行时错误,编译原理的基础知识可以帮助你精确地定位错误原因。
[2] 推荐<<深入理解计算机系统>>或者<<程序员的自我修养>>。


2、你是否研究过自己所使用的编译器?
=> 是的。我做过编译器开发,所以根据自己的兴趣看过不同编译器的代码,主要是C编译器和解释器。


3、是否清楚程序编译的整个过程?
=> 在大学学习编译原理的时候,就了结了程序编译的过程。后来工作后开发编译器,对这个过程就比较有深入的理解了。

4、分享一个自己处理过的棘手的编译错误。
=> 编译错误和链接错误比较容易处理,难的是处理运行时错误。记得有次开发一个x64的Boot Loader,因为堆栈Layout有问题,
结果导致Boot Loader运行到某个阶段就莫名其妙没有反应了。后来把堆栈放置到高地址位置就解决了这个问题。

5、分享自己学习程序编译相关技术的收获。
=> 要说收获,主要是Build出错或运行时出错时问题的精确定位。

6、分享学习程序编译相关的原理对自己写程序的帮助。
=> 学习过编译优化之后,会在写程序的时候自然而然地使用编译优化的规则,让程序简洁高效。

论坛徽章:
0
50 [报告]
发表于 2015-07-15 21:17 |只看该作者
就个人看来,汇编的意义一个是在于熟悉底层结构,一个是了解编译原理。 新起的python,Javascrip都是一种类似于链接库的语言,其功能主要是调用函数、库、包,达到处理事件的效率性极高。 而汇编,无论怎样说,随着Windows 95 后,界面化的功能,将用户与底层(内核)完全隔离开来,其中C是一个相对于接近于汇编的(一方面指的是,底层更加的开发,一个是语法的编译原理/*处理源码的流程。*/很相似。)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP