4月第一次总结

今天是4月16日,应该是开启计划后的第二个周末了。总结一下目前的进展情况,好有个记录。

总结

《Think Python》目前已经看完了前十章,课后习题基本上做完了,比较费劲的还是第五章的课后练习,涉及到递归的部分感觉还是有些难。目前这个速度很慢,需要抓紧,这个月一定要把这本书过一遍。尤其是面向对象那部分,应该是15、16、17、18这四章的内容。我已经报名了5月13日的托福考试了,所以到5月13日这不到一个月的时间,需要留出大块儿的时间复习英语。废柴大作战这块儿目前主要就是把Python的基础打扎实。所以每天的时间除了上班,就剩下复习托福和《Think Python》了。

反思

  • 主要还是平时时间安排上太粗放,没有详细的计划每天什么时间段该干什么,一般都是来了什么活或者想起什么来就去干,没有分事情的轻重缓急。
  • 心浮气躁,想得多做得少。

4月计划执行第一天

前言

清明节三天假期结束,正式进入4月计划执行第一天。以后每天更新一篇,记录当天的计划执行情况。

记录

今天下午开始了Think python的学习,因为之前已经学过前六章,不过中途断了没有坚持下来,所以这次是重新捡起来,加上前三章的东西很简单,所以很快地把前三章的内容过了一遍。过程中觉得有些概念需要记下来,复习的时候会比较方便,所以建立个python-cheat-sheet,保存这段时间学到的所有需要保存下来多回顾几遍的有关Python的知识点

反思

  • 有些事情,开始做了之后,就要坚持下去,欠下的帐总是要还的,如果不能一鼓作气啃下硬骨头,回头还是得再重来,相当于之前花费的时间几乎白费。学编程语言是这个道理,学英语背单词也是这个道理,快速完成一遍,然后反复重复。重要的是需要整体过一遍才行,只有整体过一遍之后,才能对知识体系有个整体的把握。
  • 任务之间的切换需要耗费精力,合理安排时间,分出一整块儿时间,投入进去做好一件事
  • 工作上的任务不能耽误

4月计划执行第二天

今天快速过了一遍第四章和第五章的内容。主要是一些有关接口设计、封装、重构等名词解释。因为之前已经看过一遍这部分内容,所以快速过了一遍。第五章的课后习题5.5和5.6需要好好看一遍,之前就是因为这一块儿卡住,导致我中途放弃的。

反思

今天因为有同学找我,所以晚上的时间就安排出去了。下次需要对时间有个明确的计划。另外,一整块儿时间干一件事情的时候,心里老是惦记的其它的事情,不能做到专心致志,需要想办法解决这个,比如番茄工作法。

废柴大作战之愚人节开篇

废柴大作战第1弹

开篇

如题,我将会开展一个行动,代号为“废柴大作战”,为期六个月,行动目标是用六个月时间拿到BAT公司的语音识别算法工程师的offer。我会在此博客和我的Github repo上持续更新所有的行动计划、执行情况、行动结果。接下来将会是充满冒险的六个月。

起点

首先要在这里交代一下我个人的背景,一方面是对行动之前的自身情况做个记录,以便跟将来的自己做个比较;另一方面,也方便读者能拿我的情况跟自己做个比较,如果我的行动成功了,那么你是不是也能做到呢?

之所以叫废柴大作战,是因为本人目前就是一个废柴。我从以下几个方面总结下个人的背景:

  • 学历: 普通一本电气信息类自动化专业,非top10的985高校计算机科学与技术硕士。

  • 编程基础:

    • C语言停留在能用几个数组,写几个循环,把发光二极管循环点亮的阶段;
    • Python停留在熟悉基本内置数据结构(list,set,dict),会用Python写几个脚本做一些文本处理的工作,写程序的过程穿插着查语法,查函数库等考验信息检索能力的活动,基本上没网就没法工作;
    • Shell停留在写脚本调用第三方工具库来实现声学模型训练等;
    • 另外,能用awk,sed,grep等工具实现一些不算太复杂的文本处理。
  • 语音识别基础: 研究生阶段一直做语音识别方向,然而,整个两年半时间基本可以总结为:搭环境(Linux + Kaldi),数据处理(藏语音频加文本),跑Kaldi脚本(基本没修改过C++底层代码,我是典型的Kaldi社区蛀虫,没有提交过一个pull request)。了解语音识别涉及到的基本概念及原理,比如MFCC、fbank、GMM-HMM、DNN-HMM等,但绝谈不上算法基础扎实。

  • 实习工作经历: 没有过实习经历,2017年1月份毕业后在一家创业公司做语音识别相关的工作,工作中边学边做,因为团队刚刚建立,所以滥竽充数的我,目前还没有引起部门领导的注意(可能已经注意到了,只是我还没意识到。汗!)

以上,就是我的个人背景,很废柴对吧。当然,仅仅从这几个方面评估一个人是不够的,情商人脉等软实力不容易量化,所以也就不好评估。总之,目前是从头到尾一废柴,干什么都是三分钟热度,学习技术的固定模式是没入门即放弃。因此,需要大作战,才有一丝希望逆转了。以上,是我的起点。

目标

介绍完起点,下面说下目标吧。虽说过程重要,但是目标总得明确。正如开篇提到的,以我目前的水平,用六个月时间,拿到BAT公司的语音识别算法工程师offer。

战略规划

在保证如期完成公司分配任务的前提下,从以下几个方面(按重要性从上到下),强化自己:

  • 语音识别专业素养 (所有能让你区别于自然语言处理算法工程师、图像处理算法工程师的特质)
  • 面试所需的数据结构和算法 (快速熟悉概念,通过代码实现强化理论)
  • 编程语言 (快速掌握基本语法,通过刷题熟悉并强化内置的库函数)
  • 机器学习算法 (快速入门,在实践中熟练掌握某个机器学习工具包的使用)
  • 实力包装展示 (展示分为线上线下)

战术 (持续更新)

结语

愚人节开启废柴大作战纯属偶然,这一次,我是认真的。

作战计划

废柴大作战之作战计划篇

想完成一个为期六个月的目标,没有一个清晰详尽且切实可行的计划肯定不行。计划是来用服务终极目标的,也就是”用六个月时间拿到BAT公司的语音识别算法工程师的offer”。计划不同于战略规划,战略是大方向,给行动定一个整体的基调;计划是执行层面上的,需要提供详细的行动方案,甚至要详细到每天干什么。既然战略是大方向,那么行动计划要依照战略来制定。开篇已经制定了战略规划,下面就是围绕战略规划开始指定详细的作战计划。

语音识别专业素养

这里说的语音识别专业素养,是一切让你区别于其他机器学习算法工程师的特质。虽然目前深度学习技术大有一统天下的趋势,但从目前来看,想要找到一个语音识别算法工程师的工作,光是有机器学习的背景是不行的,还是需要语音相关的专业知识。结合我以前的学习和目前的状况,我觉得我需要在以下几个方面提升自己的语音识别专业素养。

学习内容汇总

针对以上三个方面,我在这儿列出相应的学习材料,也就是需要我在六个月内学习并掌握的知识技能。

面试所需的数据结构和算法

数据结构和算法是计算机专业的基本功,我是半路出家,在这方面根本没受过严格训练,只能靠自己恶补了。之所以觉得重要,抛开别的不说,单从公司招聘来说,笔试面试时数据结构和算法都是重头戏。之前以为是对应届生有这个要求,来了现在的公司工作一段时间后发现,社招的时候基本也就是从数据结构和算法上考察一个人的计算机编程素养,顶多再加上系统设计的东西。因此,这部分是需要花大量时间补充并且强化的。

学习内容汇总

针对数据结构和算法的准备,基本思路参考Quora上的一个回答。我准备一开始快速通过Python和C++的基本语法和内置数据结构,然后开始

编程语言

编程语言作为程序员驰骋沙场的兵器,重要性自然不必多说。我打算提升两门编程语言的编程功底,一个是Python,一个是C++。Python语法简洁,适合非计算机专业的快速入门;功能强大,目前很多机器学习库都支持Python,学习性价比非常之高。只所以要学习C++,是因为目前我接触到的所有语音识别工具箱,不管是开源的还是公司产品级别的,都是用C++写的。作为一个语音识别从业人员,C++不过关实在是无法立足。

学习内容汇总

机器学习算法

对于机器学习算法这块儿,我打算快速入门,强化实践,熟悉某个机器学习工具包的使用。至于理论部分,捡着感兴趣或者特别经典且重要的算法,再找专门的书去读。这部分的最终目标是熟悉掌握Python做Machine Learning的整个work flow,也就是当给你一个数据集之后,从数据净化,到最终得到模型或者结论的整个环节。

学习内容汇总

实力包装展示

这一部分主要是线上线下,多方位立体化展示自己。

  • 创建并完善各大求职平台的个人资料
  • 持续更新自己的开源项目voiceplay并宣传
  • 努力给Kaldi提交pull request
  • 制作一份好的简历
  • 在问答网站回答领域相关问题

展示平台(持续更新)

整体安排

整体思路: 按语言来分,两条主线:一条是Python,一条是C++。Python这条主线,首先是搞定Python语言上的特性,包括常用的Python语言使用技巧,库函数的使用,尤其是面向对象设计,希望面向对象的概念能在Python这里打个基础,然后学习C++的时候能省些力气。这个搞定之后,接下来的任务就是Python Data Science Handbook、Think DSP、Think Stats、Think Bayes、Machine Learning in Action这些书了,至于数字信号处理和机器学习的先后顺序,这可以等搞定Python语言之后,看看衔接哪个比较合适; C++这条线, 开始引入数据结构和算法的学习,先是理论部分,算法导论这本书,捡着重点部分快速掌握核心概念,理解着数据结构和算法的同时,开始学习C++,用最快的时间熟悉C++语言特性,弄清楚STL和Standard Library两者的关系,分别包含哪些内容,面向对象程序设计。同时学习数据结构算法和C++,时间可能会很紧,这时候Python这条线的学习可以暂时停掉。以C++这边的学习内容为重。初步估算,数据结构和算法加C++语法,要一个月的时间。这部分结束之后,就开始用C++刷算法题了, 以Elements of Programming Interviews这本书为主。开始刷题之后,应该会一直持续到最后找工作,所以,坚持每天固定时间刷几道,这时候就可以开始之前中断的Python那条线上的学习了。等Python这条线完成Stats和Bayes这两个主题的学习,C++这条线完成Dynamic Programming这部分的理论学习和刷题之后,可以开始把哥大的ASR课程的作业从头做一遍,C++代码深入读进去,理解算法和语音识别系统设计,WFST的知识也是在这个阶段开始学习并强化。理想情况是开始这部分的学习的时候距离找工作还能有1个月的时间。

每月的时间和任务分配

因为这个计划是六个月时间,我不可能预估这么长的跨度。所以,目前按照每个月月初制定当月的任务和时间安排,月末总结计划的执行情况,根据上个月的执行情况,制定好下一个月的计划。所以先安排4月份的学习任务,因为考虑到四月份还要准备英语考试,所以,整个月的学习任务不能定得太多。下面是四月份的任务:

  • Think Python 要求: 读完全书每个章节,重要的代码要敲一遍,课后习题不需要全做,捡着重要的做几道,OOP的部分要重点学习。
  • A Byte of Python 要求: 快速通读整本书,捡重点的章节学习,作为Think Python的补充

结语

以上是我的整体方案,把握大方向不变的前提下,时刻根据情况做出调整。