1、程序设计就是对复杂度的管理,复杂度包括:待解决问题的复杂度和所依赖的机器的复杂度。正是这种复杂度的存在,导致了大多数项目的失败。并且据我所知,还没有哪个程序设计语言将主要设计目标放在“征服程序开发和维护过程中的种种复杂度”上。
(下面开始列举了其他语言的种种不足,几乎每本技术书的开篇就是王婆卖瓜的形式出现的,给读者点鼓励嘛,不要被厚厚的砖头般的书吓到。搞计算机的女生的好处是,晚上在你回宿舍的路上,不幸遇见歹人拦路打劫,你只需随便抄起一本书就能把他打个半死。好的技术书不仅能丰富知识,也是居家旅游、贴身自卫的最佳工具。C++本身就很复杂,用复杂的语言描述复杂的问题,对设计者和程序员的要求都很高。)
2、最令我印象深刻的是sun公司在设计Java时的目标:为程序员降低复杂度。好像是在说“我们关注于减少编写出健壮代码的开发时间和难度。”同等功能的C++程序,java只需要一半或者更少的时间。只凭这一点,就能省下大量的时间和金钱。
(这点确实是事实,Java的开发效率比别的语言高不少。我学过一段时间的C++,大概是世界上最复杂的语言吧,很痛苦。初学java时,感觉那个hello world 怎么这么复杂,后来就好了很多,并且不打算再学C++了。simple is good!听说硅谷那边java很热,因为稍微有点规模的公司都有自己的系统,java的跨平台特性导致了这帮家伙玩命地学java。)
3、我们不应该将java仅仅看作是一组特性的集合---有一些特性在孤立状态下没有任何意义。只有在考虑设计,而不仅仅是编码时,才能完整地运用Java的各个部分。而且要按照这种方式来理解Java,必须理解它所涉及的问题以及在程序设计时所伴随的问题。……按照这种方式,直到Java思想意识称为你最自然不过的语言。你需要在头脑中创建一个模型,以加强你对这种语言的深入理解;如果你遇到了疑问,就将它反馈到头脑中的模型并推断出答案。
(为什么这本书是很多人推荐的,学Java的首选教材?就是编程思想!也是我打算重温此书的原因之一。简言之:不仅要知其然,还要知其所以然。汉语比鸟语精炼得多。)
读书笔记《Thinking in Java》-第一章-07/10/13
1、所有编程语言都提供抽象机制。可以认为,人们所能解决的问题的复杂性直接取决于抽象的类型和质量。……汇编、C等所做的抽象仍要求在解决问题时要基于
计算机的结构,而不是基于所要解决的问题的结构来考量。程序员必须建立起在机器模型和实际解决问题的模型之间的关联。建立这种映射是费力的,而且这不属于编程语言所固有的
功能。
(早期的程序员都是很强的……)
2、面向对象方式使得程序员不再受限于任何特定类型的问题。这种思想的实质是:程序可以通过添加新类型的对象,使得自身适用于某个特定问题。因此,在阅读描述解决方案的代码的同时,也是在阅读
问题的表述。所以OOP允许根据问题来描述问题。每个对象看起来像一台微型计算计---他有状态,也有操作……
(创建一个学生管理程序,首先最重要的类是Student,他可以有名字、、院系、班级等属性,并且可以计算每个学生的综合素质评分、打印各科成绩等等。一旦这些都描述好了,你就可以创建学生Student实例,对学生执行操作了。这就是OOP吧。)
3、面向对象的五个基本特征:
A、万物皆对象。(Java中的原始数据类型就不是对象,但是这是出于对效率的权衡。再者说了,每个原始数据类型都有相应的包装器类型,这就把原始类型对象化了。)
B、程序是对象的集合,它们通过发送消息来告知彼此所要做的。(通过“.”操作符。)
C、每个对象都有自己由其他对象所构成的存储。(楼对象是由钢筋、水泥、砖头等等这些对象构