专栏名称: Tiny4Voice
一天一条来自 Tinyfool 的语音鸡汤,暖胃暖心,让我们一起在漫漫长夜里面默默前行,在死之前,没有终点,不会停歇。
目录
相关文章推荐
东岳一览  ·  杭州你变了 ·  21 小时前  
东岳一览  ·  杭州你变了 ·  21 小时前  
今视频长天新闻  ·  送哪吒2的电影票!手慢无 ·  2 天前  
51好读  ›  专栏  ›  Tiny4Voice

为什么我们还是要学习算法

Tiny4Voice  · 公众号  · 科技自媒体  · 2018-08-22 18:45

正文

其实在中国我也算是干了17年的程序员,这么多年基本上面试没人考过我算法。年轻的时候,行业特别不成熟,说难听点,会写代码就好了,谁也没有太高的要求,那会儿就不流行面试靠算法。经验到了一定程度以后,倒是流行考算法了,我去面试很多公司都是跟高层聊聊就入职了,基本上没人来考察我的基础。


倒是我在面试程序员的时候,随便会考一些基础的算法。二分法就已经可以干掉80%的面试者了,这里还不是说在白板上手写一个没有Bug的二分法,大多数人说都不说不清楚二分法在干嘛,复杂度是什么,等等。


大多数二分法可以完美过关的人,你随便再问问二叉树的知识也就是挂了。再多问点哈希是怎么回事,大多数人几乎完全不知道怎么回事。


我们的行业已经发展了这么多年,但是基础还是蛮薄弱的。当然,好的也有很多,非常厉害的人也很多,但是整体的底子还是太薄。


我在这里也不能吹牛逼。我自己虽然可以考别人,但是自己的底子也很薄。年轻的时候,觉得算法就是套路,想用的时候总能弄明白。然后做了10多年的应用,除了少数几个特别的领域的算法,搞的时候比较吃力,大多数时候都觉得没啥的。当然我们做的都是应用层的开发,不会动不动每个人都需要发明新的算法,所以,当然容易一些。


不过我后来还是觉得被现实给教育了。


首先是,前年facebook全球招人,我朋友蛮多,有人就推荐我试试看。我当时正好在学一个算法课玩,觉得自己玩的还可以啊,就参加了面试。结果电话面试三轮就挂掉了。


我不得不承认,人家出的面试题其实不难,但是我对某个细节确实没有深究过。当时给出的答案凑合可以用,但是题目稍微一点,马上就失效了。面试完了,我自己一分析,确实有非常完美的解决方法,而且不管题目怎么变,都还可以解决问题。


今年亚马逊要在国内招人去美国,我又有一堆朋友说可以推荐我去,我想了想最近的算法还是不够扎实,这样的机会反正每年都有,我先退而结网,明年再临渊羡鱼吧。


再然后,就是我在我学的算法课上真正学到了算法的魅力。


这其实是我在coursera的算法2里面遇到的一个作业,用最短路径法实现Seam carving算法。


什么叫Seam carving算法呢?就是比如如下图有一张风景照片,但是真正的信息量在人和这座城堡建筑上,能不能无损或者说不伤害画面效果的方法下,去掉中间那么多内容呢?



比如把它变成这个样子?



有的人想,这可能需要PS大师手动来改了,有的人则可能这必须用人工智能了,首先做对象识别,把人和建筑扣出来,然后再移动,然后再修改。


事实上,有一个算法叫做Seam carving,它可以自动实现这个效果,而且效果非常之好,甚至比人工智能的方法普适度还高。怎么做呢?


首先计算出图片中每个点的能量,这个所谓能量,就是每个点跟周围点的颜色差值有多大,这个运算非常简单。如下图:



然后从图片上方往下方连线,方法是寻找能量总和最低的链路(一个像素宽)。一堆能量相对比较低的链路可能如下图:



和原图放在一起如下图:



然后如果,你希望横向压缩这张照片的时候,你就可以一次删除一根能量比较低的线路,虽然这条线路不是直的,但是每次去掉一根线,图片就横向缩小一个像素,而且肉眼绝对无法察觉,这样你就可以根据需要的删除你想要的数量的线路,然后图片就压缩,同时不损失任何重要的信息。



这就是算法的魅力,其实核心是最小路径算法,但是一般人想象的最小路径算法应该没有这么一个奇特的用途吧?


我后来才发现,算法上的短板其实影响了我的发展。


我在10年左右做了一个很有意思的手写iPad程序Demo,当然那个Demo要做到我觉得完美的效果,有一堆算法和机器学习方面的限制要突破。


所以,虽然当时我自己玩的已经很high了,我的同事们也都特别喜欢那个App,很多人用了很多年(都没正式发布过,用Xcode给他们安装了)。我也时不时的想起那个App。但是,我最后还是没有去做它。


头两天,我在寻找一个手写识别算法的时候,偶然发现了一个iPad手写App,叫做Nebo,在手写,绘图方面跟我设计的方式方法非常的像,而且完成度特别高。我就特别懊悔,这么多年如果我之前好好的钻研一下算法,我也许早就做出来,我那个App了。


所以,这两年,我还在继续学习算法,当然因为工作压力、时间、个人爱好等等原因,学的还不够好和快。我也还在继续学习机器学习算法。


我也觉得每一个程序员,如果你会长期做一个程序员,也许5-10年以上,你就应该好好的学习算法。


好了,最后,不能免俗的推荐两个算法课,一个是我之前学的coursera的算法1和2。不过你可能需要英语比较好,而且可能需要翻墙。


还有一个就是最近GitChat出的 《算法应该怎么“玩”》 ,之前看到我好几个朋友推荐,我就入手了,觉得不错,也推荐给大家。



作者简介:

王晓华,毕业于华中科技大学, 中兴通讯开发经理和资深软件工程师,主攻嵌入式通讯软件开发 。精通 C 和 C++ 开发语言,熟悉领域:算法设计、面向对象的软件设计和重构、测试驱动开发等。 主要作品:《算法的乐趣》和译作《雷神的微软平台安全宝典》


专家推荐:

百度美研 T10 架构师,百度深度学习系统 PaddlePaddle 技术负责人 王益推荐

《算法应该怎么“玩”》展示有趣的问题、启发有趣的思路、归纳有趣的解法,真是一门有趣实用的课程!


极光推送首席科学家 黄鑫 (飞林沙) 推荐:

《算法应该怎么“ ”》是真正在训练程序员解决问题的能力,而解决问题的能力是任何一家公司所需人才的核心技能。


课程简介:

  • 35 个经典算法的讲解及相关案例

  • 算法设计的常用思想和模式

  • 各种设计算法常用的代码技巧

  • 建模的能力

订阅福利:

  • 本课程 限时特价 49 元,2018.9.1 日零时恢复至原价 69

  • 订购本课程可获得专属海报,分享专属海报并邀请一位好友购买,即可 获得 25% 的现金返现 ,多邀多得,上不封顶,立即提现。

  • 提现流程:请在 GitChat 服务号中点击“我-我的邀请-提现”进行提现。







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