当前位置: 首页 > 科技观察

使用VSCode五年后,我决定切换回Pycharm!

时间:2023-03-14 09:35:48 科技观察

在编程方面,5年来VSCode一直是我的主要IDE。此时我决定更换它,这可能会造成混淆。在本文中,我将与您分享我做出此决定的原因。如果你愿意,你可以说我疯了。你可能会认为已经使用VSCode5年的人此时会疯狂地想要更换它。确实,在接触JetBrains生态系统之前,我也是这么想的。我什至会死去证明VSCode是目前市场上最好的IDE,它就像PC行业的AppleM1芯片计算机。但请允许我先介绍一下事情的背景。我目前在Blankly工作,这是一家为对冲基金提供云服务的公司。在我们提供的云服务上,人们可以在短短几分钟内创建自己的交易算法。我的一位同事Emerson是JetBrains生态系统的忠实粉丝。在每天的站会上,他甚至为了说服我们尝试JetBrains生态而延长了会议时间。为了让会议上对此事的讨论早点结束(以便站会早点结束),我勉强同意了。然而,谁能想到,现在我居然在这里写了一篇文章,讲述是什么最终说服我放弃了一直伴随着我的IDE。因此,如果你纠结于使用哪个IDE而根本没有考虑过JetBrains的想法,或者你对我为什么放弃VSCode感兴趣,那么这篇文章非常适合你继续阅读。本文基于我个人使用VSCode和JetBrains的经验,将从5个方面对它们进行对比分析。也解释了为什么JetBrains在一些使用场景下具有明显优势的原因。代码检查与重构VSCode:快速、简单、多语言支持首先,任何编程语言都可以在VSCode中轻松快速地启动和运行,所以大家也会称其为“编辑器”。所以VSCode是我这种全栈工程师的不二之选。无论你是需要在Python和JavaScript之间频繁切换,还是需要添加一个基于NextJS开发的ReactApp,又或者是需要在Ralis系统上配置Ruby环境,VSCode都能很好地支持这些能力,为这些开发语言提供支持包括lingting在内的一系列开箱即用的功能。即使某个功能没有,你也只需要在它的插件市场搜索一个,找到一个有这个功能的插件安装即可。其次,得益于GithubCopilot、AI-basedlinting、autoimports等一系列插件的支持,VSCode拥有强大的linting能力。在VSCode中,可以很容易地配置任何你想要的功能。很多时候,你只需要输入一个终止符,VSCode就会提示你输入你想要的内容。但有时,人们会因为这种linting功能的失败而崩溃。事实上,我经常在试图弄清楚为什么标准linting不起作用时遇到困难。不管是因为我使用Anaconda安装的多python环境,还是缺少安装包,很多时候都不能直接得到答案。另外,VSCode对JavaScript语言的linting能力也很强大,但它并没有对JavaScript进行深入的类型检查。幸运的是,我们可以通过TypeScript来解决这个问题。如图所示,由于在VSCode中忘记切换Python环境,所以即使在本地通过pip安装了相关的依赖包,VSCode的linting功能仍然提示找不到包。最后,作为一个编辑器,VSCode真的很擅长代码重构。它在变量重命名、文件移动和自动引用修改等基本重构功能方面做得很好。但是当涉及到函数移动、参数重命名、代码提取等更高级别的重构功能时,它就显得有些力不从心了。不过幸运的是,仅仅一些基本的重构功能就足以满足我们日常大部分的重构需求。在我使用VSCode的五年中,它涵盖了我遇到的大部分重构场景。JetBrains:标准、专业、强大的支持首先,JetBrains是一个功能强大的IDE,其中包含许多不合理的初始设置。刚开始接触的时候,为了让代码展示的更加优雅,不得不在设置上花了不少功夫。但是,在针对不同使用场景设计的两个IDE之间切换,难免要付出一些学习时间成本。如果我的某个POST请求突然出现问题,我不得不打开PyCharm看看我的后端API服务是否有问题;如果在一个推荐项目中,突然对最好的推荐算法有了新的优化思路,只需要打开CLion。不过,多亏了智能识别,我只需要花点时间练习切换代码就可以了。到其他脚本,例如webstorm。和pycharm。打开不同的IDE时。其次,JetBrains的引擎性能强大。当我将IDE换成JetBrains时,其强大的引擎性能给我留下了深刻的印象。当我在编辑器中看到一些红线警告时,只需要使用快捷键comman+p重新加载一次当前窗口,这些红线警告就会消失,或者给出一些有用的提示。这种简单且响应迅速的代码检查让我在编程时很开心。如上图,只需要一个快捷键就可以看到所有的引用。最后,在重构能力上,JetBrains是强大的,这也是它真正吸引我的地方。就在上周,在公司平台的最终测试版构建期间,我重构并添加了一些组件,以使其在未来更具可扩展性。期间搬了大概200个元件。编译项目时,没有出现引用错误、非法或未定义组件引起的编译异常。然后,在VSCode中,我通过重新组织数据结构类项目中的两个文件来破坏整个cpp代码。为此,我不得不手动修复一些组件导入和函数引用以使项目正常运行。另外,为了保证我们有足够的重构工具,JetBrains还提供了安全删除、全局重命名等多种外部工具。通过JetBrains,可以清晰的看到所有需要重构或者重命名的变量的调用以及上下文映射。JetBrains生态IDE提供的阅读帮助功能对比总的来说,我认为在代码检查和代码重构方面,VSCode和JetBrains的能力接近。两者都通过自动代码检查、代码格式化、主题定制等功能帮助人们更好地调试和展示代码。但是,JetBrains具有出色的linting引擎和无副作用的重构能力,因此如果代码分解和重构很重要你和你的工作流程,那么我建议你选择JetBrains。DebugVSCode:你可以调试几乎所有的东西VSCode超强的调试能力得益于其强大的插件支持。每次点击VSCode左侧的运行按钮,VSCode都会生成一个.vscode文件夹,里面存放了一个settings.json文件,里面包含了调试相关的所有配置。对于Python、JavaScript等大多数语言来说,使用VSCode作为其调试工具是非常方便的。甚至,如果你的环境配置是正确的,直接点击调试按钮进行调试会更方便。此外,即使通过修改settings.json文件中的配置,也可以非常简单地更改您当前的调试内容。但是,如果使用特定的构建方式或特定的平台语言(如:C/C++语言),由于需要设置gcc和clang,会大大增加在VSCode中调试的难度和复杂度。文件的调试配置也会费时费力。为了减少这次的时间投入,我尝试将其他项目的setting.json文件复制到当前项目中,但效果并不理想。我花了很多天的时间来调整,才让现在的项目正常运行。在我所在的大学(密歇根大学安娜堡分校),为了减少调试配置的工作量,他们维护了一个通用的settings.json文件,供大家使用。但即便如此,人们仍然需要花时间调整settings.json文件。上图显示了在MacOS上调试C/C++程序所需的最低配置。在实际调试过程中,VSCode可以在调试控制台中很好地设置调试断点、识别变量和添加变量。观察者。不过,如果这些功能可以直接在代码面板而不是侧面板中设置,那就太好了。幸运的是,插件和多语言支持是VSCode的最大优势,它可以让人们在几分钟甚至几秒内完成代码调试的设置。对于一些简单的调试场景,VSCode的调试能力非常好。然而,当需要调试一门特殊的语言时,VSCode的调试能力往往无能为力。同时我也发现,当程序需要使用更大的堆内存时,VSCode的调试器会卡住,直到崩溃。JetBrains:调试怪兽相比VSCode,JetBrains在调试方面更加强大。由于所有系列的JetBrainsIDE都基于配置运行,因此您可以通过单击调试按钮来启动任何程序调试。如果要设置全局调试断点,只需要在编辑器的行号处按空格键即可。该功能大大提升了程序调试体验。此外,JetBrains系列IDE在整个调试过程中还有很多其他的特点。例如,进入调试过程时,作用域内所有变量的定义对定义者都是可见的。这使我们可以通过多种方式观察当前变量值的变化。前几天用Pycharm调试一个程序的过程让我印象深刻。当我在Pycharm中运行debug并尝试查看数据框的值时,只需单击数据框变量并按viewasdataframe,Pycharm在SciView中打开数据框并显示所有数据框值和列标题:该图显示运行调试和变量值变化的监控。如上图所示,范围内的所有值都显示在底部窗口中。history_and_returns的下拉菜单显示了字典对象的所有属性值以及嵌套在字典对象中的数据框。在右侧面板中,与SciView一样,显示了已经嵌套在字典中的数据框。能够在不设置任何打印语句或堆栈跟踪的情况下深入了解代码,这对开发人员来说非常有用。试想一下,当所有的变量赋值都被编辑器显示在旁边时,我们可以很容易地发现循环中的逻辑错误,修复索引导致的失败,甚至可以做一些更深层次的逻辑推理。与其他IDE的调试器一样,JetBrains调试器也提供了跳到下一行、进入函数等调试功能。另外,JetBrains的RuntoCursor是一个非常有用的功能,它可以让人们调试断点就像放置鼠标设置断点一样。这个可以随时随地设置断点并立即生效的功能,彻底完成了我调试代码的方式,大大加快了我的编程速度。能力对比程序调试是开发人员每天最常做的事情之一。因此,我认为开发者在选择IDE时,IDE是否有好的调试器是必须要考虑的因素。VSCode和JetBrains都提供了非常可靠的调试器,但我必须说JetBrains在这方面比VSCode略胜一筹。因为JetBrains可以直接在变量声明的旁边直接显示变量值,这样在跟踪大量变量时更容易管理。此外,JetBrains的调试器功能更强大、更稳定,不需要像VSCode调试器那样进行复杂的设置。因此,结合这些因素,JetBrains调试可以帮助我们节省更多的调试时间,这也让JetBrains更具吸引力。集成GitVSCode:内置强大的源代码控制管理任何需要团队合作或关心代码安全的人都知道Git在他们的工作流程中的重要性。基于Git的版本控制是任何现代编辑器不可或缺的功能。VSCode和Git的集成非常好。当你打开一个工作目录时,它会自动检测它是否是一个Git仓库。如果是这样,那么它立即提供了许多原生的Git命令,如push、pull、commit等。在VSCode的Git面板中,人们可以清楚地看到哪些文件被修改并轻松同步。同时,在面板中,还可以创建分支和克隆仓库。VSCode总能清楚地告诉你该做什么,这也是我喜欢它的原因之一。当它检测到文件修改时,会立即提示您提交,并在提交时提示您附上提交说明。另外,在提交的时候,还会对本地分支和远程分支进行检测和同步。同时,它还提供了非常稳定的rebase功能。在线中可以清楚的看到哪里需要做冲突合并。能够合理处理冲突合并是VSCode的一大优势。通过VSCode自动提供的冲突解决方案,我可以通过单击按钮选择使用当前更改或传入的更改。这种解决合并冲突的方式为我节省了很多时间。JetBrains:无需再使用命令行进行源代码控制在所有地方切换到JetBrains后,我几乎没有接触过我的终端命令行。JetBrains提供源代码管理等全面功能,包括提交、冲突解决、分支切换和分支比较。根据我的经验,JetBrains的源代码控制比VSCode好得多。下面我列举一些使用体验的截图:比较两个分支之间文件的内置分支详细信息显示详细的gitlog能力比较在Git集成方面,JetBrains和VSCode都提供了完整且相同的功能。无论选择哪种IDE,对源代码管理都有足够的功能支持。因此,这方面不能作为选择IDE的考虑因素,只是个人喜好问题。例如,在解决合并冲突时,我更喜欢JetBrains单独显示冲突文件的方式,而不是VSCode将冲突文件堆积在一个文件中的方式。扩展性VSCode:丰富的扩展性VSCode是扩展性最强的编辑器之一,集成能力和扩展性是其核心功能。在众多的扩展能力中,Python扩展、远程开发扩展和一些Intellisense驱动的扩展是目前最为流行的。此外,VSCode还有一些很酷的功能,比如通过Prettier进行代码格式化,通过图标和代码编辑器主题进行主题定制等。VSCode提供的每一项或功能都是完全可扩展的,而扩展本身也可能是一个进程增强扩展能力。对远程docker容器的支持是我最喜欢的VSCode扩展之一。借助此功能,用户可以在VSCode中的docker容器内执行远程编程。如果你在本地或远程环境中安装了docker,你可以轻松地在VSCode中运行你的代码,并完成之前需要在docker中完成的所有事情。想要更有趣的东西吗?通过SSH进行远程开发怎么样?微软开发的扩展插件,可以让人们在VSCode中通过远程SSH进入服务端开发环境,像在本地一样进行远程开发。如果你想在VSCode中集成这些功能,只需要点击安装即可成功运行。所有这些功能使VSCode变得很棒。JetBrains:集成生态对于JetBrains来说,可扩展性并不是它需要突出的点,因为你会发现大部分你需要的功能都会随着IDE版本的发布而发布。为某种语言安装强大的IDE的好处是,当我们需要一些新的特性时,我们可能只需要升级IDE版本就可以拥有它们,而不必去扩展市场寻找它们。例如,JetBrains对docker有很好的内置支持。JetBrains的所有IDE都通过易于使用的GUI提供对所有参数、名称、标签、端口和环境变量的完全控制,只需指定一个配置类型文件(如Dockerfile)即可。在运行时,IDE通过集成docker为您提供docker构建日志、运行日志、环境变量以及可视化的集成配置信息:在集成FastAPI、Flask、shell等第三方能力方面,JetBrains提供了同样的能力。此外,JetBrainsIDE还拥有丰富的插件生态。例如,我可以为Verilog和Matlab支持安装特定的插件。但有趣的是,这些轻量级插件实际上提供了比本地安装的Matlab和Quartus(Verilog开发环境)环境更好的编程体验。能力对比毫无疑问,两者在扩展或插件方面都有广泛的社区和市场支持。两种IDE在功能方面都有自己的优势和劣势。两个编辑器所欠缺的功能,大家不妨各自充实一下。但是VSCode的社区稍微大一些,所以它有更多的扩展,还有一些能力比如远程容器扩展,可以让我们迭代得更快。因此,如果你在日常工作中对Docker等自定义扩展有更多的需求,那么VSCode可以说是你的专属IDE。协同能力VSCode:基于插件的实时分享虽然VSCode本身并没有内置实时分享的功能,但是微软为其开发了一个插件,具有该功能。除此之外,现在人们甚至可以通过浏览器直接访问vscode.dev进行实时分享。这种需求的多样性是VSCode如此受欢迎的原因。只要你有良好的网络环境,实时分享的体验就会非常好。在实时共享的过程中,人们可以像面对面一样协同工作。同时,在源码管控方面,VSCode也会对那些帮助作者提交代码的人进行追踪。这些让我们看到了在VSCode中启用实时共享是多么容易。因此,在我看来,VSCode在实时共享方面优于市面上任何其他IDE和编辑器。不过在使用VSCode的实时分享功能时还是有一些需要注意的地方。下面我举一个在Vue.js项目中使用直播分享功能的例子。实时分享Vue代码时,一些插件包括Vetur(Vetur是Vue可视化的重要插件)不会分享??。这种缺陷常常使人陷入困境和烦躁。幸运的是,这样的缺陷只会影响某些特定用户(例如,在这种情况下,它只会影响Vue用户)。另外,最让我烦恼的是,在直播分享中,撤销功能是绑定到机器上的,而不是当前用户,这导致我的撤销功能在本地和远程之间混淆了。JetBrains:安全分布式所有JetBrains生态IDE在代码共享和在线协作功能方面都提供了大量的设置项。这些设置项根据不同的安全级别而有所不同。我最近发现了一种令人印象深刻的能力,可以通过投影仪技术在docker容器中运行任何JetBrainsIDE,这使我能够连接到在云服务上运行的JetBrainsIDE,同时使用JetBrainsIDE的全部功能浏览Coder。所以现在,只要一个密码,我就可以使用无头服务随时随地安全地编码。这只是JetBrains的众多共享配置之一。在所有的JetBrainsIDE中,通过CodeWithMe进行实时分享是主流方式。这样你就可以直接在你本地的IDE中查看别人的项目了。同时,你也可以像使用本地开发环境一样使用别人的开发环境来运行项目。印象深刻的一幕是,我的一个组员遇到了一个python问题,他通过CodeWithMe发起了实时代码分享给我。通过这次分享,在自己的IDE中,和本地一样使用了他的配置,调试代码后,轻松帮他解决了这个问题。令人惊奇的是,不同的优秀共享IDE解决方案在尝试提高安全性、协作或分布式团队如何协同工作方面表现出色。比较功能两年前,我还认为实时共享功能微不足道。事实上,两年前我什至不知道IDE中有代码协作。因为在两年前,我们需要一起工作时,根本不会通过IDE发起远程协作,而是直接坐在同一台机器前。但如今受新冠疫情影响,这种面对面的协同工作成为一种奢望,变得异常艰难。正因为如此,这两个IDE都对实时代码共享提供了强大的支持。但是,由于VSCode中的撤消功能存在问题,我强烈推荐JetBrains。此外,对视频和音频通话的支持以及用户之间的Git可追溯性也同样重要。总结除了上面列出的5个方面的比较,我还知道JetBrains相对于完全免费的VSCode来说,针对非学生用户的需求收取一定的费用。这可能是很多人不考虑JetBrains的原因之一。然而,对于我来说,这几个月的使用JetBrains生态系统却给我带来了非常好的体验。而且,我迫不及待地想在工作中更多地使用它们。所以我希望即使JetBrains成本高昂,您也能试一试。