你真配叫做“程序员”吗?
你真配叫做“程序员”吗?老 赫
本人从事软件行业已经有一些年了。最近两年,经常从事人员考察招募和训练工作。面试了大量的都自称是“程序员”的人,他们大都“精通VC++,有n年C++编程工作经验”,“精通MFC,ATL,DirectX,Winsock,DDK,WDM,DCOM,Corba,Samba….”等各种各样的技术。由于本人知识比较贫乏,对面试者所精通的领域不能都一一精通,其中很多技术和领域我仅是略有所知,于是只能拿出几道小题,对面试者进行一些基本了解。
请看如下考题:
写一函数交换a,b两数。
我是讨厌牛角尖和不实用的问题的。再简单不过的题了,担心这种题目有损公司形象。
但总有一部分人写出:
Swap(int a,int b)
{
int temp =a;
a=b;
b=temp;
}
可以说,写这种答案的人C语言基础几乎为0,大一上C语言的时候不知道干什么去了。而且几乎从来没有独立写过什么小型程序。对于这种人,你说实话告诉我,假如你是有钱的资本家,你敢招收这种人来帮你挣钱吗?当然首先是先要从大一的指针,参数传递进行培训。重新进行C语言入门训练,更不提什么C++/MFC了,我不相信这类人现在真的是精通ATL的。现在他们写代码的过程就是“不断犯常识性的错误”的过程。
请再看如下考题:请按商业化要求,写一个程序,往c:\mydata.dat里写入65536个字母’B’,特别强调:请注意要考虑所有可能的情况,让你的代码在各种情况运行正常。为了不让面试者麻痹大意,特意加上了强调。但总有人写出:
FILE *fp=fopen(“c:\\mydata.dat”,”w+b”);
fwrite…..
fclose(fp);
我问,你有没有看到,”请按商业化要求,请注意要考虑所有可能的情况,让你的代码在各种情况运行正常”。 有没有考虑到文件打开会失败,写文件空间不足,已经有同名的只读文件等意外。哪个软件不卖钱,不商业化?进入软件公司,你的任何一行代码都应该“请按商业化要求”啊!
包含你写的代码的商品软件会销售到千家万户,各国各地的用户,运行在Intel P133,P2 300,P3 600 P4 1.5G的CPU, 1GB /10GB/20GB/40GB/150GB 的HD上, 16色256色16bit色 24bit色 Win9x Win2K winXP系统,中文英文法文德日文的语言上,黑人 白人 红人 黄人的屏幕前 你不考虑所有可能的情况,如何能让人放心?
这类人也许能够使用语言,函数,写一些代码。但如果不经过训练,缺乏思维的严密性,永远无法洞悉编写商业软件的实质。与这种人合作的经历,就是一场恶梦。他会让全team的人焦头烂额的找系统中某个bug.好多天后,“啊,原来是你小子的代码处理不严密,没有考虑nnnn的情况啊。”
对于还有些某些自称精通C++之人,只需要问“虚函数是什么?”很多人就会支支吾吾,答非所问,答一大堆无关的东西。请问,”虚函数是什么”都不知道,是否该算“对C++有大概了解”都谈不上?
当然,面试者中的确不乏优秀之人。但是,对于不少面试者的技能,我禁不住要喊“太业余,太业余啦!”
我知道的,做一个程序员远不是想的那么容易。特别是在写商业程序的时候,一个变量名有时都需要斟酢再三达到完美,注释语言都需要推敲,如何让其他人真能看懂。任何一个反常的小现象有时都需要仔细的去追查解决。界面的元素也需要严格的按《GUI规范》去制作,不允许有一个pixel的位置和大小的偏差,资源的标点符号不对,也需要认真校对修改。以上的事情都不能敷衍了事。
这似乎正是我国大部分程序员所缺乏的。大家似乎都乐于把代码应付完了事。管你什么对象模型,注释,类的屏蔽性之类的问题。理由是“反正我也是被剥削,做不了几年。”“写仔细太累,基本能正常运行就行”。“凑合着用,资源错误不影响使用,地方太多,改太麻烦”,“先写好代码,以后有空来补注释”(以后任务一个接一个,你能有空来补注释吗?)。
Stop!怕累,你就不应该选择这个职业!
程序员不是为懒汉和懦夫准备的职业。
没有完美主义态度,你就不要编程!
如果你是老板,你会不会让这种拿着你的工资不认真做事的人下岗?
这种工作态度有资格叫“被剥削”吗?是在剥削老板,剥削勤奋的同事吧?
我认为,认真做好编程细节(详细注释,设计良好的对象模型,优质可读的代码,严谨认真制作界面),也是对自身素质的一种有益的训练。任何《编程大全》都没有提到这一点,但这确实是作为一个“程序员”的首要素质!至于那些技术,是可以学习和积累的,反倒不那么重要。现在“程序员”们津津乐道的是“如何用Splitter切分一个视图”,或者“如何更换软件的皮肤(当然,是用网上那几个老外的共享代码)”。
也许,这也是我们民族现在与那些所谓优秀民族的差异。比如,日本人的敬业,日耳曼人的严谨。羡慕吗?那为什么你不学着做?学人家的实质而不是皮毛。
(申明:本人是最恨小鬼子的,但是人家的确很多时候比国人做得好,我指工作态度)
所以,现在以后当你在被面试的时候,介绍自己 “我是一个程序员,精通xxx,xxx…..”的时候,请小声问一下自己,你真的配叫做一个“程序员”吗?
(脾气燥,说话不中听,愿大家共勉!提高民族软件水平,还得靠大家!)
说的好! 我坚决不做程序员 我觉得我还是满配的。呵呵。 我也想做程序员 啊
这家伙搞的自己好象很刁一样,恶心 加一个字,很--恶心
呵呵,会长说的有道理的啊,现在的很多初学者包括自认为跨过初学者时期的人都那么的心腹气燥。学习就是该塌实,不把基础搞好就谈什么XX是搞不出名堂的。
我心中程序员是那种注重逻辑、算法、安全...就是技术的人,基础很扎实的人,虚心的人。而界面设计我爱让懂一点编程,但对人的心理习惯和界面美学有相当了解的人去干。呵呵,纯属个人感觉上的看法,具体实际可能还是要规范一点。 写一函数交换a,b两数。应该怎么写???
我没系统学过C/C++,只是随便看了看
要用指针吗?
不需要指针。和其他语言没有区别;
swp(int a ,in b){
a-=b;b+=a;a = b-a;
} 写一函数交换a,b两数,在C中,标准方法是要用指针的(传地址)例如 swp(int *a ,int *b)
如果不用指针,也可以用全局变量或者用宏#defineswp( a,b) {a-=b;b+=a;a=b-a;}
如用C++,可以用swp(int &a,int &b)或者用模板函数 不好意思,是写错了,函数定义用 swp(int &a,int &b)
一定要加 & (其实和指针不一样,实现却基本一样) <P>楼上的有个问题我很想不明白</P><P>为什么交换数字用 a-=b;b+=a;a=b-a; ?</P><P>无论从可读性,和运行速度上,你这都是走下策(用于加密或许有一点点迷惑别人的意思)</P><P>下面是int c=a;a=b;b=c;VC编译后的指令</P><P> int a=12,b=21;
mov dword ptr ,0Ch
mov dword ptr ,15h
int c=a;
mov eax,dword ptr
mov dword ptr ,eax
a=b;
mov ecx,dword ptr
mov dword ptr ,ecx
b=c;
mov edx,dword ptr
mov dword ptr ,edx</P><P>下面是你的方法VC编译后的指令</P><P> a=12,b=21;
mov dword ptr ,0Ch
mov dword ptr ,15h
a-=b;
mov eax,dword ptr
sub eax,dword ptr
mov dword ptr ,eax
b+=a;
mov ecx,dword ptr
add ecx,dword ptr
mov dword ptr ,ecx
a=b-a;
mov edx,dword ptr
sub edx,dword ptr
mov dword ptr ,edx
</P><P>很明显正规方法只有8条Mov指令,</P><P>而你的方法有8条Mov指令和2条Sub指令和1条Add指令</P><P>要知道,和Mov指令比起来Sub指令,Add指令是很费时间的!</P> <P>看到了一年我发的帖子……</P>
<P>__asm{</P>
<P>push a</P>
<P>push b</P>
<P>pop a</P>
<P>pop b</P>
<P>}</P>
不知道这个可不可以,就是不通用
通用的还是要用模板
[此贴子已经被作者于2004-10-30 23:01:48编辑过]
交换数值到底哪个好哦,迷茫了 <P>游侠无极限的好</P><P>栈操作,先进后出,后进先出,简单</P>
页:
[1]