如何快速学习一门编程语言

如何快速学习一门编程语言

来自Hari Lab Train Meeting:
https://gist.github.com/qweasd1/3bc47d33431fad674209f8dcdabd0f43

一. 编程语言类型:
Dynamic Language (Python JS … ) & Static Language (Java C++…)
两者的区别:

  1. sl是编译后运行,所以速度较快,比如对于1+“”,在执行 + 的时候,dl并不知道前后的type,所以需要先进行type check,就相当于还要执行以一个if判断,所以performance会较差。
  2. 重点:Type system,拥有type system可以加快速度,更加安全,最重要的是更利于维护,并更利于其他人理解代码,参考在经过几层嵌套传递之后JS参数会变得相当难以理解。所以有经验的程序猿还是会倾向使用typescript > javascript。当然typescript也提供了一种可以不申请变量的选择。

二. 在学习一门新语言的时候,首先看它对于过往的语言,区别在哪里,为何这么改变,而不是硬背它的语法。

  1. 比如ts的Type declaration:
    Java生成一个新对象:ClassA A = new ClassA,如果需要修改,则需要修改两处地方。又如Java的范型<>, 很好实现了java多态的概念,实现代码复用,简化程序,但在编程过程中始终需要写上。
    而Typescript提供了一种type infer,let A = new ClassA,那么A的类型就是ClassA。并且可以直接给A设定 declare A = <<D,<B,C>>>这样的范型。从某种角度上,简化了代码写法。

  2. 又如像 test(Parameter : int) : int {} 这种语法,如果深入去理解compiler的过程,这种语法实际上是未来语法的一种趋势,complier能更容易的解析代码,像 int parameter这种,对于complier并不友好,还需要看参数前面的东西,同时也更符合写代码的习惯,直接在后面添加type。所以学习一种语言的过程也是一个深入理解编程的过程。

功能型编程语言 Functional Programming Language的一些特性:

  1. High order function:传入值可为函数,可以极大的利用封装简化代码,返回值也可为函数(造函数),connectFactory(“”) return connect()

  2. Pattern match:
    match(a) {
    case: A

    }
    =>
    case Product(name, prop)
    name prop

    比如像pojo平选模型:数据信息载体,每次我们都会overload它的toString()方法,而像case class 可以让它自动的overload。

  3. 又如一些其他的语法应用:
    fluent interface:make().put(combine()).cook().put()
    Class make {
    put() {
    return this}
    cook(){
    return this
    }}
    另外像await()功能,可以做到使异步的功能以同步的格式书写
    又如ruby test(a, b) => a b

Syntax sugar:以上的例子都是一些为了更有高效的阅读与编写而出现的语法糖,其实本质也就是利用了一些原子(基本功能)的有机组合,来实现一些功能封装,方便调用,这么理解就更好理解新的语言。
可以自己去尝试去写一些syntax sugar方法,尝试不同的组合。
https://github.com/qweasd1/lite-code-generation/tree/master/doc

不过对于pure functional programming language,比如(a (b c d e())),对debug是非常不友好的,比如递归打断点等。

对于不同语言,其实核心本质都是相似的,像ts是先编译成js,kotlin和java是编译成class,语言的改动都是为了将平时操作中碰到的一些复杂的事物简单化,只是通过不同的函数名封装从而达到实现相似目的功能的行为,换汤不换药,所以 优先精通一门语言,理解其中的概念思想 ,再泛化到其他语言。

三. 对于语言内核的理解,可以当补充材料去学习
比如对于学习JVM: JVM对于涉及性能方面是重要的,可以当补充知识点和面试题看,尤其是其中的Garbage Collection,也是它跟C++最大的区别,它可以定时定量的回收内存。而这个也是限制了java速度的一个很重要的因素,因为它要track object的reference,如果出现大量的new object,比如调用一个不清楚内部功能的包,比如使用一些递归,都有可能极大的限制速度甚至爆掉内存。可以看些JVM面试题学习。

四. 快速上手学习语言的工具:
Typescript playground / repl(read excuation)浏览器内部的console也是很好的playground,还有就是一些ide,如pycharm,可以存储之前的结果操作,如jupyter notebook(不太好的地方就是debug能力很弱)。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值