中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
專訪|Coding全棧工程師杜萬:打造最好用的在線代碼閱讀工具CodeInsight

微軟資深軟件設計工程師Eric Lippert此前就講過,讀代碼遠比寫代碼困難,不僅是因為理解上的問題,還有閱讀工具選擇的問題。目前在線閱讀代碼的工具種類雜多,但是要做到用戶體驗滿意的在線工具,實屬不易。最近采訪了Coding.net全棧工程師杜萬,聽他講講Coding即將發(fā)布的在線閱讀代碼工具CodeInsight有哪些功能。

杜萬Coding.net全棧工程師。從事了近10年以Java語言為主的軟件開發(fā)工作,熱衷于整合框架和開發(fā)工具,關注交互設計,Linux擁躉者,喜歡寫技術博客。近期開始學習和關注Elixir函數(shù)語言。目前負責Coding WebIDE項目的架構和研發(fā)。

InfoQ:請介紹一下自己,包括之前的工作經(jīng)歷以及現(xiàn)在所從事的主要工作。

杜萬:2006年畢業(yè)于同濟大學地質(zhì)工程專業(yè)。從大學開始接觸并沉迷于計算機。畢業(yè)以后在上海生物信息中心寫了一年程序。之后在上海銳道工作了七年。期間的工作經(jīng)歷包括被外包到客戶方解決圍繞展現(xiàn)層中間件Dorado的技術問題,其次是進入客戶研發(fā)小組寫框架和開發(fā)工具(Eclipse 插件)。與此同時也分出部分時間參與銳道公司的Dorado IDE的研發(fā),這些都是進入研發(fā)部門的前期鋪墊。隨后組建部門負責搭建銳客網(wǎng)。之所以搭建這個Web研發(fā)平臺,主要是為了解決如下幾個問題:

1.外包出去的程序員和客戶之間需要一個平臺來反饋產(chǎn)品問題;

2.研發(fā)人員需要一個平臺來實現(xiàn)遠程研發(fā)協(xié)作工作;

3.Dorado產(chǎn)品打算以開源的方式運作,需要代碼托管服務;

4.方便銷售人員進行客戶關系管理,發(fā)布一些成功案例。

在銳客網(wǎng)這個項目里扮演了很多角色:主程、架構、產(chǎn)品經(jīng)理,項目經(jīng)理,經(jīng)歷了一個互聯(lián)網(wǎng)項目從無到有的頭三年,收獲良多。在研發(fā)上,搭建了Maven私服,Jinkens服務,項目Maven化,為了讓持續(xù)集成和持續(xù)交付玩得更順暢,還寫了一些Maven和Eclipse插件,而這部分內(nèi)容對整個公司層面的研發(fā)流程改進產(chǎn)生了深刻影響。在產(chǎn)品上,通過整合OpenLDAP將所有的內(nèi)外賬戶統(tǒng)一管理,無論是服務器還是應用都可以通過一個統(tǒng)一的賬號進行登錄,嘗試解決面向研發(fā)工程師的自有產(chǎn)品的開發(fā),面向客戶程序員的學習與答疑問題,以及面向客戶技術選型的資料庫問題。

目前的工作重心暫時從IDE轉向了CodeInsight項目,CodeInsight是一個在線的代碼閱讀工具,其背后是一個語法分析引擎。為什么Coding要在WebIDE之后,又來重做CodeInsight呢?一方面,CodeInsight和IDE一樣都是開發(fā)工具,符合Coding打造好用的云端開發(fā)服務的宗旨。另一方面,Coding打算通過CodeInsight來積累一些經(jīng)驗,為IDE的2.0版本打好基礎?,F(xiàn)階段在CodeInsight項目里主要是負責產(chǎn)品和架構研發(fā)工作。本人很希望通過這個項目來解決一些WebIDE項目里沒有處理好的問題,比如持續(xù)集成。從開發(fā)到部署的整個過程進行的很順利,這也可以把之前的思考和經(jīng)驗積累變成新的代碼實踐。

InfoQ:有人說,如果一個公司不太懂全棧工程師的價值,那么全棧工程師的地位將會很尷尬,那么一個全棧工程師如何才能做到“一專多能”?

杜萬:對于一個剛入行的工程師來說,專心干好本職工作比較重要,表現(xiàn)出色才會有更多的機會。程序員大多有自學習慣,上班寫代碼,下班逛論壇,看博客,讀些技術書籍。本人更傾向于花大塊的時間系統(tǒng)的閱讀,掃除知識盲點。看的書和學的技術最好和當下的工作相關,幾周以后會用到的。這樣學習和實踐就能緊密結合在一起。

只有出色的工作才能贏得信任,這樣會有更自由的空間,在某些小的技術點上有些決策權。對于這樣的機會,一般傾向于選擇采用技術上更創(chuàng)新或者契合的方式,而不是“省事的”的解決方案,即使會因為“麻煩一點”而犧牲一些業(yè)余時間。高手出于刻意訓練,總的來說個人成長的方式是:努力干活,制造問題和解決問題。

InfoQ:您是Linux的堅定擁護者,之前也做過開源平臺bsdn.org,那么您現(xiàn)在工作中經(jīng)常使用Linux工具嗎?您對開源軟件有怎樣的深刻理解和心得?

杜萬:從大學開始就接觸Linux,工作中部署環(huán)境基本都是Linux,也曾經(jīng)在Ubuntu的桌面環(huán)境下工作了一年多。

喜歡Linux是從感受到它強大好用的命令行開始的。bash,awk,sed,vim等一系列字符界面的工具串起來可以干很多事情。特別對于本人這種靠Java語言啟蒙的程序員,分外覺得方便。另外,Linux很多發(fā)行版都內(nèi)置了包管理器,一行命令就可以安裝好想要的軟件,這使得大家都很依賴這樣的便捷。在Mac OS桌面下,Homebrew也是很受人鐘愛的工具。

至于開源軟件,個人認為對于行業(yè)最大的益處是知識更高效率的重新利用。對開發(fā)者來說,幫助最大的三個網(wǎng)站是:Google、Github和Stackoverflow。通常遇到問題,都是從Google鏈接到Stackoverflow,再鏈接到Github。Github上有大量的開源源代碼組成的知識倉庫,這樣才會有大量Stackoverflow寶貴問題的答案積累,進而讓程序員遇到坑時更有效率的找到解決方案。

InfoQ:據(jù)悉Coding最近將會推出一款云端代碼閱讀工具——CodeInsight公測版,目前它所具備的主要功能有哪些?

杜萬:CodeInsight是一個在線代碼閱讀工具,該工具對版本庫中的代碼進行語法著色,引用分析,并以文件樹的方式向用戶展現(xiàn)完整的項目源碼。借助該工具用戶可以方便地瀏覽代碼,定位變量定義以及理清引用關系。對于一些深奧晦澀的部分可以添加評論,與其他用戶共同探討和推敲。

InfoQ:CodeInsight除了支持PHP項目之外,還支持哪些別的語言?能不能跨平臺閱讀托管在Coding平臺以外的代碼?此次推出的CodeInsight公開版本,分析了哪些熱門的開源項目?

杜萬:Coding新開發(fā)的CodeInsight公開版是基于Google的開源源碼分析引擎Kythe而實現(xiàn)的。Kythe默認支持C++和Java代碼的分析。后面會考慮在Kythe的基礎上擴展對其他語言的支持。從Java入手,初期打算分析Maven倉庫里最熱門的100個項目。

InfoQ:CodeInsight和WebIDE是相輔相成的工具,可否具體講一講兩者之間的關聯(lián)性?

杜萬:WebIDE非常好理解,就是一個瀏覽器版本的代碼編寫工具。IDE是集成開發(fā)環(huán)境(Integrated Development Environment)的縮寫。一般來說現(xiàn)代的IDE會集成,編輯、檔案(版本管理)、編譯、調(diào)試、執(zhí)行等開發(fā)過程需要的一系列功能,以提高程序員的生產(chǎn)力。Coding的WebIDE已經(jīng)具備編輯、版本管理功能,而編譯,調(diào)試,執(zhí)行等功能我們通過Web Terminal先簡單地替代了一下。關于代碼編輯方面,IDE還是有很多好用的功能。比如,語法著色,交叉引用,自動補全,快速定位,錯誤提示等。而這些功能依賴于對代碼的詞法和語法分析,這些分析器有些需要自己實現(xiàn),有些可以依賴于現(xiàn)成的編譯工具。但是無論怎么樣都是很大的一塊功能,需要長期深入的研究。

CodeInsight是一個主打代碼閱讀的工具,一份高度可讀的代碼,除了代碼內(nèi)容本身具備良好的編寫風格,比如符合范式、命名規(guī)范、有良好的注釋以外。如果具備一些輔助工具,比如語法著色,交叉引用,快速定位,可以讓閱讀和理解變得更容易。而這些好用的功能也依賴于后端的分析引擎。詞法和語法分析引擎是WebIDE和CodeInsight共同的基礎,或者說就核心技術而言,CodeInsight只是WebIDE的一個功能子集。所以我們先去研發(fā)CodeInsight,以期待在漫長的道路上有一個階段性的成果可以服務于Coding用戶。

InfoQ:可否詳細談談Coding WebIDE項目的架構和研發(fā)過程?WebIDE有哪些核心功能,可以完成哪些工作?

杜萬:Coding WebIDE采用了前后端分離的架構,前后端之間通過Restful API進行交互。前端做了兩版。第一版是基于BackboneJS做的,第二版是基于ReactJS做的。后端主要是用Java和Go語言實現(xiàn)的。Java采用了Spring framework/MVC/Security/Data全套框架。Java部分主要是提供Restful的API,權限認證和數(shù)據(jù)庫相關的操作。Go部分主要負責和操作系統(tǒng)相關的工作,如工作空間管理。

參與研發(fā)的同事身處各地,本人當時在上海,有同事在南京讀書,有同事在深圳總部,有同事在湛江老家,大家通過Coding平臺的代碼倉庫和任務系統(tǒng)進行遠程協(xié)作。研發(fā)過程中團隊特別推崇兩件事:Peer Review(同行評審)和Unit Test(單元測試)。這兩件事情是為了讓WebIDE得以快速迭代。團隊一直在微調(diào)架構,除了直面問題的勇氣,同事間的代碼審查和綠色的bar是大家最大的信心。

WebIDE的核心功能包括代碼編輯,版本庫集成,全功能的Terminal,開發(fā)環(huán)境分享等等。目前WebIDE方便做一些輕量級的動態(tài)語言項目;有的時候,即使電腦不在身邊也可以通過WebIDE的功能修改代碼。

InfoQ:Coding WebIDE和同類產(chǎn)品之間有哪些區(qū)別和優(yōu)勢?同類產(chǎn)品中又有哪些方面值得Coding WebIDE借鑒?

杜萬:Coding的WebIDE和同類產(chǎn)品比,最大的優(yōu)勢是速度快。市面上的其他IDE產(chǎn)品多是采用VM作為后端,而Coding WebIDE是建立在Docker之上,所以啟動和打開速度要快不少。也正因為WebIDE是在新興的Docker之上,所以不能像其他IDE產(chǎn)品一樣隨時hibernate,完美的保持狀態(tài)。

Coding的IDE功能還有點弱,代碼分析還沒有完善,自動補全也不夠好,缺少對Debug的支持,這些都是我們需要學習和借鑒的。

InfoQ:《Docker在Coding WebIDE項目中的運用》一文中,您提到WebIDE在架構初期,考慮全面Dockerize的方案,最后因為“Nginx是否也要放進Container里”存在不同的聲音,而放棄了全面Dockerize。根據(jù)您的經(jīng)驗,如果實施全面Dockerize方案的話,能帶來哪些效果?

杜萬:做WebIDE的時候最早是把所有的服務都放進了Container。統(tǒng)一的封裝方式很適合管理,但是上線的時候運維不同意,他們說,物理機上了MySQL已經(jīng)有自動的備份功能,Container里的服務需要重新做。已有的Nginx里加一行配置就可以,所以沒必要封裝成獨立的。其實他們說得有道理,所以最后就同意了。

另外,Container中的服務也是存在一些問題的,被迫拿出來。有個服務依賴動態(tài)mount的目錄,而由于mount namespace的隔離,一個已經(jīng)啟動的Container是無法感知到宿主機的mount變化。

InfoQ:目前,WebIDE還是存在部分不足之處的,例如:不支持debug斷點調(diào)試功能、不能像Web開發(fā)者那樣直接運行查看、菜單不支持中文、還無法承擔大型應用的開發(fā)等,對于這些,Coding在接下來會做哪些技術上的改進?在未來還有哪些目標需要突破?

杜萬:中文菜單已經(jīng)有了,其實早就有了,只是當初開發(fā)人員用慣了英文的IDE菜單,感覺中文的菜單太別扭,就去掉的。

為了適應這個快速變化的互聯(lián)網(wǎng)時代,最初的IDE基本是弄出一個雛形就匆匆上線了。對于資源的限制,比如CPU和磁盤的限制,這些都是后半年慢慢加上的。在Docker技術上搞這些限制,都是些新興的課題,團隊做了許多試驗,也踩了些坑,最終短板還是補上了。目前整個團隊致力于研究在線協(xié)作,希望能像國外同類產(chǎn)品一樣,實現(xiàn)多人的同時編輯、遠程結對編程。

其次就是,回放操作歷史在教學方面的需求很強烈,Coding團隊也在做這方面的技術儲備和研究。

InfoQ:作為一位資深的全棧工程師,您在開發(fā)過程中都遇到過哪些典型的坑,又是如何克服的?可否為其他全棧工程師分享一些引以為鑒的案例。

杜萬:一個手指不離鍵盤的碼農(nóng),一路踏坑而來。

最近遇到過一個比較嚴重的案例。為了掛載支持動態(tài)擴展的鏡像問題,研發(fā)團隊選用了KVM內(nèi)置的NBD模塊。前期調(diào)研發(fā)現(xiàn)很好用,本地實現(xiàn)沒有異常,staging上沒有問題。生產(chǎn)機上線以后,隔三差五地出現(xiàn)進程內(nèi)核態(tài)CPU100%,這是一個非常頭痛的問題,進程在內(nèi)核態(tài)是無法被kill的,而且占滿了CPU資源,每每出現(xiàn)這種情況,就只能無奈的重啟服務器。這對于云計算是很難接受的。Google查詢了很久,多次升級內(nèi)核,無果。最終改了方案,放棄了不穩(wěn)定的NBD。引入新技術解決問題,都是程序員樂于去做的。但是每引入一種新技術,都同時增加了不穩(wěn)地的風險。

對于創(chuàng)業(yè)公司來說,最關注的應該是業(yè)務,解決用戶的痛點。所以,有時候技術棧純粹一點是明智的選擇。

InfoQ:您現(xiàn)在關注Elixir函數(shù)語言,且有十多年的軟件開發(fā)經(jīng)驗,可否分享一下這些年的壘碼心得、學習感悟,以激勵后者!

杜萬:語言大戰(zhàn)經(jīng)常是技術人熱愛的戰(zhàn)場,有人說PHP是最好的語言,有人接受不了Golang的變量聲明格式,一些同事鄙視三個等號的語言,還有諷刺Lisp括號太多的。

剛開始學C系語言的時候,覺得語言都差不多,編程思想很重要,應該精通設計模式。后來接觸了Ruby,被DSL的魅力深深吸引,靈活動態(tài)的語法讓設計模式變得不是那么重要。再后來學習了Prolog和Clojure才意識到同像性(Homoiconicity)才是真正地讓人著迷的原因所在。

最開始聽說Elixir,是來自于同事在Coding發(fā)的一條消息:“不要咖啡,不要大象,不要蟒蛇,不要紅寶石,只要萬金油”,我們知道咖啡表示Java,大象表示PHP,蟒蛇表示Python,紅寶石表示Ruby,那萬金油是什么。Google一下,才知道萬金油是Erlang虛擬機上的一門語言。相當于Scala之于Java虛擬機。英文名字叫Elixir。Elixir是函數(shù)式語言,支持元編程,先天的分布式支持,借助于OPT框架可以替換代碼。也就是可以不停機,升級業(yè)務代碼。類似于nginx -s reload,但是這是應用級別的特性,無需架構支持,簡直太棒了。

感覺發(fā)現(xiàn)了新大陸了,趕緊吆喝大家一起來開荒吧。但是沒有中文版的資料呀。于是和同事一起聯(lián)系出版社合作翻譯了《Programming Elixir》,目前已經(jīng)交稿了,估計不時就能出版了。當大家在編程語言的選用上發(fā)起爭執(zhí)的時候,建議大家多學幾門語言,慢慢你就會發(fā)現(xiàn),每種語言都有擅長的問題領域,用得好才能站在鄙視鏈的上端。

>>>> 寫在最后正如杜萬所說,雖然CodeInsight和WebIDE目前還有很多地方需要改進優(yōu)化,但是只要了解用戶需求,提升用戶體驗,不斷的增加實用功能,那這款產(chǎn)品成為成熟產(chǎn)品也就不遠了。

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
WebIDE:在瀏覽器中寫代碼的時代即將來臨?
跑在瀏覽器上的小程序 IDE
@開發(fā)者,你的鯤鵬專列已發(fā)車
那些年我用過的SAP IDE
【開源云原生大會】實錄:k8s套娃開發(fā)調(diào)試dapr應用
BndTools為在Eclipse中進行OSGi開發(fā)提供支持
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服