❶ 《linux高性能伺服器編程》pdf下載在線閱讀全文,求百度網盤雲資源
《Linux高性能伺服器編程》(游雙)電子書網盤下載免費在線閱讀
鏈接:
書名:Linux高性能伺服器編程
作者:游雙
豆瓣評分:7.9
出版社:機械工業出版社
出版年份:2013-5-1
頁數:360
內容簡介:
本書是Linux伺服器編程領域的經典著作,由資深Linux軟體開發工程師撰寫,從網路協議、伺服器編程核心要素、原理機制、工具框架等多角度全面闡釋了編寫高性能Linux伺服器應用的方法、技巧和思想。不僅理論全面、深入,抓住了重點和難點,還包含兩個綜合性案例,極具實戰意義。
全書共17章,分為3個部分:第一部分對Linux伺服器編程的核心基礎——TCP/IP協議進行了深入的解讀和闡述,包括TCP/IP協議族、TCP/IP協議,以及一個經典的TCP/IP通信案例;第二部分對高性能伺服器編程的核心要素進行了全面深入的剖析,包含Linux網路編程API、高級I/O函數、Linux伺服器程序規范、高性能伺服器程序框架、I/O復用、信號、定時器、高性能I/O框架庫Libevent、多進程編程、多線程編程、進程池和線程池等內容,原理、技術與方法並重;第三部分從側重實戰的角度講解了高性能伺服器的優化與監測,包含伺服器的調制、調試和測試,以及各種實用系統監測工具的使用等內容。
作者簡介:
游雙,資深Linux軟體開發工程師,對Linux網路編程,尤其是伺服器端的編程,有非常深入的研究,實戰經驗也十分豐富。曾就職於摩托羅拉,擔任高級Linux軟體工程師。此外,他還精通C++、Android、QT等相關的技術。活躍於Chinaunix等專業技術社區,發表了大量關於Linux網路編程的文章,深受社區歡迎。
❷ 我為什麼說 python 是大數據全棧式開發語言 怎樣成為數據分析師
就像只要會javaScript就可以寫出完整的Web應用,只要會Python,就可以實現一個完整的大數據處理平台。
雲基礎設施
這年頭,不支持雲平台,不支持海量數據,不支持動態伸縮,根本不敢說自己是做大數據的,頂多也就敢跟人說是做商業智能(BI)。
雲平台分為私有雲和公有雲。私有雲平台如日中天的 OpenStack
,就是Python寫的。曾經的追趕者CloudStack,在剛推出時大肆強調自己是Java寫的,比Python有優勢。結果,搬石砸腳,2015年
初,CloudStack的發起人Citrix宣布加入OpenStack基金會,CloudStack眼看著就要壽終正寢。
如果嫌麻煩不想自己搭建私有雲,用公有雲,不論是AWS,GCE,Azure,還是阿里雲,青雲,在都提供了Python SDK,其中GCE只提供Python和JavaScript的SDK,而青雲只提供Python SDK。可見各家雲平台對Python的重視。
提到基礎設施搭建,不得不提Hadoop,在今天,Hadoop因為其MapRece數據處理速度不夠快,已經不再作為大數據處理的首選,但
是HDFS和Yarn——Hadoop的兩個組件——倒是越來越受歡迎。Hadoop的開發語言是Java,沒有官方提供Python支持,不過有很多第
三方庫封裝了Hadoop的API介面(pydoop,hadoopy等等)。
Hadoop MapRece的替代者,是號稱快上100倍的 Spark ,其開發語言是Scala,但是提供了Scala,Java,Python的開發介面,想要討好那麼多用Python開發的數據科學家,不支持Python,真是說不過去。HDFS的替代品,比如GlusterFS, Ceph 等,都是直接提供Python支持。Yarn的替代者, Mesos 是C++實現,除C++外,提供了Java和Python的支持包。
DevOps
DevOps有個中文名字,叫做 開發自運維 。互聯網時代,只有能夠快速試驗新想法,並在第一時間,安全、可靠的交付業務價值,才能保持競爭力。DevOps推崇的自動化構建/測試/部署,以及系統度量等技術實踐,是互聯網時代必不可少的。
自動化構建是因應用而易的,如果是Python應用,因為有setuptools, pip, virtualenv, tox,
flake8等工具的存在,自動化構建非常簡單。而且,因為幾乎所有Linux系統都內置Python解釋器,所以用Python做自動化,不需要系統預
安裝什麼軟體。
自動化測試方面,基於Python的 Robot Framework 企業級應用最喜歡的自動化測試框架,而且和語言無關。Cucumber也有很多支持者,Python對應的Lettuce可以做到完全一樣的事情。 Locust 在自動化性能測試方面也開始受到越來越多的關注。
自動化配置管理工具,老牌的如Chef和Puppet,是Ruby開發,目前仍保持著強勁的勢頭。不過,新生代 Ansible 和 SaltStack ——均為Python開發——因為較前兩者設計更為輕量化,受到越來越多開發這的歡迎,已經開始給前輩們製造了不少的壓力。
在系統監控與度量方面,傳統的Nagios逐漸沒落,新貴如 Sensu 大受好評,雲服務形式的New Relic已經成為創業公司的標配,這些都不是直接通過Python實現的,不過Python要接入這些工具,並不困難。
除了上述這些工具,基於Python,提供完整DevOps功能的PaaS平台,如 Cloudify 和 Deis ,雖未成氣候,但已經得到大量關注。
網路爬蟲
大數據的數據從哪裡來?除了部分企業有能力自己產生大量的數據,大部分時候,是需要靠爬蟲來抓取互聯網數據來做分析。
網路爬蟲是Python的傳統強勢領域,最流行的爬蟲框架Scrapy,HTTP工具包urlib2,HTML解析工具beautifulsoup,XML解析器lxml,等等,都是能夠獨當一面的類庫。
不過,網路爬蟲並不僅僅是打開網頁,解析HTML這么簡單。高效的爬蟲要能夠支持大量靈活的並發操作,常常要能夠同時幾千甚至上萬個網頁同時抓取,傳統的
線程池方式資源浪費比較大,線程數上千之後系統資源基本上就全浪費在線程調度上了。Python由於能夠很好的支持協程( Coroutine )操作,基於此發展起來很多並發庫,如Gevent,Eventlet,還有Celery之類的分布式任務框架。被認為是比AMQP更高效的ZeroMQ也是最早就提供了Python版本。有了對高並發的支持,網路爬蟲才真正可以達到大數據規模。
抓取下來的數據,需要做分詞處理,Python在這方面也不遜色,著名的自然語言處理程序包NLTK,還有專門做中文分詞的Jieba,都是做分詞的利器。
數據處理
萬事俱備,只欠東風。這東風,就是數據處理演算法。從統計理論,到數據挖掘,機器學習,再到最近幾年提出來的深度學習理論,數據科學正處於百花齊放的時代。數據科學家們都用什麼編程?
如果是在理論研究領域,R語言也許是最受數據科學家歡迎的,但是R語言的問題也很明顯,因為是統計學家們創建了R語言,所以其語法略顯怪異。而且
R語言要想實現大規模分布式系統,還需要很長一段時間的工程之路要走。所以很多公司使用R語言做原型試驗,演算法確定之後,再翻譯成工程語言。
Python也是數據科學家最喜歡的語言之一。和R語言不同,Python本身就是一門工程性語言,數據科學家用Python實現的演算法,可以直
接用在產品中,這對於大數據初創公司節省成本是非常有幫助的。正式因為數據科學家對Python和R的熱愛,Spark為了討好數據科學家,對這兩種語言
提供了非常好的支持。
Python的數據處理相關類庫非常多。高性能的科學計算類庫NumPy和SciPy,給其他高級演算法打了非常好的基礎,matploglib讓
Python畫圖變得像Matlab一樣簡單。Scikit-learn和Milk實現了很多機器學習演算法,基於這兩個庫實現的 Pylearn2 ,是深度學習領域的重要成員。 Theano 利用GPU加速,實現了高性能數學符號計算和多維矩陣計算。當然,還有 Pandas ,一個在工程領域已經廣泛使用的大數據處理類庫,其DataFrame的設計借鑒自R語言,後來又啟發了Spark項目實現了類似機制。
對了,還有 iPython ,這個工具如此有用,以至於我差點把他當成標准庫而忘了介紹。iPython是一個互動式Python運行環境,能夠實時看到每一段Python代碼的結果。默認情況下,iPython運行在命令行,可以執行 ipython notebook 在網頁中運行。用matplotlib繪制的圖可以直接嵌入式的顯示在iPython Notebook中。
iPython Notebook的筆記本文件可以共享給其他人,這樣其他人就可以在自己的環境中重現你的工作成果;如果對方沒有運行環境,還可以直接轉換成HTML或者PDF。
為什麼是Python
正是因為應用開發工程師、運維工程師、數據科學家都喜歡Python,才使得Python成為大數據系統的全棧式開發語言。
對於開發工程師而言,Python的優雅和簡潔無疑是最大的吸引力,在Python互動式環境中,執行 import this
,讀一讀Python之禪,你就明白Python為什麼如此吸引人。Python社區一直非常有活力,和NodeJS社區軟體包爆炸式增長不
同,Python的軟體包增長速度一直比較穩定,同時軟體包的質量也相對較高。有很多人詬病Python對於空格的要求過於苛刻,但正是因為這個要求,才
使得Python在做大型項目時比其他語言有優勢。OpenStack項目總共超過200萬行代碼,證明了這一點。
對於運維工程師而言,Python的最大優勢在於,幾乎所有Linux發行版都內置了Python解釋器。Shell雖然功能強大,但畢竟語法不夠優雅,寫比較復雜的任務會很痛苦。用Python替代Shell,做一些復雜的任務,對運維人員來說,是一次解放。
對於數據科學家而言,Python簡單又不失強大。和C/C++相比,不用做很多的底層工作,可以快速進行模型驗證;和Java相比,Python語法簡
潔,表達能力強,同樣的工作只需要1/3代碼;和Matlab,Octave相比,Python的工程成熟度更高。不止一個編程大牛表達過,Python
是最適合作為大學計算機科學編程課程使用的語言——MIT的計算機入門課程就是使用的Python——因為Python能夠讓人學到編程最重要的東西——
如何解決問題。
❸ 《深入理解Nginx模塊開發與架構解析》pdf下載在線閱讀,求百度網盤雲資源
《深入理解Nginx》(陶輝)電子書網盤下載免費在線閱讀
資源鏈接:
鏈接:
書名:深入理解Nginx
作者:陶輝
豆瓣評分:8.4
出版社:機械工業出版社
出版年份:2013-4-15
頁數:584
內容簡介:
本書是阿里巴巴資深Nginx技術專家嘔心瀝血之作,是作者多年的經驗結晶,也是目前市場上唯一一本通過還原Nginx設計思想,剖析Nginx架構來幫助讀者快速高效開發HTTP模塊的圖書。
本書首先通過介紹官方Nginx的基本用法和配置規則,幫助讀者了解一般Nginx模塊的用法,然後重點介紹如何開發HTTP模塊(含HTTP過濾模塊)來得到定製的Nginx,其中包括開發一個功能復雜的模塊所需要了解的各種知識,如Nginx的基礎數據結構、配置項的解析、記錄日誌的工具以及upstream、subrequest的使用方法等。在此基礎上,綜合Nginx框架代碼分析Nginx的架構,介紹其設計理念和技巧,進一步幫助讀者自由、有效地開發出功能豐富、性能一流的Nginx模塊。
作者簡介:
陶輝,畢業於西安交通大學計算機科學與技術專業,曾就職於華為中央軟體部、騰訊QQ空間、思科中國CRDC等公司,目前在阿里巴巴雲計算公司的飛天團隊工作,研究方向為介於IaaS和PaaS間的彈性計算,多年以來專注於Nginx的定製化應用,對Nginx的設計與特性有深刻認識,實戰經驗豐富,編寫過許多優秀的Nginx模塊並應用於企業級產品中,同時撰寫了大量關於Nginx的技術文章。擅長Linux環境下高性能伺服器的開發,以及分布式環境下海量數據存儲的設計開發。
❹ 《Node.js實戰》pdf下載在線閱讀,求百度網盤雲資源
《Node.js實戰》([美] Mike Cantelon)電子書網盤下載免費在線閱讀
鏈接:
書名:Node.js實戰
作者:[美] Mike Cantelon
譯者:吳海星
豆瓣評分:8.1
出版社:人民郵電出版社
出版年份:2014-5
頁數:356
內容簡介:
伺服器端JavaScript?沒錯。Node.js是一個JavaScript伺服器,支持可伸縮的高性能Web應用。藉助非同步I/O,這個伺服器可以同時做很多事情,能滿足聊天、游戲和實時統計等應用的需求。並且既然是JavaScript,那你就可以全棧使用一種語言。
本書向讀者展示了如何構建產品級應用,對關鍵概念的介紹清晰明了,貼近實際的例子,涵蓋從安裝到部署的各個環節,是一部講解與實踐並重的優秀著作。通過學習本書,讀者將深入非同步編程、數據存儲、輸出模板、讀寫文件系統,掌握創建TCP/IP伺服器和命令行工具等非HTTP程序的技術。本書同樣非常適合熟悉Rails、Django或php開發的讀者閱讀學習。
本書主要內容:
Node.js及其擴展的安裝配置;
全面理解非同步編程和事件循環;
學會開發微博、聊天和游戲等熱門應用。
作者簡介:
作者簡介:
Mike Cantelon
Node.js核心框架貢獻者、Node社區活躍分子、資深培訓師和演講人。
Marc Harter
Node.js核心框架貢獻者。
T.J. Holowaychuk
參與開發了很多Node.js模塊,包括流行的Express框架。
Nathan Rajlich
大名鼎鼎的TooTallNate,Node.js核心代碼提交者。
譯者簡介:
吳海星
2001年畢業於南京理工大學。編程數載代碼不過幾十萬,翻譯幾年碼字不過幾百萬。項目不過十幾個,帶隊不到五十人。年過而立,惴惴不安,愈加發奮,孜孜求學,願憑綿薄之力,貢獻於IT社區。
❺ 誰幫我推薦幾本linux運維方面的 項目實戰文檔、經驗總結文檔和 好的shell腳本編程 的書啊
根據樓主口述,樓主需要的是linux進階的書籍。顯然鳥哥私房菜一類的Linux啟蒙書籍不能很好滿足樓主。本身作為一個linux運維人員,強烈給你推薦兩本書:
余洪春老師(撫琴煮酒)的《構建高可用Linux伺服器》 機械工業出版社
高俊峰老師(南非螞蟻)的《高性能Linux伺服器構建實戰 運維監控、性能調優與集群應用》 機械工業出版社
兩位51CTO、CU技術論壇的明星博主的經驗給了在運維上很多啟迪,建議樓主可以先看電子書,但一定要買實體書,在工作之餘或者應急響應的時候可以隨手拈來。
❻ 求《NodeWeb開發》全文免費下載百度網盤資源,謝謝~
《NodeWeb開發》網路網盤pdf最新全集下載:
鏈接:https://pan..com/s/1B_gfb04H5WmuJYfOkHzwkA
❼ 有哪些關於C++高性能伺服器開發的高質量博客
第零步
C語言,推薦:《C語言程序設計:現代方法》
第一步
UNIX/Linux系統編程,
推薦《UNIX環境高級編程:第三版》《Linux/UNIX系統編程手冊》
第二步
TCP-IP詳解卷一
卷二
卷三
第四步
精研nginx源碼
❽ 《NodeWeb開發》pdf下載在線閱讀全文,求百度網盤雲資源
《NodeWeb開發》網路網盤pdf最新全集下載:
鏈接:https://pan..com/s/1B_gfb04H5WmuJYfOkHzwkA
❾ GitHub上面有哪些經典的java框架源碼
Bazel:來自Google的構建工具,可以快速、可靠地構建代碼。官網
Gradle:使用Groovy(非XML)進行增量構建,可以很好地與Maven依賴管理配合工作。官網
Buck:Facebook構建工具。官網
位元組碼操作
編程方式操作位元組碼的開發庫。
ASM:通用底層位元組碼操作和分析開發庫。官網
Byte Buddy:使用流式API進一步簡化位元組碼生成。官網
Byteman:在運行時通過DSL(規則)操作位元組碼進行測試和故障排除。官網
Javassist:一個簡化位元組碼編輯嘗試。官網
集群管理
在集群內動態管理應用程序的框架。
Apache Aurora:Apache Aurora是一個Mesos框架,用於長時間運行服務和定時任務(cron job)。官網
Singularity:Singularity是一個Mesos框架,方便部署和操作。它支持Web Service、後台運行、調度作業和一次性任務。官網
代碼分析
測量代碼指標和質量工具。
Checkstyle:代碼編寫規范和標准靜態分析工具。官網
Error Prone:將常見編程錯誤作為運行時錯誤報告。官網
FindBugs:通過位元組碼靜態分析查找隱藏bug。官網
jQAssistant:使用基於Neo4J查詢語言進行代碼靜態分析。官網
PMD:對源代碼分析查找不良的編程習慣。官網
SonarQube:通過插件集成其它分析組件,對過去一段時間內的數據進行統計。官網
編譯器生成工具
用來創建解析器、解釋器或編譯器的框架。
ANTLR:復雜的全功能自頂向下解析框架。官網
JavaCC:JavaCC是更加專門的輕量級工具,易於上手且支持語法超前預測。官網
外部配置工具
支持外部配置的開發庫。
config:針對JVM語言的配置庫。官網
owner:減少冗餘配置屬性。官網
約束滿足問題求解程序
幫助解決約束滿足問題的開發庫。
Choco:可直接使用的約束滿足問題求解程序,使用了約束規劃技術。官網
JaCoP:為FlatZinc語言提供了一個介面,可以執行MiniZinc模型。官網
OptaPlanner:企業規劃與資源調度優化求解程序。官網
Sat4J:邏輯代數與優化問題最先進的求解程序。官網
持續集成
Bamboo:Atlassian解決方案,可以很好地集成Atlassian的其他產品。可以選擇開源許可,也可以購買商業版。官網
CircleCI:提供託管服務,可以免費試用。官網
Codeship:提供託管服務,提供有限的免費模式。官網
fabric8:容器集成平台。官網
Go:ThoughtWork開源解決方案。官網
Jenkins:支持基於伺服器的部署服務。官網
TeamCity:JetBrain的持續集成解決方案,有免費版。官網
Travis:通常用作開源項目的託管服務。官網
Buildkite: 持續集成工具,用簡單的腳本就能設置pipeline,而且能快速構建,可以免費試用。官網
CSV解析
簡化CSV數據讀寫的框架與開發庫
uniVocity-parsers:速度最快功能最全的CSV開發庫之一,同時支持TSV與固定寬度記錄的讀寫。官網
資料庫
簡化資料庫交互的相關工具。
Apache Phoenix:HBase針對低延時應用程序的高性能關系資料庫層。官網
Crate:實現了數據同步、分片、縮放、復制的分布式數據存儲。除此之外還可以使用基於SQL的語法跨集群查詢。官網
Flyway:簡單的資料庫遷移工具。官網
H2:小型SQL資料庫,以可以作為內存資料庫使用著稱。官網
HikariCP:高性能JDBC連接工具。官網
JDBI:便捷的JDBC抽象。官網
Protobuf:Google數據交換格式。官網
SBE:簡單二進制編碼,是最快速的消息格式之一。官網
Wire:整潔輕量級協議緩存。官網
幫實現依賴翻轉範式的開發庫。官網
Apache DeltaSpike:CDI擴展框架。官網
Dagger2:編譯時注入框架,不需要使用反射。官網
Guice:可以匹敵Dagger的輕量級注入框架。官網
HK2:輕量級動態依賴注入框架。官網
開發流程增強工具
從最基本的層面增強開發流程。
ADT4J:針對代數數據類型的JSR-269代碼生成器。官網
AspectJ:面向切面編程(AOP)的無縫擴展。官網
Auto:源代碼生成器集合。官網
DCEVM:通過修改JVM在運行時支持對已載入的類進行無限次重定義。官網
HotswapAgent:支持無限次重定義運行時類與資源。官網
Immutables:類似Scala的條件類。官網
JHipster:基於Spring Boot與AngularJS應用程序的Yeoman源代碼生成器。官網
JRebel:無需重新部署,可以即時重新載入代碼與配置的商業軟體。官網
Lombok:減少冗餘的代碼生成器。官網
Spring Loaded:類重載代理。官網
vert.x:多語言事件驅動應用框架。官網
分布式應用
用來編寫分布式容錯應用的開發庫和框架。
Akka:用來編寫分布式容錯並發事件驅動應用程序的工具和運行時。官網
Apache Storm:實時計算系統。官網
Apache ZooKeeper:針對大型分布式系統的協調服務,支持分布式配置、同步和名稱注冊。官網
Hazelcast:高可擴展內存數據網格。官網
Hystrix:提供延遲和容錯。官網
JGroups:提供可靠的消息傳遞和集群創建的工具。官網
Orbit:支持虛擬角色(Actor),在傳統角色的基礎上增加了另外一層抽象。官網
Quasar:為JVM提供輕量級線程和角色。官網
分布式資料庫
對應用程序而言,在分布式系統中的資料庫看起來就像是只有一個數據源。
Apache Cassandra:列式資料庫,可用性高且沒有單點故障。官網
Apache HBase:針對大數據的Hadoop資料庫。官網
Druid:實時和歷史OLAP數據存儲,在聚集查詢和近似查詢方面表現不俗。官網
Infinispan:針對緩存的高並發鍵值對數據存儲。官網
發布
以本機格式發布應用程序的工具。
Bintray:發布二進制文件版本控制工具。可以於Maven或Gradle一起配合使用。提供開源免費版本和幾種商業收費版本。官網
Central Repository:最大的二進制組件倉庫,面向開源社區提供免費服務。Apache Maven默認使用Central官網Repository,也可以在所有其他構建工具中使用。
IzPack:為跨平台部署建立創作工具(Authoring Tool)。官網
JitPack:打包GitHub倉庫的便捷工具。可根據需要構建Maven、Gradle項目,發布可立即使用的組件。官網
Launch4j:將JAR包裝為輕量級本機Windows可執行程序。官網
Nexus:支持代理和緩存功能的二進制管理工具。官網
packr:將JAR、資源和JVM打包成Windows、Linux和Mac OS X本地發布文件。官網
文檔處理工具
處理Office文檔的開發庫。
Apache POI:支持OOXML規范(XLSX、DOCX、PPTX)以及OLE2規范(XLS、DOC、PPT)。官網
documents4j:使用第三方轉換器進行文檔格式轉換,轉成類似MS Word這樣的格式。官網
jOpenDocument:處理OpenDocument格式(由Sun公司提出基於XML的文檔格式)。官網
函數式編程
函數式編程支持庫。
Cyclops:支持一元(Monad)操作和流操作工具類、comprehension(List語法)、模式匹配、trampoline等特性。官網
Fugue:Guava的函數式編程擴展。官網
Functional Java:實現了多種基礎和高級編程抽象,用來輔助面向組合開發(composition-oriented development)。官網
Javaslang:一個函數式組件庫,提供持久化數據類型和函數式控制結構。官網
jOOλ:旨在填補Java 8 lambda差距的擴展,提供了眾多缺失的類型和一組豐富的順序流API。官網
游戲開發
游戲開發框架。
jMonkeyEngine:現代3D游戲開發引擎。官網
libGDX:全面的跨平台高級框架。官網
LWJGL:對OpenGL/CL/AL等技術進行抽象的健壯框架。官網
GUI
現代圖形化用戶界面開發庫。
JavaFX:Swing的後繼者。官網
Scene Builder:開發JavaFX應用的可視化布局工具。官網
高性能計算
涵蓋了從集合到特定開發庫的高性能計算相關工具。
Agrona:高性能應用中常見的數據結構和工具方法。官網
Disruptor:線程間消息傳遞開發庫。官網
fastutil:快速緊湊的特定類型集合(Collection)。官網
GS Collections:受Smalltalk啟發的集合框架。官網
HPPC:基礎類型集合。官網
Javolution:實時和嵌入式系統的開發庫。官網
JCTools:JDK中缺失的並發工具。官網
Koloboke:Hash set和hash map。官網
Trove:基礎類型集合。官網
High-scale-bli:Cliff Click 個人開發的高性能並發庫官網
IDE
簡化開發的集成開發環境。
Eclipse:老牌開源項目,支持多種插件和編程語言。官網
IntelliJ IDEA:支持眾多JVM語言,是安卓開發者好的選擇。商業版主要針對企業客戶。官網
NetBeans:為多種技術提供集成化支持,包括Java SE、Java EE、資料庫訪問、HTML5
Imgscalr:純Java 2D實現,簡單、高效、支持硬體加速的圖像縮放開發庫。官網
Picasso:安卓圖片下載和圖片緩存開發庫。官網
Thumbnailator:Thumbnailator是一個高質量Java縮略圖開發庫。官網
ZXing:支持多種格式的一維、二維條形碼圖片處理開發庫。官網
im4java: 基於ImageMagick或GraphicsMagick命令行的圖片處理開發庫,基本上ImageMagick能夠支持的圖片格式和處理方式都能夠處理。官網
Apache Batik:在Java應用中程序以SVG格式顯示、生成及處理圖像的工具集,包括SVG解析器、SVG生成器、SVG DOM等模塊,可以集成使用也可以單獨使用,還可以擴展自定義的SVG標簽。官網
JSON
簡化JSON處理的開發庫。
Genson:強大且易於使用的Java到JSON轉換開發庫。官網
Gson:谷歌官方推出的JSON處理庫,支持在對象與JSON之間雙向序列化,性能良好且可以實時調用。官網
Jackson:與GSON類似,在頻繁使用時性能更佳。官網
LoganSquare:基於Jackson流式API,提供對JSON解析和序列化。比GSON與Jackson組合方式效果更好。官網
Fastjson:一個Java語言編寫的高性能功能完善的JSON庫。官網
Kyro:快速、高效、自動化的Java對象序列化和克隆庫。官網
JVM與JDK
目前的JVM和JDK實現。
JDK 9:JDK 9的早期訪問版本。官網
OpenJDK:JDK開源實現。官網
基於JVM的語言
除Java外,可以用來編寫JVM應用程序的編程語言。
Scala:融合了面向對象和函數式編程思想的靜態類型編程語言。官網
Groovy:類型可選(Optionally typed)的動態語言,支持靜態類型和靜態編譯。目前是一個Apache孵化器項目。官網
Clojure:可看做現代版Lisp的動態類型語言。官網
Ceylon:RedHat開發的面向對象靜態類型編程語言。官網
Kotlin:JetBrain針對JVM、安卓和瀏覽器提供的靜態類型編程語言。官網
Xtend:一種靜態編程語言,能夠將其代碼轉換為簡潔高效的Java代碼,並基於JVM運行。官網
日誌
記錄應用程序行為日誌的開發庫。
Apache Log4j 2:使用強大的插件和配置架構進行完全重寫。官網
kibana:分析及可視化日誌文件。官網
Logback:強健的日期開發庫,通過Groovy提供很多有趣的選項。官網
logstash:日誌文件管理工具。官網
Metrics:通過JMX或HTTP發布參數,並且支持存儲到資料庫。官網
SLF4J:日誌抽象層,需要與具體的實現配合使用。官網
機器學習
提供具體統計演算法的工具。其演算法可從數據中學習。
Apache Flink:快速、可靠的大規模數據處理引擎。官網
Apache Hadoop:在商用硬體集群上用來進行大規模數據存儲的開源軟體框架。官網
Apache Mahout:專注協同過濾、聚類和分類的可擴展演算法。官網
Apache Spark:開源數據分析集群計算框架。官網
DeepDive:從非結構化數據建立結構化信息並集成到已有資料庫的工具。官網
Deeplearning4j:分布式多線程深度學習開發庫。官網
H2O:用作大數據統計的分析引擎。官網
Weka:用作數據挖掘的演算法集合,包括從預處理到可視化的各個層次。官網
QuickML:高效機器學習庫。官網、GitHub
消息傳遞
在客戶端之間進行消息傳遞,確保協議獨立性的工具。
Aeron:高效可擴展的單播、多播消息傳遞工具。官網
Apache ActiveMQ:實現JMS的開源消息代理(broker),可將同步通訊轉為非同步通訊。官網
Apache Camel:通過企業級整合模式(Enterprise Integration Pattern EIP)將不同的消息傳輸API整合在一起。官網
Apache Kafka:高吞吐量分布式消息系統。官網
Hermes:快速、可靠的消息代理(Broker),基於Kafka構建。官網
JBoss HornetQ:清晰、准確、模塊化,可以方便嵌入的消息工具。官網
JeroMQ:ZeroMQ的純Java實現。官網
Smack:跨平台XMPP客戶端函數庫。官網
Openfire:是開源的、基於XMPP、採用Java編程語言開發的實時協作伺服器。 Openfire安裝和使用都非常簡單,並可利用Web界面進行管理。官網GitHub
Spark:是一個開源,跨平台IM客戶端。它的特性支持集組聊天,電話集成和強大安全性能。如果企業內部部署IM使用Openfire+Spark是最佳的組合。官網GitHub
Tigase: 是一個輕量級的可伸縮的 Jabber/XMPP 伺服器。無需其他第三方庫支持,可以處理非常高的復雜和大量的用戶數,可以根據需要進行水平擴展。官網
雜項
未分類其它資源。
Design Patterns:實現並解釋了最常見的設計模式。官網
Jimfs:內存文件系統。官網
Lanterna:類似curses的簡單console文本GUI函數庫。官網
LightAdmin:可插入式CRUD UI函數庫,可用來快速應用開發。官網
OpenRefine:用來處理混亂數據的工具,包括清理、轉換、使用Web Service進行擴展並將其關聯到資料庫。官網
RoboVM:Java編寫原生iOS應用。官網
Quartz:強大的任務調度庫.官網
應用監控工具
監控生產環境中應用程序的工具。
AppDynamics:性能監測商業工具。官網
JavaMelody:性能監測和分析工具。官網
Kamon:Kamon用來監測在JVM上運行的應用程序。官網
New Relic:性能監測商業工具。官網
SPM:支持對JVM應用程序進行分布式事務追蹤的性能監測商業工具。官網
Takipi:產品運行時錯誤監測及調試商業工具。官網
原生開發庫
用來進行特定平台開發的原生開發庫。
JNA:不使用JNI就可以使用原生開發庫。此外,還為常見系統函數提供了介面。官網
自然語言處理
用來專門處理文本的函數庫。
Apache OpenNLP:處理類似分詞等常見任務的工具。官網
CoreNLP:斯坦佛CoreNLP提供了一組基礎工具,可以處理類似標簽、實體名識別和情感分析這樣的任務。官網
LingPipe:一組可以處理各種任務的工具集,支持POS標簽、情感分析等。官網
Mallet:統計學自然語言處理、文檔分類、聚類、主題建模等。官網
網路
網路編程函數庫。
Async Http Client:非同步HTTP和WebSocket客戶端函數庫。官網
Grizzly:NIO框架,在Glassfish中作為網路層使用。官網
Netty:構建高性能網路應用程序開發框架。官網
OkHttp:一個Android和Java應用的HTTP+SPDY客戶端。官網
Undertow:基於NIO實現了阻塞和非阻塞API的Web伺服器,在WildFly中作為網路層使用。官網
ORM
處理對象持久化的API。
Ebean:支持快速數據訪問和編碼的ORM框架。官網
EclipseLink:支持許多持久化標准,JPA、JAXB、JCA和SDO。官網
Hibernate:廣泛使用、強健的持久化框架。Hibernate的技術社區非常活躍。官網
MyBatis:帶有存儲過程或者SQL語句的耦合對象(Couples object)。官網
OrmLite:輕量級開發包,免除了其它ORM產品中的復雜性和開銷。官網
Nutz:另一個SSH。官網,Github
JFinal:JAVA WEB + ORM框架。官網,Github
用來幫助創建PDF文件的資源。
Apache FOP:從XSL-FO創建PDF。官網
Apache PDFBox:用來創建和操作PDF的工具集。官網
DynamicReports:JasperReports的精簡版。官網
flyingsaucer:XML/XHTML和CSS 2.1渲染器。官網
iText:一個易於使用的PDF函數庫,用來編程創建PDF文件。注意,用於商業用途時需要許可證。官網
JasperReports:一個復雜的報表引擎。官網
性能分析
性能分析、性能剖析及基準測試工具。
jHiccup:提供平台中JVM暫停的日誌和記錄。官網
JMH:JVM基準測試工具。官網
JProfiler:商業分析器。官網
LatencyUtils:測量和報告延遲的工具。官網
VisualVM:對運行中的應用程序信息提供了可視化界面。官網
YourKit Java Profiler:商業分析器。官網
響應式開發庫
用來開發響應式應用程序的開發庫。
Reactive Streams:非同步流處理標准,支持非阻塞式反向壓力(backpressure)。官網
Reactor:構建響應式快速數據(fast-data)應用程序的開發庫。官網
RxJava:通過JVM可觀察序列(observable sequence)構建非同步和基於事件的程序。官網
REST框架
用來創建RESTful 服務的框架。
Dropwizard:偏向於自己使用的Web框架。用來構建Web應用程序,使用了Jetty、Jackson、Jersey和Metrics。官網
Feign:受Retrofit、JAXRS-2.0和WebSocket啟發的HTTP客戶端連接器(binder)。官網
Jersey:JAX-RS參考實現。官網
RESTEasy:經過JAX-RS規范完全認證的可移植實現。官網
RestExpress:一個Java類型安全的REST客戶端。官網
RestX:基於註解處理和編譯時源碼生成的框架。官網
Retrofit:類型安全的REST客戶端。官網
Spark:受到Sinatra啟發的Java REST框架。官網
Swagger:Swagger是一個規范且完整的框架,提供描述、生產、消費和可視化RESTful Web Service。官網
Blade:國人開發的一個輕量級的MVC框架. 它擁有簡潔的代碼,優雅的設計。官網
科學計算與分析
用於科學計算和分析的函數庫。
DataMelt:用於科學計算、數據分析及數據可視化的開發環境。官網
JGraphT:支持數學圖論對象和演算法的圖形庫。官網
JScience:用來進行科學測量和單位的一組類。官網
搜索引擎
文檔索引引擎,用於搜索和分析。
Apache Solr:一個完全的企業搜索引擎。為高吞吐量通信進行了優化。官網
Elasticsearch:一個分布式、支持多租戶(multitenant)全文本搜索引擎。提供了RESTful Web介面和無schema的JSON文檔。官網
Apache Lucene:是一個開放源代碼的全文檢索引擎工具包,是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎。官網
安全
用於處理安全、認證、授權或會話管理的函數庫。
Apache Shiro:執行認證、授權、加密和會話管理。官網
Bouncy Castle,涵蓋了從基礎的幫助函數到PGP/SMIME操作。官網:多途加密開發庫。支持JCA提供者(JCA provider)
Cryptomator:在雲上進行客戶端跨平台透明加密。官網
Keycloak:為瀏覽器應用和RESTful Web Service集成SSO和IDM。目前還處於beta版本,但是看起來非常有前途。官網
PicketLink:PicketLink是一個針對Java應用進行安全和身份認證管理的大型項目(Umbrella Project)。官網
序列化
用來高效處理序列化的函數庫。
FlatBuffers:高效利用內存的序列化函數庫,無需解包和解析即可高效訪問序列化數據。官網
Kryo:快速、高效的對象圖形序列化框架。官網
FST:提供兼容JDK的高性能對象圖形序列化。官網
MessagePack:一種高效的二進制序列化格式。官網
應用伺服器
用來部署應用程序的伺服器。
Apache Tomcat:針對Servlet和JSP的應用伺服器,健壯性好且適用性強。官網
Apache TomEE:Tomcat加Java EE。官網
Jetty:輕量級、小巧的應用伺服器,通常會嵌入到項目中。官網
WebSphere Liberty:輕量級、模塊化應用伺服器,由IBM開發。官網
WildFly:之前被稱作JBoss,由Red Hat開發。支持很多Java EE功能。官網
模板引擎
在模板中替換表達式的工具。
Apache Velocity:提供HTML頁面模板、email模板和通用開源代碼生成器模板。官網
FreeMarker:通用模板引擎,不需要任何重量級或自己使用的依賴關系。官網
Handlebars.java:使用Java編寫的模板引擎,邏輯簡單,支持語義擴展(semantic Mustache)。官網
Thymeleaf:旨在替換JSP,支持XML文件的工具。官網
測試
測試內容從對象到介面,涵蓋性能測試和基準測試工具。
Apache JMeter:功能性測試和性能評測。官網
Arquillian:集成測試和功能行測試平台,集成Java EE容器。官網
AssertJ:支持流式斷言提高測試的可讀性。官網
Awaitility:用來同步非同步操作的DSL。官網
Cucumber:BDD測試框架。官網
Gatling:設計為易於使用、可維護的和高性能負載測試工具。官網
Hamcrest:可用來靈活創建意圖(intent)表達式的匹配器。官網
JMockit:用來模擬靜態、final方法等。官網
JUnit:通用測試框架。官網
Mockito:在自動化單元測試中創建測試對象,為TDD或BDD提供支持。官網
PowerMock: 支持模擬靜態方法、構造函數、final類和方法、私有方法以及移除靜態初始化器的模擬工具。官網
REST Assured:為REST/HTTP服務提供方便測試的Java DSL。官網
Selenide:為Selenium提供精準的周邊API,用來編寫穩定且可讀的UI測試。官網
Selenium:為Web應用程序提供可移植軟體測試框架。官網
Spock:JUnit-compatible framework featuring an expressive Groovy-derived specification language.官網兼容JUnit框架,支持衍生的Groovy范的語言。
TestNG:測試框架。官網
Truth:Google的斷言和命題(proposition)框架。官網
Unitils:模塊化測試函數庫,支持單元測試和集成測試。官網
WireMock:Web Service測試樁(Stub)和模擬函數。官網
通用工具庫
通用工具類函數庫。
Apache Commons:提供各種用途的函數,比如配置、驗證、集合、文件上傳或XML處理等。官網
args4j:命令行參數解析器。官網
CRaSH:為運行進行提供CLI。官網
Gephi:可視化跨平台網路圖形化操作程序。官網
Guava:集合、緩存、支持基本類型、並發函數庫、通用註解、字元串處理、I/O等。官網
JADE:構建、調試多租戶系統的框架和環境。官網
javatuples:正如名字表示的那樣,提供tuple支持。盡管目前tuple的概念還有留有爭議。官網
JCommander:命令行參數解析器。官網
Protégé:提供存在論(ontology)編輯器以及構建知識系統的框架。官網
網路爬蟲
用於分析網站內容的函數庫。
Apache Nutch:可用於生產環境的高度可擴展、可伸縮的網路爬蟲。官網
Crawler4j:簡單的輕量級網路爬蟲。官網
JSoup:刮取、解析、操作和清理HTML。官網
Web框架
用於處理Web應用程序不同層次間通訊的框架。
Apache Tapestry:基於組件的框架,使用Java創建動態、強健的、高度可擴展的Web應用程序。官網
Apache Wicket:基於組件的Web應用框架,與Tapestry類似帶有狀態顯示GUI。官網
Google Web Toolkit:一組Web開發工具集,包含在客戶端將Java代碼轉為JavaScript的編譯器、XML解析器、RCP官網API、JUnit集成、國際化支持和GUI控制項。
Grails:Groovy框架,旨在提供一個高效開發環境,使用約定而非配置、沒有XML並支持混入(mixin)。官網
Ninja:Java全棧Web開發框架。非常穩固、快速和高效。官網
Pippo:小型、高度模塊化的類Sinatra框架。官網
Play:使用約定而非配置,支持代碼熱載入並在瀏覽器中顯示錯誤。官網
PrimeFaces:JSF框架,提供免費和帶支持的商業版本。包括若干前端組件。官網
Ratpack:一組Java開發函數庫,用於構建快速、高效、可擴展且測試完備的HTTP應用程序。官網
Spring Boot:微框架,簡化了Spring新程序的開發過程。官網
Spring:旨在簡化Java EE的開發過程,提供依賴注入相關組件並支持面向切面編程。官網
Vaadin:基於GWT構建的事件驅動框架。使用服務端架構,客戶端使用Ajax。官網
Blade:國人開發的一個輕量級的MVC框架. 它擁有簡潔的代碼,優雅的設計。官網
業務流程管理套件
流程驅動的軟體系統構建。
jBPM:非常靈活的業務流程管理框架,致力於構建開發與業務分析人員之間的橋梁。官網
Activity:輕量級工作流和業務流程管理框架。官網github
資源
社區
❿ 懂編程的來
各種語言的介紹(第二版)
在介紹編程語言之前,先說說開放源代碼的必要性。現在,在軟體生產領域存在巨大的智利浪費,大家把大量的精力用在編寫別人已經實現的 程序代碼上。看看,文本編輯器有多少,看看ftp程序有多少,看看字處理程序有多少,這些程序雖然有差別,但主要的功能都是一樣的。要實 現個性化的功能,在已有的軟體基礎上修改會節省多少時間呀!而每個程序各編一套,又浪費多少時間?如果,沒有這些重復的工作量,世界 上的程序員至少可以節省80%的工作量。同時,開放源代碼也方便了大家的交流,閱讀源代碼應該是最直接最有效的學習途徑。尤其是比較專業 的領域。
要開放源代碼,下面幾點比較重要: ×、語言要流行。 ×、語言的函數和類庫統一。 ×、語言的語法和編譯器要統一。 ×、編譯器是否開 放源代碼。 ×、API是否開放源代碼。 ×、語言的可重用性、功能、友好性。
語言統一的必要性:如果大家都用一種編程語言,都用同樣的函數,同樣的類庫,那麼,大家的共同語言就會很多。大家只要學會一種語言, 一套函數,一套類庫,就可以相互讀懂源代碼,這樣,學習量是最少的。學習新的API浪費程序員大量的時間和精力,尤其是當這個API有大量 和其他API重復的功能的時候。
要增加代碼的可重用性,要從下面幾點著手: ×、代碼的可讀性。如格式、是否接近英語語法和單詞。 ×、代碼的表達能力,也就是簡單性 ,能用最少的語句和單詞實現同樣的功能。 ×、代碼的結構性,如函數、模塊、類。
語言功能的強大從下面幾點來說: ×、是否擁有大量的庫支持。這是最重要的,要求編寫任何功能的程序都有強大的庫支持。 ×、語法功能 是否強大,比如是否有出錯處理。是否有指針。
語言的友好性: ×、語言包的大小,語言包越小,學習越簡單。 ×、語言是否有友好的編輯調試環境。 ×、語言的可視化和集成編程環境。
c語言:
從性能上說,除了匯編語言,c語言是最接近機器的語言。各種操作系統的編程介面的默認語言都是c語言。因此,用c語言編程,可以最大限 度發揮操作系統的能力。同時,由於絕大部分的商品軟體都是c實現的,都有c編程介面,可以說,沒有c不能實現的功能。
在linux環境中,c具有很好的開放源代碼的條件,它有統一的編譯器gcc,有強大但比較難掌握的編程環境emacs,有統一的API:posix和 linux介面。並且編譯器和API是開放源代碼的。
在linux上編寫圖形界面程序,有兩個選擇KDE和gnome,KDE更成熟,gnome支持多語言和面向對象的程序間的協同。
在windows環境中,現在統一到了vc上,但有一個缺點,windows的升級換代太快,從dos環境到windows31
,從windows31到windows95,到windows2000,到.net。API常常變換,這樣,在windows上的程序代碼的壽命會比較短。並且vc的編譯器和API 太復雜,難於掌握。
同時,由於c具有現代語言的大量特徵,現在常常代替pasical作為教學的編程語言。
實際上,如果不深入學習,c也是一種很簡單的語言。不學basic,直接學c完全沒有問題。
和其他語言相比,c有多種編譯器,多種操作系統API,多種語法和函數。學習的難度大,統一性差。
和java相比,c的語法不夠豐富、現代。
java:
相對c,java作為現代語言,具有非常豐富的語法特徵,如模塊和類,不像c隨操作系統和編譯器的不同有極大差異,java是一個公司的產品 ,具有唯一的API,因此,java程序員沒有語言隔閡。
相對跨平台的語言來說,java具有最好的圖形界面編程API。
java所有的API都是類庫,相對c的函數來說,是非常大的進步。java具有現代語言幾乎所有的特徵。
perl:
perl的最大特點是有強大的字元串模式匹配,是最好的文本文件的讀取和生成語言。
perl具有很大的自由性,象英語一樣有很大的隨意性,
perl有一個強大的資料庫介面和其他各種介面。
perl有最大量的程序庫。
perl不適合編寫大程序。
perl有一個著名的缺點是難懂,也有一個著名的優點是簡練。
php:
我感到php是個怪胎,本來perl加嵌入html的功能就完全能實現php的功能,還要另創一種語言,加重了大家的學習負擔。
php可以嵌入html,更容易編寫伺服器端程序。
php天然和web伺服器以及mysql資料庫相結合。
php可以動態生成圖像。
python:
首先,python是和basic一樣面向初學者的語言,和英語一樣容易懂。
python具有和java一樣的最豐富的語法。
python有和perl類似的簡單性,但沒有模式匹配。
python適合編寫大程序。
python有和lisp相似的地方,它有將字元串作為程序執行的eval函數,可以對一個對象的所有數據進行保存,可以把函數作為參數傳給另一 個函數。
python具有非常好的擴充性,python程序可以和c程序,以及java程序很好地結合。
tcl:
tcl具有最簡單的語法,最好的和其他程序交互的能力,有編寫圖形界面程序的tk。
javascript:
編寫動態網頁的最佳工具。
lisp:
lisp的語法非常簡單,只有簡單的函數和參數的語句結構。
lisp數據和程序的界限模糊。
lisp可以深度嵌套。
prolog:
prolog是一種專門的語言。專門用來處理知識。
我感覺prolog是一種資料庫的處理工具。
也是根據一些知識衍生出更多知識的推理工具。
basic:
現在最著名的basic是vb,
basic是簡單的初級語言。
vb是快速的界面生成語言,是快速的資料庫程序開發語言。
vba是vb的應用版,嵌入在offic中。編寫offic上的程序很好用。
vbscript是vb的腳本語言,可以產生伺服器端和客戶端的動態網頁。
basic的醜陋在於參數還是默認傳地址。太危險。
delphi:
和vb一樣是快速開發環境,但性能更好,功能更強大。
.net:
支持多種語言的統一的API類庫,
可以編寫webform程序,即所有的邏輯都在伺服器端,傳到客戶端的是標準的html3.0,可以被各種瀏覽器支持。各程序組件間通過soap交換 消息。
2002-04-12新增內容:
除了匯編語言外,c是最接近系統底層的語言,因此它是大部分程序的編程語言。c的缺點是沒有統一的函數庫,標准不統一,因此,同樣是c程 序員,相互看不懂代碼是很平常的事。
ada的出現就是為了解決統一標準的問題。有一個國際組織專門進行嚴格ada語言的認證來保證ada的統一。因此,ada編譯器有很多種,但ada語 言程序用任何ada編譯器編譯都能通過。同時,ada的執行程序的效率和c比較接近。有人說比c要快,我想不可能,除非c用的庫有問題。ada比c 排錯能力更強,但c也有類似的功能。ada還有一個缺點,就是語言羅索,象cobol一樣非常難看。
java是對c的大大的改進。有統一的標准,豐富的庫,完全的面向對象。也繼承了c的一些特點,無所不包的全功能,深入系統底層的編程的靈 活性。但因為java學習了c的深入系統底層的特點,它的語言就嚴格、呆板、羅索。另外,java要跨平台,它的速度就非常令人不滿意,只能局 限在高級應用方面。在速度上,可以選擇微軟的.net和蘋果的coco(可能拼寫有錯誤)。他們也同樣是底層的面向對象語言。
作為高級的應用程序,如果沒有保密要求,腳本語言是最合適的。腳本語言因為不用編譯,因此開發速度會比編譯語言快很多。
basic和perl都是古老的腳本語言。basic被微軟發揚光大了,但它的缺點是沒有完整的面向對象特性,因此編寫大型程序很困難。另外,微軟 的產品肯定是「腫件」。perl被特別設計來進行文本的處理,文本處理能力非常強,但不適合編寫大程序,語言風格也比較令人費解。
python定位於入門的編程語言,是basic的代替品,它具有和basic同樣的簡單性,並且編程語句更優雅。python有比較完整的面向對象特性, 可以用來編寫大程序,因此有些大型的實用程序是python完成的,從加快開發速度的角度,可以代替c和java。python的另一個巨大的應用領域 是用來操作定製其他程序,這個能力basic也有,從這個角度說,python就是unix世界的basic。但python更進一步,和c的溝通能力非常好,任 何為c編寫的介面能夠很容易轉化為python的介面。和java的介面有專門的python的java版,就是jython,jython可以和java本身一樣使用各種 java資源。
ruby首先是smalltalk的替代品。有徹底的面向對象特性。另外,也努力作為perl、php、basic、python的替代品。
rebol是lisp的替代品,同時作為腳本語言的一員,有自己的獨特之處,他的網路編程和圖形用戶界面編程是最強大的。
語言解析語言yacc、 html、xml、xlt、xul等也可以算作語言。
[edit]
各種語言的選擇
如果編寫對性能要求苛刻,或和操作系統結合緊密的程序,必然選擇c。
如果編寫到處可用的程序,選java。
如果編寫大程序,可能的化盡量用python,不行了再用java和c。因為python帶來了生產力。
編寫文本的處理程序用perl。
編寫知識的處理程序用prolog。
編寫最靈活,最模糊的程序用lisp。
編寫office程序用vba。
編寫伺服器端程序,php、perl、python、asp都是選擇。
編寫資料庫程序用vb或delphi。
[edit]
各種語言的選擇
如果要追求性能和程序的能力,要完全發揮操作系統的能力,使用c語言是合適的。在windows環境下用vc,在linux環境下用gcc。
如果不是追求和操作系統完美結合,而只是性能,又要追求跨平台性,那麼仍然選擇c,但可以選擇跨平台的庫,如qt、gtk、fox、wxwindows 。如果要編寫游戲也有跨平台選擇:SDL。
如果不滿意c領域標準的不統一,不滿意c的容易出錯,不滿意c的面向對象特徵不徹底。如果不在乎跨平台,windows平台可以選擇c#,mac平台 可以選擇coco。如果需要跨平台,可以選擇java。
如果需要跨平台,又要廣泛的支持的話,選擇java。
如果不在乎商業機密,應用目標也不是太苛刻的話,編寫大型跨平台程序還有一個選擇就是python或ruby。腳本語言,但是具有全面的庫的支 持,有和c語言的方便的交互能力。他們和java相比,編程效率更高。同時因為沒有編譯,程序更方便修改。因為他們的庫都是c實現的,也比 java有更高性能。同時,他們都是開源的,都是對商業應用友好的,也是簡單的、方便定製的。也是不滿意java的不可控制的越來越龐大的庫 的又一個選擇。
在linux下,最方便的工具語言是perl,它有強大的社區和代碼庫的支持。
如果只作為簡單應用的工具語言,python和ruby是更好的選擇,他們的跨平台移植性好,應用也比較廣泛。其中python更適合入門和交流,長 期使用也不錯。ruby是對python不滿意的另一個選擇,它提供了很多額外的功能。
如果要選擇一個程序的嵌入語言,原來有lisp、basic和java,現在還可以選擇python和ruby。
如果在要求動態解釋執行語言,而又不想學其他語言的話,c程序員的選擇是pike,java程序員的選擇是beanshell。
在java平台,又想用腳本語言的話,可以用jython。
最正統的基於文檔的語言或叫動態頁面語言是javascript。
最專門的伺服器端語言是php,當然也有很多其他選擇。
xml語言以xul為最著名,dtml也算一個,你自己也可以用xml作為自己特殊用途的語言。比如jedit就用xml作為一種模式定製語言。xml語言是 一種比較先進的趨勢,比現有的語言在特殊領域更高效。
要找容易實現的語言,lisp和tcl是選擇。
lisp的數據和程序融為一體的能力和自由是其他語言都沒有的。現在出現了一個lisp的現代化的變種:rebol。
如果有基於事實的編程的需要的話,prolog和clips是必然。
[edit]
我為什麼選擇了python
首先聲明,我編程只編應用程序,就是代替自己工作的小程序。如果編寫系統程序總會用到c或java的。
我喜歡腳本語言,腳本語言不用編譯就可以運行,非常便於修改,而編程序是一種經常性的活動,程序編完後總在不斷的修改中,沒必要搞的 很隆重,還要編譯。另外,腳本程序每個使用的人都可以隨手拿來修改,不會出現還要去找源代碼的情況。因此,c和java就被排除了。
我喜歡簡單的語言,不喜歡為了編寫簡單的程序而去學習大量復雜的規定,需要大量的學習才會的語言不是好語言,是把人當機器看。c和java 都有嚴格但羅索的語法,有永遠學不完的函數、類、庫。讓人看到就頭大。而perl有各種怪里怪氣的速記符號,程序常常讓人頭暈。簡單的含 義除了容易學,還要功能豐富,常用到的東西要早就准備好,不用每個人都去寫同樣的數據結構程序等。python有豐富的數據類型,有完備的 面向對象的結構,有規則表達式等各種方便編程的模塊。這個邏輯就是程序做的多,人做的就少,如果程序做的少,就要人做的多。這就是界 面友好的問題。容易上手,功能豐富是程序設計的很重要的目標,windows就是靠這個流行的。而python也很好的體現了這點。而perl象unix的 emac之類其它工具一樣,功能強大,但太難學,太難懂。是比較違背人性的。
關於性能。現在cpu已經很強大了。除了很大的程序和系統程序,沒必要關心性能。
關於功能。如果不是編寫系統程序和貼近系統的程序,沒必要使用操作系統特別提供的功能。c是可以干任何事情,但它編程效率低,復雜。
至於我為什麼不用vb,因為vb太龐大了。我沒必要實現一個小功能啟動這么龐大的程序。太誇張。另外,vb沒有類繼承,雖然是應用編程,但 如果要編稍微大的程序,總會用到類繼承的。
python得強大得擴展能力使對python得學習不會浪費。python經過簡單得處理能使用各種得c和c++庫,也可以被c和c++調用。python可以直接 使用java得類,也可以直接被java調用。這樣,對python、java、c得學習和使用經驗都不會被浪費,還能相互補充。python可以提高java和c 得編程效率,java和c可以補充python功能上得不足。python還可以和tcl直接交互,這種功能是內置得。期待python能簡單的調用perl和php得 功能。能使用lisp和prolog更好。
[edit]
ruby 吸取了所有語言精華的語言 第二版
ruby 語言還是雜耍 ruby?:O ruby 日本人的玩意
ruby有
* perl的正則表達式
* python的語言的簡單性可讀性、最容易的擴展能力,強大的可移植性。
* php的嵌入功能和多種客戶端
* smalltalk的純面向對象語法和單繼承
* lisp的無窮嵌套的語法,也就是函數式的語法。
* 用「塊」來實現更快捷的數據結構的處理。不知道是不是scheme的宏功能。用塊能更清楚的實現python的表處理功能。
* java和ada的線程編程
* java的安全編程
不得不承認ruby確實是個精彩的語言,它完全學會了lisp的所有編程都是函數的思想,smalltalk的所有東西都是對象的思想,perl的一個目的 多種手段的方法,python的簡單化的「最少驚喜」的原則,java的多線程和安全控制的功能,tcl的容易擴展的功能,php的嵌入功能和強大客 戶端的功能,最方便的shell命令的調用。
[edit]
ruby和python的比較
[edit]
python和ruby的相同點
* 都強調語法簡單,都具有更一般的表達方式。python是縮進,ruby是類basic的表達。都大量減少了符號。
* 都是動態數據類型。都是有豐富的數據結構。
* 都具有c語言擴展能力,都具有可移植性,比perl的可移植性更好。也都可以作為嵌入語言。
* 都是面向對象的語言,都可以作為大項目的開發工具。
* 都有豐富的庫支持。
* 也有最寬松的版權許可,除了一些工具屬於GNU世界。
* 都有lisp特色的eval函數,也都能把函數作為參數。
* 也有圖形界面的ruby的專門編輯器。
* 都獲得了廣泛的c庫的支持。如qt、gtk、tk、SDL、FOX等,ruby計劃實現SWIG介面。
* 都有完善的文檔。
[edit]
和python相比ruby的優點
* 具有正則表達式和嵌入html的功能。python也有正則表達式,但沒有ruby的應用方便和廣泛。python的嵌入html項目才剛起步。ruby還有 apache的mod模塊。ruby本身也實現和很多unix工具,如racc,doctools。比python更親近linux。
* 比python功能更完整的面向對象的語法。
* ruby的整個庫都是具有類繼承的結構。
* 他的基本的數據類型和運算符都是可以重載的。
* ruby主要的功能都是通過對象的方法調用來實現的,而不是函數。python也在向這方面發展,但沒有ruby做的徹底。
* ruby的類是更規范的單繼承,還有介面等概念的實現。
* python可以實現在列表內的條件語句、循環語句,而ruby用「塊」的方式來實現這個功能,比python的更靈活,更具有通用性。
* ruby具有類似lisp的徹底的函數方式的條件語句、循環語句等。語句的表達能力更強。
* 附帶一些unix工具,如racc等。
[edit]
和python相比ruby的不足
* 最大的不足正是因為ruby的強大所引起的。它沒有python的簡單性好。比較復雜的面向對象語法、「塊」語法的引入、正則表達式的引入、 一些簡寫標記都增加了語言的復雜性。
* python的縮進表達方式比ruby的basic的表達方式更讓人悅目,ruby程序的滿眼的end讓人不舒服。當然,ruby認為end的方式比python更先 進。
* ruby還沒有python的「自省」的能力,沒有從程序文件中生成文檔的能力。
* ruby沒有國際化的支持。國際化支持在ruby的計劃中。這是因為ruby的歷史比python要短造成的。
* ruby沒有類似jython的東西。
[edit]
python和ruby的語言的選擇
從簡單的就是好的來說,選python是沒錯的。python適合尋找簡單語言的人,這很可能造成python更流行,因此也有更多的支持。但如果要追 求更強大的語法功能,則ruby是好的選擇。因為ruby和python的哲學有很多相似的地方,先從python入手,盡量用python,如果python的能力 不足了,可以在找ruby。
ruby和python的比較,就像五筆和拼音輸入法的比較。拼音作為入門的輸入法和長久使用的輸入法都沒有問題。五筆適合更高要求的情況。如 果追求性能的不妨學學ruby。對編程語言感興趣,想了解各種編程概念的學ruby也會很興奮。
[edit]
php有什麼好處
我一直認為php是一個垃圾,因為它只是實現了腳本語言得嵌入,卻單獨實現一種語言、實現大量得函數庫,浪費了大量得開發人員得寶貴時間 來重復其他腳本已經實現了得功能,也浪費了php開發人員得大量學習時間,還要單獨學一種只能存在於web伺服器得語言,浪費了perl、 python得已有得使用經驗。相似得還有pike,一種c得腳本語言,沒什麼新東西,還不如仍然用c編譯器。
但我最近看書才了解php得獨特得開發目標。
php為什麼不直接用perl作腳本語言。是因為perl是一種unix語言,帶有unix傳統得字元神秘高深,讓人難於學習。而編動態網頁得人不見得會 用perl這種unix工具,他們可能只有html知識。php就簡化了perl得語言,變成了一種簡單友好得語言,免去了人們學習perl得困難。
php為什麼不選python作腳本。因為python是一種面向對象得語言,大量得功能都要涉及面向對象概念,而web應用只是簡單得實現客戶機邏輯 和顯示功能。沒必要涉及面向對象得復雜概念。函數是最簡單,最容易理解得,因此,php傾向於所有得功能都用函數來解決,而不是用對象來 解決。這有點象c和c++之爭。應該承認,函數在實現簡單功能得時候是最有利得工具,它得語句量最少。
php定位於以html為用戶界面,充當各種伺服器得客戶端,實現得是傳統得客戶端編程得任務。它有pop、smtp、ftp、多種資料庫等各種伺服器 得客戶端得函數,也有圖片、pdf生成,xml處理等這種必要得功能。這些都是其他腳本比不上php得地方。
我幾乎沒用過php,說得不對,請指教。
[edit]
ada語言草述
ada語言我看了他的介紹。
ada語言和c一樣是一種編譯語言,他們最後編譯出的執行文件的機器碼都很小。因此現在眾多的語言只有c很ada能比較。
和c相比,ada的特點是可靠、可移植。
他的可靠是通過比其他語言都強大的類型,每種類型還都可以象資料庫欄位一樣進行強類型、范圍的檢查。以此來保證在編譯中就發現錯誤。
它有強大的標准化組織,嚴格認證ada編譯器的標准。有多線程能力。
適於編寫實時程序。
但和c相比太復雜、羅嗦,因此註定不能流行。
[edit]
多腳本語言的大統一及疑問
現在各種腳本語言太多了,有必要進行整合,parrot是一個好的想法。.net也是好的想法。它為各種腳本提供了一個統一的虛機,為各種腳本 語言提供了基於「類」的相互調用,為各種腳本提供了統一的類庫。
現在各種腳本語言只是提供了對c語言的交互性,這種交互也是費勁的和效果不好的。比如python、perl、ruby等都提供了對c的交互功能。腳 本語言之間的交流障礙重重。而類似.net的東西,提供了非常容易的各種腳本的相互利用的途徑,避免了很多的代碼的重復編寫。這種標准平 台的力量是很大的,這種標准平台為什麼沒有在開源領域首先出現呢?眾多的腳本正是開源的特點和優勢,為什麼這種問題要微軟來解決呢? 前面有人提出了類似的問題,在linux中為什麼至今沒有好用的類似ODBC的東西呢?
可能這種整合只有商業公司有能力實現吧。
我的理解是,如果有創新思想的人都拿他的想法去賣錢了,因此,在開源中只剩下了模仿的人。kde是模仿windows,koffice是模仿office, linux是模仿unix,gcc、bash等也全都是模仿,以及gstep等,還有freedos、atheos等也是模仿,wxwindows、SDL也是模仿。我想知道開源社 區有沒有自己的創新?我所知道的創新是zope,但zope最初也是商業產品,後來才開源的。perl是創新,python是創新,但還有什麼呢?是不 是開源領域只有hack,沒有creator?
[edit]
.net介紹
.net所實現的java的功能
可控代碼 跨平台的虛機和偽碼免費贈送命令行編譯器 純面向對象語言 對xml和xml web services的支持 和jsp對應的asp.net 網頁上的程序 一套統一的中間件環境。
asp.net跟jsp不是同一個層次上的web技術, asp.net使用完善的事件響應機制,WinForms類似的 WebForm技術,只有JSF跟Asp.net有可比性。
.net未實現的java功能
免費的集成開發環境 多廠家支持,跨平台的成熟度
免費的IDE, #develop , ASP.net的有MS的WebMatrix 而免費開源的CLR實現,有MS自己的XP,FreeBSD,MacOS下的實現(原理演示不能進行商 業應用), Novell下的Mono項目,已經發布了Beta1版本,在2004-6-30 將會發布Release1; 還有GNU的一個.net實現!!
[edit]
.net實現的java不具備的功能
多語言支持 強大的集成開發環境。在windows上媲美本機程序的速度。 對COM的支持,對vs的繼承 對widows form 、web form、伺服器端程序 的圖形直觀編程。
[edit]
相對vs6的改進
統一了集成開發環境,使c++程序也具有了vb的友好性。
[edit]
xml各種技術介紹
xml:
xml是統一格式的結構化數據的文本文件。
基於xml的程序,數據結構是開放的,方便不同程序處理同一種文件,這樣,程序之間可以達到高水平的協作。
xml現在成為了各行各業統一數據格式的基礎。
xml發展出了完善的語法,它用DTD或scheme來界定xml的標記語言。用uri來唯一確定一個xml格式。用css或XLT來轉換xml格式,xlink和 xpointer等來建立xml的鏈接,用xpath來定位xml中的數據。
xhtml:
是嚴格符合xml格式的html。
RDF:
基於xml的元數據描述語言。方便交換結構化數據。方便交換知識。
RDF是用主語、謂語、賓語來描述知識的。
SVG:
xml格式的矢量圖形格式。
SMILE:
xml格式的各種多媒體在時間線上的協同。
xmath:
xml格式的公式描述語言。
xml-rpc和soap:
以http協議和xml格式來進行網路程序之間的消息通訊。
xul:
netscape的mazilla使用的程序界面語言,基於xml格式,比html強大的多的描述圖形界面的xml語言。它用css來換膚,用DTD來實現多語言界 面,用javascript來實現程序邏輯,以此編寫跨平台的可方便定製界面的程序,現在這個程序API功能已經很強大了,整個mazilla程序就是基 於xul的。
xaml:
MS在LongHorn平台的最新編程語言,將統一Windows與Web編程,直接使用
LongHorn下的瀏覽器進行執行, 跟XUL有類比性
[edit]
最先進的xml格式圖形界面程序開發工具-xul
大家知道netscape程序,一個僅次於ie得瀏覽器,也有很多人知道mozilla,netscape得開放源代碼版本。但很多人只是使用mozilla,不知道 mozilla另一個重要得功能--程序開發。在netscape開放源代碼後三年mozilla得1。0版還沒有問世,很多人譏笑他的超慢得開發速度,實際 上,mozilla醞釀出了一個超酷得新產品,可以看作是軟體開發工具發展得另一個里程碑。
現在基於瀏覽器得三層開發結構非常流行,微軟得.net得思路就是基於這個結構得。另外,不考慮伺服器結構,就是基於網頁得javascript小 程序也對人很有吸引力,這些產品得思路都是以html為用戶界面,但開發人員常常苦惱於html太簡陋。而mazilla得xul解決了這個問題。
xul是對html得擴展