再读《Java编程思想 》
前段时间在豆瓣上无意间看到一个帖子“我为什么把thinking in java 读了10遍”,是11年的帖子,下面评论至今,各种声音都有,不过大多数还是佩服和支持的。我个人来讲也是非常支持的,而且也打算再读《Thinking in Java》,上学那会老师再三强调:“读书百遍,其义自见!”,但是对于程序猿,不光要读,而且要实践。
一、为什么要再读
上一篇,我曾经说过,如何在Java界立足,凭借的就两点:
1、基本功,包括:Java基本知识,(Java编程思想、Effective Java),Java进阶(Java虚拟机、Java设计模式)、网络相关(这个时代没有网络就没有一切,Java网络编程、HTTP权威指南、TCP/IP协议),计算机系统相关(编译原理、深入理解计算机系统等)这些都是根本,所谓万变不离其宗,在掌握这些基本功的基础上,再学习新技术,面对日新月异的新技术时就会游刃有余。
2、将琐碎知识串联起来的能力,也就是归纳总结能力。无论是在工作中还是学习中,起初用到的知识是东一块、西一块,其实许多东西都是关联的,通过系统的梳理形成自己的知识体系,打造属于自己的专属领域,这也是在Java界立足的根本。
对于很多程序猿来说,或许都有体会,一本编程类的书,特别是像《Thinking in Java》这样阐释内部原理的书读一遍是不行的;在编程一段时间之后(遇到各种问题)再读此书,有些问题就会豁然开朗,比如“==”和“equals”的区别、为什么覆盖equals时总要覆盖hashCode、为什么向上转型是自动的向下转型却需要Cast,为什么要使用Enum类代替常量,等等这些问题,在读此书后都会找到答案。借用此书绪论中的话:
Like any human language, Java provides a way to express concepts. If successful, this medium of expression will be significantly easier and more flexible than the alternatives as problems grow larger and more complex.
You can’t look at Java as just a collection of features—some of the features make no sense in isolation. You can use the sum of the parts only if you are thinking about design, not simply coding. And to understand Java in this way, you must understand the problems with the language and with programming in general. This book discusses programming problems, why they are problems, and the approach Java has taken to solve them. Thus, the set of features that I explain in each chapter are based on the way I see a particular type of problem being solved with the language. In this way I hope to move you, a little at a time, to the point
where the Java mindset becomes your native tongue.Throughout, I’ll be taking the attitude that you want to build a model in your head that allows you to develop a deep understanding of the language; if you encounter a puzzle, you’ll feed it to your model and deduce the answer.
书中所有的概念或者模式的建立都是为了解决特定问题的,如果理解了这些,就能够高效、快速的使用Java。
二、怎么样读
1、实践
书读完之后贵在实践,不要“眼高手低”,特别是对于咱们程序猿来说,实践是检验真理的唯一标准,这句话非常恰当。书只是对代码的一个解读,唯有编码才能检验其是否正确。要把学到的都一点一点用到项目中去,例如要用Enum类代替常量
替换之前:
public static final String AUDIT_WAIT = "审核中"; public static final String AUCTIONING = "竞买中"; public static final String ENDAUCTION = "竞买已结束"; public static final String AUCTION_WAIT = "等待竞买";
替换之后:
public enum BidProductStatus{
AUDIT_WAIT("审核中"), AUCTIONING("竞买中"), ENDAUCTION("竞买已结束"), AUCTION_WAIT("等待竞买");
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
private String desc;
BidProductStatus(String s) {
desc = s;
}
}
2、读源码
有一句话,程序猿们应该都知道“Read The Fucking Source Code”,简称“RTFSC”,就是读源码。想知道其内部原理吗,那你就读源码吧,别无办法!就像Spring,为什么那么牛逼,一个功能,一个配置文件或者一个注解就搞定了,怎么做到的,去读源码吧!你会发现,经典的开源框架将Java运用到了极致,而且你还会学到设计模式。我的《Spring应用》专栏就是在读Spring源码的基础上完成的,而且我还要反复去研读。
三、总结
一个简单的工作反复的做,你就成了“专家”!此次为再读、后面或许还会有再在读、或许会读十遍呢,谁知道呢。以上纯属个人观点,在此记录、以兹鼓励!
再读《Java编程思想 》的更多相关文章
- 再读<<基于MVC的JavaScript Web 富应用开发>>
工作的时候粗读过这本书的几章内容,真真是囫囵吞枣~~目前手边就剩这一本,重新读才觉得先前是没看明白啊!这个作者博闻强识,对这些插件.库了解的非常多.记录下,查的资料 订阅/发布 jQuery Tiny ...
- [已读]基于MVC的Javascript Web 富应用开发
这本书是12年出版,我买的时间应该是13年,书架上唯一一本盗版→ → 但是看完是在今年. 因为刚拿到的时候,读起来很是磕磕绊绊,就搁置了蛮久.到第二次拿起来的时候,发现已经有部分内容过时,但我还是觉得 ...
- 试读《基于MVC的JavaScript Web富应用开发》— 不一样的JavaScript
前言 <基于MVC的JavaScript Web富应用开发>是ItEye在7月份发起试读的书.下载了试读的章节,发现只有全本的开始到第二章,第一章很简洁明了地讲述了JavaScript的历 ...
- 试读《基于MVC的JavaScript Web富应用开发》
前两年做jsp开发时,用了不少JavaScript(JS)和Ajax, 最近的项目一直在使用Flex做前台,虽然也有类似的ActionScript实现JS的功能,但没想到的是,短短几年JS发展如此迅速 ...
- 《基于MVC的JavaScript Web富应用开发》学习笔记
第1章 MVC和类 1. 什么是MVC? MVC是一种设计模式, 它将应用划分为3个部分: 数据(模型, Model), 展现层(视图, View) 和用户交互层(控制器, Controller). ...
- 基于MVC设计模式的Web应用框架:struts2的简单搭建(一)
Struts2的初步介绍 Struts2是apache项目下的一个web 框架,普遍应用于阿里巴巴.京东等互联网.政府.企业门户网站.虽然之前存在了很大的安全漏洞,在2013年让苹果.中国移动.中国联 ...
- Struts2是一个基于MVC设计模式的Web应用框架
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互. Struts ...
- 基于soap 的 python web services 服务开发指南
文章大纲 序言 相关概念 SOA web services SOAP WSDL UDDI 环境搭建 我们使用 python 3.6 这个较新python 版本 服务端开发 客户端开发 suds-jur ...
- 【源码分析】HashMap源码再读-基于Java8
最近工作不是太忙,准备再读读一些源码,想来想去,还是先从JDK的源码读起吧,毕竟很久不去读了,很多东西都生疏了.当然,还是先从炙手可热的HashMap,每次读都会有一些收获.当然,JDK8对HashM ...
- 《基于MVC的Javascript》
var Class = function(){ var klass = function(){ this.init.apply(this,arguments); } klass.prototype.i ...
随机推荐
- LeetCode:N叉树的后序遍历【590】
LeetCode:N叉树的后序遍历[590] 题目描述 给定一个 N 叉树,返回其节点值的后序遍历. 例如,给定一个 3叉树 : 返回其后序遍历: [5,6,3,2,4,1]. 题目分析 这道题有好几 ...
- Python单元测试框架——unittest
测试的常用规则 一个测试单元必须关注一个很小的功能函数,证明它是正确的: 每个测试单元必须是完全独立的,必须能单独运行.这样意味着每一个测试方法必须重新加载数据,执行完毕后做一些清理工作.通常通过se ...
- Linux——网络配置及命令
traceroute命令(unix)/tracert命令(windows) tracert命令的格式为:tracert [-d] [-h maximum_hops] [-j host-list] [- ...
- VRChat简易教程4-使用VRC的接口实现物体的移动(VRC的action和trigger接口)
这个教程我们学习如何实现载具的驾驶 一.准备工作 1 最简单的载具驾驶需要至少两个元素,一是需要一个载具,二是需要一个前进的按钮(这里我们只做前进功能),为了直观的能感受到载具的移动,我们还得创造一个 ...
- 20145219 《Java程序设计》第05周学习总结
20145219 <Java程序设计>第05周学习总结 教材学习内容总结 try.catch 1.求平均数程序示例 import java.util.Scanner; public cla ...
- APPIUM API整理(python)---其他辅助类
App运行类 1.current_activity current_activity(self): 用法: print(driver.current_activity()) Retrieves the ...
- Android Gradle 构建工具(Android Gradle Build Tools)是什么?
转载地址:http://mrfu.me/android/2015/07/17/New_Android_Gradle_Build_Tools/ 译者地址:[翻]一览新的 Android Gradle 构 ...
- 在Linux系统下使用Github的基本教程
1. 安装git: sudo apt-get install git-core git-gui git-doc 2.到https://github.com/ 注册一个帐号,一会儿客户端登录的时候要使用 ...
- Mybatis中接口和对应的mapper文件位置配置深入剖析
首先要说明的问题是,Mybatis中接口和对应的mapper文件不一定要放在同一个包下,放在一起的目的是为了Mybatis进行自动扫描,并且要注意此时java接口的名称和mapper文件的名称要相同, ...
- LeetCode——Hamming Distance
LeetCode--Hamming Distance Question The Hamming distance between two integers is the number of posit ...