前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >承认吧你压根不懂怎么学新语言 No.142

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

作者头像
大蕉
发布2019-05-16 10:28:22
3580
发布2019-05-16 10:28:22
举报

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

别瞎学习

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

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

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

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

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

喔,原来我落后了呀。

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

不要问,照这个学就是了

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

这个列表就是我认为的学习一门新语言的时候,或者初步上手一门语言的时候所需要的最小知识体系,我们把它套到 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)

大蕉的独门秘籍

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

图片来自《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、文档化教程。

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

用 Go 实现的分布式缓存CacheX

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一名叫大蕉的程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档