原創(chuàng)|行業(yè)資訊|編輯:郝浩|2015-04-09 13:15:43.000|閱讀 2657 次
概述:這個(gè)世界是辯證統(tǒng)一的,正如太極所表現(xiàn)的那樣,共存的陰陽(yáng)兩極既有對(duì)抗,又有融合。在現(xiàn)實(shí)生活中,共存事物間的對(duì)抗也是無(wú)處不在。本篇文章將講述在軟件開(kāi)發(fā)領(lǐng)域的10場(chǎng)有意思的對(duì)抗。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
這個(gè)世界是辯證統(tǒng)一的,正如太極所表現(xiàn)的那樣,共存的陰陽(yáng)兩極既有對(duì)抗,又有融合。在現(xiàn)實(shí)生活中,共存事物間的對(duì)抗也是無(wú)處不在。比如,同為冷兵器的矛與盾之間的對(duì)抗,是最鋒利的矛厲害還是最堅(jiān)固的盾厲害?同為佳肴的魚(yú)與熊掌之間的對(duì)抗,魚(yú)和熊掌不可兼得,是代表海味的魚(yú)好還是代表山珍的熊掌好?
同樣的,在軟件開(kāi)發(fā)領(lǐng)域,這樣的對(duì)抗依然在上演。
PHP絲毫不受計(jì)算機(jī)科學(xué)家的待見(jiàn),卻深受那些只想用一丁點(diǎn)腦力就能完成Web開(kāi)發(fā)的大眾群體所喜愛(ài)。這群人帶來(lái)了令人驚嘆的框架,如WordPress、Drupal、Joomla等等。大部分的網(wǎng)站都是基于PHP技術(shù)所創(chuàng)建的。
現(xiàn)在,大伙們?cè)诩夹g(shù)的選擇上出現(xiàn)了分歧。年輕一代的人開(kāi)始迷戀Node.js技術(shù)了,這是一種由JavaScript編寫(xiě)的服務(wù)器端機(jī)制。JavaScript的出現(xiàn),使程序員們發(fā)現(xiàn)自己寫(xiě)的代碼既能運(yùn)行在客戶(hù)端也能運(yùn)行在服務(wù)器端,自己再也不用學(xué)兩種不同的語(yǔ)言了。Node.js擁有自己的特點(diǎn),但是它所提供的那些功能與最好的PHP堆棧所提供的其實(shí)基本一致。
下一代程序員會(huì)接受只用JavaScript來(lái)簡(jiǎn)單編寫(xiě)的新技術(shù)么?或者他們會(huì)依靠HTML使代碼更易于嵌入?那些喜歡JavaScript的人幾乎肯定都會(huì)選擇Node,而那些使用PHP穩(wěn)定堆棧如WordPress或Drupal來(lái)處理重活的人則會(huì)抵制Node.js風(fēng)暴所帶來(lái)的影響。
兩大開(kāi)放源代碼數(shù)據(jù)庫(kù)無(wú)休止的戰(zhàn)斗已經(jīng)持續(xù)了快20年了。一方面,MySQL因其易于安裝和配置的特性在Web的基礎(chǔ)工作中已經(jīng)占據(jù)了大部分份額。另一方面,PostgreSQL擁有在故障中保護(hù)數(shù)據(jù)的更好機(jī)制。現(xiàn)在,兩者都在迅速改善自己不足之處,MySQL提供了改進(jìn)的事務(wù)處理功能,而PostgreSQL簡(jiǎn)化了自身的啟動(dòng)流程。
兩者在很久以前存在著的差異性仍然在影響著今天的戰(zhàn)線,PostgreSQL被認(rèn)為更“可靠”而MySQL則被認(rèn)為是更“快速”。這是一種先入為主的思想,正如當(dāng)今的時(shí)髦黑客和討厭Oracle的人常會(huì)選擇PostgreSQL那樣,這兩個(gè)競(jìng)爭(zhēng)對(duì)手可能還需要另一個(gè)20年才能改變這種思想在用戶(hù)中的影響。
蘋(píng)果這些年只用Objective-C來(lái)為其進(jìn)行定制開(kāi)發(fā),這是一門(mén)干凈,混合了C語(yǔ)言的面向?qū)ο蟮木幊陶Z(yǔ)言。但是,現(xiàn)在時(shí)代變了,Swift提供了一套現(xiàn)代化的語(yǔ)法免除了在蘋(píng)果平臺(tái)構(gòu)建代碼的程序員的許多煩惱。當(dāng)然,那些從小就學(xué)習(xí)了C語(yǔ)言的人并不介意復(fù)雜語(yǔ)法與多文件,但是那些由Python、Ruby甚至是Java入門(mén)的人卻對(duì)此抱怨頗深。
Swift的整潔結(jié)構(gòu)會(huì)抓住蘋(píng)果開(kāi)發(fā)者的心么?Python和Ruby的開(kāi)發(fā)者會(huì)涌向iOS開(kāi)發(fā)領(lǐng)域并擠掉那些保守的Objective-C程序員的生存空間么? 或者這個(gè)世界會(huì)被那些Objective-C程序員的可靠驚人效率所征服?蘋(píng)果曾公開(kāi)表示這兩門(mén)語(yǔ)言能夠共存,那么新的庫(kù)和特性是用Swift還是Objective-C來(lái)編寫(xiě)?開(kāi)發(fā)者們將會(huì)通過(guò)熟悉的語(yǔ)言來(lái)分成不同的集群,那些喜歡Python或者Java的將會(huì)轉(zhuǎn)到Swift,而從小與C一起長(zhǎng)大的將會(huì)堅(jiān)持使用Objective-C。
很久以前,對(duì)于軟件來(lái)說(shuō)腳本語(yǔ)言就像萬(wàn)能膠。如果你需要把大項(xiàng)目粘合在一起,你可以在操作系統(tǒng)中編寫(xiě)簡(jiǎn)單的腳本代碼就可以完成。
在這個(gè)過(guò)程中的某個(gè)時(shí)候,那些喜歡擺弄這些小巧語(yǔ)言的人們發(fā)現(xiàn)用它們構(gòu)建大型程序也是非常有用的。當(dāng)Ruby與Rails框架聯(lián)姻之后,這個(gè)組合瞬間火爆了——它們把一個(gè)復(fù)雜的數(shù)據(jù)庫(kù)前端簡(jiǎn)化得只有少量幾段代碼了。
與此同時(shí),Python在科學(xué)領(lǐng)域建立了它的粉絲俱樂(lè)部。它被廣泛運(yùn)用于每個(gè)地方的實(shí)驗(yàn)室,伴隨著統(tǒng)計(jì)學(xué)理論在企業(yè)界各個(gè)角落的破殼而出,尖端的Python被認(rèn)為是獲得商業(yè)領(lǐng)域數(shù)據(jù)科學(xué)實(shí)驗(yàn)的動(dòng)力。
下一代的程序員會(huì)被使用空格進(jìn)行代碼設(shè)計(jì)的Python的簡(jiǎn)潔所吸引么?Ruby的擴(kuò)張速度會(huì)超過(guò)Rails么?Python的內(nèi)置函數(shù)比Ruby的“塊”更好?與那些科學(xué)家或者Web黑客站在同一陣線看起來(lái)是否更酷?或許是積習(xí)難改,那些網(wǎng)站的站長(zhǎng)現(xiàn)在仍然堅(jiān)持使用Rails,而科學(xué)家們則只對(duì)Python的庫(kù)情有獨(dú)鐘。
道路的一側(cè)是你的先輩們過(guò)去就曾使用的數(shù)據(jù)庫(kù)——數(shù)據(jù)很好的融入表格之中,數(shù)據(jù)庫(kù)執(zhí)行外部查詢(xún)來(lái)與表格進(jìn)行匹配并找到正確的行數(shù)。道路的另一側(cè)是突然崛起的NoSQL,它注重速度與并行性,當(dāng)事情可能變得更糟糕的時(shí)候它會(huì)每隔一段時(shí)間發(fā)出一些小的警告,數(shù)據(jù)庫(kù)將會(huì)從錯(cuò)誤中回退并重新作出不同的操作。
使用傳統(tǒng)事務(wù)保護(hù)機(jī)制的傳統(tǒng)數(shù)據(jù)庫(kù)“腰帶+吊帶”式的處理方法是你的數(shù)據(jù)所需要的東西?或者你需要一個(gè)在計(jì)算機(jī)集群中能夠有效的將負(fù)載進(jìn)行均衡擴(kuò)散的更快更便宜更時(shí)髦的工具?穩(wěn)定性與準(zhǔn)確性對(duì)銀行業(yè)來(lái)說(shuō)固然很重要的,但那些來(lái)自網(wǎng)絡(luò)上喋喋不休的廢話它也需要么?是否所有行業(yè)都需要得到數(shù)據(jù)科學(xué)家那種層次的保護(hù)?這些問(wèn)題通常的答案會(huì)是:那些需要絕對(duì)穩(wěn)定性的行業(yè)如銀行業(yè)和航空業(yè)在處理事務(wù)時(shí)應(yīng)當(dāng)使用傳統(tǒng)的SQL數(shù)據(jù)庫(kù),而其它那些無(wú)此特定需求的行業(yè)可以選擇使用快速、簡(jiǎn)單、可擴(kuò)展的NoSQL。
在谷歌這個(gè)地方JavaScript也有自己的粉絲,但是你可能還不知道它還常被其它語(yǔ)言不斷替代實(shí)現(xiàn)。最早的時(shí)候,谷歌推出了GWT(Google Web Toolkit),這是一種聰明的跨平臺(tái)編譯器,能夠把Java轉(zhuǎn)化成JavaScript。但是,如果你曾經(jīng)看到過(guò)Gmail或者谷歌其它產(chǎn)品的代碼堆棧,你會(huì)發(fā)現(xiàn)它們并不完全是用JavaScript實(shí)現(xiàn)的。在稍晚的時(shí)候,谷歌創(chuàng)造了Dart和Go。這是兩種可能在未來(lái)某天在瀏覽器上完全取代JavaScript的語(yǔ)言。
Dart和Go在各自領(lǐng)域都有其獨(dú)特的用處。它們修復(fù)了使用JavaScript和瀏覽器堆棧的一些主要突出但是卻不被許多人在意的問(wèn)題。而由于Node.js的原因,JavaScript在服務(wù)器端異?;鸨?,人們已經(jīng)不再需要其它東西了。
為了掌握絕對(duì)的權(quán)力,谷歌將面臨著一場(chǎng)與大批曾經(jīng)學(xué)習(xí)了JavaScript而現(xiàn)在想要用它重寫(xiě)服務(wù)器堆棧的程序員大軍之間的艱苦斗爭(zhēng)。要戰(zhàn)勝習(xí)慣是非常困難的,但是那些從早期就深刻體會(huì)到Dart和Go干凈語(yǔ)法和簡(jiǎn)化模型的最佳體驗(yàn)者所發(fā)出的贊美將會(huì)成為大眾不可忽略的聲音。
很久以前,公司在后臺(tái)擁有很少的服務(wù)器,并且安裝新的軟件都非常簡(jiǎn)單。后來(lái),隨著云技術(shù)的興起,為了保持網(wǎng)站的持續(xù)運(yùn)轉(zhuǎn),需要將所有有價(jià)值的東西放在集群設(shè)備上。這就意味著做N件事情就會(huì)訪問(wèn)N個(gè)設(shè)備,彼此之間不會(huì)產(chǎn)生干擾。Chef和Puppet是為了幫助管理員像流水線一樣配置云設(shè)備而出現(xiàn)的兩個(gè)工具。
開(kāi)發(fā)運(yùn)營(yíng)專(zhuān)家專(zhuān)注于Chef,這個(gè)配置管理工具擁有一流的靈活性——能夠讓你用Ruby來(lái)編寫(xiě)創(chuàng)建設(shè)備的指令。他們說(shuō):“你能夠無(wú)償?shù)墨@得Ruby的力量。”P(pán)uppet也被用于集群的配置, 但是用于指定做某事的指令是由類(lèi)似于JSON一樣的語(yǔ)言發(fā)出的。雖然Puppet的幾個(gè)新版本支持一點(diǎn)Ruby了,但是基礎(chǔ)語(yǔ)言仍然占據(jù)著統(tǒng)治地位。那么,到底是為工作創(chuàng)建自定義語(yǔ)法更好呢還是給予人們完全開(kāi)放、用途廣泛的語(yǔ)言的權(quán)力(或者危險(xiǎn))更好?
持續(xù)性集成是一個(gè)通過(guò)自動(dòng)測(cè)試將所有全新代碼部署到存儲(chǔ)庫(kù)中的想法。當(dāng)這個(gè)想法獲得很大成功之后,人們開(kāi)始爭(zhēng)奪它所帶來(lái)的利益。
戰(zhàn)場(chǎng)的一邊是Hudson,它是Eclipse基金會(huì)正式項(xiàng)目的一部分,是由收購(gòu)了Sun公司的Oracle所管理的那個(gè)分支。他們用一流的企業(yè)態(tài)度來(lái)構(gòu)建企業(yè)需求使用的穩(wěn)定、嚴(yán)肅的工具。而另一邊是Jenkins,它是原Hudson的另外一個(gè)分支,現(xiàn)在它是那些眾多從很早就開(kāi)始玩技術(shù)的黑客的家。Jenkins這顆大樹(shù)成長(zhǎng)非常迅速,它的最新版本基本每個(gè)星期就會(huì)發(fā)布一次。
Hudson和Jenkins的戰(zhàn)場(chǎng)可以看作是開(kāi)發(fā)者世界里更大規(guī)模戰(zhàn)場(chǎng)的象征,是堅(jiān)定奉行謹(jǐn)慎測(cè)試、穩(wěn)固代碼的面向企業(yè)理念與更快發(fā)展、更快Bug修復(fù)、面向更多用戶(hù)群體理念之間的對(duì)抗。
說(shuō)到由于Oracle收購(gòu)所引發(fā)的戰(zhàn)斗,我們不能不提到MariaDB與MySQL之間的分裂。
當(dāng)Oracle買(mǎi)下了MySQL后,開(kāi)源的支持者們開(kāi)始擔(dān)心這個(gè)強(qiáng)大的工具會(huì)成為Oracle公司私有的賺錢(qián)手段。他們的擔(dān)心是多余的,但這并不能阻止MySQL創(chuàng)始人之一Monty Widenius另起灶臺(tái)。在MariaDB擁護(hù)者眼里,MariaDB除了擁有與MySQL同樣的語(yǔ)法和功能,還包含了一些全新特性,甚至存儲(chǔ)引擎運(yùn)行速度更快一些。
未來(lái)的市場(chǎng)將會(huì)選擇充滿(mǎn)活力的新事物還是堅(jiān)持選擇龐大并在這些年里占據(jù)著主導(dǎo)地位的數(shù)據(jù)庫(kù)?這個(gè)世界會(huì)鐘情于矮小且衣衫襤褸的創(chuàng)新者還是龐大穩(wěn)定而可靠的成功者?我們將拭目以待。
在即時(shí)編譯器和優(yōu)化器面前,編譯語(yǔ)言和腳本代碼之間的區(qū)別并不明顯,但是這點(diǎn)對(duì)程序員們來(lái)說(shuō)仍然很重要。一種是代碼邏輯性更強(qiáng),需要反復(fù)揣摩,優(yōu)化,更接近于底層機(jī)器邏輯處理的語(yǔ)言;另一種是開(kāi)發(fā)更加直觀容易,甚至可讓計(jì)算機(jī)在代碼在運(yùn)行時(shí)修改自身代碼的語(yǔ)言。
前者的代表都是一些傳統(tǒng)的語(yǔ)言,如C和Java,它們都擁有精心設(shè)計(jì)的開(kāi)發(fā)套件。而后者的代表都是一些結(jié)構(gòu)簡(jiǎn)單的語(yǔ)言,如Python、Ruby和JavaScript,它們能夠在文本編輯器中創(chuàng)建并可隨時(shí)放入小型運(yùn)行環(huán)境中進(jìn)行解譯。對(duì)于解決更加復(fù)雜的問(wèn)題,它們擁有混合的解決方案,如Groovy,這是一種腳本編譯混合類(lèi)語(yǔ)言,它能夠運(yùn)行在Java虛擬機(jī)上,而它自身是一個(gè)能夠進(jìn)行大量實(shí)時(shí)優(yōu)化的工具。編譯語(yǔ)言與腳本語(yǔ)言的區(qū)別正在慢慢模糊,但是這仍然阻止不了人們對(duì)于復(fù)雜的編譯程序工作是否真的值得去做的爭(zhēng)論。
本文翻譯自 譯者:回憶和感動(dòng),轉(zhuǎn)載請(qǐng)注明:本文轉(zhuǎn)載自慧都控件網(wǎng)
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn