承认吧你压根不懂怎么学新语言 No.142

我相信所有的人基本都会有刚开始入门学习某门语言的时候,比如 Python、JS、Java、Go、Scala,所有人一开始都会被 Hello World !吸引,毕竟这是踏入新世界的第一步呀,但很多人到了这一步就觉得自己学会了,就停下来了。但是接下来,就不知道该干点啥了,所有的东西也是一问三不知。

640?wx_fmt=jpeg

640?wx_fmt=gif

别瞎学习

就匆匆忙忙得,把某个教程从头看到尾,一点头绪都没有,恕我直言,你这样看完的东西,充其量也只能是,看完了。你可能压根就不知道你自己在看什么,不知语言为何物,不知重点,只是心里很想知道快速熟悉这门语言。


不知道大家还记不记得小学初中高中的那种学习模式。我们在那个时间段会感到难受,会感到要学习很多东西,只要我们认真吸收了知识,我们必然会接收到来自外界的反馈。确定的分数,或赞赏或鼓励的声音,但是这种环境,在我们从高中毕业后,一切都变了。变得没人给自己出试卷,变得开始没了标准,变得开始没了反馈。在那个时候我们都是超人都有用不完的精力。所以如果想跟原来一样目标明确,想要高效,有三个很核心的要点。

其一是知识系统化。其二是模拟。其三是反馈。形成闭环。

640?wx_fmt=png

如果没有系统化的知识,就知道学习一下各种各样的语法各种各样的技巧,这对于自己来说充其量就是获得了很多很多的工具,但并不知道怎么使用,并无法解决一个问题。就像把梯子全都堆在脚下,依然获得不了往墙外看的能力。

640?wx_fmt=jpeg

所以那个时候我们会按照老师划定的知识系统(所以好老师真的很重要),参加各种试卷形式的模拟,得到考试结果的反馈和讲解。绝大部分人,都能在这个体系下完成对自己知识结构的构建,以及对于特定场景(试卷)的适应性和技巧性,并通过反馈不断对自己的知识结构进行补充。这就是为什么大部分人到了大学和社会的时候,就开始止步不前的原因之一了。因为开始没人跟他们聊领域的知识体系,也不可能存在某种长期的模拟,反馈甚至都不用说就是不存在的,只有当自己一步一步发现同龄人把自己远远抛在后面的时候,才发觉。

喔,原来我落后了呀。

640?wx_fmt=jpeg

但即使发现自己落后了,也经常发现自己无计可施。因为这部分人的思维模式中并不存在给自己构建知识体系、创造模拟环境、制造反馈,这么一个学习循环的环境。工作十年,一年工作经验,大概就是这么来的吧。当然人各有志,安于现状也是一种生活方式。


640?wx_fmt=gif

不要问,照这个学就是了


那么学习一门语言,除了写 Hello World,还需要关注哪些方面的事情呢?我觉得有这么一个列表是值得从一开始就了解清楚的。

640?wx_fmt=png

这个列表就是我认为的学习一门新语言的时候,或者初步上手一门语言的时候所需要的最小知识体系,我们把它套到 Java 和 Go 中,稍微看一眼。

Java

运行入口(如 public static void main(String args[]){})

类型系统(如Java 的 int、Integer)

控制循环(如 if(true) for while)

异常处理(如 Java 的 try cache)

网络(如Socket 和 Http)

集合(如List、Set、Map)

并发(如线程 Thread)

接口(interface、implements)

Go

运行入口(main包的 func main(){})

类型系统(var i int = 0)

控制循环(如 if true)

异常处理(panic recover defer)

网络(net.ListenTCP、http.ListenAndServe())

集合(如list、map)

并发(如协程 go func(){})

接口(interface)

640?wx_fmt=gif

大蕉的独门秘籍

好了,语言的基础语法到这里就基本学得七七八八了,接下来我会做些什么事情呢?我的习惯做法是实现一个分布式缓存,比如我之前介绍过的BigBananaFileSystem,就是我用 Java 实现的一个分布式缓存式文件系统。以及最近在实现的 CacheX,是一个用 Go 实现的,Docker 化的,能运行在 k8s 的一个分布式缓存。整个设计的想法其实是来自 Google 大数据三驾马车之一的《Google File System》。


640?wx_fmt=png

图片来自《Google File System》


这套系统会实现一些很基础的一些能力。

1、Master 可以感知和接收 Slave 的注册和容量感知。

2、Master 保存有所有文件的存储地址。

3、Master 会提供 list、get、put,这三个基础的能力。

4、Slave 保存文件,并提供 get、put 能力。

5、Master 提供delete 以及垃圾回收机制。

6、Master 提供多副本保存以及Slave故障时的 副本复制机制。

7、Master 提供文件检查,以及文件错误的恢复机制。

8、Master 提供日志能力。

9、提供一个 Client 用于访问 Master

10、文档化教程。

实现出来,然后调试,提交,部署,运行,然后再迭代功能。

640?wx_fmt=png

用 Go 实现的分布式缓存CacheX

这就是我所说的模拟和反馈,我会把它实现出来并尝试跟别人解释这套系统是怎么玩的。当然,肯定的,在这个过程中肯定会遇到各种各样的问题,我再去查资料,我再继续细化这套系统,在调通的那一刻成就感爆棚。这个阶段其实我是带着解决一个问题的思路去学习一门语言,而且肯定会解决各种各样的问题,各种在平时工作中可能压根就不会遇到的问题,就是自己给自己出试卷,自己解题,而且这份试卷自己也是只知道题目不知道答案或者答案本身并不熟悉。

640?wx_fmt=jpeg

当然还有另外一种声音,就是我自己学习去写一个爬虫,分析分析这个社会的舆论方向,这也是一种方式。每个人都应该找到自己的试卷,找到去完成试卷的方法,而不是漫无目的地在白纸上天马星空看到啥就填啥,最终可能只有非常低的概率会成为杰作,非常高的概率会变成废纸,浪费时间浪费生命,只是给自己一种嗯我正在努力学习的错觉。

就说到这吧,趁年轻好好模拟好好沉淀。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值