Oraganize you knowledge

Posted by Taolee on October 9, 2015

知识体系相比知识本身更加重要

研究生期间也敢说一直在努力的读书,但是最后的收获却是寥寥。不论是论文的数量和质量, 还是整个技能点的提升,可以说是非常有限。最后并没有拿得出手的成果在激烈的竞争中胜出 我想,一个比较重要的原因便是自己的在读书的过程中,没有用对方法。虽然总是在读,但是并没有形成体系。

比如,学习了Bison&Flex等编译器的知识之后,第二天却接着去研究Function Verification的几种方法了。 C语言没有用好,然后去上手Python,学习Srapy, Flask,走马观花的去研究Web后端。C++刚开始看Primer,就去学习了《算法导论》和Java基本入门教程。 Python Tools for Visual Studio刚刚用流畅,就开始用Code Block, Eclipse, Spyder, 来写C++,写Java,写Python,写C。这样的缺点是,最后每一个都不能从专业的角度去解决编程问题。

Advanced FPGA Design还没有吃透,就去看EDA Evelotion还有 VLSI Test Pricinple. 其实这几个方向并没有起到互相增益的作用.软件和硬件的东西即使有较多的联系,但是在人的认知以及开发上面是出于不同的抽象等级的。

知识的相互促进是很重要的

所以以后要珍惜自己的精力和时间,毕竟脑力有限,所以还是把最重要的资源分配给最重要的事情上。而且学习这件事情对于我,其目的并不是去探索世界,学习 之于我们的目的是一项改造自己,提升自己的竞争力的工具。那么重要的是,把自己的刀变得锋利。把自己的技能点,不断的加深。其中一个重要的点是前面的学习要为后面的学习铺路, 后面的学习要在前面的基础上不断加深。而不是到处乱走,每一条路只走一小段,最后把整个草坪踏坏了也到不了一片森林。

广度虽然要有,但重要的是深度

话说,没有一家公司喜欢会用20种语言写Hello World,但是不会用一种语言来写快排的程序员的。现在的IT业分工越来越细,比如早期的软件设计者本身既要进行软件的具体实现,也要 将一个软件包装成一个产品,既需要自己进行单元测试,有需要进行系统测试以及后期运维。这种凌乱琐碎的方式,并不符合这个快速发展的时代。一个软件的产品周期变得越来越短,那么 以工厂的精确分工,流水线的方式进行软件的开发才是在激烈的市场竞争中存活下去的王道。所以,在投身之前,最好搞清楚自己要往那一个方向发展,是Web,移动端,后端,前端,还是测试, 系统架构,运维。是云技术,还是物联网。

是走算法的深度还是走系统的广度,两者或者多者必选其一。 对于技能点的选择,应该保持一下的观点,首先得全面了解,不要贸然选择。其次,首先得选最核心的东西,再选择非核心的东西。 核心的东西比如大方向的选择,非核心的东西,比如开发语言,开发工具,开发环境,阅读的书籍。

我的计划

  • 计划的第一项:放弃Web端研发的方向,专心进行算法的研究,主要学习使用C++静态语言来进行算法的实现。 Python 动态语言来进行快速的算法验证,以及非关键模块的快速开发。Python总的来说性能还是不错的,Leetcode刷题看时间排名。
  • 计划的第二项:即使是算法的研究也需要有不同的侧重点,基础的算法在各个领域都适用,难度高的算法可能是某一个领域比较 通用的。所以算法研究的目标要搞清楚,首先得基本的算法理论研究,和基本的数据结构。 算法更多地是数学领域的研究,但是自己并不是很擅长,那怎么办呢?主要研究的成熟算法的具体实现,而不是自己进行算法的创新。
  • 计划的第三项:专注于自己领域的算法。即是EDA领域的算法。

具体的实施计划和时间安排见之后的博客。谢谢。