zoukankan      html  css  js  c++  java
  • [敏捷软工软件测评博客]微软眼中的代码编辑器

    题目 内容
    所属课程:北航-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。

    以下为个人排名

    功能完整性排名

    1. Visual Studio
    2. Android Studio
    3. IntellJ
    4. pyCharm
    5. Eclipse
    6. Visual Studio Code
    7. Code::Blocks

    发展潜力排名

    1. Visual Studio Code
    2. Visual Studio
    3. Android Studio
    4. pyCharm
    5. IntellJ
    6. Eclipse
    7. 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的用户画像就是所有具有轻量灵活开发需求的开发者。

  • 相关阅读:
    LeetCode Array Easy 414. Third Maximum Number
    LeetCode Linked List Medium 2. Add Two Numbers
    LeetCode Array Easy 283. Move Zeroes
    LeetCode Array Easy 268. Missing Number
    LeetCode Array Easy 219. Contains Duplicate II
    LeetCode Array Easy 217. Contains Duplicate
    LeetCode Array Easy 189. Rotate Array
    LeetCode Array Easy169. Majority Element
    LeetCode Array Medium 11. Container With Most Water
    LeetCode Array Easy 167. Two Sum II
  • 原文地址:https://www.cnblogs.com/starmiku/p/12575628.html
Copyright © 2011-2022 走看看