软件工程研究的一些问题

背景

好久没有更新过博客了。

这次是又一次找了一位同学,聊了聊有关软件工程方面的内容。虽然我和那位同学都学的是软件工程,但是实际对软件工程的理解还是有很大差异的,主要是因为,学术经历上有所差异。我所做的工作一般来说是软件工程实践,所读的书也都是软件工程实践或过程管理相关。我去请教的那位同学,则是在有着软件工程实践的同时,对于软件工程有着一定的研究。可能用词稍微有点不准确,不过从直观角度看,我之前只是应用,而那位同学则是做研究。

这次我个人认为,在聊天的过程中,解决了我的诸多问题,我最大的收获是,知道了软件工程研究的内容比我原来的理解要更广一些。我在征得同意的前提下,将聊天内容稍作整理,略有加工删减分享出来,希望能够帮助到一些同学。我用X表示,聊天的同学用Y来表示。

正文

软件挖掘

X:现在就是软件数据挖掘(实际想说的是软件挖掘),这个主要是偏重软件,还是偏重数据挖掘啊

Y:一般会算到软工的community,而不是AI的 ,取决于工作最后的创新点,或者说重点,有一个纯做软件挖掘 software mining 的 community,会议是MSR 。

研究软件工程的应用场景

X:现在研究软件有什么比较常见的应用嘛?我感觉我对软件的认识可能还停留在比较久远的年代。还是说,对软件的研究,主要影响并不在应用层,而在于对于开发人员的影响?

Y:比如说time-tracing的debug技术。所有静态分析工具,新一点的有人在分析web service应用如何做静态检查,面向end user的程序合成(比如自动生成excel脚本),这是程序生成的领域 测试里的各种概念和技术,如mutation testing, record-replay 都是来自学术界的。有做工具的,有做模型的,有做纯empirical study的 。software engineering是一个很大的社区 。

软件工程经验对研究的影响

X:我感觉对于开发的经验要求比较高啊,我是以前读过一些软件工程的书,感觉好像都是写过十几年二十几年(代码),然后搞出一些东西。

Y:你也可以只对一个具体技术了解够深,比如懂JVM和并发,你就可以去搞各种安卓测试工具。你说的那个问题,我觉得应该是一个普遍现象–。 好工作往往是要有经验积累的。学术界的话,新手一般都是跟在别人定义好的scope里面做一些增量性的小工作(容易上手和发表),影响力自然不会太大。

X:感觉现在来说,想干个十几年,似乎没有那么简单啊。就是我个人从以前阅读软件工程的书中,得出一个结论,想在软件工程方法上有所突破,需要在企业环境下能够有较长的工作时间,然而当今形势下,能够长期从事直接编程的人员并不多,并不能给软件工程研究有一个较好的环境。

Y:你说的方法感觉是指process, practice等,这方面的研究的确是和与工业界结合较多的学术社区关系比较大,像华盛顿大学他们的教授往往和微软有很密切的联系,都是比较了解的。而且这类工作有很多是来自于工业界自己的lab。

我感觉你做了一个假设,认为在学校环境里没有长期直接接触编程的人会没有那样的创新能力。但工业界的人有三个大的劣势,一来他们的知识体系是零碎的、脆弱的,比如测试人员可能并不真正清楚当前的state of art是什么,使得他们经常只能想到别人已经有的idea,二来他们缺乏充足的时间和动力做真正需要精力的deep work,三来他们可能由于学术背景原因(或者说阅读量)而很难在跨学界的点上做出大的贡献。而那些工业界的人干5年的经验,可能通过一篇empirical study的文章就精炼地传达给了researcher。

学术界的优势

X: 是这样的,我确实比较认同,所以我想知道,在学校环境下,到底有什么优势 。

Y:Philip Guo 对 PhD的实用意义做过一个概括:这是世界上唯一的,能让你在领薪水的情况下,长期做一个(些)不会被短视的工业界赞助的项目。

学术界的编程能力

X:嗯那这个我也能理解了,但是接触编程的事情怎么说?

Y:做软工research的人,我了解的都是有很强的编程实力的,一是因为PhD本身对这方面的门槛就不低,二是比如你想做一个根据安卓应用的 execution trace 的 pattern 来预测 bug 类型的工作,你得对JVM Android 源码,以及深入到系统调用 都十分了解(了解到能够hack的地步)。

所以说,从筛选条件,和本身接受的训练,编程能力都是不会差的;如果你研究的又是与时俱进的工业应用,比如研究Javascript bug,那可能web基础、web框架你都也了解了,因为你需要起码了解现在Javascript程序员都是怎么写代码的,论文才能发

X:哦你说的挺有道理的,我能不能问一下你目前是主要偏重js呀。

Y:我现在在做的东西还不够明确,js和web是我读过比较多的一个方面。

学术界与工业界是否脱节

X:前面说到了解到现在程序员到底是怎么干活的,我感觉好像有点难度。我来讲一个跟微软合作的例子。之前微软azure的pm找我和别的同学做一个关于Java的实验,就是在kubernetes上部署Spring项目。本来我以为这是一个很简单的东西,后来发现其实并不简单,因为安装各种依赖会出现奇怪的问题。然后就去询问,当时告诉我们说不要用maven,也不是用gradle,是用一个完全没有听说过的依赖管理工具。我知道这一方面可能跟我院教的东西有点老有关系,但是现在我们从市面上所见到的(比较多的)教授的依赖管理工具也确实就是maven,但是与企业实际应用中还是有很多差异的。

Y:哦,但那个工具本身的理念可能早被学术界研究过了,他只是工程上实现得比maven好了一些。

X:哦这个意思,也就是说,实际上目前使用的东西背后都是有一套理论支持的 。

Y:嗯,然后你会发现它可能就那么回事~或者说,它相比maven的改进点对学术界都不是interesting的 。

X:我大概懂了,可能是我之前对软件工程的理解有一点狭隘,我之前的认识应该是,软件工程主要研究的是软件工程实践方法/过程。然而实际上研究的不仅仅是人的要素。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值