题目 | 内容 |
---|---|
所属课程:北航-2020-春-软件工程 | 博客园班级博客链接 |
作业要求:计算平面图形的公共点个数——新需求 | 软件案例分析要求 |
我在这个课程的目标 | 提升在团队合作中开发“好软件”的能力 |
这个作业在哪些具体方面帮助我 | 结合《构建之法》第7-14章的内容,分析评测某个软件,从中学习经验。 |
教学班级 | 005 |
一、调研评测
正如博客题目,我选的软件是VS和VS Code. 两种产品使用时间均超100小时,我认为两款代码编辑器的设计各有特色,都在目标领域内胜任相应的工作。
VS的使用情况
VS Code的使用情况
1. VS与VS Code目标领域
VS
VS(Visual Studio)是大型集成IDE的代表,其功能强大完全,目标领域为高效专业的软件工程开发。VS不仅提供代码的编辑、管理、编译、调试等基础功能,还提供代码分析与测试、项目结构组织管理、集成开发环境、团队协作工具等面向软件工程的功能。VS分为社区版、专业版及企业版三类,分别为不同需求的软件工程师设计。
- 社区版:免费。基础的软件开发功能,能胜任大多数小型软件开发。
- 专业版:45刀每月。功能较社区小幅度增强,能支持企业开发。
- 企业版:250刀每月。功能极其强大,技术支持完善。
VS Code
VS Code(Visual Studio Code)是微软爸爸于2015年发布的一款免费、开源、到处可运行的代码编辑软件。简洁美观的UI设计、方便强大的文件管理、丰富快速增长的插件生态、新手友好的文档资源让VS Code一经发布就受到广大开发者的欢迎(真的不是在打广告,VS Code太好用了)。VS Code支持C、C++、C#、Python开发以及各种前端开发,理论上只要能开发出插件VS Code能适应任意开发语言。
VS Code和VS的最大区别在于VS Code在用户电脑上的初始状态是“裸奔”的,许多功能强大的插件需要用户自己安装。VS Code的定位是轻量级代码编辑器,启动速度比VS等IDE快许多,就算比VIM等文本编辑器也不逞多让。
一张来自VS Code官网的图片精妙的展示了VS Code的强大所在:
用VS Code开发一个新语言只需要一下几步(以Python为例)
- 作为代码编辑器的VS Code能支持任何语言的编辑,但在“裸奔”状态下编辑体验不会很好。
- 在安装对应插件之后(Python),VS Code就能做到代码渲染、智能提示、连接跳转、静态检查等功能。
- 在安装括号渲染、函数分析等插件之后,用VS Code开发Python的效率会大幅提高。
- 在安装TODO提示等插件后,VS Code已经具备一定的工程开发能力。
总结
VS作为大型集成IDE,功能强大,即开即用,是软件工程的不二选择。VS Code作为免费、开源、到处可运行的代码编辑软件,轻便灵活,拓展性强,能够胜任大多数代码编辑场景。
2.VS与VS Code的设计与功能
VS与VS Code的设计背后,体现的是微软对软件开发的认识。不论是VS还是VS Code,各种炫目的功能都是手段,而高效的开发才是目的。要达成这个目的,简单地堆砌功能不可能做到。只用建立在对软件开发的深刻理解上,才能将众多强大的功能组合成高效的生产力工具。
VS
做操作系统起家的微软40多年来组织完成无数大型软件开发项目,对于软件开发一定有很深刻的认识。而在《构建之法》第7章P127页,有如下描述:
大约在1993年,微软在总结了自己产品团队的开发经验和教训,以及微软咨询服务部门的业务经验后,向业界分享,起名叫MSF(Microsoft Solution Framework). 在以后的几年中,MSF进一步吸收了微软各个部门和微软的合作伙伴在实际项目中的经验。2002年,随着Visual Studio .NET发布,微软发布了一系列关于MSF 3.0的白皮书,针对 MSF 3.0的大规模培训也在中国举办。
………………
2010年后,随着Visual Studio软件开发系统的更新,MSF也发生了一些变化,对于敏捷流程(Scrum、Agile)有更多的支持。
可以看到,VS并不是独利存在的,而是微软解决方案框架工具集中的一员。所以VS Code的设计体现了MSF的思想以及设置了和微软家其他开发工具的联动接口。而微软解决方案框架工具集主要由一下几个部分组成:
- VS/VS Code/VS Code :代码编写工具
- Visual Studio Online:2018年由Visual Studio Team Server改名而来,是微软“编码运行分离”战略的重要一环。
- azure服务:能够用来支持 Visual Studio Online运行在云端。
第一次接触VS的人一定会对解决方案这个名词感到奇怪,但这其实是MSF思想在项目组织层的体现。从一个文件就能放下的几十行的学生作业,到几个文件才能承载的练手编译器,再到数十万行的小型软件项目,软件模块间的以来关系愈发复杂,模块之间的功能差异也愈发明显。
在刚刚完成的结对编程项目作业中,软件至少就能分为三个模块:后端计算模块、前端UI模块、单元测试模块。如果把这三个模块放到一个项目中进行管理,在逻辑上这三个模块就不应该放到一个项目中,在软件工程上这样做会极大地增加软件的耦合度。如果把UI模块和计算模块放到一起,在需要改动计算模块后需要将两个模块全部重新编译,再将原先的整个exe替换。如此操作即“笨重“又危险。
VS中的Solution是什么意思? - Clive DM的回答 - 知乎中有一个非常生动形象的例子:
我们来看一个例子,比如QQ,那么一个QQ就是一个Solution,但是QQ包含了不同的功能集合,不同的功能点,那么就有很多Project,比如聊天功能可以用作一个Project,QQ秀用作一个Project,底层的聊天内容加密是一个Project,网络连接传输是一个Project。并且每个Project还包括各自的资源文件,测试用例,文档等等其他的内容。如果我们将QQ看作一个Project,那么这个Project就会特别庞大,并且也不利于分布开发,不利于管理等。
现在,我们需要开发另一个程序,叫QQ轻聊版,其基本功能和QQ是一样的,就是有些部分有些差别。如果我们基于文件夹管理的话,是不是需要再复制一份原有的QQ?而用解决方案的话,我们可以把刚才的那些聊天功能的Project,加密的Project,传输的Project等链接到这个Solution里面来,如果内核组更改了具体的实现,也可以及时反馈给上层开发组。不会出现需要同步两个相同的Project的问题。
在这个例子中,MSF的”软件工程“可见一斑。
图中红框所框选出的部分,都表明VS不只是一个IDE,还是MSF工具集下的一部分。
VS Code
如果说VS的设计理念是”应有尽有的工具箱“,那VS Code的设计理念就是”任君涂抹的画布”。VS Code的开发团队负责人具有软件设计的深厚背景:
从 VSCode 看大型 IDE 技术架构 - paranoidjk的文章 - 知乎
开发团队负责人:Erich Gamma . JUnit 作者之一,《设计模式》作者之一, Eclipse 架构师。2011 加入微软,在瑞士苏黎世组建团队开发基于 web 技术的编辑器,也就是后来的
monaco-editor
。VS Code 开发团队从 10 来个人开始,早期成员大多有 Eclipse 开发团队的背景。
我想这也是为什么VS Code能做到可拓展性如此之高,软件灵活性如此之强。Eemote Explorer
插件+远端部署插件,彻底改变服务器上的开发体验。
同样的,微软也为VS Code提供接入MSF工具集的插件。相较于VS中原生自带的MSF工具集结构,VS Code的接口以插件的形式存在,将选择权交给用户。用户既可以选择进入微软MSF大家庭的怀抱,又可以在VS Code的基础上定制出自己喜欢的开发工具栈。
3.使用体验
VS编写结对作业
在VS中可以专注于工程,而不必为环境等问题烦恼。传统IDE所具备的功能应有尽有且使用顺畅,而VS所独有的功能同样让人感到眼前一亮。如果存在VS功能方面的问题,解决方案只有三步:打开谷歌--> 输入问题描述 --> 查看VS官方文档。官方良好文档的支持,让VS强大的功能在开发者手中得到最好的发挥。
下图为VS方便高效功能的例子:速览定义功能。
当然,VS对性能和空间的要求十分的高。第一次安装VS忘记设置安装位置使C盘被占满,为了完成安装从而手动遍历清理C盘的经历还历历在目。每次启动VS之后,电脑的散热风扇便疯狂咆哮起来,让我在图书馆等公共空间好不尴尬。
下图为可怜的CPU被VS蹂躏:
VS Code编写python代码
VS Code几乎可以胜任除软件工程以外的所有编码工作。在安装好插件之后,就可以愉快的用VS Code编程。
下图为VS Code中Python的智能提示:
此前我曾用Pycharm
编写Python代码。和VS Code比起来,Pycharm
的功能的确更加强大,但是大多数Python项目所要求的功能VS Code都能覆盖,而VS Code的丰富插件又是Pycharm
所无法提供的。这也正是我转换Python IDE的原因。
VS Code已经收到业界的广泛认可,而且发展前景十分广阔,正在吸引越来越多的人“入坑”。
4.功能性bug
多后台程序时的调试bug
当后台运行许多其他程序时,VS在调试时有概率出现bug。
其现象为:调试程序的运行框已经启动,诊断工具显示调试程序正在运行,但是调试程序却不会执行任何有意义的动作(比如main函数第一行的输出语句)。
如下图,原本8秒能运行结束的程序,现在将近78分钟都没有结束,但我在第1分钟时已经关掉所有无关的后台程序。程序本身是正确的,在其他机器上能正常运行,也没有任何随机数、多线程等机制。触发bug后即使将其他后台程序全部关掉,调试程序也不能结束。
CPU不支持的指令
同样是VS的bug,因为时间比较久远,难以复现。同样因为时间久远,细节记的不是很清楚。
其现象为:在一个正常的函数F内,用if-else if
分发输入到对应函数中时出现bug。函数F内大概有5条并行的if-else if
语句,有些if-else if
语句中还嵌套有if-else
语句。本来是一个正常的代码结构,但是当程序运行到第一条if
语句时,一个意想不到的异常被抛出:CPU不支持的指令。
这个异常让我百思不得其解,后来不论是将if-else if
语句封装到子函数中,还是在异常处添加无意义但又不会被编译器优化的代码,这个异常依然鬼魅一般被抛出。
尝试了一些谷歌上搜索的解决方法:在文件开头添加编译指令、调整VS的设置。这些方法都不能解决CPU不支持的指令的bug。
最终没有办法,我只能完全重写输入分发逻辑:用Map分发函数指针从而避免if-else if
语句的出现。
5.评价
定性评价
- VS: e) 非常推荐。
- VS Code: e) 非常推荐。
定量评价
类别 | 描述 | VS | VS Code |
---|---|---|---|
功能 | 核心功能 | 10 | 10 |
细节 | 有什么为用户考虑的细节? | 7 | 8 |
用户体验 | 当用户完成功能时,不干扰用户 | 10 | 10 |
辅助功能 | 一些辅助功能如皮肤等 | 8 | 9 |
差异化功能 | 这个软件独特的功能. 它对用户的吸引力有多大? | 9 | 10 |
软件的效能 | 占用内存, 启动速度, 内存泄漏情况 | 7 | 9 |
体验 | 软件的适应性 | 8 | 9 |
成长性 | 记住用户的选择, 适应用户的特点,用户越用越方便 | 9 | 9 |
用户有控制权 | 系统状态有反馈,等待时间要合适。关键操作有确认提示,有明确的错误信息。 让用户方便地从错误中恢复工作, 快捷操作键可调整。 | 7 | 9 |
二、分析
1.构建时间估计
VS
难以想象怎么才能让6个刚毕业的大学生做出VS这种规模的IDE。如果还要考虑到MSF的背景要求,其难度已经超出我的认知。
如果不是商业用途,可以先把Eclipse的开源代码下下来,学习上6个月。对IDE的架构和实现方法有一定认识之后,就可以先把代码编辑和文件管理的内核搭出来,之后便是编译功能和调试功能,项目管理功能…………。
70岁时,我们六人聚在一起吃饭。
我:“老杨,你的性能分析功能模块写的怎么样啊?”
老杨:“害,别说了。我这刚写好基础版的性能分析,又有新的技术出现了,咋们都得适配啊!“
我:”诶!你还别说,不只是后端的技术变得快,前端也是翻天覆地啊!现在屏幕早就被淘汰了,老张,咋们20年前做的VR UI怎么样了?“
老张:”做做做做个锤子,你没见现在都意识编程了么?我们玩的那一套早就过时啦!“
老张的孙子:”您们六位啊,就是身体健朗,年纪这么大了还用键盘编程。要不我叫我的AI助力帮您们做完得了,要不了几个小时,做完之后啊你们就可以好好和家人享受天伦之乐啦!“
还记得,那是2021年的夏天,6个年轻接到了国家自主研发大型集成IDE的任务。
一位穿军装的军人说:”时间不限,资金管够。你们都是北航的学生,现在又没有后顾之忧。这不正是实现自己人生价值,为国家做贡献的好机会吗?“
当时兴奋不已的6位年轻人还不知道自己的人生命运发生了怎样的转折。
VS Code
VS Code是完全开源的项目,在有参考、有社区、有文档的条件下能更好的完成。VS Code总计350000行typescript代码,以2020年二月版本为目标,在开源项目的引导下,6个人一个月平均能完成3万行代码,考虑到学习准备时间,大约1年能仿造出VS Code 2020年二月版本。(我这是键盘打字复制,读书人的抄能叫抄么?)
2.优劣与排名
数据来源Top IDE index,时间截至2020年3月。
我个人用过的IDE有:Visual Studio、Eclipse、Android Studio、Visual Studio Code、pyCharm、IntellJ、Code::Blocks。
以下为个人排名
功能完整性排名
- Visual Studio
- Android Studio
- IntellJ
- pyCharm
- Eclipse
- Visual Studio Code
- Code::Blocks
发展潜力排名
- Visual Studio Code
- Visual Studio
- Android Studio
- pyCharm
- IntellJ
- Eclipse
- Code::Blocks
3.具体建议
给VS团队的建议:
求求你们,不要再强制把更新下载到C盘里了。每次更新好几个G,还不能选缓存路径,下着下着C盘就满了。每次更新都要被迫人工检查C盘清理文件,人肉识别奇怪的文件名真的效率很低。
流出贫穷的泪水(雾)。是在不行,我只能把开发端移到云上辣,然后用Visual Studio Online。如果真那样,我保证我是绝对不会把VS再下到个人PC里的,真的!
给VS Code团队的建议:
在安装一定数量的插件之后,VS Code的启动速度会大幅下降,有时甚至慢到能和IDE比较。轻量快捷是VS Code的一大特性,良好的可拓展性同样是VS Code的一大特性。我认为现在VS Code面临现实性紧迫性的问题:提升VS Code在一定量插件下的启动速度。
4.bug未修复原因猜测
为什么是猜测,因为难以找到团队官方对bug的描述和解决方案。
多后台程序时的调试bug
或许是我不能准确的描述出这个bug,在谷歌上难以搜到官方解答。甚至难以找到相似的问题。
猜测原因:测试把关不严,敷衍了事,没有注意在特殊的配置或环境下测试。
CPU不支持的指令
在谷歌上搜到的解决方案都是什么编译指令、VS设置调整,但都没有解决问题,官方的文档更是不存在的。
猜测原因:测试把关不严,敷衍了事,没有注意在特殊的配置或环境下测试。
三、时长建议和规划
1.市场大小与潜在用户
VS+VS Code已经能覆盖绝大多数的开发场景,可以说微软的解决方案工具集面向全球所有开发者。在上文提到的排名中,VS+VS Code的市场占比约为30%。也就是说,剩下70%的市场份额都是VS+VS Code的潜在用户。
但是微软在专业领域内还是有所欠缺,例如安卓开发和IOS开发都是微软的软肋。微软在移动时代没有跟上浪潮,导致其在移动领域的市场占比一直很小,也同样导致了微软没有一款领导新的面向移动开发的IDE。
2.竞争情况
我试用过的IDE有Visual Studio、Eclipse、Android Studio、Visual Studio Code、pyCharm、IntellJ、Code::Blocks,这7个IDE正好是现在优秀IDE的代表。
优势 | 劣势 | |
---|---|---|
Visual Studio | 功能强大,背靠MSF工具集。 | 不能支持所有主流的编程语言。 |
Visual Studio Code | 轻便,灵活,备考MSF工具集。 | 还比较年轻,成熟好用的插件数量不足。 |
Android Studio | 谷歌官方支持,安卓开发首选。 | 和安卓深度绑定,很难将涉足其他领域。 |
pyCharm | 对python开发的支持很好。 | 专业python IDE,很难涉足其他领域。 |
IntellJ | Java开发首选。 | 专业Java IDE,很难涉足其他领域。 |
Eclipse | 流行且开源的Java开发IDE, | 设计很不人性化,功能不是很全。 |
Code::Blocks | 开源、使用广泛。 | 明显不适合开发大型项目,功能缺陷很大。 |
可以看出,微软的VS+VS Code只要能保持住现在的发展势头,并较好的实现MSF工具集战略,就能继续占领市场,让越来越多的开发者投送怀抱。
JetBrains公司属于精耕细作型,在每个领域内都有独领风骚的产品,其最大的限制在于缺少一款通用性的产品,或者说缺少一款各个产品间的”胶水“。
剩下两个开源软件都有功能不全和UI不友好的缺陷,但是作为开发小型项目的开源软件已经足够优秀。
3.用户画像
- 学历:主要是本科及以上。但所有人都能学编程,所以实际学历范围很广。如果考虑到盈利对象,主要是软件开发需求的公司。
- 年龄:18-35(狗头)。
- 专业:CS、SE、EE等一切最终能转开发的专业。
- 爱好:搞手机、搞电脑、搞VR…………
- 收入:不考虑盈利各种收入都有,考虑盈利主要是高收入。
- 表面需求:一款功能强大、能提高生产力的IDE。
- 潜在需求:适应技术发展潮流及软件工程发展潮流的IDE。
根据以上分析,微软VS+VS Code的路线实际上是专业性+泛用性的路线。经过很多年的发展,VS已经比较成熟,用户群体已经固定。VS Code才诞生5年,还有很大的发展空间,如果不考虑盈利,有可能发展成为新一代的代码编辑软件事实标准。如此以来,VS Code的用户画像就是所有具有轻量灵活开发需求的开发者。