为了学到更多的新知识,我们经常会去网上搜索各种学习资料。或者,在学习、工作过程中遇到了解决不了的问题,我们也会去网上搜索答案(比如百度、谷歌一下)。这篇文章,主要想跟大家聊聊关于学习资料的选择。

建议

山寨

在日常生活中,有时稍有不慎,我们可能会买到一些让人哭笑不得的山寨商品,比如

  • 蓝月壳(正品:蓝月亮)
  • 娃啥啥(正品:娃哈哈)
  • adidogs(正品:adidas)
  • 六日兔(正品:大白兔)

山寨商品

谣言

有时也会在网上看到各种谣言、假新闻,比如在新冠疫情期间,就出现了很多谣言,这些造谣者还真是唯恐天不乱呀,我选了几则脑洞比较大的给大家“欣赏”一下。

新冠疫情期间的谣言

所以,不管是购物,还是看新闻,官方渠道才是最靠谱的。

学习资料

我们在网上找学习资料时也是如此,肯定是优先选择官方资料最靠谱,不然也可能会遇到“山寨”的学习资料,最后导致自己吸收了错误的知识。我们要学习的很多软件开发技术,都源自西方国家(比如美国),因此很多官方资料都是全英文的,有时官方也会提供中文翻译版,或者会有一些热心的网友进行翻译。关于Java学习资料的选择,我给大家的核心建议是:不要完全相信任何非官方的技术资料!!!

非官方资料

网上的很多非官方资料都有以下特点:

  • 作者往往都是只按照自己的经验在写文章,但是这些经验就是对的么?不一定。很多知识点都是粗糙验证一下就得出结论,并没有考虑全面和严谨,也没有参考官方资料
  • 文章的抄袭现象也比较严重,看到写得有点道理的,就把它给抄了。你抄我的,我抄你的,只要有一个人的文章写错了,其他一大片人写的文章都是错的

推荐

Java的官方是Oracle公司,这里给大家推荐一个Oracle官方的Java SE学习资料:The Java Tutorial(全英文),觉得看英文费劲的话,可以用工具翻译一下。

错误资料

为了让大家充分认识到官方资料的重要性。下面给大家列举几则不同领域的错误资料。

  • 我并不认识作者,对作者也并无偏见,只是针对文章内容进行讨论
  • 如果你还没有学过相关的专业知识,看不懂文章的内容是正常的,也不需要你看懂,你只需要知道这篇文章大概哪里有错就行

数据结构之红黑树

这篇文章的标题是《史上最清晰的红黑树讲解(下)》。文章中的这幅图画得有问题,因为它根本就不是一颗红黑树,图一旦错了,后面的所有操作都是没有意义的。

错误的红黑树

下图是我在文章底下发表的个人浅见。

我的个人浅见

下图是其他网友的见解。有人表示质疑。也有人没看出有啥问题,并表示很赞。

其他网友的见解

C\C++的sizeof

这篇文章的标题是《C语言中简单的sizeof()函数》。不用看文章内容,因为标题就已经错了。在C\C++中,sizeof并不是函数,它是一个运算符,函数和运算符是有本质区别的。但凡作者懂一点点汇编语言的话,都可以很容易通过汇编语言去证明sizeof并不是一个函数。

CSS选择器[att|=val]

w3school这个网站估计很多学习前端开发的人都知道,里面有大量前端开发的资料。但是,一个网站很知名,并不代表它的内容完全正确,毕竟它并不是官方。所以,我并不会完全相信它里面的内容,也基本不会去这个网站查询资料。这里有一篇w3school关于CSS选择器的文章,关于属性选择器[att|=val]的描述,极其不严谨:

选择att属性值以"val"开头的所有元素

CSS的官方是W3C组织,再来看看W3C官方的描述

Represents an element with the att attribute, its value either being exactly "val" or beginning with "val" immediately followed by "-" (U+002D).

简单翻译一下,官方的大概意思如下:

选择att属性值刚好等于"val"或者以"val"开头并且后面紧跟着一个减号(-)

如果你还不能感受到w3schoolw3c官方描述的差异之大,我举一个实例。比如有以下4个元素

<div id="mj">div1</div>
<div id="mj-xmg">div2</div>
<div id="mj_xmg">div3</div>
<div id="mjxmg">div4</div>

假设我使用属性选择器[id=mj]

  • 按照w3school的描述,会选择div1、div2、div3、div4四个元素
  • 按照w3c官方的描述,只会选择div1、div2两个元素,div3、div4不符合要求

能感受两者描述的千差万别了吧?它们是完全不相同的两个意思!

Java中class的JDK版本

这篇文章的标题是《如何查看class文件的jdk版本》,于2015年7月30日发表。

低级错误

上图中有3处低级错误,我都用红线画出来了。

  • 8个字节CA FE BA BE,正确说法应该是:4个字节CA FE BA BE
  • 4个字节00 00,正确说法应该是:2个字节00 00
  • 4个字节00 33,正确说法应该是:2个字节00 33

学过计算机的同学应该都知道这属于计算机常识,所以这是非常非常非常低级的错误。到了2019年,还是有别的作者转载了这篇文章,标题也是《如何查看class文件的jdk版本》,内容也是一模一样的,没做任何变动。4年过去了,依然还是很多人不知道这篇文章是错的。

我觉得大家多写技术博客、热爱分享是件很好的事情。但是如果大家在写文章的时候,能够多参考官方资料、多加验证后再发表出来,那么我们技术圈的文章质量就会越来越高,作者自身的技术水平也将真正变得越来越好。

另外,如果你经常写优质的技术博客,当你写到一定程度时,自然而然就会有出版社的编辑找你合作写书,机会都是留给有准备的人。当然,写书并不是一件容易的事,有很多严格的要求。

书中的错误

听我说完前面的几个错误示范,你可能会想:那我选择看技术书籍应该会好很多吧?毕竟书本应该是比较严谨的吧?我想说的是:你想多了!首先,很多出版社是不清楚图书内容对错和含金量的;其次,图书的内容是由图书作者编写的,跟他在网上写技术文章并无太大区别,就是格式不一样,图书有一套严格的格式要求。所以,不管是网上的技术文章,还是你平时看的某些技术书籍,都可能是有错误的。比如这本翻译的书籍《CSS权威指南》。

CSS权威指南

书中错误的地方我已经用红线框住。

书中的错误内容

来看一下W3C官方的说法:

A double bar (||) separates two or more options: one or more of them must occur, in any order.

简单翻译一下,官方的大概意思如下:

它们至少出现1个,而且是任意顺序

而《CSS权威指南》中说的是必须以先X后Y的顺序出现,跟官方的说法完全不相符。

官方文档的错误

看了这么多的错误示范,你可能又会想:那以后优先选择官方文档,总不会错了吧?是的,在我看来,这是最好最严谨的选择。不过,需要提醒的是,官方文档也是人写出来的,是人难免会出错,所以其实官方文档也可能会有错误。比如之前我在阅读W3C官方文档时就发现了一处错误,是一篇关于background属性的介绍。

  • 错误写法:background-size: 10em 10em;
  • 正确写法:background-size: 10em auto;

W3C官方文档的错误

我于2017年12月6日给W3C官方提交了修改建议,后来在2018年1月13日被W3C官方采纳了,说明这的确是个错误。

修改建议已被W3C官方采纳

虽然官方文档也可能会有错误,但是这种情况是少之又少的,而且一般都不会是原则性、很离谱的错误。总之,优先选择官方文档就没错了!还是那句话:不要完全相信任何非官方的技术资料!!!

最后的提醒

我写的文章,也属于非官方资料

  • 大家看的时候也要持保留态度,也是一样,不要完全相信
  • 官方资料大多都是英文,而且西方人的阅读习惯和我们不太一样,所以这其实给初学者带来了不小的学习困难
  • 《秒懂Java》系列的内容是以官方文档为主要参考资料,经过一系列严谨查证后,最后再得出结论
  • 我会尽力使用通俗易懂的语言,让大家能够轻松愉快地学到严谨又全面的知识
  • 如果大家发现了我哪里不严谨的,希望能够直接指出,感激不尽

我一直都觉得:在学习技术的过程中,最重要的阶段就是初学阶段,你第一次接触的学习资料极其关键,一定要找一份靠谱、优质的学习资料。这就好学习讲普通话。

  • 如果你一开始是跟着广东人学习讲普通话,那么你的普通话可能就会带有广东口音,就算你后期改为跟着北京人学习普通话,且经过了长期的刻意训练,可能还是会有那么一点点的广东口音
  • 但是,如果你一开始就跟着北京人学习讲普通话,那么你的普通话从一开始就是非常正宗的,就算后面经常跟广东人交流,也不会把自己的普通话给带偏

github

简介

最后,给大家介绍一个作为程序员(软件开发工程师)必须要知道的网站:github

  • 它是全球最大的程序员交流网站
  • 由于程序员以男性居多,所以它也被网友调侃为是全球最大的同性交流网站GayHub

全世界的程序员都可以将自己的编程作品(完整的软件、代码片段等)上传到github,共享给其他的程序员去阅读、学习、下载、修改,所以你也可以理解为github是一个代码仓库。这种将自己的代码分享、开放出去的操作,我们叫做开源,也就是开放源代码(Open Source Code)。

如果你立志要成为一名优秀的程序员,那么就点击“Sign up”注册一个github账号吧。

注册github账号

提高开发效率

以后你在开发过程会经常用到这个网站。比如当你不知道某个功能该如何实现时,就可以去github上搜索相关的代码,很多时候你想实现的功能,别人都已经实现过了,直接把别人写好的优秀代码下载到自己的项目中即可。这样的话,你就不用去亲手写这段代码了,极大地提高了开发效率。

学习交流

github集结了全世界各地的优秀程序员,他们开源了非常多的优秀作品,都值得我们细细品读和学习,我们能从中学到非常多的代码编写技巧、编程思想等,有助于提高我们自身的技术实力。

你也可以给别人的作品提交代码(比如修改建议、新的功能),成为该作品的贡献者之一,与全世界的其他程序员一起来维护这个作品,让这个作品越来越好。

当你的开发经验积累到一定程度时,手里肯定也攒了很多优秀的编程作品,你也可以考虑把它们开源到github。全世界的其他程序员也可以给你提交代码,跟你一起来维护这个作品,你必然也能从中学到不少技术。

这是我的github主页:https://github.com/CoderMJLee,我也很喜欢开源自己平时的编程作品,点击Follow即可关注作者的动态。

我的github主页

更多的机会

github上有个点赞功能,别人给你的作品点一个赞,你就会得到一颗星星(star)。一般星星数量越多,就说明你的作品越受认可越优秀。一般有上千颗星星的作品,都算是不错的作品。当然,星星数量并不是绝对的参考标准,不是说星星数量少的作品就一定不行。

github的star功能

现在很多公司的招聘需求中,都有直接表明:拥有或参与过github优秀作品是加分项。

某企业的招聘需求

当你在github上积累到一定程度时,也可能会有大厂HR主动邀请你加入他们团队。在2017年初时,我曾收到过微软HR的面试邀请,电话沟通了一番,由于当时我已经在创业,并且他们工作地点又在上海,就没有考虑这次机会。当时也有聊到薪资要求,我说我之前是7位数年薪,她说只要达到技术要求,这个是没有问题的。我举这个例子,并不是想说明我的个人能力如何,因为这仅仅是面试邀请,面试是否能通过,这还是个未知数。我只不过是想借助这个例子告诉大家github这个平台对我们来说很重要。

如果你是名初学者,现在也不用想太多,一步一步来,慢慢积累,积累到一定程度,机会自然会找上门,该有的都会有的!但是如果你没积累好,就算会有机会摆在你面前,你也抓不住,眼睁睁看着机会从手中溜走!最后送大家一句我一直都非常喜欢的8个字:你若盛开,蝴蝶自来!加油!