练级攻略

ARTS

ARTS左耳朵耗子(陈皓)发起的一项能力训练的活动。

  • A代表Algorithm - 至少做一道leetcode的编程题,主要是为了训练编程能力和学习。
  • R代表Review - 主要是为了学习英文,如果这个技能发怵的话,基本无缘技术高手。
  • T代表Tip - 学习至少一个技术技巧,可以是总结归纳日常工作学习所遇到的知识点。
  • S代表Share - 分享一篇有观点和思考的技术文章,主要是建立影响力,能够输出价值观。

image-20200518101427153

在学习内容平均留存率的金字塔图来看,只有主动学习才能达到50%以上的留存率。里面教授他人的留存率则是最高的。能够将自己知道的东西向他人清晰地讲出来,才是真正掌握了一个知识点,这也是ARTS的初衷跟目的。

练级攻略

这个也是追左耳朵耗子专栏的一个想法。耗子叔设计了一整套升级的路线图。根据耗子叔的全集,结合自身的情况,然后规划一个自己的练级攻略。

语言基础

语言本身的学习是最基础的,语言起码有几十种。但算的上是工业级的编程语言就C, C++, Java这三个。

  • C语言 - 45年前诞生后,可以说后续的所有的语言基本都跟C有直接或者间接的关系,都是为了解C语言的某些问题。操作系统,网络,硬件等都有C的存在。
  • C++在兼容C的基础上,加入了很多特性。这里我主要想学的就是三个。一个是面向对象,一个内存管理,最后一个是泛型编程。面向对象是C++最大的特点,另外一个内存管理是最基础的要求。为了提高代码通用性,泛型编程对于静态语言来说是一个非常重要的点。
  • C++太复杂了,Go语言在C和C++之间,也是非常值得学的一个。
    每一个语言都有各自的特定,如何从更高的角度去理解一个语言,这时候需要了解编程范式,这里面有泛型编程函数式编程, 最传统的面向对象编程。了解这些不同的语言发展,其实都是为了如何写出更加通用、复用性更高的代码或者模块。

数据结构和算法

这部分是一个进阶的最为重要的节点。

  • 需要理解算法的空间,时间复杂度,对基本数据结构理解,实现和使用,例如数组、链表、哈希表、二叉树,遍历,图等等,以及基本算法的理解,比如排序和搜索,以及递归和动态规划。nlogn 时间的排序,logn 时间的搜索。以及了解什么是 NP 问题(旅行商等等)。
  • 基本的数学知识,排列组合及概率,和一些公式化简。这里可能还可以算上正则表达式。

计算机网络

操作系统

设计模式

系统设计

  • 之前的路线是打好专业的基础,都是在某个模块上的打磨。对整个系统的设计上大局观,才能应对一些跨模块的问题。如今的系统不在是单点的系统,必定是分布式的。在这种大规模分布式的系统的方法论,才能走得更远。
  • 搜索引擎 - 这是自己也在垂直搜索领域混了三年,感觉自己水的一批,对这方面的技术需要更加深入的打磨。