第2章 学校到职场
C程序员从校园到职场
踏出校门,对于我们整个学习生涯来说,只是“万里长征走出了第一步”。为了使得之后学习和工作的道路走得更加顺畅,我们需要认清自身所学知识的不足,我们需要破除一些有关软件开发的错误观念,我们更需要在学校里面就未雨绸缪地开始培养工作所需的一些技能。
2.1 认清自身不足
我在走出校门的时候非常“轻狂”,认为自己在学校里面已经学得够多了,工作就只是“小菜一碟”。但在工作中屡次碰壁之后,我才发现自己当时的很多想法都是不成熟的。我们踏上工作岗位,一切几乎都要从零开始。
对于大家“非常熟悉”的C语言来说,我们在学校里面学到的只是皮毛,远远不能满足实际软件开发工作的要求。
我们在学校里面学到的典型的C语言程序如下:
include <stdio.h>
void main()
{
float fac(int n);
int n;
float y;
printf("input an integer number: ");
scanf("%d", &n);
y = fac(n);
printf("%d!=%10.0f\n", n, y);
}
float fac(int n)
{
float f;
if(n<0)
{
printf("n<0, dataerror!");
}
else
if(n == 0 || n == 1)
f=1;
else
f=fac(n-1)*n;
return(f);
}
对于以上程序,至少存在如下几个问题。
第一,变量命名不规范,而且没有初始化。对于该程序,main函数里的变量n、y,fac函数里变量f的命名均不规范,不能让人一眼就看出它是什么意思、要做什么操作。这对于一小段程序来说,影响还不是很大,但如果代码行数达到数千行甚至上万行,那么阅读起来就比较的费力。另外,以上3个变量只是定义了,并没有初始化,这在实际项目中也是不允许的。
第二,函数的命名不规范,且没有在主函数开始之前进行声明。本程序中的fac函数要做什么操作?通过阅读代码,我们知道该函数的功能是计算一个整数的阶乘。在实际项目中,函数命名非常重要,因为很多项目涉及函数个数较多,如果不能通过函数名称来了解其作用,而必须通过阅读代码才能获悉,那么工作效率是很低的。此外,我们一般不在函数调用者的内部来对被调函数进行声明,而是将声明放在外部,最好新建一个头文件(.h文件)来对程序里出现的函数进行声明。
第三,程序代码排版不工整,“ if…else”语句书写不规范。在fac函数中,代码的排版不工整。第一个if语句下面的大括号应该与“if”关键字保持在同一列上,第二个“else”关键字应该与第二个“if”关键字保持在同一列上,“f=1;”和“f=fac(n-1)*n;”应该再缩进4个空格。另外,“if”和“else”关键字下面的执行语句不管有多少行,都应该用“{}”括起来,以方便阅读。
第四,程序注释过少,函数开头没有注释。一般说来,在程序的关键语句的前面或右边,都应该添加适当的注释,这对程序的理解有辅助的作用。函数fac的前面应该加注释,说明此函数的功能、输入/输出参数、返回值、修改记录等。在整个程序的开头也要添加版本信息、修改记录等注释信息,以方便日后查阅。
第五,程序中出现了“printf”、“scanf”和“main”函数。这是大家都习以为常的,但在实际的项目中,几乎不可能出现这3个函数。因为很多公司都有自己的开发平台,而且代码都达到数千行,甚至上万行,再加上大部分都不是基于VC开发的,你在哪里去输入,又在哪里去看输出呢?我一进公司,最开始看到程序,就想去找“printf”、“scanf”和“main”,但这是徒劳的,因为根本就没有。关于输入/输出,开发中会有专门的消息处理流程来处理,大家需要知道的就是一个完整的代码工程中不一定非要有上面的3个函数(但本书为了给大家介绍C语言的相关知识,在程序仍然使用这3个函数)。
短短的几十行代码,就出现了这么多大家“没有想到”的问题。
看到以上的分析,也许你会很惊慌:我以前的C语言难道是白学了?
非也!我举这个例子,不是为了给大家当头一棒,让大家觉得软件开发是多么高深和艰难。我只是想说明,对于C语言,我们还有很多不知道的东西,即使是自己知道的,也与实际工作存在较大的偏差,因此大家要虚心学习。我和大家一样,也经历了最开始的惶恐阶段,而后才逐渐去改变了自己“根深蒂固”的观念。“知错能改,善莫大焉”啊!