你真配叫做“程序员”吗?
请看如下考题:
写一函数交换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…..”的时候,请小声问一下自己,你真的配叫做一个“程序员”吗?