团队阅读之怎样培养软件工程师

    软件工程师应该算是稀缺人才了,会编程的人一抓一筐,可是会做软件的人就不那么多了,而软件工程师更是这些人中的凤毛麟角。软件工程师的培养是有难度的,而且这个培养过程没有章法可循,更重要的是培养出的产品的合格率比较低,因为我们培养出的大部分人都将成为码农,而码农显然是与软件工程师有较大差距的。几篇文章也在谈论软件工程师培养的困难和软件工程这个学科本身面临的问题,我总结一下几篇文章的主要内容,即为对于软件工程师的培养还没有形成一个很好的体系与方法,而软件工程不等于计算机科学所提出的观点正是这一大问题的子问题,就是我们着重于培养软件工程师的计算机方面相关素养而忽略了其它,归根结底还是因为没有很好的培养体系,不知道如何培养所致,所以我把它归为主要内容的子问题。

    那我们先来看看子问题,我觉得这个问题是普遍存在的,如果说有解决办法的话,我认为需要让计算机系毕业的同学继续深造,在文科专业深造,或者,让学文科的人来编程。第一种办法周期太长,恐怕计算机系的同学不愿意干也干不了,这纯粹属于赶鸭子上架,让计算机系这种典型的工科男学习文科,还不如把我们杀了来的痛快是吧;第二种方法,显然不可行,不是我有对文科的偏见,毕竟术业有专攻,文科的人很难理会计算机的本质,让他们学个C语言还行,到计算机组成原理就不太吃得消了,到了编译原理的话恐怕得有一半人跳楼,然后剩下一半人回家。所以,这两个方法均不行。软件工程这个活真不是什么好活,一边是计算机,一边是人,明明软件工程师是人,可是非得把他们变成人和计算机的纽带,这个要求就高了,一边他得懂计算机,一边他得懂人。所以好的软件工程师为什么这么难就可以理解了,我们真的没有办法培养这样的人才吗?我觉着还是有的,我们在课余是否可以培养一些人文素养,其实不要求我们专门去一心一意做这件事,这件事只要穿插在日常的计算机相关课程中间就好,比如学一些沟通,比如学一些经济,不需要十分深入,只要了解大概就好,不需要把我们带入这些相关领域的大门,只需要让我们在大门口往里一窥就好。而现在学校的培养在这方面是很欠缺的,不说开设专门的课了,就连全校性的关于人文的大讲座都很少,关注一下学校的讲座信息,不是关于出国考研,就是关于就业的,要不然就是几个有头脑的码农不小心变成了高富帅的成功经历(比如李彦宏),可这有什么用,我们毕竟不是他们,他们的成功是不可复制的。软件是人写的,这些人正是软件工程师,试想写软件的工程师都不能了解客户的需求,不能与客户有效沟通,他们可以写出客户需要的软件吗?一旦软件写出的软件和客户需要的软件差别过大,无论这个软件运行多流畅、bug再少、算法再好,这些又有什么意义呢?我们做软件的最根本的目的不正是要能解决需求问题吗?至于其它的,只是在这个继承上的点缀而已。就好比是顾客想买一斤水果,可你递给顾客一碗佛跳墙,你说,这是国宴里的招牌菜,他,他接不接受还真难说,这个例子有待完善。以上我想说明沟通很重要,能想人所想也很重要。毕竟做软件不是写C语言作业,需求就那些,也不用顾及界面友好等等,软件是解决问题的,而且很大一部分软件解决的问题不在计算机领域内,这就要懂相关领域的知识并且能在给领域为客户着想,比如做财务报表,本来需要做一些假账,结果做成了真帐,出了这种事顾客只会责怪软件工程师,而不会承认自己的错误,有些东西就是不言而喻的,但对于天天coding的程序猿来说,还真未必知道。其实这也不能全怪工程师,毕竟你让人家一边搞技术一边搞人事,这很难的,要怪只能怪我们这是中国,谁让中国人说话只说三分,剩下七分要靠猜呢?

    关于总问题,上面篇幅也涵盖了一些内容,关于把计算机人员当成板砖哥一样的培养,不对,是建筑设计师,这是个新颖的想法,这两个职业确实有很多共同之处。有一篇文章也举了一些例子来说明它们的共同之处,但我认为有几个比较大的区别还是需要考虑的:1、建筑师只管规划图纸,至于建设过程的细节问题可以不予考虑,而且少了很多人事上的担忧,比如说需求比较明确,设计的是学校宿舍就要有配套的浴室和开水房,设计的是商场就要有逃生避难场所,很多需求是硬性的也是相同的,需求的种类有限,更进一步,这些需求是在大框架下小的需求,和大框架可以毫无关系,比如过道中安排椅子等,这就表明考虑具体需求的人和建筑设计师可以是不同的人;反观软件工程师,就比较苦逼了,他们需要考虑的事情很多,而且各种各样的软件工作的领域跨度很大,更要命的是细节上的考虑是和通盘考虑糅合在一起的,如果不考虑周全,一个细节上的改变就可能引起程序很大的改动,这也就是说一切事情必须自己搞定,没有除了工程师的人可以代替你完成任务。2、就是这两个体系的差别了,建筑业已经形成了培养工程师的教学体系,所以才可以有导师带领来更好的实践它,而软件工程就没有这样完备的并且有效的培养体系,不同的老师带出的软件工程师可以是长得不一样的。在知识传承过程中没有形成教学体系的一个典型的行业就是算命,同一个老师带出的学生,领悟多少就是自己的事了,不同老师带出的学生那更是千差万别,如果让他们给同一个人算命,肯定每个人又不同的答案。不过软件工程还没有沦落到这个地步,否则这些软件工程师也就都到街边自己打个什么半仙的横幅摆摊去了。至于其他的区别,我现在还没想到。有区别但也不是说这种思路行不通,只要有共性就必然有行得通的地方,老师可以在实战中教会学生领悟需求的能力、沟通的能力等等。

    综上,培养软件工程师是个体力活加技术活,不过我们也不能操之过急,毕竟中医都传承了几千年了,到现在也是没弄明白什么是冷啊热啊,什么气啊虚啊的,不是照样一代传一代,照样治病吗?

 

Ps:采访

我们采访了4为高年级的同学,其中两位为大四学长,两位为研究生学长。

他们一致认为我们的软件工程教育中过于突出一定要编出代码,做出结果来。对于过程有些忽视。

比如一些良好的代码规范,注释,编码过程中测试的规范,团队任务的布置,如何当好一个teamleader等等教的太少了。

教课过程中太学术,脱离了进入社会后公司软件开发的实际过程。尤其是大家在截止期限前才开始熬夜码代码。

学术与产业不相平衡。

posted @ 2012-12-09 01:42  76er  阅读(305)  评论(3编辑  收藏  举报