日本亚洲欧美日韩中文字幕_精品欧美一区二区三区久久久_久久av高潮av无码av_成在人线av无码免费_亚洲中文字幕无码久久精品1

返學(xué)費(fèi)網(wǎng) > 培訓(xùn)機(jī)構(gòu) > 全國(guó)IT培訓(xùn)中心

13081913316

全國(guó)統(tǒng)一學(xué)習(xí)專(zhuān)線 8:30-21:00

想了解java可視化編程嗎?想了解可視化編程之罪 —— 可視化編程是否真的沒(méi)有未來(lái)?,可視化編程:利用圖形來(lái)創(chuàng)建程序,卻被程序員認(rèn)為是糟糕的想法?,超級(jí)好用的 Java 數(shù)據(jù)可視化庫(kù):Tablesaw?? 嗎?......本文帶你一探究竟。

1.可視化編程之罪 —— 可視化編程是否真的沒(méi)有未來(lái)?

今天想聊聊可視化編程(visual-)的未來(lái)發(fā)展,喂喂,咱們這兒還沒(méi)開(kāi)始,各位大佬先別急著走啊您……確實(shí),可視化這個(gè)概念跟任何技術(shù)并稱,都是技術(shù)前沿、下一個(gè)風(fēng)口、萬(wàn)億市場(chǎng)的代名詞,數(shù)據(jù)可視化、可視化分析、神經(jīng)網(wǎng)絡(luò)可視化……唯獨(dú)在一個(gè)領(lǐng)域似乎成了low和過(guò)時(shí)的象征——可視化編程。無(wú)論資深程序員還是風(fēng)投大佬,只要你跟他提起這個(gè)概念,對(duì)方都會(huì)立刻露出一種“不提這個(gè)還能聊”的鄙夷神情。然而可視化編程本來(lái)是一個(gè)多么朋克且具有未來(lái)感的語(yǔ)匯,它最大的意義在于打破一些我們今天看起來(lái)不可逾越的技術(shù)壁壘,重新定義被稱之為底層技術(shù)生態(tài)的一些東西。著名的信息技術(shù)分析公司Gartner早在2012年就提出了“全民開(kāi)發(fā)者”(Citizen Developer)概念,指的是借助于一些組件化的集成代碼可視化平臺(tái),一些不具備專(zhuān)業(yè)代碼技能和開(kāi)發(fā)經(jīng)驗(yàn)的“小白”人群也能自主組織或參與應(yīng)用開(kāi)發(fā),從而把代碼開(kāi)發(fā)由一項(xiàng)程序員專(zhuān)屬職能擴(kuò)充到更廣泛的人群,甚至是全人類(lèi)。想象一下,你們公司的保潔阿姨將參與下個(gè)季度的核心項(xiàng)目開(kāi)發(fā),隔壁的王大爺開(kāi)發(fā)了一個(gè)名為“跳了嗎”的程序用來(lái)約小區(qū)大媽一起能跳廣場(chǎng)舞……媽耶,這將是一個(gè)多么不可思議而令人神往的時(shí)代,不僅是IT行業(yè),整個(gè)社會(huì)都將發(fā)生天翻地覆的變革。然而理想是雄壯的,現(xiàn)實(shí)卻是悲壯的。從上世紀(jì)60年代至今,無(wú)數(shù)大佬在這個(gè)領(lǐng)域進(jìn)行了前赴后繼的探索,提出了各種解決方案,并開(kāi)發(fā)出了配套的工具,目前可知的可視化編程工具已超過(guò)90余款。上世紀(jì)九十年代,還有人嘗試開(kāi)展一場(chǎng)運(yùn)動(dòng),即在企業(yè)中普及可視化編程工具,通過(guò)UML CASE來(lái)定義和生成應(yīng)用。這種工具的工作原理是通過(guò)可視化方法為系統(tǒng)建模,根據(jù)模型生成程序代碼,任何代碼的變更都可以反向反映到模型上。但是這些實(shí)踐都宣告失敗了。截至目前,可視化編程只在一個(gè)領(lǐng)域取得了一些成果,你猜對(duì)了,就是以Scratch、Blockly為代表的兒童編程。想到這些,一股悲壯感油然而生,猛虎落淚.jpg。那么現(xiàn)在問(wèn)題來(lái)了。為什么一個(gè)看似如此潛力非凡的技術(shù)風(fēng)向,卻至今未能爆發(fā)出應(yīng)有的潛能,反而受到專(zhuān)業(yè)人士唾棄?問(wèn)題到底出在概念本身,還是缺乏有效的實(shí)現(xiàn)路徑?對(duì)可視化編程的負(fù)面印象到底是一種偏見(jiàn),還是它從根本上就是個(gè)糟糕的idea?有沒(méi)有一種解決方案能夠從底層實(shí)現(xiàn)革新,創(chuàng)造真正意義上實(shí)現(xiàn)可視化編程?這就是我們接下來(lái)試圖討論的問(wèn)題。一、可視化編程七宗罪——程序員眼中的可視化編程為了解答可視化編程相較于傳統(tǒng)編程到底差在哪里的問(wèn)題,我們首先和一些程序員聊了一聊。他們是這樣說(shuō)的:觀點(diǎn)一:“編程就不該是一個(gè)用鼠標(biāo)來(lái)做的事兒”幾乎所有的程序員都首先對(duì)現(xiàn)有可視化編程平臺(tái)的工作方式提出了質(zhì)疑。他們認(rèn)為,大多數(shù)可視化平臺(tái)都采用了Block Type(積木模塊型),即通過(guò)“拖拽”、拼接并通過(guò)可視化窗口對(duì)一些對(duì)象屬性進(jìn)行定義的方式來(lái)實(shí)現(xiàn)項(xiàng)目的搭建。這是一種十分低效的編程方式。程序員的基本氣節(jié)就是,寧愿用鍵盤(pán)敲出一行行代碼,也不愿拖壞鼠標(biāo)。觀點(diǎn)二:“可視化編程只能做做小程序吧”多數(shù)受訪程序員們認(rèn)為,可視化編程工具聽(tīng)起來(lái)只能搭建一些前端頁(yè)面,要么就是通過(guò)圖形化節(jié)點(diǎn)的方式來(lái)做一些簡(jiǎn)單的程序序列,做做兒童編程還行,至于具有復(fù)雜數(shù)據(jù)架構(gòu)的大型應(yīng)用,別問(wèn),問(wèn)就是做不了。觀點(diǎn)三:“那玩意兒咋維護(hù)呢?”可視化編程的基本邏輯是實(shí)現(xiàn)代碼到可視化圖形的映射。一個(gè)簡(jiǎn)單的程序包含數(shù)百行代碼的情況是常態(tài),而當(dāng)這些代碼成為百上千個(gè)圖形元素,閱讀和理解的抽象程度、維護(hù)的困難程度甚至?xí)^(guò)以文本形式存在的代碼。觀點(diǎn)四:“沒(méi)有配套的編程系統(tǒng)環(huán)境,架構(gòu)不完善,缺乏安全感”高級(jí)語(yǔ)言歷經(jīng)了很長(zhǎng)的發(fā)展歷程,其實(shí)語(yǔ)言本身并沒(méi)有什么本質(zhì)提升,但是基本架構(gòu)、代碼庫(kù)和配套的IDE卻日益完善。而可視化編程目前還只停留在初級(jí)階段,只解決了工具層面的核心問(wèn)題,缺乏配套的工作環(huán)境和技術(shù)資源積累,將在很大程度上限制工作效率甚至抑制產(chǎn)能。觀點(diǎn)五:“我討厭非開(kāi)源的東西”可視化編程工具基于對(duì)既有代碼邏輯或?qū)ο筮M(jìn)行封裝來(lái)實(shí)現(xiàn),卻也因此而無(wú)法被輕松解耦,極大地限制了開(kāi)發(fā)的自由度。如果遇到問(wèn)題,是不是還要重新維護(hù)和開(kāi)發(fā)可視化工具本身啊?何況有很多工具甚至還不是開(kāi)源的。那我要這鐵棒有何用…觀點(diǎn)六:“不具備任何復(fù)用性”程序員們均認(rèn)為,可視化編程工具開(kāi)發(fā)出來(lái)的東西都是模塊拼接而成的,缺乏有效的可復(fù)用機(jī)制,首先不具備清晰的數(shù)據(jù)結(jié)構(gòu),其次更無(wú)法被模塊化。所以,只能開(kāi)發(fā)一次性應(yīng)用???觀點(diǎn)七:“可視化語(yǔ)言與代碼本身完全割裂,無(wú)法兼容”除了對(duì)于可視乎語(yǔ)言本身的指摘,很多程序員也表現(xiàn)出了對(duì)這種新工作方式的抗拒。他們覺(jué)得自己已經(jīng)習(xí)慣了代碼化的開(kāi)發(fā)邏輯,很難適應(yīng)一款從根本上存在歧異的“語(yǔ)言”。而如果在使用中要同時(shí)兼顧,則更加難以協(xié)調(diào)思維邏輯的轉(zhuǎn)換??梢钥闯?,程序員對(duì)于可視化編程的抗拒心理主要圍繞產(chǎn)能、開(kāi)發(fā)效率、使用性、功能性等實(shí)踐方面。盡管很多程序員都承認(rèn),可視化編程是一個(gè)好的概念,但是作為一種工具,它從邏輯上并不能真正實(shí)現(xiàn)對(duì)高級(jí)語(yǔ)言的簡(jiǎn)化,反而在操作層面將其復(fù)雜化了。一言以蔽之,所以可視化編程只能做為一種初級(jí)工具,作為高級(jí)語(yǔ)言的輔助品,而永遠(yuǎn)無(wú)法取代高級(jí)語(yǔ)言。二、可視化編程工具市場(chǎng)調(diào)研——是否真的一無(wú)是處?可以看出,程序員抗拒可視化編程,本質(zhì)是在說(shuō),目前還沒(méi)有一款成熟的可視化產(chǎn)品真的能夠讓他們體會(huì)到便利,解決他們后顧之憂。這讓我們不禁開(kāi)始思考,本質(zhì)上這或許是一個(gè)技術(shù)發(fā)展階段的問(wèn)題,不是可視化編程這個(gè)思路不好,只是好的工具還沒(méi)有問(wèn)世?為此,我們調(diào)研了目前市場(chǎng)上的一些可視化工具,想要看看是否有一些工具已經(jīng)做出了一些突破,或者具備實(shí)現(xiàn)突破的潛質(zhì)。調(diào)查顯示,作為可視化編程的發(fā)源地,目前國(guó)外主打可視化編程、低代碼編程的平臺(tái)至少有十幾家,其中最具代表性的可以說(shuō)是、Mendix、、 Kony等幾家。而值得欣喜的是,國(guó)內(nèi)這幾年也有一些功能相對(duì)完善的競(jìng)品出現(xiàn),包括明道云、簡(jiǎn)道云、iVX等。關(guān)于這些平臺(tái)的相關(guān)評(píng)測(cè)文章已經(jīng)很多了,而這里我們不去比較平臺(tái)的優(yōu)劣,主要探討這些產(chǎn)品在可視化編程領(lǐng)域的技術(shù)探索進(jìn)展到了什么地步,對(duì)于傳統(tǒng)技術(shù)生態(tài)的改造有哪些貢獻(xiàn),因此只在國(guó)內(nèi)外產(chǎn)品中各選出一例進(jìn)行討論。1.一直被視為可視化開(kāi)發(fā)領(lǐng)域的標(biāo)桿產(chǎn)品,也是全球頂級(jí)的Paas提供商。雖然它的核心邏輯是早已不被看好的UML,但不可否認(rèn),它確實(shí)在這條路上走出了一些新意,告訴我們可視化開(kāi)發(fā)也可以做很多事情。首先,Mendix是一款目標(biāo)非常明確的產(chǎn)品,它要解決的核心痛點(diǎn)就是可重復(fù)開(kāi)發(fā)。而它解決問(wèn)題的核心思路是建立可視化模型,通過(guò)建立模型之間的數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn)應(yīng)用模型的搭建。采用模型解釋方法取代代碼生成方法,一鍵部署和運(yùn)行,而不需要再編輯、編譯和運(yùn)行。Mendix的核心開(kāi)發(fā)方式在擴(kuò)展性方面,Mendix使用Java語(yǔ)言編寫(xiě)Java action,擴(kuò)充micorflow來(lái)使用定制代碼,解決復(fù)雜業(yè)務(wù)問(wèn)題;如果有更復(fù)雜業(yè)務(wù),還可以使用提供的DSLs來(lái)調(diào)用。Mendix的JAVA接口同時(shí),Mendix提供了一套完善的基礎(chǔ)開(kāi)發(fā)框架,允許使用敏捷方法來(lái)應(yīng)用工具進(jìn)行模型開(kāi)發(fā),最小模型為領(lǐng)域模型和GUI模型,services和外部數(shù)據(jù)源等??梢钥吹剑槍?duì)可視化開(kāi)發(fā)可能存在的功能性、開(kāi)源、安全性、開(kāi)發(fā)效率等問(wèn)題,Mendix至少都提供了一些解決方案。我們目前還無(wú)法完整評(píng)估這種解決方案是否高效,但至少在應(yīng)用層面已經(jīng)完全夠用。從Mendix官網(wǎng)所提供的應(yīng)用實(shí)例來(lái)看,可視化工具已經(jīng)在某些開(kāi)發(fā)領(lǐng)域體現(xiàn)出它相對(duì)于傳統(tǒng)編程的優(yōu)越性。2.iVX我們選擇iVX作為國(guó)內(nèi)可視化開(kāi)發(fā)平臺(tái)的代表,是因?yàn)樗钦娴男?,在很多方面讓人耳目一新。?lái),讓我們康康,iVX的首頁(yè)一上來(lái)就號(hào)稱它重構(gòu)了一套可視化開(kāi)發(fā)語(yǔ)言,Emmm,感覺(jué)有點(diǎn)暴躁,它是否真的能做到呢?iVX的首頁(yè):真正意義上的零代碼語(yǔ)言首先iVX告訴我們,“可視化編程”并不一定意味著“拖放”。iVX完全摒棄了被人詬病的塊拼接模式,通過(guò)對(duì)象樹(shù)方式來(lái)定義對(duì)象結(jié)構(gòu),通過(guò)事件面板的方式來(lái)定義對(duì)象間的交互邏輯和數(shù)據(jù)邏輯iVX的核心開(kāi)發(fā)方式可以說(shuō),iVX在進(jìn)行編程邏輯可視化的基礎(chǔ)上,很好地保留了了原生的開(kāi)發(fā)邏輯。例如,在事件這部分不是通過(guò)逐一為每個(gè)對(duì)象添加響應(yīng)條件的方式來(lái)進(jìn)行,而視采用條件、循環(huán)、動(dòng)作、回調(diào)模塊互相組合的方式來(lái)做,所有事件都被集成在一個(gè)面板里,一目了然iVX的事件面板而尤其值得表?yè)P(yáng)的是它的IDE,采用不同的顏色區(qū)分各種對(duì)象和事件模塊,并支持對(duì)所有對(duì)象、數(shù)據(jù)和事件的搜索,能夠添加備注,感覺(jué)有點(diǎn)厲害。iVX的開(kāi)發(fā)界面在開(kāi)源性和擴(kuò)展性方面,iVX支持接入API和JS代碼。同時(shí)非常有意思的是,他們還搞了一個(gè)叫小模塊的東西,允許用戶把自己開(kāi)發(fā)的一部分東西抽象成一個(gè)組件,在可復(fù)用性方面還是挺有創(chuàng)意的。我們還看到,iVX采用了前后端分離的數(shù)據(jù)架構(gòu),這無(wú)疑是處于對(duì)數(shù)據(jù)的并發(fā)性能和安全性的考慮。在同類(lèi)應(yīng)用當(dāng)中這是一個(gè)比較具有前瞻性的布局,但是表現(xiàn)如何,還有待測(cè)試。雖然說(shuō)重新定義編程語(yǔ)言這事兒還不好說(shuō),但是iVX這款產(chǎn)品在很多方面都提出了一些具有創(chuàng)造性的解決方案,已經(jīng)足以讓人感到眼前一亮。它至少重新定義了一種新的零代碼開(kāi)發(fā)模式,幫助企業(yè)做一些建站、開(kāi)發(fā)一些OA應(yīng)用啥的,應(yīng)該不在話下。三、讓開(kāi)發(fā)人員用起來(lái)——可視化編程工具的未來(lái)基于上面的描述,我們可以看出,目前很多可視化開(kāi)發(fā)工具確實(shí)在技術(shù)領(lǐng)域取得了一些突破。核心發(fā)展的方向主要是兩個(gè),一種在于為特定問(wèn)題或場(chǎng)景提供解決方案,如Mendix專(zhuān)注于可重復(fù)開(kāi)發(fā),國(guó)內(nèi)一些云平臺(tái)專(zhuān)注于為企業(yè)提供快速開(kāi)發(fā)模組。另外還有一些工具則試圖構(gòu)建一款底層開(kāi)發(fā)工具,提供一種全局性的開(kāi)發(fā)思路,這個(gè)路無(wú)疑比較困難,但是他們也取得了不少進(jìn)展。從目前已經(jīng)商業(yè)化了的幾款工具來(lái)看,工具功能已經(jīng)發(fā)展到了可以勝任各類(lèi)WEB應(yīng)用、OA應(yīng)用甚至構(gòu)建一些平臺(tái)的水準(zhǔn),也已經(jīng)建立了基本成熟的aPaas平臺(tái)的運(yùn)營(yíng)模式,有一些大企業(yè)入駐并體會(huì)到了可視化開(kāi)發(fā)帶來(lái)的便利。盡管可視化開(kāi)發(fā)工具并非一無(wú)是處,但它的問(wèn)題也非常明顯,距離真正重構(gòu)技術(shù)生態(tài)還有著漫長(zhǎng)的距離。例如在大企業(yè)最為看中的安全性和標(biāo)準(zhǔn)化問(wèn)題方面,既有工具都還不能提供完美的解決方案。而對(duì)于上下游資源的運(yùn)營(yíng)和新生技術(shù)生態(tài)的建構(gòu),也尚顯幼稚??梢暬幊瘫M管在發(fā)展過(guò)程中經(jīng)歷了一些挫折,但近年來(lái)所取得的成就也應(yīng)該受到關(guān)注。盡管開(kāi)發(fā)人員對(duì)于代碼的親近和工具的抵觸心理幾乎是無(wú)法解除的魔咒,類(lèi)似于一種精神潔癖。但是如果一款工具足夠完善,勢(shì)必能在技術(shù)層面撼動(dòng)這種固有成見(jiàn)。而當(dāng)更多的開(kāi)發(fā)人員嘗試使用可視化工具,并積極在這一領(lǐng)域探索,可以預(yù)見(jiàn),未來(lái)可視化編程不僅能參與底層的應(yīng)用架構(gòu),還將幫助我們?cè)诟邔哟紊蠈?duì)事物進(jìn)行建模。

2.可視化編程:利用圖形來(lái)創(chuàng)建程序,卻被程序員認(rèn)為是糟糕的想法?

可視化編程語(yǔ)言可以讓程序員通過(guò)操縱圖形元素來(lái)創(chuàng)建程序,而無(wú)需鍵入文本命令。眾所周知的例子是 Scratch,這是一種麻省理工開(kāi)發(fā)的可視化編程語(yǔ)言,用來(lái)教孩子們學(xué)編程。該語(yǔ)言的優(yōu)勢(shì)在于新手和普通用戶可以更容易接觸編程。二十世紀(jì)九十年代曾經(jīng)有一種非常流行的運(yùn)動(dòng),即通過(guò)所謂的 CASE 工具將這類(lèi)工具帶入企業(yè),這些企業(yè)的系統(tǒng)可以通過(guò) UML 進(jìn)定義和生成,而無(wú)需雇傭訓(xùn)練有素的軟件開(kāi)發(fā)人員。這涉及“round tripping”的概念,即通過(guò)可視化的手法為系統(tǒng)建模,根據(jù)模型生成程序代碼,而且任何代碼的變更都可以反向反映到模型上。但最終這些工具未能兌現(xiàn)承諾,而且大多數(shù)這類(lèi)嘗試現(xiàn)在也已基本放棄了。因此,除了一些非常有限的領(lǐng)域外,可視化編程都未能成功。其中的原因基本上可以歸于以下幾種對(duì)編程的誤解:(1)文本編程語(yǔ)言混淆了本質(zhì)上很簡(jiǎn)單的過(guò)程。(2)抽象和解耦是外圍問(wèn)題,對(duì)編程的意義不大。(3)為支持編程而開(kāi)發(fā)的工具并不重要。誤解一:文本編程語(yǔ)言混淆了編程本質(zhì)第一個(gè)誤解認(rèn)為軟件開(kāi)發(fā)的門(mén)檻很高,因?yàn)槲谋揪幊陶Z(yǔ)言混淆了編程的本質(zhì)。Scratch 在教育學(xué)家中的流行就屬于這種誤解。該觀點(diǎn)認(rèn)為編程實(shí)際上非常簡(jiǎn)單,我們只需通過(guò)清晰的圖形來(lái)表現(xiàn),就可以大大降低創(chuàng)建和閱讀軟件所需的學(xué)習(xí)曲線和努力程度。我認(rèn)為這種誤解是因?yàn)橛行┤宋茨苷嬲x懂用標(biāo)準(zhǔn)的文本編程語(yǔ)言編寫(xiě)的程序,并想象可以將程序轉(zhuǎn)換成盒子和箭頭等圖形元素。如果你這樣做,很快就會(huì)發(fā)現(xiàn)一行代碼經(jīng)常需要映射到多個(gè)盒子上,一個(gè)簡(jiǎn)單的程序包含數(shù)百行代碼的情況是常態(tài),因此這將轉(zhuǎn)化為成百上千個(gè)圖形元素。在頭腦中理解如此復(fù)雜的圖形往往比閱讀同等的文本更加困難。在這個(gè)問(wèn)題上,大多數(shù)可視化編程語(yǔ)言的解決方案是使用“塊”來(lái)代表更為復(fù)雜的操作,從而可以讓每個(gè)可視化元素都代表一大段文本代碼??梢暬鞒坦ぞ呤亲锟?zhǔn)住?wèn)題是我們需要在某個(gè)地方定義這些代碼。于是,這就成了“屬性對(duì)話編程”。可視化元素本身僅代表最高級(jí)別的程序流程,而大多數(shù)的工作是通過(guò)隱藏在盒子中的標(biāo)準(zhǔn)文本代碼完成。這種做法釀成了現(xiàn)如今兩邊皆難堪的局面。一邊的文本編程語(yǔ)言沒(méi)有現(xiàn)代工具支持。屬性對(duì)話編程通常是低配版的標(biāo)準(zhǔn)開(kāi)發(fā)環(huán)境,而且你必須選擇特定的語(yǔ)言,通常是某種腳本語(yǔ)言。而在另一邊,可視化元素只能等待有經(jīng)驗(yàn)的程序員創(chuàng)建,而且只有通過(guò)閱讀底層的代碼才能讀懂程序,所以大多數(shù)視覺(jué)化表現(xiàn)手法的優(yōu)勢(shì)都喪失了。視覺(jué)上的“代碼”和文本代碼之間存在著阻抗失配,而且程序員必須不斷在兩者之間來(lái)回切換,時(shí)間都浪費(fèi)在滿足圖形編程工具的需求上,而不是解決手頭的問(wèn)題。誤解二:抽象和解耦是外圍問(wèn)題因此才有了第二個(gè)誤解,即抽象和解耦是外圍問(wèn)題。可視化編程假設(shè)大多數(shù)程序都是簡(jiǎn)單的程序序列,有點(diǎn)像流程圖。實(shí)際上,這也是大多數(shù)新手程序員想象的軟件工作原理。然而,一旦程序的規(guī)模超出了簡(jiǎn)單的示例,新手程序員很快就會(huì)被復(fù)雜性壓垮。他們發(fā)現(xiàn)很難推斷程序的代碼庫(kù),而且常常難以大規(guī)模地創(chuàng)建穩(wěn)定又高效的軟件。編程語(yǔ)言中的大多數(shù)創(chuàng)新都是為了管理復(fù)雜性,最常見(jiàn)的是通過(guò)抽象、封裝和解耦。面向?qū)ο蠛秃瘮?shù)式編程中所有類(lèi)型的系統(tǒng)和裝置實(shí)際上都是為了努力控制這種復(fù)雜性。大多數(shù)專(zhuān)業(yè)程序員會(huì)持續(xù)不斷地抽象和解耦代碼。實(shí)際上,好代碼和差代碼之間的本質(zhì)區(qū)別也在于此??梢暬幊坦ぞ吆苌贀碛杏行У臋C(jī)制來(lái)執(zhí)行這些操作,而開(kāi)發(fā)人員也必將陷入二十世紀(jì)七十年代 BASIC 的漩渦中。誤解三:為支持編程而開(kāi)發(fā)的工具并不重要最后一個(gè)誤解是即使沒(méi)有現(xiàn)代編程工具的支持,可視化程序員也可以編程。想想代碼編輯器和 IDE 漫長(zhǎng)的演變過(guò)程。例如,Visual Studio 支持高效的智能感知,可以單獨(dú)查找基類(lèi)庫(kù)中數(shù)千個(gè) API。缺乏良好的源代碼控制是絕大多數(shù)可視化編程工具的另一個(gè)主要的缺點(diǎn)。即使這些可視化工具的布局保存為文本的格式,代碼的差異也毫無(wú)可讀性可言,因此毫無(wú)意義。我們很難從大塊的 XML 或 JSON 找出每行代碼的修改來(lái)源。一些對(duì)程序的功能執(zhí)行沒(méi)有任何影響的因素,比如圖形元素的位置和大小,也會(huì)導(dǎo)致元數(shù)據(jù)的變化,這讓解析差異變得更加困難。文本編程語(yǔ)言知道將不同的代碼保存到不同的源代碼文件中,因此系統(tǒng)某一部分的變更很容易與另一部分的變更合并。可視化編程工具通常會(huì)將每個(gè)圖表保存在一個(gè)文件中,這意味著合并也會(huì)成問(wèn)題,當(dāng)遇到難以解析差異的語(yǔ)義時(shí),難度會(huì)更大??傊?,可視化編程工具提供的優(yōu)勢(shì),即簡(jiǎn)化程序的創(chuàng)建和理解只是一個(gè)海市蜃樓。只有在非常簡(jiǎn)單的編程中才可行,在這種不理想的形勢(shì)下,最好的結(jié)果也不過(guò)是說(shuō):可視化元素是具有混淆副作用的文本代碼的容器。補(bǔ)充說(shuō)明可能在第一段中加上 Scratch 的截圖并用作主要示例是錯(cuò)誤的做法。我不是一名教育工作者,我不知道 Scratch 是否可以作為一種有效的教學(xué)工具。許多人提到,Scratch 在編程教學(xué)方面非常有用,特別是對(duì)兒童而言。任何可以引導(dǎo)人們進(jìn)入精彩紛呈的編程世界的東西,我都?xì)g迎。我并不想通過(guò)這篇文章抨擊 Scratch,提到它只是因?yàn)樗谴蠖鄶?shù)人都聽(tīng)過(guò)的最有名的可視化編程系統(tǒng)。有人在 Reddit 上提到的另一個(gè)反面例子是靜態(tài)結(jié)構(gòu)工具,例如 UI 設(shè)計(jì)工具、數(shù)據(jù)庫(kù)模式設(shè)計(jì)工具或類(lèi)設(shè)計(jì)工具。我同意這些工具非常有用。任何有助于可視化數(shù)據(jù)結(jié)構(gòu)、或程序的大規(guī)模結(jié)構(gòu)的工具都是好東西。但這些不足以支撐他們的論點(diǎn)。 等 90 個(gè)試圖通過(guò)在圖形可視化之上構(gòu)建工具,來(lái)開(kāi)發(fā)出一個(gè)完全不用寫(xiě)代碼的開(kāi)發(fā)環(huán)境,可是最終都失敗了,這恰恰證明了我的觀點(diǎn)。你如何看待可視化編程?針對(duì)可視化編程并不是理想的想法,評(píng)論區(qū)的不少網(wǎng)友也發(fā)表了不一樣的看法:評(píng)論1:你混淆了圖形數(shù)據(jù)流語(yǔ)言(帶有隱藏選項(xiàng)框和連接這些框的箭頭)與Scratch。Scratch 是一種文本語(yǔ)言,里面的程序語(yǔ)句和類(lèi)型是預(yù)定義的形狀,可以消除語(yǔ)法錯(cuò)誤。你無(wú)法在 Scratch 中犯語(yǔ)法錯(cuò)誤,因?yàn)檫@些框無(wú)法組合在一起。 除了這種語(yǔ)法幫助之外,Scratch 不會(huì)隱藏任何內(nèi)容,并且格式也與純文本語(yǔ)言沒(méi)有差別。也就是說(shuō),我同意你說(shuō)的有關(guān)其他教學(xué)語(yǔ)言的大部分內(nèi)容,例如用于 Lego 機(jī)器人套件的語(yǔ)言。該語(yǔ)言源自 LabView,大多數(shù)初學(xué)者發(fā)現(xiàn)很難超越幾個(gè)塊或連接變量之類(lèi)的東西。我的猜測(cè)是,一種能夠通過(guò)變量賦值來(lái)達(dá)到復(fù)雜性障礙的語(yǔ)言并不能很好地?cái)U(kuò)展:-)。評(píng)論 2:我認(rèn)為你的文章的出發(fā)點(diǎn)不正確,因?yàn)榭梢暬幊谈静皇菫槌绦騿T準(zhǔn)備的。對(duì)此,你怎么看?歡迎下方留言,分享你的看法!原文:

3.超級(jí)好用的 Java 數(shù)據(jù)可視化庫(kù):Tablesaw

本文作者:-秦人 本文適合剛學(xué)習(xí)完 Java 語(yǔ)言基礎(chǔ)的人群,跟著本文可了解和使用 Tablesaw 項(xiàng)目。示例均在 Windows 操作系統(tǒng)下演示 推出的《講解開(kāi)源項(xiàng)目》系列,今天給大家?guī)?lái)一款基于 Java 語(yǔ)言的數(shù)據(jù)可視化庫(kù)開(kāi)源項(xiàng)目——Tablesaw Tablesaw是一款 Java 的數(shù)據(jù)可視化庫(kù)。它主要包括兩部分:一部分是數(shù)據(jù)解析庫(kù),另一部分是數(shù)據(jù)可視化庫(kù)。數(shù)據(jù)解析庫(kù)主要是加載數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行操作(轉(zhuǎn)化,過(guò)濾,匯總等)。數(shù)據(jù)可視化庫(kù)就是將目標(biāo)數(shù)據(jù)轉(zhuǎn)化為可視化的圖表。 項(xiàng)目源碼地址: 的項(xiàng)目父級(jí)項(xiàng)目,主要定義項(xiàng)目打包的配置。beakerx:tablesaw 庫(kù)的注冊(cè)中心,主要注冊(cè)表和列。core:tablesaw 庫(kù)的核心代碼,主要是數(shù)據(jù)的加工處理操作:數(shù)據(jù)的追加,排序,分組,查詢等。data:項(xiàng)目測(cè)試數(shù)據(jù)目錄。docs:項(xiàng)目 MarkDown 文檔目錄。docs-src:項(xiàng)目文檔源碼目錄,主要作用是生成 MarkDown 文檔。excel:解析 excel 文件數(shù)據(jù)的子項(xiàng)目。html:解析 html 文件數(shù)據(jù)的子項(xiàng)目。json:解析 json 文件數(shù)據(jù)的子項(xiàng)目。jsplot:數(shù)據(jù)可視化的子項(xiàng)目,主要作用加載數(shù)據(jù)生成可視化圖表。saw:tablesaw 讀寫(xiě)圖表數(shù)據(jù)的子項(xiàng)目。二、實(shí)戰(zhàn)操作2.1 準(zhǔn)備工作項(xiàng)目中引入 Tablesaw 依賴包<> <groupId>tech.tablesaw</groupId> <>tablesaw-core</> <version>LATEST</version> </>2.2 數(shù)據(jù)解析2.2.1 內(nèi)部數(shù)據(jù)制作數(shù)據(jù)表格@Test public void () { String[] students = {"小明", "李雷", "小二"}; double[] scores = {90.1, 84.3, 99.7}; Table table = Table.create("學(xué)生分?jǐn)?shù)統(tǒng)計(jì)表").( .create("姓名", students), .create("分?jǐn)?shù)", scores)); System.out.println(table.print()); }代碼超級(jí)簡(jiǎn)單,首先定義要展示列數(shù)據(jù) students 和 scores。然后創(chuàng)建數(shù)據(jù)展示的 table 定義表格名稱,添加表格列數(shù)據(jù)即可。效果展示如下:2.2.2 加載數(shù)據(jù)文件制作數(shù)據(jù)表格@Test public void () throws Exception{ Table table = Table.read().csv("/data/bush.csv"); Table = table.("who"); .(.DOUBLE) .forEach(x -> (() x).( .percent(0))); System.out.println(.toString()); }首先 Table.read 加載數(shù)據(jù)文件,加載數(shù)據(jù)支持 csv、數(shù)據(jù)庫(kù)結(jié)果集、文件、URL 等指定表格 x 軸的字段,并對(duì) 數(shù)據(jù)進(jìn)行百分比數(shù)據(jù)的轉(zhuǎn)化。bash.csv 文件內(nèi)容如下:運(yùn)行效果如下:2.3 數(shù)據(jù)可視化Table robberies = Table.read().csv("./data/boston-robberies.csv"); Plot.show( AreaPlot.create( "Boston Robberies by month: Jan 1966-Oct 1975", robberies, "Record", "Robberies"));首先加載數(shù)據(jù) Table.read,繪制圖表 AreaPlot.create ,然后 Plot.show 在本地生成圖表的 html 頁(yè)面,自動(dòng)打開(kāi)瀏覽器顯示。boston-robberies.csv 文件內(nèi)容如下:運(yùn)行效果如下:Tablesaw 還可以繪制出很多種類(lèi)的圖表,期待你的發(fā)掘。三、最后教程至此,你應(yīng)該對(duì) Tablesaw 有一個(gè)簡(jiǎn)單的了解。這里告訴大家一個(gè)方法,可以快速掌握開(kāi)源庫(kù):在源碼中找項(xiàng)目的單元測(cè)試代碼。然后,我們?cè)賹㈨?xiàng)目導(dǎo)入開(kāi)發(fā)工具,直接運(yùn)行項(xiàng)目中的單元測(cè)試。 這是可能是最快捷、有效的掌握、上手開(kāi)源庫(kù)的方法。本教程是針對(duì)有一定 Java 編程基礎(chǔ),如果你的項(xiàng)目正好需要數(shù)據(jù)可視化的庫(kù),Tablesaw 庫(kù)是個(gè)不錯(cuò)的選擇!『講解開(kāi)源項(xiàng)目系列』——讓對(duì)開(kāi)源項(xiàng)目感興趣的人不再畏懼、讓開(kāi)源項(xiàng)目的發(fā)起者不再孤單。跟著我們的文章,你會(huì)發(fā)現(xiàn)編程的樂(lè)趣、使用和發(fā)現(xiàn)參與開(kāi)源項(xiàng)目如此簡(jiǎn)單。歡迎留言聯(lián)系我們、加入我們,讓更多人愛(ài)上開(kāi)源、貢獻(xiàn)開(kāi)源~

上述文章了解到關(guān)于可視化編程之罪 —— 可視化編程是否真的沒(méi)有未來(lái)?,可視化編程:利用圖形來(lái)創(chuàng)建程序,卻被程序員認(rèn)為是糟糕的想法?,超級(jí)好用的 Java 數(shù)據(jù)可視化庫(kù):Tablesaw?? ,讓我們對(duì)java可視化編程 有一個(gè)直觀的認(rèn)知。我們發(fā)現(xiàn),作為一個(gè)優(yōu)秀的Java程序員是多么的自豪。

溫馨提示:為不影響您的學(xué)業(yè),來(lái)校區(qū)前請(qǐng)先電話咨詢,方便我校安排相關(guān)的專(zhuān)業(yè)老師為您解答
  • 熱門(mén)課程
  • 作者最新文章
  • 在線報(bào)名
申請(qǐng)?jiān)嚶?tīng)課程

只要一個(gè)電話
我們免費(fèi)為您回電

姓名不能為空
手機(jī)號(hào)格式錯(cuò)誤