看了近来的论战, 我想对在校的大学生说。。。。。

xiaonian_3654 2006-12-02 10:25:51
首先声明,我写这个帖子,不希望任何人有人身攻击,脏活,刷屏等行为。我毕业3年多,专业机械设计,作了开发2年多,从今年开始也面试过很多人,尤其是这周,面过3个人。
袁锋和金旭亮的论战,我早就想说点1家之言,虽然我是非常支持袁,但是很多时候我们碰到问题的情形都是小马过河,在袁锋向来很简单的事情,但是对于在校大学生来说,实践起来,难度还是很大的,因为袁不做学生很久了,我想大概就记得学生时候做了哪些事情,做事的细节已经忘了,而我毕业没有多久,对我当学生的时候的情形记比较熟悉,
关于实践派,金是不折不扣地实践派,之所以很多同学支持,是因为金的实践的观点很能解决就业问题,金的方法是让学生尽量多写程序。金所在的学校是北京理工,碰巧我有个同事是北京理工的图形学博士, 我们没事的时候,他说起他在北京理工的时候,情况确实不是特别乐观,比如抄作业啊什么的,不过还好,也有非常优秀的。如果能在大学的时候认认真真的把课后习题做完,在机器上调试正确运行,,4年下来,智力一般的人,也能做个称职的程序员,为什么要抄作业那,抄作业的时候想着课程怎样怎样没用,毕业之后说起中国教育又是义愤填膺,这个时候为啥没有想起自己抄作业的时候了,如果学校聘请了不合格的老师,这是学校的失职,但是如果学生专业课抄作业,这就是学生的不对。我去年碰到过swap都写不出来的,据说还在上海找了个C++程序员的工作,这真是个疯狂的世界,他是这么写的
void swap(int *a, int *b){
int *t = a;
a = b;
b = t;
}

对于一个计算机专业毕业(一个南京末流重点)的人,写这样的程序,我想,他也是抄作业出来的。

我看到有人不支持袁,理由是这样,如果我们学了过多的理论,我们就没有时间写代码,没有时间写代码,什么都是空的
是的,不写代码,什么都是空的,但是你写的代码,能不能写点有深度的阿,很多同学热衷于考程序员等级考试,你们在学习的时候,能不能书上的代码都在机器上正确运行了,每个分支都跑到? 这样虽然花时间,但是绝对对你的工作能力有很大的保证,你工作的时候很多时候用不到高深的算法,但是一定会碰到逻辑比较复杂的情况,如果你没有写过足够多的代码,没有写过一些算法比较复杂的程序,是很难正确写出逻辑复杂的程序的。


好了,今天就说这么多。
...全文
4000 164 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
164 条回复
切换为时间正序
请发表友善的回复…
发表回复
yafizyh 2006-12-12
  • 打赏
  • 举报
回复
你表意不清吗,难道又是我的错? ^p^

如果早说清楚你所谓的数值是GDT中的值,我还会列CS、SS寄存器的数值吗?查看GDT又不是很难的事。

沟通很重要,我们大家都要加强。
zyl910 2006-12-12
  • 打赏
  • 举报
回复
又没说你错
最初的回帖只是作为补充而已

没想到你的反应居然是直接列出CS等寄存器的值...
zyl910 2006-12-10
  • 打赏
  • 举报
回复
Sorry!
是我没说清楚,但看“用户模式不使用GS”应该知道我说的是用户模式吧

对于应用程序(Ring 3)
“CS、DS、SS、ES的基址都是0”是绝对成立的
这你应该能接受吧

对于系统程序(Ring 0),这句话在绝大多数情况下是成立的
那些基址不为0的描述符,用于特殊目的的
就算是调用了它们,但随后也会修改段寄存器使基址为0

这一切都是为了实现32位平坦地址空间,避免段带来的复杂性


以前在学操作系统和保护模式时,一直很难将这些知识点与Windows操作系统联系起来
直到后来发现“CS、DS、SS、ES的基址都是0”,突然顿悟
描述符的复杂性对实际设计操作系统是一个挑战,所以干脆尽量少用
这就是我发帖的原因
yafizyh 2006-12-10
  • 打赏
  • 举报
回复
zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果) ( ) 信誉:105 Blog 2006-12-10 10:39:06 得分: 0


Sorry!
是我没说清楚,但看“用户模式不使用GS”应该知道我说的是用户模式吧

对于应用程序(Ring 3)
“CS、DS、SS、ES的基址都是0”是绝对成立的
这你应该能接受吧

对于系统程序(Ring 0),这句话在绝大多数情况下是成立的
那些基址不为0的描述符,用于特殊目的的
就算是调用了它们,但随后也会修改段寄存器使基址为0

这一切都是为了实现32位平坦地址空间,避免段带来的复杂性

以前在学操作系统和保护模式时,一直很难将这些知识点与Windows操作系统联系起来
直到后来发现“CS、DS、SS、ES的基址都是0”,突然顿悟
描述符的复杂性对实际设计操作系统是一个挑战,所以干脆尽量少用
这就是我发帖的原因

===============================================================================


由于Windows的内部实现实在是太复杂了,这里只是在应用的层面上对栈给出解释。若深入到Windows内部,栈的定位首先需要依据寄存器SS经由(全局或局部)段描述符表得到相应的线性地址(虚拟地址)基址,此基址与ESP(函数局部变量寻址)或EBP(函数参数寻址)相加,然后再经由分页机制寻址物理内存。

请问我又错在哪里?

我们在争论什么。是不是都疯了?
yafizyh 2006-12-09
  • 打赏
  • 举报
回复
这些是你的应用程序的段吗?

========================================

当然不是了,但是总归不是0,对吧。

“ 我以前的原话就是“CS、DS、SS、ES的基址都是0” ”

这话对么?
zyl910 2006-12-09
  • 打赏
  • 举报
回复
对于应用程序
是不修改段寄存器的
所以Windows系统将CS、DS、SS、ES的基址设为0
以实现进程地址空间




// 另外,你看到了Code32段的基址为00000000,难道你没有接着往下看吗?
// 80400000 0000ffff RE

这些是你的应用程序的段吗?

GDT是对于整个操作系统而言的
而不单单指某个进程
那些是系统段——“80400000”位于高2G系统内存区

操作系统而言必须使用一些特殊的段/门,以符合IA32体系结构的规定
ningkezi 2006-12-08
  • 打赏
  • 举报
回复
楼主,你怎么那么牛?

我也是学机械的,硕士毕业,在北京一家做企业信息化的公司做了两年的开发

感觉技术没什么长进,工资待遇也不高,我很苦恼,给我指明条学习前进的方向吧

非常感谢。要不告诉我你的MSN跟我聊聊也行
hy_number_one 2006-12-08
  • 打赏
  • 举报
回复
顺手来两个,呵呵
int a,b
a=a+b
b=a-b
a=a-b


int a,b
a=a^b
b=b^a
a=a^b
ChinaLoong 2006-12-08
  • 打赏
  • 举报
回复
爱生活爱接分:)


============================================================
A light heart lives long.
静以修身。
============================================================
yafizyh 2006-12-08
  • 打赏
  • 举报
回复
zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果) ( ) 信誉:105 Blog 2006-12-07 09:07:26 得分: 0


// 错了就是错了,还死不承认,还找借口

不能理解你在说什么

我以前的原话就是“CS、DS、SS、ES的基址都是0”

只是你自己不会看基址而已


WinXP下的测试结果早在楼上列出来了


=========================================================================


真是不用不知道啊,大名鼎鼎的SoftIce还真够恶心的。

DOS一样的界面,一大堆的命令,竟然还有函数,不查参考书,连个步进都执行不了。

垃圾SoftIce 4.27精简版,1小时之内害我系统崩溃两次,装完重启就蓝屏。

SoftIce 4.30精简版需要的msvcp60.dll竟然没有内置于安装文件当中。

与W32Dasm相比,不能查找字符串;与OllyDbg相比,不能直接用汇编更改原文件。

除了查看GDT以外,不知道还能做些什么,只能和DS/DDK狼狈为奸了。郑重怀疑你的眼光。

另外,你看到了Code32段的基址为00000000,难道你没有接着往下看吗?

还有Code16段呢,基址可不是0。

base limit attrubutes
---------------------------------------------
80400000 0000ffff RE

你不会告诉我那里没有可执行代码吧。(调试环境Windows 2000 SP4)

Data32段非零基址的就更多了。

我对系统级编程不了解,劳烦给个合理解释。

//有些人哪,对于理论和实践总是管中窥豹、浅尝则止,不愿意全面的看问题。
//看到事物的一个方面,便自以为是全部了。
zzxing 2006-12-07
  • 打赏
  • 举报
回复
mark
jiangkeredgirl 2006-12-07
  • 打赏
  • 举报
回复
mark
zmx0506 2006-12-07
  • 打赏
  • 举报
回复
怎么这么久了,还有兄弟记得“酸”我呢

LZ,快结贴,不然你娃这贴结不了了,还是加点分吧,这么多兄弟顶你哦!
jackie615 2006-12-07
  • 打赏
  • 举报
回复
。。。。。。
crystal_heart 2006-12-07
  • 打赏
  • 举报
回复
template<class T>
bool swap(T* a, T* b)
{
bool bRet = false;
if( a && b )
{
T tmp = *a;
*a = *b;
*b = tmp;
bRet = true;
}
return bRet;
}
无知者无谓 2006-12-07
  • 打赏
  • 举报
回复
在论坛上看到很多帖子,发了代码,告诉他那地方错了,他回一句,编译能通过呀!
典型的面对考试的学生,编译器能解决一切问题的话,还要程序员来干吗?
对于这种本来应该一笑置之的,只是看得太多,不得不说了。
无知者无谓 2006-12-07
  • 打赏
  • 举报
回复
zmx0506(风之伤) ( ) 信誉:100 Blog 2006-12-2 11:15:07 得分: 0

我还真是个菜鸟程序员
请问,楼主,那个swap(),怎么写才显得专业啊???
要我写,也大概就

void swap(void * a, void *b)
{
void * p = NULL;
ASSERT(a!= NULL && b!=NULL);
p = a;
a = b;
b = p;
}
====================================================
不知道这位仁兄的用意是什么,你想怎么样?
如果你真的认为这能够交换,那么你可以不作软件了,早点换行不迟
如果想那别人寻开心,你就省省心吧。
zyl910 2006-12-07
  • 打赏
  • 举报
回复
// 错了就是错了,还死不承认,还找借口

不能理解你在说什么

我以前的原话就是“CS、DS、SS、ES的基址都是0”

只是你自己不会看基址而已


WinXP下的测试结果早在楼上列出来了
ulgnaf 2006-12-07
  • 打赏
  • 举报
回复
function swap(a,b: Variant);
begin
asm
xchg ECX, EDX;
end;
end;
ulgnaf 2006-12-07
  • 打赏
  • 举报
回复
什麼東西?看不懂。換個語言吧。

function swap(a,b: TVariant); //T, include objects
var
c: TVariant;
begin
c:=a;
a:=b;
b:=c;
end;
加载更多回复(143)

662

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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