每年一到要找工作的时候, 我就能收到很多人给我发来的邮件, 总是问我怎么选择他们的 offer, 去腾讯还是去豆瓣, 去外企还是去国内的企业, 去创业还是去考研, 来北京还是回老家, 该不该去创新工场? 该不该去 thoughtworks? 等等, 等等今年从 7 月份到现在, 我收到并回复了 60 多封这样的邮件我更多帮他们整理思路, 帮他们明白自己最想要的是什么(注: 我以后不再回复类似的邮件了)
我深深地发现, 对于我国这样从小被父母和老师安排各种事情长大的人, 当有一天, 父母和老师都跟不上的时候, 我们几乎完全不知道怎么去做选择而我最近也离开了亚马逊, 换了一个工作又正值年底, 就像去年的那篇三个故事和三个问题一样, 让我想到写一篇这样的文章
几个例子
当我们在面对各种对选择的影响因子的时候, 如: 城市, 公司规模, 公司性质, 薪水, 项目, 户口, 技术, 方向, 眼界 你总会发现, 你会在几个公司中纠结一些东西, 举几个例子:
某网友和我说, 他们去上海腾讯, 因为腾讯的规模很大, 但却发现薪水待遇没有豆瓣高(低的还不是一点), 如果以后要换工作的话, 起薪点直接关系到了以后的高工资我说那就去豆瓣吧, 他说豆瓣在北京, 污染那么严重, 又没有户口, 生存环境不好我说去腾讯吧, 他说腾讯最近组织调整, 不稳定我说那就去豆瓣吧, 慢公司, 发展很稳当他说, 豆瓣的盈利不清楚, 而且用 Python, 自己不喜欢我说, 那就去腾讯吧,
还有一网友和我说, 他想回老家, 因为老家的人脉关系比较好, 能混得好但又想留在大城市, 因为大城市可以开眼界
另一网友和我说, 他想进外企, 练练英语, 开开眼界, 但是又怕在外企里当个螺丝钉, 想法得不到实施朋友拉他去创业, 觉得创业挺好的, 锻炼大, 但是朋友做的那个不知道能不能做好
还有一网友在创新工场的某团队和考研之间抉择, 不知道去创新工场行不行, 觉得那个项目一般, 但是感觉那个团队挺有激情的, 另一方面觉得自己的学历还不够, 读个研应该能找到更好的工作
还有一些朋友问题我应该学什么技术? 不应该学什么技术? 或是怎么学会学得最快, 技术的路径应该是什么? 有的说只做后端不做前端, 有的说, 只做算法研究, 不做工程, 等等, 等等因为他们觉得人生有限, 术业有专攻
等等, 等等
我个人觉得, 如果是非计算机科班出生的人不会做选择, 不知道怎么走也罢了, 但是我们计算机科班出生的人是学过算法的, 懂算法的人应该是知道怎么做选择的
插播福利
1. 赠送互联网领域技术图书(pdf),143 家公司的面试真题, 共计 10T 干货资源
获取方式: 关注本公众号, 回复干货
2. 免费微信交流群: 包括健身群, 运动群, 交友群, 学习群, 求职群, 讨论群, 老乡群, 学生群, 校招群, 跑步群, 聚餐群
入群方式: 关注本公众号, 回复入群
排序算法
你不可能要所有的东西, 所以你只能要你最重要的东西, 你要知道什么东西最重要, 你就需要对你心内的那些欲望和抱负有清楚的认识, 不然, 你就会在纠结中度过
所以, 在选择中纠结的人有必要参考一下排序算法
首先, 你最需要参考的就是冒泡排序这种算法的思路就是每次冒泡出一个最大的数所以, 你有必要问问你自己, 面对那些影响你选择的因子, 如果你只能要一个的话, 你会要哪个? 而剩下的都可以放弃于是, 当你把最大的数, 一个一个冒泡出来的时候, 并用这个决策因子来过滤选项的时候, 你就能比较容易地知道知道你应该选什么了这个算法告诉我们, 人的杂念越少, 就越容易做出选择
好吧, 可能你已茫然到了怎么比较两个决策因子的大小, 比如: 你分不清楚, 工资>业务前景吗? 业务前景>能力提升吗? 所以你完全没有办法进行冒泡法那你, 你不妨参考一个快速排序的思路这个算法告诉我们, 我们一开始并不需要找到最大的数, 我们只需要把你价值观中的某个标准拿出来, 然后, 把可以满足这个价值的放到右边, 不能的放到左边去比如, 你的标准是: 工资大于 5000 元 && 业务前景长于 3 年的公司, 你可以用这个标准来过滤你的选项然后, 你可以再调整这个标准再继续递归下去这个算法告诉我们, 我们的选择标准越清晰, 我们就越容易做出选择
这是排序算法中最经典的两个算法了, 面试必考相信你已烂熟于心中了所以, 我觉得你把这个算法应用于你的人生选择也应该不是什么问题关于在于, 你是否知道自己想要的是什么?
排序算法的核心思想就是, 让你帮助你认清自己最需要的是什么, 认清自己最想要的是什么, 然后根据这个去做选择
贪婪算法
所谓贪婪算法, 是一种在每一步选择中都采取在当前状态下最好或最优 (即最有利) 的选择(注意: 是当前状态下), 从而希望导致结果是最好或最优的算法贪婪算法最经典的一个例子就是哈夫曼编码
对于人类来说, 一般人在行为处事的时候都会使用到贪婪算法,
比如在找零钱的时候, 如果要找补 36 元, 我们一般会按这样的顺序找钱: 20 元, 10 元, 5 元, 1 元
或者我们在过十字路口的时候, 要从到对角线的那个街区时, 我们也会使用贪婪算法哪边的绿灯先亮了我们就先过到那边去, 然后再转身 90 度等红灯再过街
这样的例子有很多对于选择中, 大多数人都会选用贪婪算法, 因为这是一个比较简单的算法, 未来太复杂了, 只能走一步看一步, 在当前的状况下做出最利于自己的判断和选择即可
有的人会贪婪薪水, 有的人会贪婪做的项目, 有的人会贪婪业务, 有的人会贪婪职位, 有的人会贪婪自己的兴趣这些都没什么问题贪婪算法并没有错, 虽然不是全局最优解, 但其可以让你找到局部最优解或是次优解其实, 有次优解也不错了贪婪算法基本上是一种急功近利的算法, 但是并不代表这种算法不好, 如果贪婪的是一种长远和持续, 又未尝不可呢?
动态规划
但是我们知道, 对于大部分的问题, 贪婪法通常都不能找出最优解, 因为他们一般没有测试所有可能的解因为贪婪算法是一种短视的行为, 只会跟据当前的形式做判断, 也就是过早做决定, 因而没法达到最佳解
动态规划和贪婪算法的最大不同是, 贪婪算法做出选择, 不能在过程优化动态规划则会保存以前的运算结果, 并根据以前的结果对当前进行选择, 会动态优化功能
动态规划算法至少告诉我们两个事:
1)承前启后非常重要, 当你准备去做遍历的时候, 你的上次的经历不但能开启你以后的经历, 而且还能为后面的经历所用你的每一步都没有浪费
2)是否可以回退也很重要这意思是如果你面前有两个选择, 一个是 A 公司一个是 B 公司, 如果今天你选了 A 公司, 并不是你完全放弃了 B 公司而是, 你知道从 A 公司退出来去 B 公司, 会比从 B 公司退出来去 A 公司要容易一些
比如说: 你有两个 offer, 一个是 Yahoo, 一个是 Baidu, 上述的第一点会让我们思考, 我以前的特长和能力更符合 Yahoo 还是 Baidu? 而 Yahoo 和 Baidu 谁能给我开启更大的平台? 上述的第二点告诉我们, 是进入 Yahoo 后如果没有选好, 是否还能再选择 Baidu 公司? 还是进入 Baidu 公司后能容易回退到 Yahoo 公司?
Dijkstra 最短路径
最短路径是一个 Greedy + DP 的算法相当经典这个算法的大意如下:
1)在初始化的时候, 所有的结点都和我是无穷大, 默认是达不到的
2)从离自己最近的结点开始贪婪
3)走过去, 看看又能到达什么样的结点, 计算并更新到所有目标点的距离
4)再贪婪与原点最短的结点, 如此反复
这个算法给我们带来了一些这样的启示:
有朋友和我说过他想成为一个架构师, 或是某技术领域的专家, 并会踏踏实实的向这个目标前进, 永不放弃我还是鼓励了他, 但我也告诉他了这个著名的算法, 我说, 这个算法告诉你, 架构师或某领域的专家对你来说目前的距离是无穷大, 他们放在心中, 先看看你能够得着的东西所谓踏实, 并不是踏踏实实追求你的目标, 而是踏踏实实把你够得着看得见的就在身边的东西干好我还记得我刚参加工作, 从老家出来的时候, 从来没有想过要成为一个技术牛人, 也从来没有想过我的博客会那么的有影响力, 在做自己力所能及, 看得见摸得着的事情, 我就看见什么技术就学什么, 学着学着就知道怎么学更轻松, 怎么学更扎实, 这也许就是我的最短路径
有很多朋友问我要不要学 C++, 或是问我学 Python 还是学 Ruby, 是不是不用学前端, 等等这些朋友告诉我, 他们不可能学习多个语言, 学了不用也就忘了, 而且术业有专攻这并没有什么不对的, 只是我个人觉得, 学习一个东西没有必要只有两种状态, 一种是不学, 另一种是精通了解一个技术其实花不了多少时间, 我学 C++ 的目的其实是为了更懂 Java, 学 TCP/IP 协议其实是为了更懂 Socket 编程, 很多东西都是连通和相辅相成的, 学好了 C/C++/Unix/TCP 等这些基础技术后, 我发现到达别的技术路径一下缩短了 (这就是为什么我用两天时间就可以了解 Go 语言的原因) 这就好像这个算法一样, 算法效率不高, 也许达到你的目标, 你在一开始花了很长时间, 遍历了很多地方, 但是, 这也许这就是你的最短路径(比起你达不到要好得多)
算法就是 Trade-Off
你根本没有办法能得到所有你想得到的东西, 任何的选择都意味着放弃当你要去获得一个东西的时候, 你总是需要放弃一些东西人生本来就是一个跷跷板, 一头上, 另一头必然下这和我们做软件设计或算法设计一样, 用时间换空间, 用空间换时间, 还有 CAP 理论, 总是有很多的 Trade-Off, 正如这个短语的原意一样你总是要用某种东西去交易某种东西
我们都在用某种东西在交易我们的未来, 有的人用自己的努力, 有的人用自己的思考, 有的人用自己的年轻, 有的人用自己的自由, 有的人用自己的价值观, 有的人用自己的道德 有的人在交换金钱, 有的人在交换眼界, 有的人在交换经历, 有的人在交换地位, 有的人在交换能力, 有的人在交换自由, 有的人在交换兴趣, 有的人在交换虚荣心, 在交换安逸享乐
每个人有每个人的算法, 每个算法都有每个算法的 purpose, 就算大家在用同样的算法, 但是每个人算法中的那些变量开关和条件都不一样, 得到的结果也不一样我们就是生活在 Matrix 里的一段程序, 我们每个人的算法决定着我们每个人的选择, 我们的选择决定了我们的人生
来源: https://mp.weixin.qq.com/s?__biz=MzU4ODM1MTQyOA==&mid=2247483756&idx=1&sn=f71233238ec2fe0d85b82f08a8fe8808&chksm=fddf53c7caa8dad15ca9ef2db3da6d1cd094d41e4f07c3a3a15818d95f2855f00d5098e4344f#rd