导读

1 这本书适合谁

《Java》是一本介绍Java编程的书。对Java编程感兴趣,并想使用Java语言开发软件,无论是给安卓手机开发软件,还是想用Java开发网站,甚至中间件的人,都可以从本书中获得最重要的基础知识。

本书的副标题是“有趣有料的Java编程”。如果你是一位对Java编程语言和计算机历史有强烈兴趣的爱好者,想必你一定也想了解编程语言和编程范式背后的故事,本书也能够充分的满足你的要求。副标题里的有趣和有料,对本书来说,意味着收集了很多有趣的编程故事,根据这些故事,再挖掘故事背后的历史真相。

事实上,依我所见,最好的学习方法是通过追溯编程语言的发展历史,了解语言从何产生,因何变化,一边在历史中考证语言的进化,一边在实践中学习编程的技巧,边考据,边学习。只有这样,才能更深入的理解语言进化的脉络,更真切的领会语言设计者的意图。

如果你认同以上的观点,那么这本书就适合你。

2 需要什么技术基础

从什么技术层面切入到Java编程领域?这是一个非常容易引起争论的话题。类似的问题还有学编程要求数学很好么?哪一门语言最适合初学者?要先学数据结构或者操作系统么?英语不好能学编程么?我认为学习编程和其它事情一样,比如学吉他、吹口琴、做蛋糕、追女孩…… 最大的障碍是:行动。

我们初中学过一篇清代文学家彭端淑写的古文,名字叫《为学》。在这篇文章中,讲了两个四川的和尚要去南海,一贫一富,富者说他准备了好几年,要买一艘船顺着长江去南海。穷和尚说他只有一个盛水的瓶一个盛饭的碗。过了一年,穷和尚从南海归来,而富和尚还在准备。

现在都已经是AI时代了,能搞明白个20%就开始动手吧。否则,光精神内耗,不停的纠结要不要做,纠结十个月,你喜欢的女生都给别人生孩子了。先上车再补票,实在不行,再下车呗,反正也没买票,还多了一段乘车的体验。

善于下大棋,看二十步还没走一步的人,别说在AI时代了,就算在任何时代都活不过一集。比如,1807发生了第二次哥本哈根战役,丹麦的海军被英国摧毁,哥本哈根这个城市还被炮击。丹麦投降,但是痛定思痛,觉得这样不行,要建立一支舰队再跟英国人搞一次,一血前耻!他们就种植了大量的橡树,无奈橡木生长缓慢,200年后才长成。2007年,丹麦的林业局通知丹麦海军,橡木终于长成了,可以去造船跟英国佬死磕了!只是,大家都不懂,橡木如何加工成航母呢?

对本书来说,如果你有编程的经验,相关的知识都储备的很好,那当然很好;如果没有编程的经验,也没有储备相关的知识,那也很好。千里之行,始于足下,本书对有无编程经验不做要求。人总要有第一次,理论重要,实战更重要,台上一分钟,台下十年功。

3 需要什么学习环境

小的学习环境是一台电脑,分硬件与软件两个环境。

硬件环境:一台可以运行的电脑是必不可少的,对硬件的要求不高,只要日常能上网的电脑,都可以用来学习Java编程。简单来说,能打主流游戏的电脑,肯定能学编程,能编程的电脑,可不一定能打游戏。但是,家长/女朋友/老婆并不知道这回事,你可以以学习的名义,配一块4090显卡。

软件环境:Java是跨平台的,所以对电脑运行的操作系统没有要求,无论Windows、Linux还是苹果的Mac OS都可以。目前Java的稳定版是21,也是本书使用的版本。

不过呢,当要体验新特征的时候,确实需要更新的版本,到时候再说。Java现在进化很快——这也意味着曾经Java进化很慢——目前Java疯狂的从Kotlin,Swift等一众新生代语言中汲取力量,老黄瓜刷绿漆——装嫩。

大的环境就是教育了。大家可以想这样一个问题,中国教育与中国足球哪个更有希望呢?

我觉得,中国教育会更有希望,尤其是计算机专业。原因是,有大量的学生上大学后根本不上课,而是借助大学提供的巨大便利(主要是父母没法盯着了),通过网络自学,然后自谋职业。先用编程把自己的肚子填饱,如果还能学好英文,通过网络给外国的公司打工,如果干的好,就直接移民了,做世界公民不香么?

不要辜负这个时代啊!

4 中英对照的问题

计算机书有一个不能回避的问题是中英文对照,如何在中文和英文中保持平衡,对我来说是一大难题。在本书中,英文主要可以分为两大类,一类是涉及到的英文人名和英文公司名,别一类是涉及到的编程专业术语。

对第一类来说,我决定统一保持英文名,像Java之父James Gosling,Sun公司。对第二类来说,就比较不容易权衡了,像Base Class是翻译为“父类”好呢,还是翻译为“基类”好呢?还有Derived Class是翻译为“子类”好呢,还是翻译为“派生类”好呢?这都没有统一的叫法。

考虑到咱们国家的英语教育已经从小学开始了,能学编程的人,大部分都已经受过相当年限的英语教育,我决定在本书中,大部分类似面向对象,构造函数等不会产生歧义的用中文,少部分有歧义的,使用英语。像一些诸如SDK(Software Development Kit)这样的简写,如果翻译为中文“软件开发工具包”,感觉比SDK更拗口,这时候也使用英文。

以讹传讹的大家心领神会就好,比如NBA有个球队叫费城76人队,其实人家跟76人没有任何关系,而是纪念1776年美国独立宣言。当然,这个说法也只是众多说法中的一个,但是我们的目的是知道怎么回事,而不是去死扣这些字眼。

5 编程的未来

现在AI横行,编程的未来是属于自然语言编程的。最佳的状态是,你跟AI对话,或者插个脑机接口,AI就把你要做的事情做完了。根本不存在除AI之外的软件了,一切都是AI。但是那一天,鬼知道什么时候能到来。

在AI完全搞定一切之前,编程语言与程序员尚有生存空间。即使在今天,AI对程序员的帮助依旧巨大。我觉得,哪门编程语言容易重构,就应该学习哪门编程语言。因为,在GitHub Copilot、OpenAI GPT……一众多模态大语言模型的帮助下,我们可以用“自然语言”来让AI帮我们“生成”代码,如果“生成的代码”不满意,就再让AI重新生成一次……

先学点,容易阅读,容易重构的编程语言,然后等着被自然语言取代吧。

6 (严正)声明

当我看到很多的明星、达人、大V以及显贵用蓝底白字的声明或者严正声明的时候,又是喊律师,又是删帖,又是封号的时候,他们实际上是要开始说谎了。语气越是咄咄逼人,内心越是脆弱不堪。

但是,没想到吧,我也要声明一下,用来甩锅。

能力不同,展示的水平就不同。以世界杯为例,一样的球,一样的球场,一样的草坪,对中国队而言,磕磕绊绊的打入32强,已经是莫大的胜利,但对巴西队而言,漂漂亮亮的夺冠才是他们的目标。

小时候,我有点喜欢足球,看的甲A。真正让我爱上足球的是1998年的法国世界杯,那届世界杯,我认识了罗纳尔多,他展现出来的华丽技术让我惊叹,从此让我沉迷足球,他是我足球的“初恋情人”。

在这本书里,我要向读者展示我的Java技术,对此我深感畏惧,诚惶诚恐。我尽最大的努力展示我最好的技术给各位。希望这本书让您喜欢上编程,喜欢上Java。

虽然我希望能展示出巴西队“华丽”的桑巴技术,但是我也深知水平所限,可能展示成了中国队的“磕磕绊绊”。如果看了这本书,您仍然不喜欢编程,那不是编程不好,也不是Java不好,是我展示得不好。

足球是世界第一大运动,并不因为中国队踢的稀烂而不成为第一大运动。Java是房间里不可忽视的大象,并不因为有个叫栋哥的讲的稀烂而成为小众语言。

无论如何,愿您早日碰到自己编程的“罗纳尔多”。