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

我相信所有的人基本都会有刚开始入门学习某门语言的时候,比如 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

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

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

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

本文分享自微信公众号 - 一名叫大蕉的程序员(DaBananaTalk)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ccf19881030的博客

QT的三种开发方式

最近在学习QT GUI,单纯使用C++硬编码的方式,直接是采用QWidget部件来做,而不是采用QT Designer做UI界面,也不是采用QML+Javas...

24610
来自专栏Web技术布道师

怎样用 PHP 来实现枚举?

是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。

22720
来自专栏程序员的成长之路

如何阅读Java源码?

假如你从来都没有学过Java,也没有其它编程语言的基础,上来就啃《Core Java》,那样是很难有收获的,尤其是《深入Java虚拟机》这类书,或许别人觉得好,...

34430
来自专栏黑泽君的专栏

java.lang.IllegalArgumentException: URLDecoder: Incomplete trailing escape (%) pattern 的问题处理

  java.lang.IllegalArgumentException: URLDecoder: Incomplete trailing escape (%)...

17310
来自专栏ccf19881030的博客

在windows7下如何正确的安装及配置java运行环境及java编译器(Eclipse)

第一个:安装及配置java运行环境 首先下载jdk 安装JDK就是在你本地上面安装一个Java虚拟机,他为你所编写的Java程序提供编译和运行的核心环境(...

15720
来自专栏程序员的成长之路

四面美团,收割 offer

来源:https://blog.csdn.net/csuliyajin2012/article/details/49430659

12340
来自专栏ccf19881030的博客

VC++ TCP网络控制台程序

在Windows7系统下,采用工具为VS2008,Win32控制台应用程序,编写一个基于TCP的Client/Server网络程序。

14910
来自专栏ccf19881030的博客

关于计算机工作方向的几点想法

   都快毕业一年了,呆在现在的公司很闲,没做过多少实际的项目, 最近在做系统软件集成方面的东西,涉及到编程的东西很少,有做别的想法。

16540
来自专栏王沛文的专栏

kotlin的reified

对于我这种写惯了C++的人来说Java的泛型真的很难用。运行时没有类型信息,进一步导致像是jackson之类的库在做convertValue之类的操作时,方法虽...

19910
来自专栏程序员的成长之路

MySQL 优化实战记录

N个机台将业务数据发送至服务器,服务器程序将数据入库至MySQL数据库。服务器中的javaweb程序将数据展示到网页上供用户查看。

7610

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励