其实在中国我也算是干了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 服务号中点击“我-我的邀请-提现”进行提现。