订阅业界RSS CSDN首页> 业界

专访谢宇:拒绝做程序员“砖工”

发表于2014-10-20 09:59| 次阅读| 来源CSDN| 0 条评论| 作者钱曙光

摘要:社区问答第十二期我们请来了淘宝网资深Java工程师谢宇担任嘉宾,谢宇今天所携带的图书为《Java特种兵》(上册),在这里会接受广大网友的提问,和你一起探讨Java的学习和开发。

淘宝网资深Java工程师、CSDN超人气博主、人称“胖哥”的谢宇今天将携他的新书《Java特种兵》(上册)做客CSDN社区问答栏目,担任第十二期的嘉宾,届时会接受广大网友的提问,欢迎各位网友前来与谢老师一起探讨Java学习。


谢宇(博客),淘宝网资深Java工程师,CSDN超人气博主,人称“胖哥”。

谢宇在进入大学前是一个不折不扣的计算机白痴,曾经被人笑话过不懂鼠标是什么,经过自己的不断努力与坚持,走到现在,自认为还算是一个不错的“泥水匠”。作者把在这一过程中所经历过的许多问题和技术细节,以及自己的学习经历和心理,记录在博客上,引发众多网友的共鸣。谢宇发现和自己有类似经历的人很多,在许多网友的支持下,决定写下《Java特种兵》(上册)一书分享给大家,希望这本书对徘徊在Java门外的初学者有一定的引导作用,能够提升Java入门者的单兵作战能力,独当一面!以下为采访正文:

CSDN:请和大家介绍下你和目前所从事的工作。

谢宇:我现在主要在阿里数据库技术团队从事数据产品相关的开发工作,所使用的语言主要是Java。

另外,关于“胖哥”这个外号,其实我本人并不胖,记得刚上大学不懂计算机的时候,同寝室的同学带我去网吧上网,他说要我搞个网名,但是我当时连上网是个啥概念都还搞不清楚,于是他就顺手帮我写了一个“小胖”,这个网名到现在一直没有变过。在一些群里帮助别人解决问题的过程中,我也一直以小胖这个网名,由于我年龄比群里很多小伙伴偏大,所以群里很多小伙伴以“胖哥”称呼我。

CSDN:你在进入大学前是一个不折不扣的计算机白痴,曾经被人笑话过“不懂鼠标是什么”,能否回顾下自己的成长历程,以及你是如何走上这工程师或编程之路的?这段经历给你最大的感悟是什么?

谢宇:呵呵,此时说来话长,提到“不懂鼠标是什么”这个话题,这个是真事,认识我的大学同学有不少人应该还记得,不过被人笑过这句话后,个性相对刚烈一点的我,往往不是放弃学业,而是更加奋进。

由于以前连计算机是什么样一个东西都不清楚,所以在大一学习计算机基础课的时候即使再刻苦,我也处于一种懵懵懂懂的状态,还记得当时经常跑到旁边的书店里面去看一些非专业计算机的计算技书来看,找到一些感觉。为了应付考试,我也死记硬背C语言的语法、计算机的基础理论。

这样的持续了1年多,不过在这1年多我在翻来覆去看那本已经考过试的C语言教材,我似乎每一次看这本书会有新的体会,在大2开学一个月时(国庆),我终于忍不住管家里要了3500块钱买了一台台式机,非常迫切的冲动想要去写程序。终于,我调试好了一段10行代码的小程序,当时的我开心得一晚上没睡着,^_^。

于此,我开始觉得自己可以尝试走这条路,于是坚持写代码,将书上的代码拿出来写,自己想到的拿出来写,当时一栋楼大部分小伙伴都在玩游戏,我却完全沉寂在自己的代码世界中,逐步我开始能写出100条、1000条、10000条代码,成为年级内几乎家喻户晓的代码狂,很多小伙伴写C代码搞不懂也过来问我。

后来开始学习数据结构、算法,让我开始对理解代码有所改变,也逐步开始感觉到思想和计算机基础的重要性。大二下学期和同级几位小伙伴组成兴趣小组,找了没人用的库房开始“自娱自乐”,我们经常会提出一些问题去问很多老师,最后一位老师在那个学期给我们出了一道题目需要用Java来完成,需要一周内完成,那个时候几个小伙伴都没玩过Java,而且已经到期末考试期间,大家都认为不太可能,不过大家并没有放弃,最终还是将问题搞定,这位老师也在后续两年中带着我们做了很多项目。

因此,走上计算机之路,我只能说被逼出来的,有些时候兴趣并不是天生的,我是在一个10行代码中找到了兴趣,于是选择了坚持。其实在毕业的时候,由于学校是二本,名称未师范大学,大多数企业不削一顾,加上自己外语不好,更加连门槛都“怕”不上去,很有幸最后加入了一家IT公司,被外派到上海,当时由于待遇极差的原因,并了解了行业的待遇情况,觉得做IT都这个样子了,几次想转型的念头,但又觉得大学的经历不想白费,还是放不下,坚持了将近10个月左右,经过大学同学介绍进了第二家公司,我至今很感谢这家公司,尤其感谢给我面试的面试官,一个很实在的人,至少让我感觉在这个世界上付出是可以被一些人所认可的。

再后来就入职了淘宝,一家互联网公司,各个一流的牛人数不胜数,这些让我兴奋不已,在这里学到了很多技术,并让我在一定程度上感受到基础学科对于深挖技术的重要性。

如果从人生角度的感悟的话,我个人觉得兴趣和坚持是相辅相成的,因为一个点我们有了一个开始,因为想去坚持,所以更加有兴趣,因为有兴趣所以会更加坚持。这句话我给某些小伙伴讲过,他们都认为我被“洗脑”了,^_^。其实我认为,人生入世本身就是一个“洗脑”的过程我们才有对社会的认识和各种看法,选择相信或不相信本身就是被社会某一面所影响导致的结果,很多时候每个人有自己的客观的看法与追求,知道自己每一天在做一些什么,一个所谓“被洗脑”的title对自己又有何妨呢?因为每一个人又不是生活在别人的眼光之下。

CSDN:你在学校时学了很多语言和工作后也学到了不少其它技术知识(从分布式计算、数据库、网络、高并发,再到CPU、内存、磁盘等等),为什么最终选择了Java?

谢宇:在前面的经历描述中,我提到更多的字眼其实是C语言,我当初对C代码,要说为什么做Java就是导师带我们做项目开始的,大家开始玩Java的,后来逐步很多C的细节也搞忘了,在大学毕业校招的时候,很多大公司过来都是考C、C++、数据结构、算法类的题目,看到那些曾经熟悉的身影,但自己却搞忘细节的时候,当时内心觉得十分失落。

不过大学就大二一年自己疯狂沉迷于C代码中,后来和导师做项目除学习一些Java语言外,主要在小组分工中做数据库方面的工作,因此我在毕业后其实一直有梦想去做一个DBA的想法,不过经历了很多事情过后发现自己更加适合做开发,也因此我最后在数据库团队做研发工作的缘由。

就分布式、高并发、计算机基础的知识,一些来自课本,很多来自大牛的介绍和自己的理解,一些来自工作场景的驱动去让我实践并加深理解。这些东西在我看来并不是对写Java代码的人没有用,或者说对开发从业者有敬畏之心的人应该是有用的。

要说Java的深挖,我不算,国内有不少的Java一流高手,并且不乏世界级的Java牛人,小胖在他们面前“卖专业度”的话简直就是“关公面前耍大刀”。从我的角度来讲,只是站在一个使用Java语言的从业者角度来看待我们需要了解一些什么,或者说让大家理解自己应该需要了解那些,让我们更加了解自己的程序是如何运行的,以至于我们可以写出更好的代码,更清楚它的内在,更透彻地评估它的综合服务能力。

提到分布式计算,和Java并不分家,现在很多分布式计算框架都是Java语言写的嘛,人尽皆知的Hadoop不就是么,它的变种Spark不也是么。很多分布式中间件也是用Java写的嘛。在这个基础上,自然会引来许多Java高并发的研究,或许有些人会觉得谈Java高并发很可笑,不过我不这么认为,因为Java谈高并发处理了谈它的性能本身外,还会谈及并发过程中各种资源征用和协调性的问题,以及整体架构的计算和服务能力的问题。

提到CPU、内存、磁盘,就更不用说了,任何程序都会消耗资源,这些都是计算机最基础的资源,也是程序开销最多的地方,我之所以提到了解程序如何运行的,其中一个很重要的侧面就是对这些资源的开销,这些话题还比较粗,看一个很粗的话题我们都会觉得很简单,要细看有很多细节我们才算得上真正的专业。

我其实是在决定选择Java后才选择的去深挖,选择深挖的原因有很多,有一部分是看到那么多高手,自己如果不去挖就会很落后,另一个原因或许算是“技术屌丝的一种艺术追求”,不然我们的工作将十分乏味和枯燥,久而久之我们就会真的觉得自己就是一个所谓的“砖工”

CSDN:这里你提到“砖工”一词,IT界很多人也提到“砖工”,你是如何理解的呢?

谢宇:这个是很有意思的话题哈,有普通工程师说自己是“砖工”,但也有大牛人谦虚地也说自己的“砖工”,就是看自己怎么来看待这些问题。

在前面我提到一个技术的瓶颈期,在我的理解就是一个“砖工”到一个“熟练砖工”的过程,但熟练到什么程度算熟练呢?当我们对熟练达到一定程度就会达到一种麻木,我们的发展方向在那里?看看周围的环境似乎到这个程度就到头了。

这就是前面提到的环境于成长,很多人并不是不想成长,而是很多成长被环境所控制,做出的选择就会不同,有人会选择放弃,由环境摆布自己的发展,有人会选择坚持自己所坚持的,去找寻新天地。

回到砖工的话题,有很多高手其实已经不是普通的砖工,他开始作为一个楼房、桥梁的建筑设计师,他需要思考各种地基因素、土壤硬度、材料、钢架结构的承载能力、力学原理等推算一些安全的楼房建设数字出来,反过来,我们不能感觉地基可以挖多深,感觉修多少层、感觉可以用什么样的钢架结构。难度再加大一点,一座斜塔到底如何修,到底能倾斜多少,这也不是我们拍脑袋拍出来的。当然站在另一个角度,我们就是设计造型、外观、采光、水源,更多会考虑当地是否会发洪水或涨多高。这些都是客观因素,虽然有很多经验可借鉴,但没有人敢在一个大工程面前完全凭经验做事情,这样逐步可堪称专业,结合实践小胖认为就是“真专业”。

这些高手之所以说自己也是砖工通常也是对自己的工作游刃有余,他们也期待更大的挑战,挑战自己从来没有挑战过的建筑造型或难度,如“长江大桥”、“东方明珠”、“自由女神”、“埃菲尔铁塔”等等我相信都是很多专业建筑师梦寐以求证明自我的理想。至少在我看来就是这个道理。在这个层面,有人开始有架构师以及更加层面的称号,小胖是一个比较逆天的人,对这些title比较“笑一笑”的感觉,尤其是国内这些词被用的很烂,因为我们大部分比较吃这一套,因为内心一颗“荣耀和自信”,但小胖不希望这份内心让自己迷失自我,我们不是因为有这个名号就是某个档次的人,也不会没有这么名号不是某个层级的人,这只是某个环境 下的一个衡量标准,自己需要有心理的追求和客观评价的标准,而一个称呼带给自己的更多是一份责任,需要面临更多更具有挑战的事情,更要为一些更重要的事情担当起责任及榜样

CSDN:你还记得你写的第一个有趣的程序是什么吗?

谢宇:第一个程序应该不算有趣,就是一个10行左右代码的程序,而且肯定不复杂,至于细节我已经搞忘了。虽然它足够简单,不过开始让我树立起对写代码的信心。

要提到有趣的,随便说两个:

  1. 一个算是大二下学期那位老师让我们用Java写一个抓取天气预报信息到本地的XML,并用Swing将天气预报的展现出来的过程,经历的过程在前面大致已经描述过。
  2. 另一个是在大四的时候,另一个大学的一个研究生希望我用Java帮它用Swing写一个可拖拽的“永动机”模型出来,当时晚上9点多开始写,那个研究生寝室6个人全部关灯睡觉,我在他们的桌子上写到早上4:30左右写好了,把那位哥们叫起来给他看了看,他说是他想要的,于是乎开始给他讲讲代码,以后如果要修改怎么修改,讲到早上6点多回家睡觉,这件事情倒是大学时候蛮有趣的一件事情。

我觉得有些时候经历的细节更是一种财富,因为这是一种可延续的人生财富以及宝贵的阅历,这也算是出书的一个原因吧。

CSDN:最近你有一本新书《Java特种兵》(上册)上市了,这本书是怎样诞生的?这是你的第一本书,写书过程中经历了怎样的困难?下册将会在什么时候上市以及和上册不同的地方在哪里?

谢宇:提到这本书的诞生,有很多因素。在几年的工作中,我也经常在帮助一些小伙伴解决一些问题,出书这个事情也是这群小伙伴提出来的,最早一个提出出书的时间已经是两三年的事情,我当时不太在意,觉得对方也就顺口一说,自己没啥群众基础,而且出书的话应该有“真牛人”去写比较好。

后来在一些群里,我也经常帮助一些小伙伴解决一些问题,在这个过程中,也偶尔有小伙伴希望我写本书,而我也同时发现很多小伙伴的一些特征:某些小伙伴并不是不知道某些知识,而是没有很好的利用知识,或者说在一些知识变通的思路上存在问题,所以经常让自己陷入在死胡同里面,有很多时候是来自于心态上的不自信导致的。还有一些小伙伴是喜欢把话说得很满,但技术水平是很一般的小伙伴,技术人员通常都有这样一个过程,只是需要一个合适的引导,希望它们看到天外有天的世界。还有一些小伙伴是技术控,喜欢钻牛角尖,探讨技术本身没什么错,不过这样久而久之,我们就真的不知道深挖技术的意义何在,我也希望通过一些方式让他们从另一个侧面去思考问题,不过这些小伙伴的思维是最难改变的,因为这种技术控的心态是一种沉迷,以至于难以自拔,因此很多时候我会反问一些比较狠一点的话题希望他们有所感悟。还有一些小伙伴很迷惑技术路线或管理路线,或技术路线是否走得通,环境没有给予机会等等想法,我也是觉得很多时候要看内心自己到底想要做什么,尤其是长远看,是否能走通不能仅仅看身边的人,更要看业界的牛人依然有很多是通过技术路线成功的,如果这是你向往的,那么就去坚持,如果这不是你所向往的,那么就可以选择其它的方式去做事情,例如可通过对代码的了解以后去管理或产品,这样也更加冗余与技术人员进行交流,以及评估工作量之类的问题。至于环境的问题,更多是自己的选择,很多问题也并非100%的真实环境才可以有成长,很多牛人也并非天生,而很多人是因为现在没有环境所以放弃了自己的坚持,因为不去坚持所以最终没有环境,陷入的思考是在“先有鸡还是先有蛋”的问题,可能这个问题过分纠结,我们工作瞬间就好几年了,而把这个时间花在提升自我的人,已经有能力去寻找更好的环境。

基于很多很多的原因,我觉得我可以写本书,要说到专业,与业界的“真牛人”相比相差甚远,即使在写书的过程中也一直在纠结这些问题,不过我个人的某些经历和思考或许值得去分享,帮助那些可能可以得到成长的人,也因此自己能够坚持下来。

因此在这本书里面,会看到不少“小有趣”的话题,还有很多类似“蜗牛”这样的名称,还有不少奇葩的问题看法,这些都是来自于不少网友提出的问题和他们的思考,这些名称也是一些网名,我想这群小伙伴拿到这本书或许会有着一种情切感在里面。

与此同时,我在本书前言也反复提到本书适合的读者和不适合的读者是什么样的,有的小伙伴跟我说:“胖哥,你前言提到不适合的读者,抹掉了好多人,对销量不好!”。对我来讲,并不是那么看重这一点,因为写这本书的初衷就是这样子的,前言中只是客观描述我的初衷,我只期望于合适的人购买合适的书能得到合适的收获。书中的重点并不是知识点本身,更加不是某个知识点的结果。因此我期望能静心的人能看出其中的分析和思考,将它善用于自己的项目中。

说到写书痛苦的点的话,主要是我不是专职写书的人,平时每天下班就很晚,然后抽空写的,去年大病一场应该也有点关系。因为写书的时间不多我也在不断思考自己是否写得够清楚,或别人是否真的能看懂,会不会产生啥误解,这是一件比较揪心的事情。另一点就是在写每一个知识点的时候,要去反复思考一个相对容易接受的案例,但是它又不是距离计算机那么远的案例,因为我不想用一个“大象”的案例来说一只“蚂蚁”的故事,^_^,写手稿是去年的夏天,那个时候我的女儿刚出生,老婆在家带孩子,解决了我很多后顾之忧,我看到女儿很多依依娃娃的表情,就开始有一些灵感。

不过这本书很多算是随笔,有不少错误,尤其是很多语句不通顺、错别字、比较混乱,这些请读者朋友谅解。我也期望一些读者朋友能够更多挖掘自己在书中所能够得到的,而不是挖掘自己所得不到的,帮忙提出问题我很开心,不过我更期望大家能在书中得到一些东西。

提到本书的下册,其实这本书是没有分上下册的,而是写完手稿后,发现字数已经远远超出与出版社当初的合同字数(大概是2-3倍),我有点舍不得砍掉那么多内容,最后与出版社商定分上下册出版,上册更加适合于大众,下册的内容并不是深挖上册的内容,但可以算是一些内容的延续,结合案例来说一些上册所提到的技术基础,另外会提到设计思想、项目中的沟通,在技术层面我们还会补充一些“坑”,然后介绍一些分布式技术的基础思想,最后会谈一谈程序员的心态,总之,某些知识点会在书中不同的地方出现,但是会以不同的侧面和理解程度而出现,在我看来或许是在比较合适的位置讲解某个话题,也就是书籍前言中所提到的:并不是以知识点为基础讲解,而是以一些事情来反推这些知识点。也正因为如此,如果期望在通过本书达到知识点积累目的的小伙伴可能会比较失望,对于走马观望式的阅读也通常得不到想要的点,因为我们不时会将某个问题再度深入或从另一个角度来探讨。

在上下册拆分后,小胖发现单看下册怎么看都不太满意,于是乎想再打磨打磨再发行,这种事情过分着急往往不好,加上今年再工作上十分繁忙,所以暂时还没有出,初步约定的时间会在春节前交稿给出版社。

CSDN:目前市场上关于编程语言Java的书籍有很多,能详细说说这本书有什么特别之处吗?

谢宇:首先,我不敢说我写的这本书写得好不好,这些应该由读者来说,我只是觉得我在写大部分话题的时候,都有一些自己的思考,这些思考未必是真理或者说肯定是正确的,但我想可以让很多人更加客观看待一些问题。

市面上很多Java书,这个没错,不过很多牛人也说拷贝情况很严重,我也这样认为,但知识写来写去其实点上面就那么一些,最深入的点很多老外写了,我去写无非也是拷贝,在本书也不会特别例外。因此非要说到特色,我觉得我是看到一些问题在写,我希望去帮助我所看到的一群人在写这本书。

这本书我相信读者会“仁者见仁、智者见智”,不同心态的人以及不同层次的人看到这本书,我相信评价会有天壤之别,这也是我意料之中的事情。

对于很多朋友或许在意这本书带给他的一种愉悦感,尤其是前面一些小话题,有点像大话系列的书籍。有的小伙伴或许看到小话题后很注重结果是什么,但其实我写书的目的本身就是希望小伙伴不要迷信某些结果。有的“大侠”看到一个自称“胖哥”的人会感觉很恶心,并且以一个可能存在争议的网络题目来扯了一大堆乱七八糟的内存知识,简直不可理喻。有的小伙伴把它当成一个面试宝典,我期望这部分小伙伴能够理解到面试不是最终目的,而是我们真正能够领悟一些东西。也有小伙伴把它当成招人宝典,期望这些小伙伴真心能找到自己理想当中的人选,不过还需要评估某些人是否会利用这种方式,^_^。某些小伙伴看出了我本人的一些初衷,也期望这部分小伙伴能够真正有所收获,那么这本书就值了,否则销售量再多也是没有任何价值的事情。

CSDN:你出的书,公司的同事以及朋友知道么,他们怎么看?你有向他们推荐吗?

谢宇:这本书出来后,以前问我问题的小伙伴肯定都是知道的,有少部分公司内的同组的同学是知道的,个别公司内的小伙伴看到了china-pub的新书上这本书问过我是不是我写的。不过其它同学是否知道我就不得而知了。

我 没怎么主动在公司内部推荐过这本书,写的内容主要还是帮助需要成长的人,公司里面做Java的大部分都比较不错的,推荐肯定自然带有很强的针对性和目的性,如果针对的群体较少,就失去了价值。前面提到,最期望于合适的人在合适的学习阶段在本书获得合适的内容,那么这本书就值得了。

就目前的销量来讲,我认为已经超出我的预期了,因为自己不是牛人,更加不是什么名人,出版社提到了某某网站卖掉几百本,加起来可能也有个将近1K左右,一些小伙伴问我为啥这么少呢,其实我认为挺多的,^_^,因为一个老师可能半年只能教50个学生,如果这一千本书中受益群体有一半,也有一个年级的人,我心里已经很满足了。

我个人本身以前很想去做一个老师,后来种种经历做了程序员,不过还是有一些想要表达自己所学的想法,期望将自己所学传承给别人的欲望,站在这个心态上,我也是挺开心的。

CSDN:编程的实战很重要,你平时都是如何进行实战提高自己能力的?另外,如何学好java?对于初学者应该从哪些方面学习?

谢宇:实践对编程很重要,这一点毋庸置疑,我想我的一些实践与其它小伙伴未必相同。例如说一些WEB框架,我搭建一个做实验后,除了做项目,我通常不是继续以搭建这个框架作为一种乐趣,而是开始研究这些框架的原理和思想,了解它的内在,阅读他们的一些源码,当然我不会阅读所有的代码,而是我在某个兴趣点上或说我很像了解它是怎么实现的,就去看某个点上的源代码,这个时候会比较事半功倍。

在这个基础上我会自己用这种思路或基础技术来写点实验或小代码,这些小代码我不会写得很规范,更加不会写得很专业,只是为了帮助我去了解更多的奥秘,这或许就是一个“程序员的心态”。其实当时我在了解这些东西的时候,也几乎没有多大用途,仅仅是一种探究问题的乐趣,不过我逐步会发现我越来越了解一些事情,不会盲目听信一些东西,看问题也会越来越客观,例如网络上公布某框架的BUG或漏洞,我第一思考不是换框架,而是去看这部分代码是不是真的有问题,我的项目场景中会不会遇到,即使这部分代码没看过,但是已经形成了一种习惯,并且出于对框架的熟悉程度,有信心去看这部分代码了。进而会开始考虑,如果发现需要换某个新版本是不是会带来风险等,这些评估不是凭空而来,更加不是拍脑袋,而是在自己的积累过程中有底气去做这样的事情。

通过这些小代码的练习和演变,加上自己的思考、和对基础技术的不断巩固会越来越理解一些内在性的东西。在近几年的工作中,我经常会去做以前从来没有做过的技术,其中不乏一些中间层服务层代码的编写,在这个过程中我也逐步开始具有自信,这件事情反过来想,如果我当初没有那些技术的思考、对计算机的巩固理解、对相关知识的积累和坑的领悟,现在很多事情轮不到我来做,因为没有人敢交给我来做。

如何学好Java我认为是一个大话题,每个人都有自己的学习方法,在本书的第一章我提到了一些点,这些点也是每一个人都会念的“多看、多练、多思考、多总结”,心态上也要有迎难而上的心态,否则就停步不前。这些似乎每个人都会说,就像我们从小挂在嘴边的“三字经”一样,由于念得多,被我们经常当成一种“大道理”,甚至于是一种“虚伪”,这或许是一种思想教育方面所需要改进的地方,我想这也是很多国内的程序员屌丝会经常非理性思维看待某些新技术或一些“洋货”的原因。

道理人人会讲,哲学人人会谈,尤其是“诡辩”或者说“狡辩”,但有多少人会冷静的思考一些道理本后真正的用意,我想有很多道理从古传至今依然很有道理,关键是我们需要用积极向上的心态来面对一些事情,至于学习的细节方法,我觉得每一个人都应当找到自己最佳的路线,小胖的学习经历也仅仅是一个参考。

对于初学者来讲,练习比思考更加重要,换句话说就是多写点代码,多做点项目,因为知识面还比较小,不过适当的总结还是有必要的,总结能理解到的部分,这是一种对自己的沉淀,至少逐步要养成这样的习惯,因为人的能力不是一蹴而就的。不过即使如此,我希望给初学者几个点:

其一,不要忘却初心是什么,或者说你期望去长期以程序员为生还是以后成为IT行业其它角色,而写代码只是一个入行的门票。如果你发自内心的是期望是前者,那么不要忘却你的大学学校所学不要丢弃,虽然工作中可以做出很多看得见摸的着的东西,但是达到一定程度就会陷入瓶颈,最终会回归到课本的基础知识,那些知识可帮助你长期去挖掘技术本身。

其二,小胖认为不要过分迷信一些结论,甚至于某些个人提出的结论,即使是也通常只是一个参考,所以在小胖的书通常不会单纯地告诉你一个结论,而是帮助你自己去推导一些结论,或者通过一些原理推导一个侧面的结论,因为小胖认为结论应该是你自己推到出来的,你所面对的场景和小胖可能有天壤之别,或者说小胖所面对的技术问题可能你永远用不上,但基础原理和分析问题的侧面与方法始终共存,所以我始终喜欢以“授人以鱼不如授人以渔”的心态去做一些事情。

其三,希望不要因为自己手里有一本牛书,自己阅读了就真的成为牛人了,更加不要把一些牛书当成是收藏品。世界级大牛写的书,有些时候我不是特别提倡给初学者小伙伴看的原因就是如此,因为大多数是背诵下来的,如果懂得思考的人在后续的工作中加以实践回归可以达到很好的效果,但不少小伙伴会以自己看过XX书作为炫耀的成本,但看过并不代表真的达到那个水准,因为世界级高手写的书通常对于不同阶段的人阅读会有着不同的理解,如果将它作为炫耀成本,通常这群小伙伴理解得不怎么样甚至于有点“走火入魔”的感觉,因为在这群小伙伴中,会因为是世界级大牛写的,将其中的某些结论当做是“真理”,而自己只是看到一个侧面,这样一来这其中一部分小伙伴仅仅是将真理在内心暗暗地收藏,工作与这些东西毫不相关,以至于无法学以致用,还有一部分小伙伴会在探讨问题的时候,不区分场景和客观细节以这种条目作为一个“制高点”来探讨肯定的做法。其实在小胖看来,即使世界一级大牛所写的东西,也只能说它看得更高更远,但未必100%适合每一个场景,接受和客观学习是正确的,更要理解他们的用意和场景细节,加以灵活变通的思维才能真正做到学以致用。

CSDN:学习语言并不是一件容易的事情,但也有想似之处,你能否谈谈如何能快速学习一种新语言?

谢宇:我想我如果说出一句话会被人鄙视“学好一门语言,其它都好说”,为啥呢?因为我还没达到那个水平,如果一个对多门语言十分精通的人来说这句话会更加合适。

我曾经也学习过很多语言,我想如果学会一种计算机语言后,学习其它语言上手应该是OK的,但如果要深度挖掘也并不是那么容易的事情。上手容易有一个重要因素是自己有写代码的习惯,同质化的语言产出的结果也类似,而上手通常需要掌握的东西包含语言的语法规则以及同质化功能的实现语法对比,还有一些语言上的特征细节对比,这样就比较容易快速的掌握它的基本应用了。

深挖的一个角度就是开始挖掘语言的细节的原理和扩展了,每一种语言在这些细节上都可能会有天壤之别。当然如果在一门语言的深挖上都挖掘到计算机原理基础上来了,在接触另一门语言也不是太大的难事,因为这些人已经对计算机非常了解,并且掌握了一套自己的学习的方法,看待问题的深度和广度已经比较强,在我的书上把它称之为:“功底”,因为在计算机基础面前,语言确实是凌驾其上的特征,这些人在掌握一门新语言的时候,初期的速度未必比别人快,但是掌握后通常会比其它人掌握得深,解决深入问题的能力和抓住问题本质的能力通常会比其它人强。

另外,我认为语言最大的区分点在思想和初衷,在我的世界里把它当成一种“基因”,一种可传承的“血脉”,理解一种血脉的人更加懂得如何应用好这门语言,对一门语言使用得很好的人会形成这种思维习惯和方法,在某些语言选择的时候,更多是“亲耐”什么。如果非要说某些功能要什么语言来实现,肯定会有人跳出来说,我的XX语言不一样可以这样这样实现吗?因此这也是我不迷信语言本身的原因,而是它的发展思路让我感觉它更加适合做这个,如果某件事情不适合,那么就换别的,我做不了,可以找别人来做。

CSDN:您如何看待这些年来Oracle对Java的管理?可以谈语言特性,也可以谈商业运作,诸如在JRE Installer中绑定第三方浏览器工具栏。

谢宇:这个话题我估计我谈不好,因为我对语言特征本身不是那么关注,而且一些商业用途的看法可能会引来不必要的争论。我就从自身一个Java使用者的角度来讲简单说说。

Oracle当初拿下SUN过后,很多人会唱衰Java的未来,至今我也不敢说Java未来能怎么样。但就目前来看,Java的发展还是不错的,就范畴来讲,手机上的Adnroid平台、企业级Java WEB应用、Java中间件体系、部分Java桌面软件、大数据平台、高并发的数据存储(如Hbase)等等,Java几乎无处不在,为啥它们会选用Java这个细说太多,或许和前面所提到的“亲耐”有点关系,或许和Java初衷的注重点有关系,它带动我们思考问题的方式是一种从上下下的方法,一种建模的思考,一种基于设计的驱动。

单以Oracle来讲,这几年Hotspot VM本身的发展还是不错的,这几年Java里面加入了很多提升性能的组件,很多高级组件让Java开发者更加理解JVM运行的一些机制,让Java的大型计算和高并发上能有更多的选择和突破,同时在稳定性上也做得更好,并提供了丰富的监控工具,虽然这些工具还不是那么完善,但根据其发展可以看得出来在不断做出改善。这几年Java的版本迭代速度也似乎在加快,不断在推进新的JVM,这也应该算是Oracle的风格,有点点商业化感觉,但我觉得很庆幸的是即使如此,Oracle到目前为止还是保持着“小清新”风格,它并不是说某种语言有一个特征,我就非要把它搬过来,它有它自己的思考,有些事情还是会交给第三方来做,它不希望把Java本身搞得那么多东西,在行业内完全通用的一些技术,Java会逐步考虑纳入其组建之中,例如上面提到的监控工具最早很多并不是Oracle自己写的,再例如一些apache的工具包也逐步纳入Java本身的特征中,还有一些脚本特征,Java希望在其字节码虚拟机基础上的其它语言来完成,如Scala、Groovy等。这也是我提到“基因”的原因之一,但未来它是否会变成其它的“小动物”就要看Oracle对它的定位了。

另外,Java目前的范畴并不仅仅局限于Oracle,Oracle本身在收购BAE公司的时候还有一个叫JRockit的JVM,IBM的J9也是一种非常优秀的JVM,还有很多很多JVM都是非常优秀的,它们与Oracle官方的JVM还是有很多设计上的不同,这里面有许多设计思想非常具有技巧性,如AZUL提供大名鼎鼎Zing JVM,这可是号称“不暂停的JVM”,其中很多设计思路是很奇妙的。

CSDN:有没有什么话想给本次采访的读者说的?

谢宇:前面我讲述了一些对初学者的建议,这里我再补充一些对本书读者的建议:

我很希望每一个读者都是能够受用此书的,因此我希望每一位读者选择本书不要过于盲目,而是看看前言和样章是否适合自己。另外,阅读本书由于不是知识点,所以阅读完它不是一个结束,更加不能证明自己就是特种兵,这或许是个人一些新的开始,而特种兵这个名号是小胖自己在看连续剧的时候自己“YY”出来的,所以也不要过分迷信。从小胖的角度来讲,只是期望于我们有着一个这样的目标去努力,坚持自己所坚持的,有特种兵的一些迎难而上的精神和深厚的功底,这样可以提升自己的修为,同时有不错的单兵作战能力。

友情提醒:谢宇老师从今天开始,坐镇CSDN社区问答栏目第十二期,届时会接受广大网友的提问,欢迎各位网友前来与谢老师一起探讨Java学习和开发。

参与活动请点击社区问答第十二期:谢宇——拒绝做程序员“砖工”】。

若想获悉谢宇更多动态,请关注:

博客:请点击进入

社区问答访谈上期回顾:

专访关东升:学习Swift语言,迎接iOS8时代

专访罗升阳:老罗的Android之旅

更多精彩内容,请点击社区问答查看。

0
0
  • CSDN官方微信
  • 扫描二维码,向CSDN吐槽
  • 微信号:CSDNnews
程序员移动端订阅下载

微博关注

相关热门文章