《机器学习》 第 3 章 线性模型 读书笔记

西瓜书 周志华 2016 年 12 月第 14 次印刷

3.1 基本形式

线性模型的预测函数为:

f(x)=w1x1+w2x2+...+wdxd+b{f(x)=w_1x_1+w_2x_2+...+w_dx_d+b}

写成向量模式得到:

f(x)=wTx+b{f(x)=w^Tx+b}

3.2 线性回归

线性回归能在给定数据集 D={(x1,y1),(x2,y2),...,(xm,ym)}{D=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\}},其中 xi={xi1;xi2;...;xid},yiR{x_i =\{x_{i1};x_{i2};...;x_{id}\},y_i\in\mathbb{R}}学到一个线性模型从而进行预测。

考虑最简单情况,当 xi{x_i} 为一维时,问题转换为求下式:

f(xi)=wxi+b{f(x_i)=wx_i+b}

使得

f(xi)yi{f(x_i)\simeq y_i}

使用平方损失函数作为衡量线性规划模型性能的指标,f(x){f(x)}y{y} 越接近,代表平方损失函数越小。即得到:


那些年听过的播客

前几天在刷微博时,突然发现 Checked 休更。蛮震惊的,于是在他下面留了言。

后来仔细一想,接触播客也快四年多了。刚开始疯狂地时候,走路的时候也带着耳机在听。不过现在胆子越来越小,主要在跑步的时候通过无线耳机收听节目。四年多的时间里面,有播客听过,有播客开始,也有些播客半死不活。正好借这个机会分享一下我听过的播客。

播客是什么?其实有两种解释:一是一种数字广播,制作方将节目以音频的形式放在指定网站上,用户可以将节目下载到自己喜欢的硬件中收听。二是特指 iOS 中的一个软件——Podcast,通过这个软件能订阅以及收听音频节目。

科技

IT 公论

说起中文播客,就不得不提 IPN 播客网络,他们旗下有很多的博客节目,IT 公论正是其中的一个。由李如一和 Rio 主持,主要探讨科技和人文的关系,由于主播的限制,更多关心 Apple 生态下的新闻。可惜的是于 2106 年停播,不过早期的一些节目还是值得一听。

Checked

本文最开始提到的节目,有文刀汉三、千千、Hum三个人主持,主要讨论如何使用 App 进行数字化生活。比较经典的有#1: 日历/待办事项/GTD#2: 如何记一手明白账#49: 访谈「也谈钱」: 你的钱是可以给你赚钱的,也可以说是我听过后实践最多的节目。

生活

太医来了

一档医生谈话类节目。之前很喜欢的节目,高考之前也有学医的想法,听三位太医讲他们大学生活以及医院工作都有一种触动。更关键地是,这个节目也是很好的获得一些基础医学常识的渠道。比如其中有一期节目讲解了医生的字,听完之后才了解到龙飞凤舞的字迹主要是不希望患者看明白。

狗熊有话说

主播大狗熊,注重分享设计、生活、运动、阅读等方面的知识。更重要的是,通过收听这么长的节目,可以看见狗熊的成长轨迹。从当初的云南昆明,如何通过自己的规划,最终全家移民新西兰。

Byte.Coffee

比较杂的节目,主播 MilkShake 羊,斯坦福博后,目前在南京一所大学任教。

在北大不吐槽会死

三名北大学生的吐槽会,取材也是方方面面,从他们的大学生活到现在毕业之后对工作的感悟。内容有些时候比较脏。

纽约文化沙龙

在美国留学的学生主办,每期会邀请一些嘉宾,讲述特定主题的内容。我知道的类似组织还有安城文化沙龙,不过他们只分享视频。

蒋勋细说红楼梦

蒋勋的红楼梦应该是很有名的节目,某一位粉丝通过播客形式将这些音频分享出来。其实之前我也搞过这方面的内容,WordPress 有专门的播客插件,从技术角度来说发布播客还是很简单的。

编程

内核恐慌

这是另外一档由 Rio 主持的节目,听名字就很硬派。讨论过程序员的方方面面,比如编辑器、字体、键盘、自由职业等等。可惜目前保持半年更新的频率。

Teahour.fm 以及代码时间

这两个都是访谈类节目,邀请过各种各样的程序员都有。对于立志投身于软件产业的人具有一定的参考价值。

工具

收听播客大概有两种主要的工具,第一种是专用的软件,比如喜马拉雅、蜻蜓 FM等,能直接在软件内部搜索你想听的节目收听,而且我在上面的介绍的节目大多都会在这些平台发布。但是,我更推荐第二种方法,使用泛用性客户端收听节目。在 iOS 中,系统自带播客软件,也可以去下载如Overcast或者Castro Podcasts等第三方软件。目前我自己常用的是 Overcast,比起系统自带的,提供了人声增强(能解决部分播客音质太差问题)以及智能变速(自动调整速度)等功能。在 Android 中,推荐 360 Podcast ,老周的公司出品的良心应用,良心到国内都没有推广过……
最后,对于一些只有在喜马拉雅等地方可以收听的节目,可以使用播客 RSS Feed这个网站获得订阅链接。


《机器学习》 第 1 章 绪论 读书笔记

西瓜书 周志华 2016 年 12 月第 14 次印刷

1.1 引言

机器学习:利用经验来决策

1.2 基本术语

根据数据是否拥有标记信息分类:

  1. 监督学习 supervised learning
    • 分类 classification
    • 回归 regression
  2. 无监督学习 unsupervised learning
    • 聚类 clustering

1.3 假设空间

假设空间指的是所有跟问题相关的假设所组成的空间,学习过程是从假设空间中进行搜索,目标是找到与训练集「匹配」(fit)的假设。

在这么多的假设中,可能存在一些假设,得出的结果和训练集一致,这些假设组成的空间叫做「版本空间」(version space)。

1.4 归纳偏好

对于数据集中没有出现过的情况,算法可能会按照自己的偏好来预测结果,这种情况称为「归纳偏好」。为算法选取偏好时,可以使用「奥卡姆剃刀」原则,即有多个假设与观察一致,则选最简单的那个。但是什么是最简单的也需要仔细思考。

没有免费的午餐定理(No Free Lunch Theorem, NFL)

  1. 在所有问题出现的机会相同时,所有的算法的期望性能相同。
  2. 任何一个算法都有表现好的问题,也有表现差的问题。
  3. 针对具体的学习问题研究算法。脱离具体问题,研究什么算法更好毫无意义。

1.7 阅读材料

其他科学研究中采用的假设选择原则
古希腊哲学家伊壁鸠鲁 「多释原则」:保留与经验观察一致的原则。


每周分享第 1 期

这里记录过去一周,我看到的值得分享的东西,每周六更新。

新闻

1、伊朗迷你裙消亡史_手机网易网
历史居然可以导流……

2、欧盟GDPR有多狠?未合规的数据处理活动或将被叫停! - 大数据 - DBAplus社群——围绕数据库、大数据、PaaS云,运维圈最专注围绕“数据”的学习交流和专业社群 关于 GDPR 你需要了解的一切 - 少数派
最近收到很多跟这个相关的邮件

3、2018互联网女皇报告中文完整版呈现!

4、如何评价ry(Ryan Dahl)的新项目deno? - 知乎
这个新闻关键不在于这个新的项目,而是在于国内和多的开发者在项目的 Issues 页面灌水,引起其他人的反感。

工具

  • Kanbanist | The Missing Kanban Board for Todoist
    前几天还在考虑如何将 todoist 与看板结合,也看了一下 todoist 相关的 api 文档,之后在网上搜索时就发现了这个产品。功能还不是很强大,不知道作者什么时候可以完善。

文摘

1、 大学的双休日应该如何充实地度过? - 知乎
这一个回答是我见过关于大学如何渡过比较好的解释,希望还没有毕业的同学可以不辜负四年。

你如果找准了目标,自然自己会有一个答案。每个人只要认准一件事情好好做下去,最后的结果不一定会差。虽然我自己是走传统路线的学生,GPA+英语+竞赛都稍微拿得出手,但是其实我并不喜欢现在的自己。其实你发现,除了顶级大牛,大多数大学所谓的好学生,其实都是一个模子刻画出来的。国家奖学金(其他综合奖学金)+90左右的均分+各类学科竞赛+各类荣誉称号+各类传奇的社会经历活动等等。当然,本科毕业后,人生不会太多波折,但是回首望去,这样的本科未必真的是自己想要的本科。

2、前几周加了民科微信群(不知道有没有人还记得当年发现电荷不存在的“民间科学家”),很难理解他为什么会这么执迷不悟,下面这一段话大概可以解释一下。

一个人不需要做什么惊天动地的大事,但是对自己做的事情必须有认同感,如果做学术的自己都觉得自己在灌水,理由是身边大多数人也是在灌水,那么我不明白我为什么要去做它。

3、哪些经济学论文让你发出「脑洞才是第一生产力」的感叹? - 童话李的回答 - 知乎
生活处处皆皆学问,从篮球比赛中的「手感」出发,抽象「这个球命中概率是否与下一个球命中概率正相关」,然后去统计数据研究,最后给出下面的结论。

The belief in the hot hand and the “detection” of streaks in random sequences is attributed to a general misconception of chance according to which even short random sequences are thought to be highly representative of their generating process. (一小段完全随机的结果,却被认为对整体有很高的代表性。)

4、我的5个经济学思维 – 左岸读书

折现、机会成本、边际效用递减、沉没成本、复利

图片

1、以 GDPR 为背景创建的图片
以 GDPR 为背景创建的图片

视频

1、2018 4 18 德云一队新街口剧场《朱夫子》高峰 栾云平 - YouTube

金句

1、坚持读书,坚信自己可以读完一些东西,坚信自己可以承受读书的强度——无论读的是什么,这过程本身就是一种信念,并且这份信念会让我们抵达心中的目的地。

2、许多时候,我们身处信息传导的末端。当一个问题反复多年都没有解决方法的时候,就应该怀疑是否信息上游的路径已经锁死?可能在你自己原有的知识体系和知识框架内并不存在解决方法,无论耗费多少时间和精力都不能解决问题。那么,这时候应该考虑迁移到其它陌生的领域中去,也许,你要的答案早就放在那里,只是你一直没有发现而已。你的问题,也许对那个领域里的人而言,只是他们工作的一个副产品,甚至都不会太在意。——和菜头

3、所有的科技公司,解决的都是人、信息、物品三方之间的关系。简化来说:谷歌解决的是人与信息的关系,亚马逊解决的是人与物的关系,Facebook解决的是人与人的关系,微软,解决的是企业人的问题。 ——如同答辩老师对我所说,做硬件才有意义。

4、元认知是对认知的认知。元认知是自省的能力。一个人能够理性的反思自我,自然就会知道许多麻烦,并非是外界的存在,而是自己暴戾所引发的。执迷于无知,甚至以无知为傲骄,才是最可怕的贫穷。

5、我觉得大多数幸福的人的生活就是这样的,没有什么高大上,也没有那么多的风花雪月,而就是这样简简单单、快快乐乐地用自己的努力和自己心爱的人一起为更美好的生活脚踏实地地奋斗着。

6、当一个学生从某一所知名大学毕业后,他不需要再把母校的名字天天挂在嘴边;当一个学生从一所二三流大学毕业后,那所学校今后会因为曾经出了这样一个学生感到自豪。这样的大学经历就堪称完美了。——快要离开学校时,思考自己的价值。


月读|软技能——代码之外的生存指南

本月推荐的书是 John Z. Sonmez 写的《软技能——代码之外的生存指南》。本书作者之前是一名程序员,目前更多的是充当程序员的人生导师角色,通过博客、播客、vlog等多种形式介绍自己的软技能,借此希望能推动其他人事业进步,过上更充实的生活。

本书总共分成七大篇:

  • 职业篇,介绍了程序员从公司选择、面试、工作、辞职、创业等职业相关的方方面面内容
  • 自我营销篇,从博客开始,打造自己的个人品牌
  • 学习篇,作者自己领悟的「十步学习法」学习新的知识
  • 生产力篇,自由职业者的自我管理方法
  • 理财篇,探讨收入、投资、债务以及退休等问题
  • 健身篇,下面的图片就是作者本人,和一般的程序员形象有很大的区别
  • 精神篇,心灵、情感等问题探讨

作者博客

从上面的介绍可以看出,这本书基本上把一个程序员可以面对的所有问题,都给囊括了。从形式上来看,这本书像是各种主题的博文合集,有些散乱。总的来说都是关注于「更好地经营生活」。

自我营销

这一个主题是书中我最感兴趣的内容。知识付费的兴起,朋友圈中经常能看到有人分享付费课程的图片,图片中的老师各种头衔酷炫狂霸叼咋天,自我营销的成本真的是已经低到一种程度。万物互联,每一个人都有一次成名的机会。

本书中的自我营销,介绍了一系列的过程,作者推荐个人品牌的建立从博客开始。对于程序员来说,维护一个自建博客是很轻松的事情,而且可以分享的内容也很广泛,工作中的技能学习、遇到的问题分析。将博客当成自己的名片,从而实现让更多的人认识你,认可你。

书中介绍维护一个博客,要从两个方面入手,一是内容质量,二是更新计划。之前,自己的博客都是随心所欲的更新。重新思考一下,给博客增加了几个栏目:

  • 【每周分享】:每周六不定时更新,记录过去一周,我看到值得分享的内容
  • 【月读】:每月不定时更新,推荐本月我阅读的一本书
  • 【数字生活】:我的数字生活实践
  • 【博客公告】:分享与这个博客维护相关的内容

另外一方面,对于我这样的博客来说,最主要的流量来源是搜索引擎,所以花时间进行了一些 SEO 优化。通过在百度搜索和谷歌搜索相关页面提交网站,实现文章更快的收入。除此之外,需要在社交账号中更多的绑定博客,寻求其他的主动点击。

生产力

这个主题,是我大半年以来一直感兴趣的。之前没有注意到,像作者这样的自由职业者更应该是效率大师。其实各种效率方法流程大致相同,更多的是细节的实现。作者在做周计划时,倾向于利用看板来展示任务,这个给我一个新的启示。我考虑过利用 Github + Zenhub 来管理一些大的项目,不过平时没有什么动力打开 Github 网站。

Github Issues

所以,需要一种更加简单地方法。网上查找了一下,发现一个网站 Kanbanist | The Missing Kanban Board for Todoist。Kanbanist 最大的优势是能直接读取 Todoist 的数据,用起来会更加方便吧。不过,如何融合进入日常工作流中,又值得我自己仔细思考一下。

Kanbanist

总结

读这本书,最大的感受是读到很多点的时候,我都打开了电脑进行实践。功利地说,这是一本实用的书,推荐大家有空都来挑选自己感兴趣的内容阅读。


博客折腾记:使用 Travis CI 自动部署

前几天,看到其他人在 V2 上讨论利用 Docker 更新 hexo 博客。不过自己对使用 Docker 不是很感兴趣,倒是了解到 Travis CI 的作用。

参考使用 Travis 自动构建 Hexo 到 GitHub | Zthxxx’s Blog使用travis-ci自动部署Hexo到github和coding - 掘金这两篇文章,完成了博客自动部署的修改,也解决了一些,之前没有在意的问题,写下来备忘一下。

介绍一下与这个博客先关的 git 项目。博客相关的原始文件放在 xiang578/blog,主题文件放在 xiang578/hexo-theme-even: A super concise theme for Hexo(我对这个主题有一些修改,所以自己 fork 了一份,最后发布的文件放在xiang578/xiang578.github.io: Welcome to My blog!(实际上这也是一个备份,访问时的文件是从 coding 服务器上读取的)。

按照上面两篇博文配置好 Travis CI 之后,每次向存放博客原始文件的仓库 push 时,travis-ci.com 都会拉取代码进行 build ,成功之后会出现下图。

之前都是使用 git clone 下载主题的,如果把本机上的博客相关文件直接推送到 github 上会遇到问题。简单地说就是一个 git 文件夹包含了另外一个 git 文件夹。所以,需要使用 git modules 来解决。通过这种方法可以在 clone 主仓库时,会自动clone子仓库。

博客仓库中会链接到其他仓库,其中 @ 之后的那一串就是 commit 编号,主要是用来做版本控制的。

完成这样的设置,修改主题文件后,需要先将修改 push 到主题的仓库,然后在博客文件夹下 push 修改到远端仓库。最终,才能再网页上看到修改效果。


月读 | 数学之美

其实从《数学之美》这书名上看就可以知道,这是一本科普类的图书。这本书收集吴军博士早期发布在谷歌黑板报上解释搜索相关的数学原理的文章。吴军博士之前在谷歌和腾讯都从事搜索相关领域的研究,自然而然的有很多独特见解。除了这本书之外,他还有《浪潮之巅》、《大学之光》等科普图书,也是值得一读。

虽然是科普类读物,但是本书还是有一些阅读门槛的。大二的时候也看过这本书,当时的数理基础不够,囫囵吞枣翻完后。事后大概只记得自然语言处理、马尔科夫链等等的名词。这一段时间正好自己也在做文本搜索相关的工作,所以又从图书馆中借来一读。

本书大概介绍了 Google 整个搜索引擎的基本框架,包括资料获取、分词、索引、排名、分类、相似度计算等知识。这一次读完之后,印象最深刻的是关于从通信模型推导出语言翻译模型的转变。这里和大家分享一下我的简单见解,如果想要更加深入的理解可以阅读《数学之美》的第 5 章 隐含马尔可夫模型。

大二的时候上过《通信原理》这门课,其中讲解如下图所示的简单通信系统。一般包括五个最基础的要输,分别是信源、变换器、信道、反变换器、信宿。从字面上很难理解这些东西是,所以简单的解释一下。通信系统是对通信过程的抽象概括,比如你和其他人发微信时,你就是信源,信息的发送方。变换器的作用是编码,计算机只能处理 0 和 1,所以需要将你的消息通过一定的方法(协议)转化成为由 0 和 1 组成的序列。之后的信道指的是信息发送的通道,可以理解为发送微信时需要有网。反变换器顾名思义作用和变换器相反,从一个二进制序列还原成和你聊天的人(信宿,和你聊天的人)可以理解的消息。

当时学到这里的时候,没有去发散思维,思考这个模型在其他领域的应用。《数学之美》书中,讲到统计语言模型时,将它衍生到机器翻译的过程中。在日常生活中,我们和其他人交流的时,一般是在脑子中有一个想法(信源),然后在说出来(编码),声音在空气中传播(信道),最后被另外的人(信宿)听到,并且在脑子中思考理解(解码)做出相应的回应。对于翻译问题,可能我说出来的是中文,如果听到的是美国人,他需要将你说的转化为英文。所以产生的一个问题是,如何实现将中文与英文对应起来,也就是翻译问题了。为了解决这个问题,科学奖们运用了贝叶斯概率、隐含马尔科夫模型、大数定理等数学知识来处理。

这只是书中的一个简单例子,吴军博士在自然语言处理与搜索领域的经历令人难以望其项背,书中关于这两个领域在近代的发展的小故事比比皆是,作者更是和这些人谈笑风声。所以,我推荐所有对数学有爱好的人,都可以看一下这本书,感受一下数学原理的力量。


利用 GTD 原则完成一次讲座

前几天,在导师的邀请下,给17计算机班的同学们进行了一次分享讲座。内容大概是关于去年在滴滴实习时做的一些工作以及主观意愿下的大学学习建议。作为一个号称实践 GTD 的人,必不可少的要将 GTD 原则使用到这一次分享准备过程中。

自然式计划模式

这样子的一次活动,正好符合 GTD 中关于项目的定义。《搞定1》第 3 章中提到了「控制项目:纵向管理项目的5个阶段」。现在结合五个阶段,来复盘一下我准备讲座的过程。

1. 定义目标和原则

你为什么做这件事?
做这件事的真正目的或动机是什么?
做到什么程度才算是成功?
你的目标是否足够清晰明确?
什么样的行为可能会损害我正在进行的工作?
我怎样才能防止这类情况的发生?

我决定做这一次分享时,主要有下面的4方面原因。

第一,整理。每一次分享都是一次自己我反思。所以我需要整理一下之前在滴滴工作时留下的资料,以及梳理前几年的学习感悟。
第二,演讲。说句实话,我的演讲的能力很弱。体现在,口齿不清楚、演讲时语速太快和听众没有交流。众所周知,演讲能力是现代社会必不可少的一项能力。提升演讲的关键在于实践,所以给其他人讲解我熟悉的内容正是一次绝好的机会。
第三,回馈。虽然私下里和其他人骂过很多学校和学院的规章制度之类,但也不能忽视学校所提供给我的成长机会和空间。之前书记也在一次党会上说过,我们很多党员的材料中,只有那一年考了多少名,又获得什么奖这些的,没有和群众交流。
第四,参考。作为一个软弱的人,我很少会去谈给其他人有什么影响,也不会整天去批评这个那个,只希望自己的经历给其他人一个参考。所以,我很喜欢学院里面搞的《榜样的力量》栏目。通过这些,可以了解到学长学姐有多么努力,获得了什么样的成就。事实是,我们这样的普通学校中,很多优秀的人都已经模板化了,集中在绩点多少高,获得过什么奖学金,当过什么部门的什么而已。真正的大学教育,应该培养的学生达到「千人千样」。

2. 展望结果

成功是一番什么景象?听上去会怎样?有什么感觉?专注!创造出清晰可见的结果。只做积极性思考,不考虑不利因

对于我个人来说,这一次分享是一次宝贵的锻炼机会。是实践 GTD 原则,是完成一次公众演讲,也是完成一次和学弟学妹的交流。不过,由于个人经历的限制,我所分享的东西,终将是少数同学所感兴趣的,只希望这部分人听到我的一些观点,未来的学习会有那么一点点不同。也许多年之后,互联网上有一段文字记录,提起那个晚上我所讲的观点。

3. 头脑风暴/集思广益

在这张的纸的反面的正中央写上项目名称,开始头脑风暴。追求数量,不求质量,不判断,不质疑,不评估,不批判。
不要急于分析组织。1)目的?2)害怕什么?3)我所不知道的?4)有哪些不利因素?

上面写了这么多,终于到了最关键的一步。由于这是一次个人分享,所以也谈不上什么集思广益。不知道现阶段有没有什么头脑风暴的工具,我直接掏出几张草稿纸就开始搞了。上面的介绍也提到了,头脑风暴的原则,将大脑中的想法排空,为下一步工作做准备。

头脑风暴

4. 组织整理

在完成头脑风暴之后,我开始使用幕布来整理之前想到的想法。上图中蓝色的对勾就是在整理时的记号,标记整理到大纲中的内容。最后导出一张思维导图,到这里为止我就清晰的知道自己要分享的内容。

路径规划那些事大纲

5. 明确下一步的行动方案

目前我是在使用 Emacs 中的 org-mode 管理这些项目。所以,我就将自己要做的事情放到一个文件中。下图是完成这个项目之后的结果,当然也有些行动被我取消了。

组织

回顾

来总结一下这次讲座之后的想法。

从辅助工具上来说,自己的 PPT 水平很差,也就认为不能把时间都放在准备 PPT 上。所以思考过其他一些工具,但都不是很乐观。考虑过两种类型的工具,可以生成 ppt 的软件,比如 Marp(利用 markdown 生成)以及 org-ioslide (利用 org-mode 生成),这两个工具很难实现图文混排。另外,就是幕布的演示模式,使用时需要展开和折叠大纲,有点麻烦,也容易导致出错。最后,还是只能硬着头皮去做了一个简单的 ppt 。

幕布演示模式

从演讲效果来说,内容是很丰富的,但是我的演讲能力很差,之前在上面提到的问题,都暴露无疑,还是需要加强锻炼。也由于时间上的一些原因,我的准备不够充分,试讲次数也太少了,导致节奏控制也不好。还要对浪费17计算班同学的时间,表示一些歉意。

点击查看我使用的ppt,文字形式的分享等我有空再来整理吧。

参考


采访一则

前一整子学院内有关部门对我进行的采访,正好放在这里记录一下。【】这个内部是我现在补充的内容。

Q1:在大学学习的这几年里,可有一事令你感触颇深,对你影响巨大?能否与大家分享一下?

【没有回答,现在很难被一件事情所影响】

Q2:很少有人在人生的道路上总是一帆风顺,你可曾遇到过难以解决的挫折?你是怎样克服它的?

【没有回答,向前看,不回头】

Q3:学长一直以来都是成绩优异,然而大学生活必定不能只有学习,学长是如何合理安排自己的时间的呢?

最简单的方法是善于利用日历软件。每学期将自己的课表以及固定时间要做的事情(比如每周二、四下午都要训练)输入到软件里面,作为已经分配的时间。每周、每天将必须要完成的任务找到一个截止日期前的时间块填入。复杂一点可以去尝试学习 GTD。
【比起和安排时间,更重要的是控制欲望】

Q4:作为信工学子,大家都知道你的代码十分厉害,能否跟学弟学妹透露一下学习的妙招?

平时多写算法题目或者是多做项目。刚开始可以从书籍、博文、mooc等渠道找到自己喜欢的内容模仿,然后自己在这个基础上尝试添加的代码。
【上一篇博文中有过类似的感叹,其实我的基础也很不扎实】

Q5:学长曾经参加过许多国家级乃至国际的竞赛,初次参加大型竞赛时可会紧张?你是如何克服这些心态上的问题的呢?

一般来说,编程比赛时间比较长,相对来说是比较自由的。紧张时可以尝试先趴着睡一觉,然后等到心情平复之后,再发挥出自己的正常水平就好了。不要有太多成绩上的压力或者是幻想。
【刚开始以为自己参加比赛能有奇迹发生,后来开始期待队友能 Carry。最后发现只能做自己,顺其自然。】

Q6:学长刚毕业就接到滴滴出行的offer,令人羡慕不已,每个人都想变得优秀,学长可不可以分享一下努力的过程?

凡事预则立不预则废。 很多时候,我们想要做的事情都是有前人做过的,所以可以从网上收集大量的资料。对于找工作来说,很多人会在博客或者论坛上分享面经,通过收集这些,看一下企业一般会考察本科生哪些方面知识,以及什么样的经历会给自己加分。然后朝着这些方向去努力。
【这些话是我自己经历找工作痛苦之后,才总结出来。人生就是一张信息战。】

Q7:图书馆是许多同学经常待的地方,你最喜欢哪一类的书籍?对哪本书印象最为深刻?

好像没有特别喜欢的一类书,大概什么类型的书都看,一般是了解到某一本感兴趣的书,就会去图书馆找一下。另外,我大部分时候去图书馆都是看报纸和杂志。
这么多时间下来,看完之后收获最大的书是《搞定I:无压工作的艺术》。这本书是 GTD( Getting things done) 的入门读物,主要介绍了一套个人任务管理的方法。如果你感觉生活杂乱无章,可以尝试学习这套方法来规划生活。
【不知道为什么,我一直想给身边的人推广 GTD 的原则。】

Q8:在学习与代码之余,你有什么十分热爱的东西,并为它坚持不懈吗?能否与大家分享一二?

写日记。这个爱好从高中开始,最初是写在笔记本上,由于不会搞手账之类的东西,日记的形式很单调。后来受到《晨间日记的奇迹》启发,开始使用为知笔记来记日记,可以同时记录今天拍摄的照片或者是视频。另外,每个日期开一篇笔记,每年都在同一篇笔记上更新,可以手动实现去年今日功能。
【记日记可以发现自己吧】

Q9:每个人都拥有属于自己的生活习惯,学长有哪些良好的生活习惯能与学弟学妹分享一下吗?

充分挖掘手机或者电脑的功能来体验数字化生活。推荐一些我自己使用的软件给大家吧。
个人任务管理:OmniFocus
笔记软件:Evernote、Wiznote
时间记录:Toggl、Forest
记账:MoneyWiz
如果想要具体了解这些软件如何提高工学学习效率,推荐大家去少数派上找相关文章阅读。
【其实我想说的是一个「数字游民」的概念,通过使用这些优秀的软件,记录自己的成长以及提高自己的效率。】

Q10:最后,请学长给学弟学妹们分享一段寄语,鼓励一下大家吧!

大学时光是短暂的,希望你们能早点找到自己想做的事情,并为之奋斗。

新闻稿的链接
查看更多我的随笔,请点击 ZenTalk


构建之法 第 0 次个人作业

最近重新看邹欣写的构建之法,发现他的第一章课后作业很有意思,所以决定自己也来写一下。有关的作业说明在2017BUAA软工助教 第0次个人作业 - ChildishChange - 博客园中。

结缘计算机

你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?(必答)
计算机是你喜欢的领域吗?是你擅长的领域吗?
你热爱这一专业吗?你对计算机的热爱是怎样的?仅仅是口头的吗?

与大部分人差不多,在高考前我也没有对规划未来。考的也不是很好,没有太多的选择。所幸自认为还是有学习的劲头,想着大学找机会去转专业一波。当时也没有太在意专业的填报,最后机缘巧合来到了财经读计算机。大一下时,确实得到了转专业的机会。在面试时,突然感觉自己对转过去的专业也没有太多的好感,就和面试我的老师说放弃转专业,他们只能口头上鼓励我,男生学计算机也不错。大概就是这样子,就在计算机专业混到了大四。

比起这些博主来说,我没有他们那么强的主观能动性吧,能自觉地了解学习计算机各个领域的知识。而我从除了学校内的课程安排之外,自己了解其他知识都是浅尝而止。从大一开始差不多就点弯了天赋树,基本上课余时间都在写算法题目,参加各种各样的算法竞赛。幸运地拿了一些大大小小的奖,但是这也导致在知识面上和企业认为的计算机专业学生有很大的区别。目前来说,正在通过自己的努力,加强学习基础知识,希望能补齐自己的短板。

记得之前有一句话说,「数学是神造学科,计算机是人造学科」。在三年多的学习中,无时无刻不感受到前人思维的巧妙与严谨。比如 CPU 中的加法器,能通过简单的元器件和门电路搭配实现二进制加法以及进位。另外,计算机专业也能及激发最深处的好奇心。当你查阅相关的文档,实现软件的某些功能时,是否能想起童年某个午后拼成的模型?

在计算机系学习

你对你的大学生活有什么想要吐槽的地方吗?你理想的大学教育应该是什么样子的?跟学校给你的有什么区别?比较你在中国大学的经历,你的老师和学校能做到和国外那样吗?如果不能,请分析一下为什么。(必答) (8.26修改)
迄今为止,你写了多少代码,描述你做的最复杂的软件项目/作业。(必答)(8.24修改)
科班出身和北大青鸟有什么区别?
速成的培训班和打基础的大学教育还有mooc之间有区别吗?
学线性代数和概率论的时候,你是否有过这样的疑问「我们为什么要学这么多数学,这和我们的计算机有关系吗」,你现在是否还有这样的疑问?对这个问题,你有自己的解答了吗?那么其他学科呢?

对于专业来说,我记得辅导员曾经在年级会议上讲过这样一段话:「有些人和我说,为什么高等数学这么难?这些书都是在大学没有扩招前编的,以你们的成绩当时都可能上不了大学。而且,我们学校搞计算机系,只是发现有很多教计算机基础的老师才开设的。」所以,也可以知道这个专业在学校的尴尬地位。

托尔斯泰说「幸福的家庭总是相似的,不幸的家庭却各有各的不幸」。反而对于计算机专业来说,感觉「普通学校的问题总是相似的,强势学校的优点却各有不同」。蒋宇东在梦断计院 为梦前行中写道他自己的学校计院有三大问题:1.学生基础薄弱 2.学风不正,溃散成性 3. 实践环节薄弱,人才位置错放。之前,我也一直在想一件事情:是老师水平太差学生懒得学还是学生水平太差还是老师懒得教?看到上面的三个问题才明白,冰冻三尺非一日之寒,事物发展都是相辅相成的。学生大部分都是过来享受大学美好生活的,对于有挑战的专业基础课比如编译原理、离散数学等都会用脚投票让他离开课程表。有幸能勉强开下去的课程,也会被改成能突击几天通过的样子。

记得大二导师前往台湾进修前找我谈过一次话。他希望我能自己养成一些良好的学习习惯,多去钻研计算机专业知识。并且还说,学院每年毕业的学生中,没有超过十个学生明白计算机是怎么一回事?三年多的时间里,我也接触过网上的一些 Mooc,不过差不多完全听完的只有浙江大学陈越教授的数据结构和吴恩达教授的机器学习。能坚持学习完这两门课,背后都是兴趣使然。数据结构是 ACM 比赛中很重要的一个知识点,当时自己学校还没有开设这门课,而且看书自学也不是很懂,所以就花大半学期的时间在网上去学习。机器学习则是希望未来能从事机器学习相关方面的工作才了解的。

陈越教授放在网上的数据结构课程相对于浙大内部来说,最大的变化是将教学语言从英文变成了中文,而且也适当的删除了部分内容(不是很确定?)。之前也在知乎上看到浙大计算机专业的课程安排,主干课程选用外国原版教材,以及使用英文授课。另外陈老师在讲解相关算法时,只介绍原理和思想。相关的实践需要你课后花时间进行,并且要求提交程序设计平台上进行黑箱测试。对比后来在自己学校开设的数据结构课程中,直接给你展示代码,也不强求你写的代码能正确运行,只要粘贴在实验报告中提交即可。《机器学习》的课程展示了美国教育的特点,每一周的课程都会包含一个小 quiz ,以及在课程中插入适量的编程大作业,学习的困难程度也就可想而知。

这些授课方式的不同,我认为是不同大学对于教育的理解不同。对于浙大之类的重点大学来说,所给予学生的是精英教育,侧重于培养学生的计算机科学基础。而下面的学校更多是大学教育成为通识教育的产物,本应该培养专业型人才,传授计算机技术,却由于种种原因没有这样开展。Mooc 的出现,打破了原有的时间、空间的限制,让我这样的普通学习接触到了国内外顶尖大学的教育资源,有利于教育公平。但失败之处也在于它的灵活性,不得不承认需要很强的自我约束能力才能完整地学习完网上的课程,不知你还记不记得那个当时看得热血沸腾的课程时,被你遗忘在哪个角落了?

最后,我觉得 Mooc 还缺少的同辈压力。吴军博士在《大学之路》中写道「当许多聪明、求知欲强、具有同情心而又目光敏锐的年轻人聚到一起时,即使没有人教,他们也能互相学习。他们互相交流,了解到新的思想和看法、看到新鲜事物并且掌握独到的行为判断力。」这大概就是学什么不重要,重要的是和谁一起学吧。一些 Mooc 虽然提供在线社区交流,但还是没有线下那种碰出火花的感觉。

对比完这些,计算机专业学生的另外一个主题不可能忽视——“自学”。最开始的作业说明给出的很多参考博文也说明了这一点。我印象最深的一个方法是徐宥在掉进读书的兔子洞中写道的「一字不漏敲入一本书的程序成了我推荐别人学习语言的最好办法」。古语读书百遍其义自见,计算机是一门实践的学科,只有在实践中才会学习到技术的本义。目前,自己在看《机器学习实战》时(相关代码和读书笔记见参考链接5
),也差不多用的是这个方法,将书中提到的机器学习算法一个字符一个字符地敲进编辑器,一次又一次地调试运行直到出现满意的结果。

在这样的学习中,我也可以回答这一部分的最后一个问题,我们为什么要学这么多数学,这和我们的计算机有关系吗?对于机器学习来说,本身是建立在概率论和线性代数的基础上,毕竟解释机器为什么能学习都需要用到霍夫丁不等式等相关知识。数学是一种工具,通过数学能将很多的计算机实践经验理论化,以此得到更好的发展。对比功力性很强的培训机构来说,接受科班教育的结果是有机会受到严格的数理化训练,这也能间接决定你在这个行业从事工作的层次和上限。

未来规划

对于你未来在IT行业的发展,你有什么样的梦想或者未来想从事什么样的工作?你准备怎样来规划你技术道路,职业道路和社会道路?(必答)
你对于实现自己的梦想已经做了或者计划做什么样的准备?
你们马上就要面临实习了,你打算在企业内实习还是在实验室实习?
实习经验究竟有多重要?是否需要马上开始积累实习经验?

前文也提到了,以我的目前的情况来看,大学中接受的教育和自己所学的技能都是和市场脱节的。所以,前一段时间也很迷茫,自己能做什么。所幸看到之前公司的同事所写的知乎专栏文章「谈“圈外”在校生如何更靠谱的拿到大厂算法/ML实习机会」(不知道为什么被删除了,所以无法提供链接),大意就是可以曲线救国,先就业再择业。

所以,我还是推荐出去实习的。不仅是走出象牙塔,感受一下工业界的需求。更重要的是大一点的企业都会安排专人对实习生进行相应的指导,使其能更快地朝工程师方向发展。

参考

  1. 现代软件工程 第一章 【概论】练习与讨论 - SoftwareTeacher - 博客园
  2. 2017BUAA软工助教 第0次个人作业 - ChildishChange - 博客园
  3. 蒋宇东:梦断计院 为梦前行
  4. 徐宥:掉进读书的兔子洞
  5. xiang578/MachineLearningAction: 《机器学习实战》