Java的跨平台性

今天突然被问为什么大家推崇Java时经常提到跨平台性,当时没想明白……回来又想了想,大概是这个意思:

Java刚推出时,当时C/S架构仍然是流行的,这个时候Java跨平台的优势是很大的。毕竟如果真能做到“一次编写,到处运行”,那么这是非常诱人的。但是问题在于当时awt、swing在客户端上的拙劣表现,另外就是运行速度的问题(假设如果当时有eclipse或者SWT,而PC的运行速度有现在的高端机的表现,那么估计历史就会改写了),这些使得这个Java编写跨平台Client的想法并没有被广泛执行过,加上C/S架构一些固有问题(比如客户端的部署和升级),终于第二次浪潮(B/S)以不可逆转之势来临了。

也许不能否认Java的跨平台特性为Java积攒了不少人气(事实证明人们对任何有可能或者至少看起来像能抵抗MS的东西从来都保持一种宽容的态度),但而后Java(或者说J2EE)在企业级开发方面占据主导,这些可能更归功于Java语言本身的表现力(一些语言的特性)加上J2EE本身的先进性(当时还没有一个类似的完善的企业级解决方案)以及成功的商业运作。

而现在的J2ee应用虽然没绑到os上却被绑到中间件上了;至于桌面应用有没人用java来做很难说;倒是J2me貌似很是得意于跨平台型,不过我不了解这部分,所以也是妄下断言。不过总体感觉上现在Java的流行和跨平台特性联系是不怎么大的。

Ajax ―― Asynchronous JavaScript and XML- –

最近关注了一下,因为提得比较多。觉得这个东西根本的特征――正如嘟嘟老窝上说的(http://www.duduwolf.com/post/webdev_by_ajax.asp)――在于异步。相比传统web应用,ajax应用一样是无状态、断开式连接(虽然javascript的应用可以在客户端维护一些东西,不过我认为这里所说的“利用客户端的计算能力”根本不是什么值得赞扬的),但XmlHttpRequest允许客户用另一条线程去提交Request,这对用户体验提高的好处是很大的。

考虑一个桌面应用,在执行一个极为费时的操作时,如果程序变成“无响应”状态这是极为令人厌恶的,所以这种情况一般建议用另外一个线程来执行费时操作。然而在web应用中,考虑到信息在网络中的往返,我们可以认为哪怕一个最简单的操作都是极费时的。很长一段时间以来面对这种情况用户只能等待这个往返,这就好比桌面程序的“无响应”。由此我们可以类比出另一线程提交请求的好处。

至于有些人说ajax就是aj,ax不过是赶时髦强加上去,开始我是赞这个观点的(google suggest的返回就只是一个字符串,参考这个链接的返回值http://www.google.com/complete/search?hl=en&js=true&qu=ajax)。然而前几天看《程序员》上有人说ajax体现了一个SOA的思想,发现这个说法也很好玩,如果服务器端只是暴露web services接口,browser变成一个使用services的程序,那还真是优雅得可以。可惜如果客户端仅凭javascript+DOM来类似构建RIA的解决方案,那未免太勉为其难了一点。总之把ajax看成一种过渡技术,关注avalon比较合理一点。

我大学以来看过的专业书籍

发现人事情一多不知道该干什么的时候,反而容易干起无聊的事情来……

下午烦得很,结果把上大学以来看过的书总结了一遍。看看还挺有意思的,哪天有空再加上批注

大一第一学期
《C程序设计(第2版)》谭浩强
《C++程序设计教程》钱能 董灵平 张敏霞
《VC++6.0技术内幕(第5版修订版)》David J.Kruglinski,Scot Wingo,George Shepherd

寒假
《深入浅出MFC(第2版)》侯捷

大一第二学期
《Windows 程序设计(第5版)》Charles Petzold
《C++编程思想(第2版) 第1卷:标准C++导引》Bruce Eckel
《C++程序设计语言(特别版)》Bjarne Stroustrup
《Essential C++中文版》Stanley B.lippman
《标准模版库自修教程与参考手册——STL进行C++编程(第2版)》David R.Musser,Gillmer J.Derge,Atul Saini

暑假
《数据结构与算法分析(C++版)第二版》Clifford A. Shaffer

大二第一学期
《Effective C++中文版 2nd Edition》Scott Meyers
《Exceptional C++中文版》Herb Sutter
《.NET大局观》David Chappell

寒假
《Compilers:Principles,Techniques,and Tools》Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman
《现代操作系统》Andrew S.Tanenbaum

大二第二学期
《数据库系统概念(第3版)》Abraham Silberschatz,Henry E Korth,S.Sudarshan
《Java编程思想(第2版)》Bruce Eckel
《设计模式——可服用面向对象软件基础》Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides
《软件工程——实践者的研究方法(第5版)》Roger S.Pressman
《TCP/IP详解 卷I:协议》W.Richard Stevens
《人月神话(20周年纪念版)》Frederick P. Brooks
《人件(第2版)》Tom DeMarco,Timothy Lister
《Learning Python》Mark Lutz,David Ascher

暑假
《UML用户指南》Grady Booch,James Rumbaugh,Ivar Jacobson
《Python Standard Library》Fredrik Lundh
《Programming Python, 2nd Edition》Mark Lutz
《Thinking in Python——Design Patterns and Problem-Solving Techniques》Bruce Eckel
重读:《设计模式——可服用面向对象软件基础》
重读:《现代操作系统》

大三第一学期
《Rational统一过程——实践者指南》Per Koll,Philippe Kruchten
《敏捷软件开发——原则、模式与实践》Robert C. Martin
《测试驱动开发(中文版)》Kent Beck
《C#技术揭秘》Tom Archer, Andrew Whitechapel
重读:《软件工程——实践者的研究方法》
重读:《人月神话》

寒假
《UML和模式应用(第2版)》Craig Larman

大三第二学期
《重构——改善既有代码设计》Martin Fowler
《JUnit In Action(中文版)》Vincent Massol, Ted Husted
《统一软件开发过程》Ivar Jacobson,Grady Booch,James Rumbaugh
《Spring Reference》Rod Johnson等(太多了)
《Effective Java(中文版)》Joshua Bloch
《软件过程管理》Watts S. Humphrey
重读:《敏捷软件开发——原则、模式与实践》