知乎專欄 | 多維度架構 | 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者” |
語言只是一個工具,一種實現我們需要的工具,每種每言都有它的優點和缺點和,在不同領域發揮各自的長處,並且都有它存在的意義。
語言不段地發展,市場決定它們是生存還是沒落走向死亡。只有最活越,生命力強的語言才能生存下來。.net與java後面是強大的財團做後盾,大量被捆綁的客戶支持他,並有完備的客服,從商業角度選擇它是沒有錯誤的。
但不要拘泥與語言,使用你最熟悉的語言,選擇你最擅長的資料庫和操作系統。
目前大型網站都不會單一選擇一種語言和資料庫,一種操作系統。例如:
像php/perl/python這種動態語言,開發速度快,周期端,對伺服器性能要求低,出錯率低,他們的設計這希望它能儘量使代碼運行下去, 而不是拋出異常,終止執行或崩潰。而行對於開發者要求門檻比較低。 php 無論怎麼開發都不會使web server 崩潰。而 Java 則不同,很容易崩潰。
Java 我認為java是個非常不錯的語言,錯在JVM上。這是一個垃圾的解釋器,效率極差。不加優化的,把所有東東全部load進內存。採用java技術,開發成本相當高,對開發人員要求很高,而且需要一個穩定的團隊。國內資深java開發人員大多轉向管理層。 只有細心的人才能駕馭Java,否則不能保證軟件質量,我在工作中發現php團隊開發的代碼質量明顯比java高,bug 數量上比Java代碼的 bug少很多。 我個人認為少於5年工作經驗程序員很難寫出一流的Java程序。 Java 架構最不能容忍的是有時不得不restart才能生效。而寫的很爛程序你不得不採用restart來保證系統正常。
.net 不是很熟悉,.net 開發環境最好,速度比java快,只要有錢,全用正版,選擇微軟的產品很不錯。很多linux愛好者鄙視M$, 對windows系統很有很大偏見,偏激。 window系統很穩定,並非像網上傳的那樣不堪一擊,很多引起windows崩潰的原因是硬件問題。我在工作中發現國產伺服器在板卡介面上做工不過關。 沒有鍍金或防氧化處理,導致內存丟失,cpu丟失,RAID丟失... 等等引起系統崩潰。但linux系統確能運行下去,不過一旦重啟,將不能恢復。
http://en.wikipedia.org/wiki/Middleware
很多人談到java就會涉及到三層架構即:web 容器 -> application server 應用伺服器,中間件 ->資料庫
三層架構其實不是什麼新鮮東西,J2EE僅僅是對象請求代理體繫結構的一種,任何語言都能實現三層架構。中間件不是Java專利
編譯執行的語言基本都支持Corba
python 則有Zope,Zope是一個很成功App Server。足以比肩J2EE. python 也支持corba庫,我嘗試過python -> corba -> PostgreSQL.但性能不佳。
php/perl 一樣可做到,採用SOAP,XML-RPC等技術,可以實現部分功能。但我們可以在架構上做些改變。
總之,不要拘泥于三層架構,僅僅是實現方式的一種。沒有最合理,也沒有最好的,根據你的需求作出調整,最終是看結果,而不是實現過程。
中間件的概念
/--> app server ---\ web ---> ---> app server ----> Database \--> app server ---/
php 分層
/--> web server ---\ load balance ---> --> web server ----> -> Database \--> web server ---/ /--> web server ---\ /--> app server ---\ load balance ---> --> web server ----> -- SOAP/XMLRPC--> --> app server ----> Database \--> web server ---/ \--> app server ---/
你可以採用覆核型架構,我曾經就做過這樣的項目php -> soap -> .net framework
/--> module ---\ apache ---> php ----> module ----> MySQL Database \--> module ---> soap ---> IIS ---> DCOM ---> C# script ---> SQL Server \-> module ---> tomcat ---> jasper report ---> Oracle
我們系統有一個需求是,在php中創建word,excel文檔,編輯文檔,比較文檔..., 我們需要調用office.dll實現
同時我們有一個報表系統,是通過jasper report 實現的
另外fastcgi
.--> fastcgi process ---. / \ web server ---> ---> fastcgi process -----> Database \ / `--> fastcgi process----'
雲計算還是個概念,但在雲計算大潮中,不支持雲計算,顯得沒有技術含量。
被網絡炒得“神乎其神”。起初我誤以為是分散式計算的下一代,後來發現和分散式計算根本兩個不同的東西。與網格計算/分散式計算扯不上邊。
"雲計算"這個詞已經被氾濫使用,
比較靠譜是亞馬遜EC2 其實就是一堆Xen虛擬機, Dell說他的刀片伺服器是雲計算,Vmware 也說是雲計算,Oracle 說他的VirtualBox是雲計算,說ZFS是雲存儲。我也說不清楚,自己斟酌。
沒有真正的跨平台語言,所謂跨平台都是忽悠人。
只要提供不同平台的編譯器加條件編譯,即可實現跨平台。或提供不同平台的解釋器,也可一實現跨平台。
例如大家都很看中Java的跨平台,但想一下,這個“跨平台”是要打引號的,實際上這個跨平台準確的說是跨Sun提供的標準JVM平台,而非OS平台。只要某個JVM支持某個OS,你的程序才可以跨過去。如果JVM不支持這個OS平台,Sorry,你的程序不可能跨過去。 不信你去java.sun.com下載jre你會發現僅僅提供四個平台版本Linux,Mac OS X,Solaris,Windows
很多OS都不支持Java。如FreeBSD 就不支持Java,必須使用Linux glib 運行Java,效率很低,IBM用的是IBM 自己開發 JVM 至於他和Sun Java有什麼關係,可能是授權。
只要能讓你的程序翻譯成JVM位元組碼,你的程序就可運行在JVM上。如:
php通過Quercus(http://quercus.caucho.com/)把PHP檔案編譯成.java檔案,讓後javac編譯成class檔案後在一些JavaEE應用容器中運行PHP程序
Jython可以將Python編譯成java檔案
JRuby可以將Ruby編譯成java檔案
虛擬機並非只有JVM,還有Parrot, Perl6 就是在Parrot虛擬機上實現的。
另外開發一種新語言也並非難事,只要你有時間精力投入我想不出3年,就可以打造一門新語言。
開發新語言也並非難事,只要你有時間精力投入我想不出3年,就可以打造一門新語言。
錯!
編譯不能保證代碼安全,僅僅能保證你的代碼不被人使用。
但目前中國人力成本相當的便宜,重新實現你的功能邏輯並非難事。所以只要你的網站上線,在很短的時間內就可以出現很多山寨版。
編譯流行的原因是為瞭解決微機的速度以及存儲問題,隨着微機處理器技術突破,你根本不用擔心速度問題。中型機與大型機領域腳本語言站多數。
重用可以減輕勞動,但過分重用,會牽一髮動全身。
尤其對於二次開發者不熟悉你的系統,導致修改一個bug,又產生新的bug。
另外模板也不宜拆分的過于零碎。模本的組裝,需要很多時間並很消耗你的資源。
Mozilla Firefox 及擴展
Web Developer
Firebug 調試必備工具
YSlow 性能分析工具
Live HTTP Headers 相當於HTTP Sniffer嗅探器,可以跟蹤HTTP協議頭,調試cache時比較有用。
IE Tab 用於IE/Firefox之間切換
FoxClocks 如果開發工作跨時區,這個很有用
Foxmarks Bookmark Synchronizer/Weave 將開發資源放入書籤,同時在開發團隊中保持同步
Fasterfox 可以一顯示頁面載入時間,方便頁面優化. 如果安裝了YSlow可以不裝這個插件。
FireFTP
Adblock Plus
flash block
Chat Zilla
Super DragAndGo
開發工具
visual studio 不必多說
eclipse 出身于Java但他不單單是Java開發工具,目前他已經是一個通用的語言IDE,我一直用eclipse寫PHP,Python,Perl還有Docbook XML
TortoiseSVN 版本控制工具.
WinMerge 檔案差異比較與合併 , Beyond Compare 我用過最好的比較合併工具。