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