继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

一名叫大蕉的程序员
关注TA
已关注
手记 101
粉丝 118
获赞 464

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

https://img4.mukewang.com/5d14cadb0001b6d201630271.jpg

别瞎学习

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

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

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

https://img3.mukewang.com/5d14caf70001300503960217.jpg

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

https://img.mukewang.com/5d14cafd0001203601720123.jpg

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

喔,原来我落后了呀。

https://img3.mukewang.com/5d14cb110001428401420146.jpg

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

https://img3.mukewang.com/5d14cb1c0001acda02300121.jpg

不要问,照这个学就是了

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

https://img2.mukewang.com/5d14cb2a000152c302710321.jpg

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

https://img3.mukewang.com/5d14cb480001e19b01890128.jpg

大蕉的独门秘籍

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

https://img.mukewang.com/5d14cb4d0001cdee06910326.jpg

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

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、文档化教程。

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

https://img.mukewang.com/5d14cb700001fccc06910474.jpg

用 Go 实现的分布式缓存CacheX

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

https://img2.mukewang.com/5d14cb760001dce301390091.jpg

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

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


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP