超越java-此书笔记
前言:
SSH所带来的烦恼:重复的事情太多、XML配置激增、改变的步调太快
第一章:
我们可以选择性的忽略当前的环境,但是技术是有生命周期的,如水煮青蛙,需要得知自己身边的温度
某种技术在某段时间会带来生产力的提高,但这段时间随时会结束
Jason Hunter的观点:
1.Java已经结束了它的领导趋势,我们需要把兴趣分散到其他地方。
一个相当实际的方法:得知什么是最热门的技术,从训练上可以让你赚最多的钱的技术就是最热门的技术
我们现在的时期是要把java当作理所当然,就像日用品
SSH带来了生产力,在建立企业应用时,可以花更少的精力,但是可能需要1年才能学会它们
作者无法说:可以轻易的培训java程序员,因为要学的东西太多,需要很多时间
创新来自需求,jdbc转移到iBATIS/JDO/Hibernate,struts转移到Trapestry
去学习java建立一个简单的web应用程序是非常痛苦的,因为很难,而且失败了后果很惨
重点:
我在<Better,Faster,Lighter Java>一书中这么说过,试着将所有横向的服务和所有的行为都写进业务对象的程序代码中,是愚蠢的行为,而继承能够帮助的地方不多,你必须使用特技(trick),如编译期增强 bytecode,或者运行时生成proxy程序代码,才能让对象具有透明性(表面没有改变对,但实际上改变了对象)
Java5的注释(annotation)是全新的工具,从许多方面来说,它是Java社区的一种编程模型,我不确定是否需要学习使用注释,但我确定学习的时候会遇到一些大灾难。
JVM比Java更重要,原因这里不列出来了
Java的许多特色适合开发建立OS的延伸和中间件,但是会限制应用软件的开发。越来越多的专家宣传动态类型的应用程序更简单,更具生产力
Java社区正在投入巨大的精力研发编程风格,期待java更透明、更反射、更动态,这些方法称为元编程,因为花更多时间在类上,而不是对象。
对我来说,对企业应用程序的开发来说,语言或环境最终重要的是生产力
(没有一种语言可以保持领先的地位)
第二章
想知道java走往何处,你必须知道它从和而来,你需要记住,究竟是什么让我们离开现有的语言而投入下一个语言。
1.OOP团队可以提高生产力,相当于面向过程的开发
2.C++将OOP推进了一步,但这一步实在不灵活,甚至有不良的后果
3.Java的语法接近C++,并且提供更好的技术(这里有一系列的优点,不列举了),是C++程序员转而进入java社区
4.Java的Applet掀起了学习浪潮,虽然Applet已经被淘汰,但它是java的一个开端,随后Java在server端占据脚跟。
James Duncan Davidson的观点:Java为何赢
1.Java当时确实很好,Java是强类型语言,在某些方面很好,但其它方面却是弱点
2.java在servlet中发挥了巨大作用
3.Java是强类型的,对API的信心而不是对框架的信心。这是很重要的一点,即使简单的API也增加了复杂度。例如,你再也不可以只写一个servlet,你必须写一个servlet,且编辑一个XML文件。这磨灭了servlet的简单易用特质。只会越来越依赖工具
4.Java在GUI没什么竞争力
作者:没有一样东西可以包含一切,可以使用一个管子将2个工具串起来,这样形成的威力更大
servlet:既然网页是在服务器端形成的,所以产生的内容是动态的,可以然后交给客户端
下一个成功的编程语言必须满足下面的4个条件:
1.建立一个明显的社区
2.具备可移植性,java语言提高了后续语言的门槛
3.需要提供经济上的动机
4.需要展示技术优点
第三章
Java的异常策略和静态类型以及称为一种妨碍,Java不像以前一样简单了
我相信下一个编程语言会更动态,且需要虚拟机的优点(可以说JVM也可以说其他VM)
java社区在GUI上并不成功,Swing和SWT让程序员停留在很低的层面上,这方面,微软和苹果具有更好的框架
java在企业集成方面是很好的语言,具有很多框架,像分布式事务处理
相对C++而言,企业领域中,软件开发速度比运行速度更重要
随着Java渐渐往复杂的问题移动,简单的问题也就越来越不易解决
(Java在出现的时候,社区扮演了重要的角色,如果有新语言挑战Java,就必须能迅速的拥抱群众)
一般人的误点(下面是作者反对的看法):
1.java已经结束领导趋势,java的确在营销上占有相当大的优势
2.java不是最佳的应用程序语言,甚至不是什么特别好的应用程序语言
3.java不是最具生产力的语言,它只不过比java之前的语言更具生产力
4.java能够让人离开C++,因为它提供了更好的改进
.......
第四章:
我现在已经意识到java的危险,它已经变得太困难而难以驾驭了
典型的需求:
1.java在写中间件的时候比教有用
2.web方面有比servlet更具生产力的,如php
3.处理xml上亦是
4.对于大型企业项目来说,java更适合,因为有丰富的资源...但是大多数企业项目是比较小的,如果语言能更具生产力
java培训5周只是学个皮毛
java语言不适合敏捷开发,java不是简单的语言,在极短周期的开发也不适合
java的限制
1.框架提高了java的生产力,但是增加学习曲线
2.编译期间异常和类型检查可以提高安全性 (java在安全方面确实不错),但让时间和语法的成本增加
3.java不适合表现结构性数据,这使得java过渡依赖XML,造成额外的复杂度和体积
4.java不是纯的OO,如基本类型
5.java比c++更动态,但比不上Ruby等的动态,java开发者正在开发元编程,但他们无法用够快的速度完成
6.java比其他直译式语言更动态,编译和部署周期更长
Steve Yegge:java的限制
1.java抽象工具欠缺,抽象并非java的第一类功能,没有参考参数,没有关键字,没有默认参数,没有析构绑定或平行赋值,没有延续,没有用户定义的运算符........
2.java无法扩展,它不能成长,没有元编程、没有宏、没有模板、没有东西给你语法进行抽象
3.java可以表达程序,但不可以表达数据,必须使用property XML以及其他方式来定义数据
4.java的静态系统很烂
5.java具有太多不必要的复杂度
java是强类型的,必须先编译来处理类型,在动态语言中这不是个事
泛型,即使你喜欢泛型,但你不会喜欢java实现泛型的方式,因为JVM不支持泛型,这仅仅是在语言层
......
对于应用编程来说,更动态的语言将会胜出
.........
下一个受欢迎的语言不会是基本类型和对象混合的语言
java强调异常检查,但是这样弊大于益
java过渡依赖XML
java处理字符串能力比较弱
java学习越来越复杂,让人不想接触
java语言变得复杂,使得不使用IDE就会完全失控
重点:
java最重要和最基本的工作,也就是关系数据库上的web用户界面,我一点都不认为java的框架现在的方向是对的。大多数框架都一直在快速的增加新的特色,而不是简化已经乱成一团的现状。
java变得只适合大型企业系统开发的语言和平台,就算是简单的问题,java也处理的复杂
java社区长久以来都在忍受太多的架构、xml、层次
第五章:
Lisp具有很高的生产力,但一般人不容易这个语言。
perl即丰富又具威力,但相当不一致,且不易维护
下一个语言一定需要支持虚拟机
必须处理因特网的需求,且比java做的更好
必须应该让你以有生产力的方式处理xml、效率也必须很好
下一个语言应该和java程序相互合作,最好还是同一个虚拟机
许多技术都超越了java,但还是赢不了java
生产力将会是经济上的催化剂,开始侵蚀java的根基
python具有简单的语言和语法,但是web链接库则一点都不具有可亲性
拦截器是小孩子的玩意,你可以使用元编程作出让人惊人的事情
我喜欢python的样子,但是我不认为这是最终的语言,python最大的问题是缺乏java程序员离开的理由,python需要一个杀手级的应用,就像Ruby的ROR,我们已经定论,python将会成为一个适度成功的动态语言,比Smalltalk成功的多。
身为一个java程序员,大概也看过试着做太多事的jsp网页,这种网页写起来很快,但很快会陷入泥潭
.........
..........
第九章
Steve Yegge :Python Ruby Groovy
Ruby和Python有很多优点,它们执行的都太慢,需要编译和VM
其次这2中语言,需要对并发的支持程度,我将赌注放在了Ruby
Groovy很酷,但问题也很严重,除了营销做的好之外,其它简直糟透了
元编程在某种形式上将会越来越来成为现代语言的重要特性。
Java限制你扩展类的方法,要进行反射就必须做很多繁琐的事,许多时候还得用许多不自然的方法(像是byte code增强、程序代码生成、动态proxy)
Ruby或许不会像Java这么广大的链接库,但是缝隙正在迅速缩小
有一些小细节会阻碍Python的发展,如有些人不喜欢空白在Python中被强制,这样失去了灵活性
Perl Lisp PHP作者不认为会流行起来
或许根本不会有下一个东西