操作系统和编译原理对一个程序员作用大讨论

liansdan 2003-10-16 04:22:40
大家各抒已见!!!
...全文
514 64 打赏 收藏 转发到动态 举报
写回复
用AI写文章
64 条回复
切换为时间正序
请发表友善的回复…
发表回复
program2100 2003-10-26
  • 打赏
  • 举报
回复
操作系统和编译原理不能不学,除非你甘愿做......(说出来会挨揍的)。看看这两门课程对应的是什么,操作系统 + 编译器,程序员缺了这两个玩意,干脆就回家去吧。
pengwjeagles 2003-10-26
  • 打赏
  • 举报
回复
先学再说!,没有实践就没有发言权!
东西学了,肯定有用!
andy_jqh 2003-10-25
  • 打赏
  • 举报
回复
如果这个没有用 那么什么有用? 各种各样的语言学得越多越有用么?
bbcallen 2003-10-25
  • 打赏
  • 举报
回复
个人觉得 如果只是把编译原理用来当作代码优化的指导工具,那就太委屈他了
就好比拿青龙偃月刀去裁纸

有经验的程序员要想写出特别难看的代码,也是相当困难的
我们应当相信编译器会比我们所想象的做得还要好
如果实在不放心,对于瓶颈部分,我们可以用汇编去写
这比猜想哪个变量会进入寄存器,来得更直接有效
毕竟,对于C/C++这样的可移植程序,
谁知道计算机有多少个寄存器呢?
或许如8086有8个可用的,或许如S390有16个
更或许根本就是有n个CPU呢?
qufan 2003-10-25
  • 打赏
  • 举报
回复
多谢step_by_step(脚印)指点,我的确在学校里读书
bladesun 2003-10-25
  • 打赏
  • 举报
回复
你要是整天在IDE下搞来搞去,就不必花多少功夫去学他
你要是涉及到一些和OS有相关性,常见的如多线程等,还是要好好了解一下的
你要搞并行计算,恐怕要对二者都要熟的一塌才行
earthharp 2003-10-25
  • 打赏
  • 举报
回复
你想一辈子做苦工的话
什么都不需要学, 每天多吃点饭最好。
19830711 2003-10-25
  • 打赏
  • 举报
回复
程序员= 操作系统 + 数据结构 + C
langwuji 2003-10-25
  • 打赏
  • 举报
回复
写程序时,要站在编译器的角度去思考一些问题。
操作系统,如果你不知道操作系统给你提供了那些服务怎么写出高质量的程序?
catface 2003-10-24
  • 打赏
  • 举报
回复
经验是可以经过大量事例得出的 不必亲身一一经历啊

如果做事的话,是很难有时间去系统的学习这些基础知识的
而没有扎实的基础知识的话,在技术上是很难高,精,尖的
至少我的老师是这么说的

虽然工作可以得到大量实际操作的知识经验
但是有很大的重复性
我很赞同无心居士的话
redleaves 2003-10-24
  • 打赏
  • 举报
回复
懂与不懂在表面上差不了多少,待遇也差不多。
可是水平上就差很多了,如果一个人自称“精通”Windows开发,却又不懂操作系统,不知道有没有人相信!?
编译原理更是有用,程序员天天和编译器打交道,不知道它怎么工作怎么能行?尤其是它与操作系统关系比较紧的那些部分。
当然,不懂也不会死人,不过干起活来效果就差远了。
bbcallen 2003-10-24
  • 打赏
  • 举报
回复
老师没经历过
不过老师以前的学生就未可知也
liansdan 2003-10-24
  • 打赏
  • 举报
回复
老师说的也不知道他有没有经历过,
step_by_step 2003-10-24
  • 打赏
  • 举报
回复
好像这边回帖的都是没有什么实际项目经验的学生吧,
根据我的经验,操作系统原理和编译原理的学习对于一个程序员写出好的代码有很大的影响.
举个例子.
当设计业务系统的时候,有时候需要业务引擎,而业务引擎可以用自己定义的语言实现或已经存在的脚本语言实现.当时具体写代码实现的时候,至少要用到编译原理里面的词法分析的知识.

当你的程序计算涉及到多进程或者多线程的时候,自然会用到了os里面的知识.
这两门课好好学吧,要常习之.
yjxGMF3144 2003-10-24
  • 打赏
  • 举报
回复
同事有做嵌入式OS的,采用GNU C的写法!就其Code看来,需要对C有非常深入的了解。但是就现在的C语法书而言,即使是“The Complete Reference C”也没有深入的探讨关于编译中的“Run-Time Enviroments”(运行时环境),即一个程序运行过程中其“Active Record”(活动记录)的动态改变情况;这些东西是属于编译原理的,但是做OS的人应该有比较深入的了解!

对于编译原理,个人觉得对你的Code-Style肯定是有帮助的!现在有的Compiler做得非常的优化,但是如果你的Code写得很糟糕,它也无能为力!举一个Example:(不知是否恰当,多多海涵!)
如果你使用的Compiler不做循环展开,那么下面的(1)可能比(2)更好!

假设A[],B[],C[],D[],E[],F[],G[]是已经初始化了的数组

(1)
pA = &A[0];
pB = &B[0];
pC = &C[0];
pD = &D[0];
pE = &E[0];
pF = &F[0];
pG = &G[0];
pH = &H[0];

for ( i = 0; i < 100; i++ )
{
*pA++ = *(pB++) + *(pC++) + *(pD++) ;
}

for ( i = 0; i < 100; i++ )
{
*pE++ = *(pF++) + *(pG++) + *(pH++);
}

(2)
pA = &A[0];
pB = &B[0];
pC = &C[0];
pD = &D[0];
pE = &E[0];
pF = &F[0];
pG = &G[0];
pH = &H[0];

for ( i = 0; i < 100; i++ )
{
*pA++ = *(pB++) + *(pC++) + *(pD++) ;
*pE++ = *(pF++) + *(pG++) + *(pH++);
}

如上面的那种100次的循环,如果我们把所有的变量都放在寄存器,那么运行速度肯定快!但是机器中的寄存器是有限的,如果在次程序中仅仅只3个寄存器可以使用,那么按照(2)的做法,Compiler生成的汇编代码肯定需要把一些结果中间结果Store到memory中,然后在第二次时循环时在从Memory中Load(Memory Store和Memory Load很占用时间),这样就加重了装入和存储时间。但是如果我们采用(1)的方式,时间就节约了,因为寄存器足够!
King_Dragon 2003-10-24
  • 打赏
  • 举报
回复
学难用易,只要是从事PC编程,无可避免的要涉及OS和编译原理(从广义上说)。如果这些方面基础薄弱,提升的空间就小,有些环节主要靠经验来完成,只能说知其然而不知其所以然。可能在不同的阶段会有不同的想法,但先专后广是没错的,OS和数据结构非常重要。
ywasp 2003-10-24
  • 打赏
  • 举报
回复
很有用,等你学深入就知道
iori2000 2003-10-24
  • 打赏
  • 举报
回复
如果能够详细看看c语言你也许会知道算法,看看pascal吧,基础语言对编码的要求和流程,写一写流程画画流程图,就象你做菜一样,你必须知道什么在前,什么在后。你要知道一个工作要分成多少个步骤去完成,每个步骤又有多少个细分。自顶向下逐步细化下去,最后每个模块只有一个功能。
iori2000 2003-10-24
  • 打赏
  • 举报
回复
不在一个比较范围之内,操作系统是让我们认识系统的工作流程,cpu对内存中进程的调用原理和cpu系统资源的分配,死锁的造成和如何去避免。而编译原理是开发语言的思想,我编译原理学习的不好,不过他们不在一个范围之内,一个是系统的理论,一个是语言的思想。如果有人硬把两者放在一起比较的话就好比“关公战秦琼”。这是小弟的拙见,四年下来虽然知道里面讲的是什么东西!只是学到一点皮毛,如果你想成为另一种语言X的开发者,那么你不要放过编译原理。
迎风飞翔 2003-10-24
  • 打赏
  • 举报
回复
我想操作系统应该是必要的吧,他可以对编程有指导作用,最起码大多数程序调用的功能都是操作系统提供的.
加载更多回复(44)

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧