专栏名称: 图灵访谈
对话知名作译者,讲述精彩技术人生。你听得见他们,他们也听得见你。
目录
相关文章推荐
新浪科技  ·  【#小米YU7新版本车型完成申报#】 ... ·  昨天  
爱范儿  ·  OPPO Find N5 ... ·  2 天前  
新浪科技  ·  【#乔布斯时代iPhone设计全部谢幕#】北 ... ·  2 天前  
51好读  ›  专栏  ›  图灵访谈

访谈 | Adit Bhargava:插图笔记法解除算法的魔咒

图灵访谈  · 公众号  · 科技媒体  · 2017-03-31 14:29

正文


算法很难懂,是吧?

就怕碰上有美术功底的作者!

Adit用手绘插图的办法,把算法掰开了揉碎了讲给你。

所以说知识没有多么讳莫如深,只是没有被精妙地表述出来。

访谈嘉宾



解除算法魔咒的魔术师

Adit Bhargava


Adit Bhargava, 软件工程师,兼具计算机科学和美术方面的教育背景,在 adit.io 撰写编程方面的博客。


因为爱好,Adit踏入了编程殿堂。 Visual Basic 6 for Dummies 教会了他很多基础知识,但始终对算法没搞明白。直到遇到一位优秀的算法教授后,他才认识到这些概念是多么地简单且优雅。


几年前,他开始在adit.io上撰写图解式博文,介绍函数式编程、Git、机器学习和并发。图解式写作风趣幽默、化繁为简、清晰明确,受到大量读者的喜爱。




我们主要聊了些:


  • 为什么要写这样一本萌萌的算法入门书

  • 封面插画背后的故事

  • Adit神秘的算法导师

  • Adit最喜欢的算法

  • 评判算法的重要指标

  • 编程学习低龄化


为什么想写这样的一本入门书,充满了有趣的场景和可爱的手画插图?


学习一些新事物的时候,我自己通常会做笔记,因为这可以帮助我学习。比如,下面是我学习《抽象代数》时的原版笔记。有趣场景加上手画插图是我一直使用的学习技巧,我认为它对其他人也会同样有用,所以写了这篇博文。看了 博客文章 ,人们挺喜欢的,所以我想做成一本相同风格的书可能会很好。


一起感受下,Adit的天才图解技能之Monad!


学习 Monad 的渠道:


  • 取得计算机科学专业的博士学位。

  • 压根儿不学。这里根本用不到那些条条框框!

Functor 将一个普通函数应用到被封装的值上:

Applicative 将一个封装的函数应用到封装的值上:

Monad 将一个 “接受普通值并回传一个被封装值” 的函数应用到一个被封装的值上,这一任务由函数 >>= (读作 bind)完成。听起来似乎很拗口,让我们来看个例子吧,还是熟悉的 Maybe

假设 half 是只对偶数感兴趣的函数:


half x = if even x      
     then Just (x `div` 2)
     else Nothing

如果扔给 half 一个封装的值会怎样?

这时,我们需要用 >>= 把被封装的值挤到 half 中。猜猜 >>= 的照片:

对!就是马桶塞~


再看看它的效果:


> Just 3 >>= half 
Nothing 
> Just 4 >>= half 
Just 2 
> Nothing >>= half 
Nothing


这其中究竟发生了什么?Monad 是另一种类型类,这是它定义的一部分:


class Monad m where 
(>>=) :: m a -> (a -> m b) -> m b


下图展示了 >>= 各个参数的意义:

下面的定义让 Maybe 成了 Monad:


instance Monad Maybe where
    Nothing >>= func = Nothing
    Just val >>= func  = func val


来看看执行 Just 3 时发生了什么:

如果传入 Nothing 就更容易了:

你还可以把这些调用过程连起来,比如执行 Just 20 >>= half >>= half >>= half 会得到 Nothing


就是这么棒!

节选自Adit的文章

Functors, Applicatives, And Monads In Pictures





从书封看,我以为《算法图解》的手绘插图是老鼠系列的。似乎并没有,还有其他的形象像绵羊、鸟、兔子等。为什么要把那张照片放在书封上?


我希望我有一个更好的答案给你!Manning选择了封面上的图片,他们真的很喜欢这张图。但内容方面,Manning给了我很大的主动权。


很多读者非常好奇你在作者简介部分提到的算法老师。这位优秀的老师如何把概念变得简单又优雅,你能分享一些他/她的教学方法吗?







请到「今天看啥」查看全文