我是谁,我在 Java 方面有哪些经验?
你好,我叫臧萌。目前在 PayPal 担任企业服务数据处理组的技术负责人。我 06 年毕业后就一直从事一线的编程和架构设计工作,在Sybase,eBay,亚马逊,携程等企业都工作过。
这十多年来主要使用的就是 Java 语言,同时,我还是《Java 入门 1 2 3》这本书的作者。这本书也被用户称为 Java 入门图书中的战斗机。
基于过去的这些经验,我相信能给你带来一堂看得懂、学得会、用得着的 Java 入门课,并以此为契机,帮你迈进编程世界的大门。
学习编程有哪些好处?Java 作为初学者的入门编程语言有哪些优势?
对我来说,学习编程最大的好处是让我找到了一个既能赚钱又能让我感兴趣的事情。我相信完成一个程序之后,那种创造带来的成就感是很多程序员乐此不疲坚持在做一线工程师的原始动力。
其实学习编程就是打开了一扇进入计算机内部的大门。你会发现编写软件并不是一件高深莫测的事情。通过学习编程,可以将脑子里想的程序变成现实,而这一切只需要一台计算机和一根网线(Wi-Fi 也行)。
同时编程也是一种迅速普及化的全民技能。即使不以编程为职业,学习计算机也有助于扩宽思路,就像乔布斯所言:每个人都应该学习编程,编程能够教会你如何思考。
尤其在当今的互联网时代,掌握某一项专业技能,同时还会编程的跨界人才,是非常有竞争力的。
那么,面对众多的编程语言,初学者学哪一种更合适呢?我个人比较推荐 Java,理由如下:
首先,Java 语言难度适中,实用性强。Java 的编程思想,非常适合多人协作的软件项目。Java 平台的精巧设计,使其成为一个桃李满天下的平台。经过十几年的发展,Java 得到了世界上几乎所有大中型软件公司的认可和广泛使用使用。
其次,Java 语言几乎每个月都是编程语言流行趋势上的榜首语言,可以说是每隔一年,甚至几个月,就会有一门语言忽然流行,赚足眼球,但是真正能得到大部分企业认可并长期流行的,还是 Java 和 C,可以说是铁打的 Java 和 C,流水的语言。
2002 年至今的语言流行榜(来自 TIOBE 排行榜)
当然,编程这个行当,要主动拥抱变化。这也是 Java 的强项。Java 是一门开放的语言,并不掌握在某个公司手中,而是有一个委员会来决定 Java 的发展方向。委员会中的委员有很多是国际上的大公司,比如阿里巴巴。没有比一线的软件公司更知道 Java 需要什么样的变化了。他们会从实际出发,为 Java 不断带来新鲜血液。
所以,Java 是一个应用广泛且依旧还在不断发展的语言,非常值得作为编程入门的首选语言。
大部分初学者在一开始编程的时候会遇到哪些困难?
编程是一个抽象的东西。学习编程的过程很像我们学习一门人类语言。但是从抽象程度来说,编程语言可能会更抽象。因为人类的语言是人与人交流。而编程语言则是人和计算机对话。这个过程可能更像是人和动物交流。因为两者的“思考”方式和“行为”方式是非常不同的。在学习编程的过程中,要慢慢熟悉计算机的“style”,认识计算机的“思考”方式和“行为”方式,才能顺畅的和计算机交流。
这节课中,我会用大量的类比来帮助你理解这些抽象概念,快速地适应计算机的思考方式。所以,你完全不必担心被一个个抽象概念吓住,跟着我一步步的学,你肯定能很快地明白各个抽象概念背后的本质和原理,并很快写出能够顺利运行的程序。
这门课的主要内容和讲述特色是什么?学完之后你会有哪些收获?
首先是本课程讲述知识点的模式。本课程使用问题导向的模式,首先提出一个需要用编程解决的问题,以这个问题为出发点,引出我们需要的知识点。然后围绕知识点,用大小练兵的方式,让大家学会这个知识点。最后,我们一起用学到的新的知识点,解决我们最开始提出的问题。让你每走一步都充满成就感。
在本课程中,知识点的安排会尽量做到以之前学会的知识点为基础。由浅入深的推进。学习曲线会非常平缓,你不用担心一下就从简单跳跃到很难的程度。
同时我也会注重对原理的讲解,让你不仅知其然,更知其所以然。这一点对于学习编程很重要。知其本质,可以帮助我们举一反三,触类旁通。后面学习起来也会更加轻松。
我相信,在你学习完本课程之后,你不仅能学会 Java 语言的基础语法,同时也学会编程语言中很多通用的概念。你将学会面向对象的编程思想,具备初步的程序设计的能力。你将可以把自己的一些小的点子,用 Java 程序做出来。编程语言对你来说,将不再陌生。
在此基础上,你将能够进行更深层次的编程知识的学习,一步一步写出功能更完善的计算机程序,并逐步成长为一名合格的程序员。
作者回复: 这个问题我思索了一天。写了一篇文章来给大家参考。 文档地址 : https://github.com/deepnighttwo/LetsJava/blob/master/FAQ/00%E7%AB%A0-%E8%BF%99%E9%97%A8%E8%AF%BE%E9%80%82%E5%90%88%E6%88%91%E5%90%97.md 学习不仅仅付出的是钱,更多的是付出了学习的时间。所以我觉得我有责任来告诉大家这门课是不是适合你。抱有以下两个学习目标的同学,我相信这门课会让你学有所获。 - 零基础学编程,并且想继续深入学习编程的同学 - 希望夯实基础,系统学习 Java 和面向对象编程思想的同学 下面说说为什么哈 # 零基础学编程,并且想继续深入学习编程的同学 这门课在录制之初的定位,就是要让零基础的同学能看懂学会 Java。有了编写《Java入门1·2·3》的经验,这个目标我还是很有底气能达成的。从同学们问的问题来看,同学们不仅学懂了,而且还提出了很多优质的问题。这些问题我都总结放在了 FAQ(源代码的GitHub repo里的FAQ目录) 里面。 说到提问,也是这门视频课的优势。极客时间这个平台可以很方便的提问和互动,及时且有针对性的解决大家的疑问。 这门视频课也为同学们后续继续深入学习编程打好了基础,如果有计划深入学习 Java 或者编程,那么这门课就更适合了。为什么呢,请接着向下看。 # 希望夯实基础,系统学习 Java 和面向对象编程思想的同学 录制这门课时距离我写书又过了六七年。十几年的一线编程经历,让我无论是 Java 语言的掌控力,还是面向对象的理解,还是程序设计和架构的经验,都能够候游刃有余的准备这门 Java 视频课。相比《Java入门1·2·3》这本书,我将很多理解和经验的内容,以合适的方式和力度放到了这门视频课里。 这门课不仅仅是 Java 的入门课,更是 Java 和面向对象的基础课。入门的特点是要简单,门槛低,由浅入深。而基础的特点是抓住根本,理解本质。在这门课的备课过程中,我结合自己的经验和理解(还有教训),由表及里,从语法元素开始,涵盖语法的本质和语法背后的意义。知其然,还要知其所以然。这是基础要解决的问题。 如果 Java 是自己的工作语言,但是写 Java 的时候又感觉没底,不知道有没有更合适的写法,不知道写了这行代码,实际上代表的意义是什么,那么学习这门课会有帮助。 如果自己一直在听别人说面向对象,听的耳朵都起茧子了,还是不知道什么是面向对象,不知道为什么面向对象的三要素是封装、继承和多态,甚至说不清什么是封装、继承和多态,那么这门课将给你一个清晰的,生动的答案。 # 题外话:编程入门怎么选 抛开 Java,我认为一门好的入门语言应该具备以下特点 - 不能太难,也不能太简单 - 成熟,资源丰富 - 使用广泛/有被广泛使用的潜质 - 有深入学习的途径/氛围,能从开始就帮助树立正确的学习编程观 Java 还是比较适合入门的: - 难度适中:不至于简单到三天从入门到精通, 也不至于难到让人望而却步。 - 成熟:坑基本都填平了。 - 热门:会的人多,有问题很多人可以帮忙解决。如果学一个冷门的语言,会有很多问题。比如资源匮乏,问题没人能解答,环境不成熟等等。 - 当然还有很多,视频中也说了一些。这里不再赘述。对于入门时的那些门槛,课程中也着重进行了讲述,让大家能够容易的迈入 Java 的大门。 别的好理解,为什么入门的编程语言不宜太简单呢? 如果一门语言纯粹是为了讨好入门者,那么它可能也只能用来入门。Java是一门实实在在的工业级语言,Java 是有深入学习的路径的。 很多语言简单到不需要深入学习,或者说整个生态不鼓励深入学习。这样的话,一门语言入门即精通,并不是一个好的事情。这门语言做的事情可能只能停留在堆砌代码的水平。学习这样的语言,对于进一步深入学习编程,成为一名合格的软件工程师,并没有太大帮助。甚至于还有坏处。让人产生“编程不过如此”的错误认知。 比如说 basic 语言,作为编程的启蒙语言没有问题,但是太过简单的设计,也让人没有深入学习的欲望/途径。 又比如 .net 生态环境,太过于“讨好”开发者,让开发者只是重复的堆砌业务代码,造成整个.net生态都有些浮躁,没有深入学习的氛围。我曾经见过有的.net 程序员以不需要深入学习为荣,并拒绝学习写多线程的程序。很难想象在这种氛围下,能培养出优秀的程序员。(当然这可能也是微软不想开放底层细节有关系。还有这也算是我一家之言,对于.net的更全面的见解,大家可能要找.net专家(如果有的话)详细咨询)。
作者回复: 培训班这种花不少钱的事情,确实不大好给个建议…… 仅供参考: 如果你自己觉得看书看视频已经可以学会语言的基础语法了,那就不要报这种语言基础的培训班了。学好了基础之后,后面的主要是多加锻炼。如果自己有想法,可以自己多学多练。遇到不会的技术,就去学。这样比较省钱,自己有兴趣的东西做着也比较有意思。编程这种东西就是既要多学也要多练,否则学会的东西确实很容易就忘掉了。 如果想要有老师带着做项目学习,可以考虑有一些实战类的课程。比如带着做一些电商系统等,这样会涉及一个有实际意义的项目的所有过程和技术,比如技术选型,Linux,Spring,DB,部署,监控等等。 培训班具体的事情我了解的不多。只是据说培训班坑很不少,而且听说都不便宜,量力而为。
作者回复: 是的,我一点都不慌(擦擦手心汗
作者回复: 会python可以对比着学。Java对于有编程经验的同学来说还是挺简单的。
作者回复: 是吗?我今天再好好照照镜子。
作者回复: 先学基础,再优先学框架,让自己有做东西的能力,然后穿插着学底层核心技术。 我这么说的原因是,如果只是学底层核心技术,好处当然是基础更牢固。但是缺点是很难坚持,因为底层核心的技术,做东西一般用不到,学了没有用武之地,就容易放弃,或者硬用,而硬用很容易适得其反。 学习框架,可以很快的让自己能开始做一些东西,让自己把想法变成可以跑的应用,而在这个过程中,你自然会接触到底层那些不会的知识,也可以更有针对性的去学习,因为这时候是真的用到了,真的能解决实际问题了。 当然,如果本身从事的事情就是需要用到底层核心技术的,那就不用想了,使劲儿学就是了。 所以先学什么没有固定答案,最合适的答案是:用到什么学什么。
作者回复: 有C++基础学起来会很快~,哦,建议你从第二篇开始上心看,或者从第一篇的数组那一节开始。前面的看个意思就够了,Java比C++要简单,前面的东西其实跟C++都是一样的。
作者回复: 参加给你的另一个回复
作者回复: 不用,视频的形式更生动一些
作者回复: 只是学会还不够,要多写代码,积累一些代码量。可以根据自己的兴趣,做一些相对功能完整的程序,证明自己的能力。