当前位置:网站首页 > Java教程 > 正文

java碎片化自学教程



@

这是一系列奇妙的文章,它们将:

  • 用最通俗的语言带你由浅入深且环环相扣的系统学习(从基础编程到应用架构,从简单场景到如何创业)。
  • 明白如何找到学习研究的办法,找到适合自己的学习办法
  • 如何找到切入点,从哪里开始,怎样做成
  • 令你找到自信、让你明白你自己就拥有无限潜力
  • 培养你的学习能力、令你不再惧怕学习新的技能,并且从中找到**。

本人工作十年+,大小公司都待过,带过团队创过业。在这十多年的工作期间由于个人爱好的驱使,业余中学习了吉他(民谣吉他)、书法(行楷隶篆)、作曲(西方作曲理论)。具备非常丰富的学习经验,也深感这一路走来学习不易,费了不少的时间和精神在纠结没有意义的事情上。尤其从零开始无非苦与门路、方法、方向、好的老师。另外其实很多人参加工作,甚至工作的很多年,其实对技术或对手上做的事情也是懵懵懂懂的状态。所以本系列文章内容将以最懂你的视角、尽量直接了当、直切问题根本 的面向两类人群去系统的学习编程 :
  第一:完全不会但有意愿学习编程的。
  第二:已经有一定的工作经验但希望回炉重塑的。

笔者会根据根据多年工作、以及在不同公司内部进行的培训、自身的工作学习经验提炼出最为精髓的内容,以提供给对感兴趣但是不想走太多弯路花太多冤枉钱的初学者,从入门到精通由浅入深的学习内容。并且通过学习者的反馈,笔者将不断地完善内容从而使得更多的人受益。并且提供免费的咨询平台比如让你咨询,目的只有一个,就是不花钱也能学的会编程,而且能够学习的非常好(能够参加工作以及自身创业的程度)。

当下由于互联网的发展,我们可以随时随地找到各种各样的文章,书籍、各种视频教学、甚至名校导师的讲座。为什么还是学不会,是脑子比较笨吗?还是根本就不合适。我想这个问题应该从什么是天才切入,以我浅薄的个人经验来随便聊聊,希望对你有帮助。
    我个人认为天才需要满足以下几个条件:
      1. 练习、思考
      2. 努力、坚持
      3. 环境、时机

你需要做的:
      1. 多练习、多思考
      2. 坚持努力,深刻领会
      3. 寻找时机,判断环境
  所以需要明白的是,即使是公认的天才。他也仍然需要不断地尝试、突破、练习、思考、坚持.....,只有这些都做到之后,才有能力去等待时机和判断环境。只不过可能有些人在早期学习时会对数字敏感、对政治敏感、对音律敏感的不同罢了。无论如何兴趣是最好的老师,没有人天生生下来就被人知道自己适合什么。所以必须要保鲜自己的勇气聪明睿智等都不是事情成败的关键,勇气才是。一遇到问题就放弃不是你不适合某件事情,是你没有解决问题的勇气和恒心,你将在其它领域仍然处理不好。因为条条大路通罗马都是相通的。这种脆弱使你在做其它事情上也会轻易放弃。所以我认为你并不只是为了学习编程而学习,这个过程同时也会培养你自己的学习知识解决问题的能力。

无论文章教学也好、视频教学也好,什么学习方式,感觉到即使多看几遍自己实在是没有办法理解的时候,尽可能的去寻找更多人的文献来参考。因为大概率不是你无法明白这件事,而是对于你而言这个人的阐述没办法让你弄清楚。在我看来,没有笨学生只有差老师(本人就是曾经的笨学生)写书的人,讲课的人应该足够的站在学习者的角度来思考学习者的心态,辩证自己的教学,写书也好、讲课也好目的是为了让人懂。学习者教学者都需要用心,这是双向的。所以我更倾向于你去认为这人说的你听不懂而已,别觉得自己不行,即使是你的同桌看懂了你没看懂。

对于初学者而言,你抱着赤诚之心,满怀期待的去接触一个新鲜的事务。是很容易受到外界的干扰的,各种因素令你产生放弃的想法。我想说的是:如果你始终没有毅力应对外界的干扰,你将永远无法见到真我。

对于我而言,要想教好完全没基础的同学是一件非常困难的事情。因为每个人的经历、认知范围不同、造就了大家不同的思维方式和习惯。所以我必须要求自己最实事求是的去提炼与阐述最客观的事实,尽量不去掺杂任何主观意识的去编织,我想这是尽可能让更多人受益的办法了。

  1. AI可以做你的小老师,在学习的过程中总能让你得到一些帮助。在没有AI之前,我们查询一个内容或者对未知领域的探索是要麻烦很多。
  2. AI可以为你做一些很好的小工具,以及很基础的重复性极强的工作,比如生成一段代码、帮你渲染图片或视频。
  1. 你可以让它帮你写代码、写文章。但是这些东西的最终结果仍然是需要你自己去拼接的。如果你不懂那个领域,你根本无法解释你得东西。更不要说出了问题怎么修改迭代它。
  2. 在真实的工作场景中一家企业涉及到几十个部门,一个部门中还需要分十几个大组,大组里面还要分小组。AI短时间内还完成不了如此复杂的工作。
  3. 其实它最深层的工作本质还是一个搜索引擎,以前的搜索引擎是将网络上的所有文章索引起来,直接将搜索结果反馈一个最符合你输入的搜索内容给你、功能单一。而目前AI搜索是通过模型训练已经为你挑选出了一个最好的结果。比如图片的渲染,它并不是了你的意思去做的渲染,而是它总结了市面上所有的处理方式,并把这种处理方式存储为一种结果,然后将这种处理结果和你的图片进行一个合并。通过保存和你的会话的方式来懂你,所以所谓的你训练它的质就是,你已经告诉它你选择了它的结果。

我很想学编程,但是它是什么,我不知道。它能成就我什么,我不知道。它能为我、为社会创造什么样的价值,我也不知道:

  1. 编程 ,编剧,编曲,听起来没什么两样,没错,它们就是没什么两样;
  2. 编程就是将你的想法实现为现实的具体,编程将让你的想法成为一个完整的 虚拟系统 ,编剧也是,编曲亦是。都是能将你想抒发的一切成为现实的前奏曲,注意:只是前奏
  3. 为什么是 前奏 ,因为即使完成了上诉的三件事情,它们仍然非常的 抽象与艺术
  4. 所有的 抽象与艺术 都是等待被实践的,就是等待被实现到现实生活中的,也就是说得有人去用你写的程序,并且不断地让你的程序通过不断地迭代更加满足实际需求。例如:你最先接触的互联网产品是什么?;
  5. 刚才提到 编程,编剧,编曲,它们之间并无本质上的区别,仅仅是用各自不同系统的语言(英语,汉语,俄语)来组织自己想表达的内容。我也可以用(Python,c++,java,汇编)来实现自己的程序。只不过表达手法不同而已 ,同理我可以用中、英、俄等等语言去写诗。所以没有所谓最牛逼的语言,只不过更适合在什么场景下干它最擅长做的事情;
  6. 所以到了这里,如果你有所思考,那么你应该思考你更喜欢什么样的 形式、方法、理论 来实现你的愿想、是希望写一首歌,诗,曲,文。还是就是热衷于代码,遵从自己的内心;
  7. 另外,编程,编剧,编曲 它们有一个完全一致的点,那就是,藏匿深山处,无人见我颜。;

答:所有的语言都合适你,没有人规定你只能会一门语言、或某一套架构,要学会的事情是学以致用融会贯通万变不离其宗。同时更关键的是,相同一样的功能,注意这里只说功能的情况下,所有语言都可以实现。但是如果需要思考其它因素考量的就多了。比如:时间成本(学习它,实现功能需要花费的实践)、运行效果(效率是否满足你的场景,稳定性是否能达到你的要求等),但初学者通常无法判断这系列因素。

编程是一个很庞大的虚拟世界,所以我们需要思考的事情是:如何入门这个世界。在你尝试任意一件完全新的事情时,你都是需要先想办法(付出一定代价)打开门来看一看的,是需要吃一些苦头的。下面我将简单介绍一些常见语言。
 面相过程的编程语言:C,汇编语言(Basic),Python,通常用于进行协议,内核等计算机底层开发范畴。怎么理解这里的底层,比如JAVA、Python语言是C开发的,而C语言又是用汇编语言开发的,通常这类开发都需要非常好的数学基础,以及对计算机组成原理网络协议等非常精通(要想学的很好的话)。
 面相对象的编程语言:JAVA,C#,C++,Python,
  1. C#语法其实和JAVA非常的相似。它们的主要区别在于JAVA是开源,JAVA是跨平台的。c#通常用于开发WindowsForm,就是windows平台的应用程序,以及网站后台。是不开源的。开源不开源?也就是说同样的实现过程你能看到JAVA底层是怎么做的,但是C#你没有办法做到知其所以然。如果是开源你知其所以然之后,甚至是可以改变扩展它的底层处理细节,所以延伸出了开源社区。例如最著名的开源社区GitHub。同时开源意味着免费,也可以理解为正是因为它是免费的并且又非常满足市场需求,所以流行。PS:C#曾经也红极一时,尤其是在linux还没有在国内火起来之前(linux也是开源的,它是操作系统内核,基于它实现的常见操作系统有Ubuntu、RedHat、CentOS等。它相对windows而言,在程序领域更加的高效、专业,最重要的是免费)。
  2. C++通常用于需要非常快速的计算场景下,例如航天、游戏、高性能计算、图形图像处理。为什么呢,C++是编译型语言,这个概念是面向CPU的,C++编译后是CPU直接能读懂的指令。并且它又是面向对象的更方便日常使用(因为面相对象语言更符合人的思维)。如果是JAVA,Python,那么它们中间还会有一个中介。这样也就多了一层执行,所以c++更快。至于多了一层什么后面讲技术会讲的。就初学者必过的语法这一关门前,C++对从来没学习过编程的人来说是比较难入门理解和记忆的。
  3. Python,相比运行速度 c++ 快于 Java 快于 python,因为python为了更方便的进行开发,简化了语法,很多地方python可以运行时动态的为你处理。你可以理解为提前沟通好,就那样干每次都会变的区别。一次两次可以接受,每次执行都有不同的变化就多了每次理解的时间。在计算机世界里、高并发高访问量的情况下,代码每多浪费1毫秒,如果一天执行一亿次,那么一天就多耗时将近28个小时,一年就是10220个小时也就是浪费了这台机器的425天的算力。当然,如果不是在这种场景之下,比如写个爬虫、写个实用小工具、自动化工具、科学计算(这里和高性能计算是有区别的)、人工智能等。总的来说:它适用于大部分不追求运行速度访问效率的场景,因为它本身具备非常多的实用库(提前实现好的功能)不需要自己去实现只需要学会使用就可以节省你非常多的实践,所以数学非常好的同学学习编程是为了更快的实现自己的算法是比较推荐Python的。

  1. 国内运用范围广,大部分大厂的主流开发语言,学成之后实用环境更广(相比c++,python等)。
  2. JAVA更适合大部分的实际生活中的应用场景,一切现实生活中的应用级别(网购、外卖、各种APP/WEB的后台)大部分都是使用的JAVA进行开发。
  3. 简单,原因1:面相对象。2:语法固定。3:生态活跃(参考文献够多)。4:更适合用于搭建大型后台系统(开源支撑架构非常的完整)。
  4. 掌握对的学习方法,有对的引导人是能够非常快速的入门并且进行实际开发的。
  5. 前期不需要具备非常好的数学能力(门槛更低了),比如在c语言的世界里你不会数学将寸步难行。
  6. 作为一个对编程抱有美好期待深入编程世界的,JAVA可以很好的带领你环游这个世界。它能让你搞清楚整个编程世界的轮廓,并且令你清楚如何深入,届时再去选择某个精确的方向去研究等等。
  7. 为什么不是Python,Python学习起来其实是更加简单的,前面有说过,Python的部分轮廓。根据本人多年的工作环境片面的经验来说,Python的应用场景通常是更高于Java的,这并不是说Python要比Java牛逼。目前可以试着这样的理解为:通常使用Python的需求都是使用JAVA或其它语言而派生出来的,虽然Python也能够做WEB开发,但Java在高访问量的WEB领域是Python无法替代的。在用Java开发过程中非常需要一款符合自己专用的工具、或者一些自动化工具、科学计算类、算法类、大数据处理类,那么就可以使用Python实现会相当容易。

一些熟知的站点:淘宝、京东、支付宝、百度、携程等大型企业后台都是采用JAVA实现的,可以说JAVA目前是国内运用范围最广的语言之一。
  为什么要强调后台,目前上述提到的各大厂商都是使用JAVA来做分布式系统(如果你的程序访问量越大就越需要更庞大的后台系统来支撑,但是在普通用户眼皮下是无感的)
  所谓的后台系统就是一个魔法盒(你在网购、点外卖时对于用户操作是简单的,但是其背后确有非常复杂的业务逻辑)。可以想象一下做菜的场景:
    你自己做-》食材入锅 > 翻炒添加作料 > 成品菜肴
  后台就是帮你做了炒菜添加作料的步骤。对于普通用户而言步骤就变成了:
    程序做 情况 1-》食材入锅 > 放到程序里等待(比如炒菜机) > 成品菜肴。
    程序做 情况 2-》在程序上选择想吃的 > 下单等待 > 成品菜肴。
    程序做 情况 n-》>>> 抽象你任意想实现的场景具象,也就是说在程序里它将变得无限可能。
  分布式系统就是当你这个炒菜程序有十万,百万,千万,亿级别的用户来点菜的时候显然一口锅是不够用的。从而延伸出来的更庞大的概念与实践,它将需要更快的计算速度,更可靠的支撑。
  JAVA可以做的事情还有编写桌面应用程序(电脑版软件)、Web应用程序(网站)、分布式系统(纯后台)、大数据计算(hadoop、hive、spark、storm、fink、slot,这些我将在后续内容中都讲解以及使用)和嵌入式系统(车载系统)应用程序等。

这里以国内市场为主。
  除了我自己本身的一些经历的浅薄认知以外,我也推荐一些办法你去自发的思考和辨识
  1、可以下载一些招聘APP,搜索某语言的职位。例如JAVA开发工程师,JAVA架构师,JAVA技术经理,JAVA技术主管。同理Python等其他语言也类似。需要注意的是不同职位不同薪水阶段它们都需要具备什么样的能力,以及都是一些什么样的公司需要这方面的人才。
  2、多去了解一些你感兴趣的领域的软件系统,它们都是用什么语言来开发。
  所以与其听人介绍这个语言怎么样那个语言怎么样,不如自己真正的去探索一番市场环境。

  本系列文章目的是为了让大家更快的弯路更短的更清晰的理解核心内容,形成你内心的编程世界。。比如知识点的讲解不会很全面。
  部分重复造轮子的活可能不会做,比如软件安装等等,我会为大家引用好网上总结的比较好的文章提供给大家参考。
  咱们的核心内容在下面(学会基础>深入理解>架构实践)以最快的速度完成主线剧情,在完成的过程中逐步延伸:

  1. 基础(代码演示,作业练习):java基础> 数据库 > 网站
  2. 深入(知其所以然):深入原理(JAVA,JVM,多线程高并发,数据库索引,架构等)
  3. 进阶(分布式系统,以及架构):(Spring(全)、RPC(DUBBO,GRPC)、DB(MYSQL、MONGODB、REDIS)、MQ(KAFKA、RMQ、 disruptor)、ZK、ES)
  4. 实验:如何正确理解技术,正确使用技术。
  5. 实践:找工作,面试,创业,如何规划。
  1. 要善于总结属于自己的学习办法
    1.1 任何书本,任何老师,任何前者。都不可能将整个世界完整无缺的给你阐述清楚,第一:他没有那个时间懂别说讲。第二:你没有那个时间听别说懂。因为世界是多元化的,你需要了解自己的元在哪里。这就是一个找自己的过程,见世界见众生见真我。
    1.2 作者,讲师,真的懂这个事情的、良心好点的、以教育为人生目标的(笔者的追求)一定会给你指出一条明路。但是这一路上的风风雨雨,属于你自己的体验和总结,仍然需要你自己去实践中体会。
    1.3 要学会辨别真教&假教,真教你的人永远是怕你不明白,假教你的人永远在套路你。
    1.4 要想透彻的了解某一个领域,必须学会从多方位学习,比如本系列文。它是不可能将整个编程世界完完整整的给你解释清楚的。但是本人既然做了这个事情,“挖了这个坑”给你,必须让你弄清楚。
    1.5 所以我的意思化到具体就是,如果你觉得我的文章有用,但是又让你产生了很多一问。那么恭喜你产生了好奇,就是驱动你学习与实践的原动力。那怎么办呢。还是如刚才所说,我只能尽可能的做到让你不走弯路,但是我的认知是有限的。你需要驱动你得原动力,去搜索,去探索,去尝试,去实践。这才是本文的最终奥义。
    1.6 “爱好”并不是学习的原动力,因为它听起来好像是对的,实则差点意思(可做可不做)。如果是“好奇”呢,不做、不了解的话很难去了确你的心意。
  2. 学习一项新的技能和课程时,要先模仿练习、记忆,熟练后再思考,运用而后变通(按你自己的想法去做)。(所有的创新都要基于模仿前人,理解前人,否则什么是新、新从何而来你都不明白)
  3. 这里每一篇教学内容都将围绕一个具象事务来写,所以对于初学者来说有时的内容会涵盖的比较多(比如没接触过的语法)。但一定都是精髓。所以抛开以往的一课时一课时的概念,你只需要跟着我的脚步走,将很快的完成主线任务。
  4. 理解的慢、学习的慢没关系,感觉到自己想太多、想偏了再回头来从实际我举例的场景去参与进来,多试几次。
  5. 我会尽可能的布置你能完成的作业去实践,同时也希望你能自发的思考场景。脱离了实际场景往往是无法理解的根本原因。
  6. 遇到我涉及的内容你实在无法理解时,大胆的去百度,大胆的去搜寻文献,多思考多比较不要怕麻烦。
  7. 我能保证的是我在主线剧情上对你的引导,带领你以最快的速度、围绕最核心的内容环游编程世界。
  8. 有想法或者我写的不好的地方可以到交流群或者评论区直言。
  9. 一定要学会多问,为什么!深入多次的问,为什么!
  10. 如果你有用心的在看。正如前面所提到的,笔者能保证带你走必要的路线,但是文章的篇幅是有限的、我的表达是有限的。你需要结合多方位去学习(其它文献,其它参考资料,其他朋友的理解)等等。

  以我学习英语为例子。我一开始会很看重语法、发音。导致学习的进度非常的缓慢。

  1. 没有认清现实 :如果一个外国人学习了中文和你对话,口音发音语法是否严谨这一系列问题。如果他说的很烂让你发笑,但是我相信你一定不是,这是有区别的。没有认清现实导致了在不适当的阶段定制的计划不现实。
  2. 认清现实后重置计划:词汇量 - 能读懂 - 能写作 - 能听 - 能说。
  3. 重置计划后定阶段问题:重点转移到词汇量上一天300个,花少量的时间练习语法。所有人都知道词汇量很重要,所有人都知道某些事情应该怎么做,但是真正干起来,每个人都会出现各种各样的情况。所以要很重要。
  4. 明白阶段问题之后找办法:如何解决每天的300个单词,要想单词记得住,还要这么大的量,怎么办。以歧视为例:discrimination,d i s c r i m i n a t i o n.这样背是非常花时间的。所以我不再要求自己每一遍都把它背诵的很清楚。我开始记忆它的读音,并且把它音节区分开: dis cri mi na tion。这样我只需要知道怎么读我就能知道它大概的样子。在这个过程中我反复借鉴测试多种他人推荐的记忆方法,最终选择出适合自己的。
  5. 最后在边实施边做的过程中反复的重复上面的过程,因为每个不同的阶段看待同一件事情都会有不同的觉悟。去找这种觉悟给你带来的**,也就找到了学习的快乐。这样的话,学习也就不枯燥了,所谓的计划也就不那么重要了。而且把计划看的太过于重只会造成学任何东西都只是依葫芦画瓢,永远得不到精髓。

以本人多年学习经验,视频它更适合用来碎片化的学习一些简单的东西。文字,读书,它更能诱发你的深度思考(尽管它可能看上去比较慢)。对于编程这一门学科而言,它更多的是需要你的理解和实践,也就是重点全都在代码上,视频能演示的文章也能做到。
  长篇幅的视频内容往往废话会比较多,而且录制起来也比较浪费时间。但文字不同。我可以精心编排我的内容,让每一个节点都尽量接洽的比较好,让每一个篇幅都以最精简最精要的文字来组织。换句话来说,如果我写的足够好,它不容易让你出戏,相比一节个把小时的视频课通常也只不过是讲了那么一丢丢东西更节约时间。课程是为了让你弄懂学会而不是为了上课而上课。所以我认为,通过文字与自身的思考,加上大量的实践练习,反而是**的学习办法。
  当然如果你是一个很有爱心的人,我非常希望你能来讨论和提意见。文章越是完善易懂,受益人就会越多,也就是说我希望大家能来一起和我完成这样的一系列事情,如果您感兴趣的话。

这个世界除了肚子里的墨水其它都是虚幻。

版权声明


相关文章:

  • java实例使用教程2025-01-28 15:34:06
  • ueditor java使用教程2025-01-28 15:34:06
  • java的dao教程2025-01-28 15:34:06
  • java经典电子书教程2025-01-28 15:34:06
  • java极速教程2025-01-28 15:34:06
  • 免费java入门教程2025-01-28 15:34:06
  • java教程海报2025-01-28 15:34:06
  • java达内 教程2025-01-28 15:34:06
  • java高级循环教程2025-01-28 15:34:06
  • java批量使用教程2025-01-28 15:34:06