前段时间在豆瓣上无意间看到一个帖子“我为什么把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编程思想 》的更多相关文章

  1. 再读<<基于MVC的JavaScript Web 富应用开发>>

    工作的时候粗读过这本书的几章内容,真真是囫囵吞枣~~目前手边就剩这一本,重新读才觉得先前是没看明白啊!这个作者博闻强识,对这些插件.库了解的非常多.记录下,查的资料 订阅/发布 jQuery Tiny ...

  2. [已读]基于MVC的Javascript Web 富应用开发

    这本书是12年出版,我买的时间应该是13年,书架上唯一一本盗版→ → 但是看完是在今年. 因为刚拿到的时候,读起来很是磕磕绊绊,就搁置了蛮久.到第二次拿起来的时候,发现已经有部分内容过时,但我还是觉得 ...

  3. 试读《基于MVC的JavaScript Web富应用开发》— 不一样的JavaScript

    前言 <基于MVC的JavaScript Web富应用开发>是ItEye在7月份发起试读的书.下载了试读的章节,发现只有全本的开始到第二章,第一章很简洁明了地讲述了JavaScript的历 ...

  4. 试读《基于MVC的JavaScript Web富应用开发》

    前两年做jsp开发时,用了不少JavaScript(JS)和Ajax, 最近的项目一直在使用Flex做前台,虽然也有类似的ActionScript实现JS的功能,但没想到的是,短短几年JS发展如此迅速 ...

  5. 《基于MVC的JavaScript Web富应用开发》学习笔记

    第1章 MVC和类 1. 什么是MVC? MVC是一种设计模式, 它将应用划分为3个部分: 数据(模型, Model), 展现层(视图, View) 和用户交互层(控制器, Controller). ...

  6. 基于MVC设计模式的Web应用框架:struts2的简单搭建(一)

    Struts2的初步介绍 Struts2是apache项目下的一个web 框架,普遍应用于阿里巴巴.京东等互联网.政府.企业门户网站.虽然之前存在了很大的安全漏洞,在2013年让苹果.中国移动.中国联 ...

  7. Struts2是一个基于MVC设计模式的Web应用框架

    Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互. Struts ...

  8. 基于soap 的 python web services 服务开发指南

    文章大纲 序言 相关概念 SOA web services SOAP WSDL UDDI 环境搭建 我们使用 python 3.6 这个较新python 版本 服务端开发 客户端开发 suds-jur ...

  9. 【源码分析】HashMap源码再读-基于Java8

    最近工作不是太忙,准备再读读一些源码,想来想去,还是先从JDK的源码读起吧,毕竟很久不去读了,很多东西都生疏了.当然,还是先从炙手可热的HashMap,每次读都会有一些收获.当然,JDK8对HashM ...

  10. 《基于MVC的Javascript》

    var Class = function(){ var klass = function(){ this.init.apply(this,arguments); } klass.prototype.i ...

随机推荐

  1. LeetCode:前K个高频单词【692】

    LeetCode:前K个高频单词[692] 题目描述 给一非空的单词列表,返回前 k 个出现次数最多的单词. 返回的答案应该按单词出现频率由高到低排序.如果不同的单词有相同出现频率,按字母顺序排序. ...

  2. 94. Binary Tree Inorder Traversal(二叉树中序遍历)

      Given a binary tree, return the inorder traversal of its nodes' values. For example:Given binary t ...

  3. day1 python判断输入的密码是否正确

    _username = 'leon' _password = 'zyl' username = input("username:") password = input(" ...

  4. alter table add constraint 用法

    1.主键约束: 要对一个列加主键约束的话,这列就必须要满足的条件就是分空 因为主键约束:就是对一个列进行了约束,约束为(非空.不重复) 以下是代码   要对一个列加主键,列名为id,表名为emp 格式 ...

  5. 重置root密码后仍然不能登陆

    一.忘记密码:二.输入正确用户名和密码时依旧无法登录. 一.忘记密码 进入单用户模式重置密码: 开机启动时,按‘E’键(倒计时结束前)进入界面 选择第二项,按‘E’键再次进入 在最后一行添加‘ 1’( ...

  6. shell脚本小示例

    求1-100自然数的和: 法一:for循环 #!/bin/bash # declare -i sum=0 for ((i=0;i<=100;i++));do let sum+=$i done e ...

  7. 配置iptables实现本地端口转发的方法详解

    场景假如你在用 resin 调试一个 Web 程序,需要频繁地重启 resin.这个 Web 程序需要开在 80 端口上,而 Linux 限制 1024 以下的端口必须有 root 权限才能开启.但是 ...

  8. iOS动画进阶 - 手摸手教你写 Slack 的 Loading 动画

    如果移动端访问不佳,可以访问我的个人博客 前几天看了一篇关于动画的博客叫手摸手教你写 Slack 的 Loading 动画,看着挺炫,但是是安卓版的,寻思的着仿造着写一篇iOS版的,下面是我写这个动画 ...

  9. Pyspider爬虫教程

    Pyspider爬虫教程 一.安装 1. 安装pip (1)准备工作 yum install –y make gcc-c++ python-devel libxml2-devel libxslt-de ...

  10. 比较好的SQL

    DECLARE @Data NVARCHAR(30);DECLARE @Data2 NVARCHAR(30);SET @Data = @DataDate;SET @Data = CONVERT(CHA ...