发布时间:2025-06-15
浏览次数:0
微软资深软件设计工程师Eric曾说过,阅读代码比编写代码困难得多,这不仅是由于理解方面的缘故,还存在阅读工具选择的问题。当前在线阅读代码的工具种类繁多,然而要打造出令用户体验满意的在线工具,实则困难。近期采访了.net全栈工程师杜万,想听他说说即将发布的在线阅读代码工具有哪些功能。
是一名全栈工程师,在杜万.net工作,从事软件开发工作近10年,主要使用Java语言,热衷于整合框架和开发工具,关注交互设计,是Linux的拥趸者,喜欢写技术博客,近期开始学习和关注函数语言,目前负责项目的架构和研发。
请介绍一下你自己,涵盖你之前的工作经历,以及你现在所从事的主要工作 。
杜万于2006年毕业于同济大学地质工程专业,大学时开始接触计算机并沉迷其中,毕业后在上海生物信息中心写了一年程序,之后在上海锐道工作七年,工作经历包括被外包到客户方解决围绕展现层中间件的技术问题,还包括进入客户研发小组写框架和开发工具(插件)。与此同时分出部分时间参与锐道公司IDE的研发,这些是进入研发部门的前期铺垫,随后组建部门负责搭建锐客网,搭建这个Web研发平台主要是为了解决如下几个问题:
1.外包出去的程序员和客户之间需要一个平台来反馈产品问题;
2.研发人员需要一个平台来实现远程研发协作工作;
3.产品打算以开源的方式运作,需要代码托管服务;
4.方便销售人员进行客户关系管理,发布一些成功案例。
在锐客网项目中承担了多种角色,包括主程、架构、产品经理以及项目经理,历经了一个互联网项目从零到有的头三年,收获颇为丰富。在研发方面,搭建了Maven私服、服务,实现了项目Maven化,为使持续集成和持续交付更为顺畅,还编写了一些Maven及插件,这部分内容对整个公司层面的研发流程改进产生了深远影响。在产品方面,通过整合实现所有内外账户的统一管理,服务器可通过一个统一账号登录,应用也可通过该统一账号登录,尝试解决面向研发工程师的自有产品开发问题,解决面向客户程序员的学习与答疑问题,以及解决面向客户技术选型的资料库问题。
目前工作重心暂时从IDE转向项目,项目是在线代码阅读工具,其背后有语法分析引擎。为何之后又要重做?一方面,它和IDE都是开发工具,符合打造好用云端开发服务的宗旨。另一方面,打算通过它积累经验,为IDE的2.0版本打基础。现阶段在项目里主要负责产品和架构研发工作。本人非常期望借助这个项目,解决项目中未妥善处理的一些问题,例如持续集成。开发到部署的整个流程进展顺利,这还能够将之前的思考以及经验积累转化为新的代码实践。
InfoQ:有人说,要是一个公司不太明白全栈工程师的价值,那么全栈工程师的地位会很尴尬 ,那么全栈工程师怎样才能做到“一专多能”呢?
对于刚入行的工程师而言,专心做好本职工作颇为重要,只有表现出色才会获得更多机会。程序员大多有自学的习惯,上班时写代码,下班后逛论坛、看博客、阅读一些技术书籍。本人更倾向于花费大块时间进行系统阅读,以扫除知识盲点。所看的书以及所学的技术最好与当下工作相关,且几周后会用到。如此一来,学习和实践便能紧密结合在一起 。
只有工作出色才能赢得信任,赢得信任后会拥有更自由的空间,在某些小技术点上拥有决策权。对于这样的机会,一般倾向于选择采用技术上更创新或契合的方式,而非“省事的”解决方案,即便会因“麻烦一点”牺牲一些业余时间。高手出于刻意训练,总的来说个人成长方式是:努力干活,制造问题,解决问题。
InfoQ:您一直坚定拥护Linux,之前还做过开源平台bsdn.org,那么您如今在工作里常常使用Linux工具吗?您对开源软件有着怎样深刻的理解与心得?
杜万从大学起便开始接触Linux,在工作里部署环境大多是Linux,他还曾在桌面环境下工作过一年多 。
喜欢Linux是从体会到它强大易用的命令行起步的。bash、awk、sed、vim等一连串字符界面的工具组合起来能做许多事情。尤其对于像本人这样靠Java语言启蒙的程序员而言,格外觉得便利。此外,Linux的许多发行版都内置了包管理器,一条命令就能安装好所需的软件,这让大家都很依赖这种便捷。在Mac OS桌面下,也是很受人钟爱的工具。
至于开源软件,个人觉得其对行业最大的好处是知识能被更高效地重新利用。对于开发者而言,帮助最大的三个网站是:、和。通常碰到问题时,都是先从链接到,接着再链接到。上有由大量开源源代码构成的知识仓库,如此才会积累下大量宝贵问题的答案,从而使程序员在遇到困难时能更有效率地找到解决办法。
据悉,最近将会推出一款云端代码阅读工具,它是公测版,目前它所具备的主要功能有哪些?
杜万是一个在线代码阅读工具,它能对版本库中的代码进行语法着色,还能进行引用分析,并且会以文件树的方式向用户展现完整的项目源码,借助这个工具用户能方便地浏览代码,能定位变量定义,也能理清引用关系,对于一些深奥晦涩的部分还可以添加评论,与其他用户共同探讨和推敲。
InfoQ:除了支持PHP项目,还支持哪些其他语言?能否跨平台阅读托管在平台之外的代码?此次推出的公开版本分析了哪些热门开源项目?
新开发的公开版是基于开源源码分析引擎Kythe实现的,Kythe默认支持C++和Java代码的分析,后面会考虑在Kythe的基础上扩展对其他语言的支持,从Java入手,初期打算分析Maven仓库里最热门的100个项目。
InfoQ:和是相互补充、相互促进的工具,能不能详细说一说两者之间的联系?
杜万:很好理解,它是用于编写浏览器版本代码的工具。IDE是集成开发环境的缩写。通常情况下,现代的IDE会集成一系列开发过程所需功能,比如编辑、档案(版本管理)、编译、调试、执行等,目的是提高程序员的生产力。它已具备编辑、版本管理功能,而编译、调试、执行等功能,我们先通过Web做了简单替代 。在代码编辑方面,IDE具备诸多实用功能。例如,有语法着色功能,有交叉引用功能,有自动补全功能,有快速定位功能,还有错误提示功能等。这些功能依靠对代码的词法和语法分析,其中部分分析器需自行实现,部分可依赖现成编译工具。但不管怎样,这都是相当大的一块功能,需要进行长期深入研究。
它是一个主打代码阅读的工具,代码具有高度可读性,代码内容本身编写风格良好,符合范式、命名规范且有良好注释。若具备一些辅助工具,如语法着色、交叉引用、快速定位,能让阅读和理解变得更容易。而这些好用的功能依赖于后端的分析引擎。词法和语法分析引擎存在共同基础,从核心技术角度讲,它只是一个功能子集。因此我们先开展研发工作,期望在漫长进程中能有阶段性成果来服务用户。
InfoQ:能否详细说一说项目的架构,以及研发过程是怎样的?项目有哪些核心功能,这些核心功能能够完成哪些工作?
请你提供完整的内容,以便我准确进行改写。目前提供的内容不完整,存在信息缺失。
Java部分主要提供API,进行权限认证以及数据库相关的操作,/MVC//Data全套框架中的这部分工作由其完成。Go部分主要负责与操作系统相关的工作,比如工作空间管理 。
参与研发的同事分布在各地,本人当时在上海,有同事在南京读书codejock skin builder,有同事在深圳总部,有同事在湛江老家,大家借助平台的代码仓库以及任务系统开展远程协作。研发过程中团队尤为推崇两件事,一是Peer(同行评审),二是Unit Test(单元测试)。这两件事的目的是实现快速迭代。团队一直在对架构进行微调,大家最大的信心,除了直面问题的勇气,还在于同事间的代码审查以及绿色的 bar 。
其核心功能涵盖代码编辑,涉及版本库集成,具备全功能的开发环境分享等。当下便于开展一些轻量级的动态语言项目;有时,即便电脑不在身旁,也能够借助其功能修改代码。
InfoQ:与同类产品相比,有哪些区别,具备什么优势?在同类产品里,哪些方面值得借鉴?
和同类产品相比,它最大的优势是速度快。市面上其他IDE产品多采用VM作为后端,它是建立在之上,因此启动和打开速度要快不少。也正因为它是在新兴的之上,所以不能像其他IDE产品一样随时完美地保持状态。
其IDE功能稍显薄弱,代码分析尚未完备,自动补全效果欠佳,缺乏对Debug的支持,这些均是我们需学习与借鉴之处。
InfoQ:在《在项目中的运用》这篇文章里,您曾提到,在架构刚开始的时候,会去思考一个考虑得很周全的方案,然而,最终因为对于“Nginx是不是也要包含在其中”出现了不一样的看法,所以就放弃了这个全面的方案。按照您的经验,如果实施这个全面的方案,会带来什么样的效果呢?
杜万表示,做的时候最早是将所有服务都放进去了。统一的封装方式很适合管理,然而上线时运维不同意。他们称,物理机上的MySQL已有自动备份功能,相关服务需要重新做。在已有的Nginx里加一行配置即可,所以没必要封装成独立的。实际上他们说得有道理,所以最后就同意了。
另外,中的服务存在一些问题,所以被迫拿出来。有个服务依赖动态挂载的目录,因为挂载存在隔离,所以一个已经启动的服务无法感知宿主机的挂载变化 。
目前,还是存在部分不足之处,比如不支持debug断点调试功能,不能像Web开发者那样直接运行查看,菜单不支持中文,还无法承担大型应用的开发,对于这些,接下来会做哪些技术上的改进,未来还有哪些目标需要突破?
杜万表示,中文菜单早已存在,只是当初开发人员习惯使用英文的IDE菜单,觉得中文菜单很别扭,所以就将其去掉了 。
为了顺应这个迅速变化的互联网时代,最初的IDE基本上是做出一个初步的样子就急忙上线了。对于资源的约束,像CPU和磁盘的约束,这些都是后半年渐渐添加的。在技术方面设置这些约束,都是些崭新的课题,团队进行了许多试验,也遭遇了一些挫折,最终不足之处还是弥补上了。目前整个团队都在致力于研究在线协作,期望能够达成多人同时编辑,实现远程结对编程,就如同国外同类产品那样 。
其次,回放操作历史在教学方面有很强烈的需求,团队正在做这方面的技术储备,团队也正在做这方面的研究。
InfoQ:身为资深全栈工程师,开发过程中遇到过哪些典型的问题codejock skin builder,又是怎样克服的?能否为其他全栈工程师分享一些可供借鉴的案例。
杜万:一个手指不离键盘的码农,一路踏坑而来。
最近遇到过一个较为严重的案例,为解决挂载支持动态扩展的镜像问题,研发团队选用了KVM内置的NBD模块,前期调研时发现该模块很好用,本地实现不存在异常,上线也没有问题。生产机上线后,进程内核态%隔三差五出现,这是个极为头痛的问题,进程处于内核态时无法被kill,还占满了CPU资源,每次出现这种情况,就只能无奈重启服务器,这对云计算而言很难接受,查询许久,多次升级内核,都没有结果,最终更改方案,放弃了不稳定的NBD,引入新技术解决问题,这是程序员乐于去做的。但是每引入一种新技术,都同时增加了不稳地的风险。
对于创业公司而言,最应该关注的是业务,要解决用户的痛点。所以,有时技术栈保持纯粹是一种明智的选择。
InfoQ:您目前关注函数语言,并且拥有十多年的软件开发经验,能不能分享一下这些年编写代码的心得、学习的感悟,用来激励后来的人!
语言大战常常是技术人热衷的战场,有人声称PHP是最佳语言,有人难以接受其变量声明格式,一些同事轻视使用三个等号的语言,还有人讥讽Lisp的括号过多。
刚开始学习C系语言时,会觉得各种语言大同小异,认为编程思想颇为重要,觉得应当精通设计模式。后来接触了Ruby,被DSL的魅力深深吸引,因其灵活动态的语法,使得设计模式变得没那么重要了。再后来学习了,才意识到同像性()才是真正令人着迷的原因所在。
最开始听说,源于同事发的一条消息,消息内容是“不要咖啡,不要大象,不要蟒蛇,不要红宝石,只要万金油” ,我们晓得咖啡代表Java,大象代表PHP,蟒蛇代表什么,红宝石代表Ruby,那万金油是什么呢 ,这才得知万金油是虚拟机上的一门语言 ,它之于虚拟机就如同Scala之于Java虚拟机 ,它的英文名字叫 。它属于函数式语言,具备支持元编程的能力,拥有先天的分布式支持特性,借助OPT框架能够替换代码,这意味着可以不停机来升级业务代码,它类似于nginx -s,不过这是应用级别的特性,不需要架构提供支持,实在是太棒了。
感觉好像发现了新的天地,赶快招呼大家一起来开垦荒地。然而并没有中文版的资料。于是便和同事一同联系出版社合作翻译了《 》,目前已经提交稿件,估计不久就能出版。当大家在编程语言的选择上发生争论时,建议大家多学习几种语言,渐渐地你就会发觉,每种语言都有其擅长解决的问题领域,运用得好才能处于鄙视链的高端。
写在最后,正如杜万所说,目前还有很多地方需要改进优化,不过只要了解用户需求,提升用户体验,不断增加实用功能,那么这款产品成为成熟产品也就不远了。
如有侵权请联系删除!
Copyright © 2023 江苏优软数字科技有限公司 All Rights Reserved.正版sublime text、Codejock、IntelliJ IDEA、sketch、Mestrenova、DNAstar服务提供商
13262879759
微信二维码