极客时间2周年特邀 100 位在产品、架构、测试、运维、人工智能、管理、编程语言、运营等各个领域的专家,在 App 内与用户交流互动。
InfoQ 特别整理了前 Google 工程师王争与用户的互动和问答集锦,分享给大家。
我是王争,极客时间《数据结构和算法之美》专栏的作者。极客时间已经 2 岁了,今天我来部落和大家聊聊,搞一个传说中的 AMA(Ask Me Anything),有点像玩真心话大冒险哈,想想还挺刺激的,大家关于技术、产品、创业、职业发展、或者其他任何扯闲篇的问题,都可以问我,我都会回答。很荣幸能和极客时间一起,一起把部落打造为行业内最好的技术交流社区。大家燃起来!
Q1:争哥,刷算法题总是出现当时明白,事后一段时间不看,再看原题还是会花费很长时间的情况?有没有进阶性的指导方式?怎么去刷题比较好,高效一点
王争:那还是练的不够多。不过还是有些技巧可以分享给你,那就是要总结一些套路,然后拿题去巩固套路,之后看到新题目之后,就拿套路往上套,或者拿做过的题目往上类比。娄天成之所以牛逼,一方面是他资质好,另一方面就是刷题多。算法题实际上套路就那些,大部分题目都是换汤不换药,或者稍微改造一下、柔和一下。只要你刷多了,做多了,自然就能形成条件反射,看到题目大致思路就有了,剩下的就是稍微优化下、找些坑点啊之类的。 除了这些,再奉上我最近写的这篇文章《我的算法学习之路》。
Q2:平时怎么有意识的主动使用设计模式,优化自己的代码逻辑?看了一些别人的代码,有一些改变,不过有些地方的确是写完之后,感觉可以重构下,开始写的时候就没有想到这么多
王争:这个很正常的。23 种经典设计模式主要就是解决代码的扩展性问题,主要遵从的设计原则是开闭原则,对扩展开发,对修改关闭。所以,你在写代码的时候,多思考一下,未来哪些是可能变的,哪些是不会变的。对于未来可能变的部分,该如何设计代码结构,才能满足开闭原则。然后结合具体的设计模式,来满足刚刚的这个开闭需求。 不过,你还提到说,写的时候想不到,事后就觉得很多可以重构。这就体现了设计模式的一个重要的应用场景就是:重构!实际上,持续重构是避免过度设计的一个很好的办法,所以,重构的时候针对代码痛点,再行应用设计模式是更加合理的。
Q3:为什么学算法,怎么学算法,我想这类问题,都是老生常谈了。而且争哥的专栏关于这方面也提了很多。可是,我在学习的过程中产生了一个新问题,算法需要学到什么程度呢?曾经,我以为把大学课本里面常用的算法和数据结构学完就够了,毕竟大部分人并不是志在成为纯算法工程师。可是,后来看看 Google 和微软等公司的算法题,发现远远不够。我就迷糊了……
如果说,基本算法和数据结构掌握就足够了,那为什么这些公司这么看重呢?难道只是为了筛选人吗?我知道,争哥曾经在算法上花了很多时间,也拿到了多家大公司的 offer。我想,争哥肯定有自己的思考,希望分享分享
王争:实际上,我怎么强调算法重要,都可能没法给你一个信服的答案。我们可以反推来看这个问题,google 招了很多算法很好的人,发现这些人都是逻辑清晰、聪明、有想法,并且写代码能够做到 bug free…那他就觉得我之后多招些这类算法好的人喽,那面试的时候就多问问算法喽… 不过,纯刷算法是进不了 google 的,大家也别太被刷算法洗脑了…那么多搞 ACM 的,去面试也没能进 facebook、google…有时候还看气质…我公众号(小争哥)里有几篇讲学算法的,你可以去看下。
Q4:争哥你好,你的算法专栏,帮助我找到了学习算法的技巧,非常感谢。算法专栏是我留言最多的专栏,一共 47 条,现在每天都能收到小伙伴的点赞,偶尔也会有评论交流,很开心。
理论的内容虽然会遗忘,但稍微复习一下,很快就能捡起来。主要还是需要多练习,关于刷题我有个困惑是,如果一道题很长时间做不出来,然后看其他人的答案,可能也要看一两个小时,才能最终把思路用代码写出来。这个过程其实蛮煎熬的,这种感觉会影响下一次刷题的心情,甚至会产生抵触。争哥可能没有不会的题目,没有这个困扰,但还是想听听争哥的意见。
王争:我有三个观点分享给你:
1. 量变引起质变,你觉得难还是因为做的不够多;
2. 只有难的东西,才能让你上个台阶。难都是相对的,你觉得难的,其他人可能觉得很简单,所以,难不在问题本身,而是能力跟问题不匹配,我们遇到难的问题之后,就更加要刻意的去练习,把它练熟练,变成对你来说简单的问题。
3. 心态很重要,换个角度想想会更好。遇到难题之后,你应该这么想:这是让我再上一个台阶的机会。
Q5:想问问争哥,是怎么样走上技术路的?有没有迷茫和想放弃的时候?如果有怎么走过来的?
王争:1. 怎么走上技术路的?
这个可能就是源自热爱。热爱让我更加自律,能废寝忘食的去编程、搞算法…比起逆着人性去学习,注定更能干得好…
2. 有没有迷茫和想放弃的时候?如果有,怎么走过来的?
当然有,我毕业刚进 google 没多久就想离职,那时候跟同学打算在上海开个西安面店,门面都看看好了…最后一顿撸串…两瓶啤酒之后 觉得还是太冒险了…遇到挫折的时候,谁都会想过放弃,特别是那些刚毕业没多久的小伙伴们,初入社会,得不到认可,对自己前途也很迷茫…都会有要放弃的时候…我的看法是,太年轻,阅历不够,想法又多,容易害了你。对于初入职场的小伙伴,你就跟着老大好好干…老大让干啥干啥…把活干好…别想太多,就不迷茫,反倒对你更有益…
Q6:很好奇争哥现在哪里发展,对于大龄程序员如何度过中年危机,争哥有没有什么建议?
王争:貌似互联网行业的人中年危机感最多…可能跟没有太多积累…竞争门槛低有关系…说白了就是写代码这是不难…实际上,要想度过中年危机,一个准则就是:成为同龄人中的佼佼者…即便社会要淘汰大龄码农,也不会淘汰佼佼者…至于如何成为佼佼者…可以管理上谋求发展…可以发展副业…可以成为技术大拿…太多方法了…
Q7:争哥您好,订阅过您的专栏,对我找工作帮助很大。目前有个关于 offer 选择的问题想请教您。目前手里有两个 offer,京东云「软件开发工程师」,base:北京;小红书「后端开发工程师」,base:上海/北京。薪资待遇,小红书比京东云高一些,但是京东的体量更大一些,不知道如何做出选择。争哥,能否从公司发展,个人技术成长等方面来讲讲选择哪个公司更好一些呀?万分感谢。Ps:本人 CPP 开发,京东云应该是 CPP,进入小红书就要转 JAVA 了,当然这不是选择的依据。
王争:你提供的关于你自己的信息比较少,所以,不好直接给你建议,如果愿意的话,可以加我微信 wangzheng0822 详细聊下。不过,我还是可以给你提供一些我了解的信息,希望能帮助到你决策。
1. 就我个人的了解来看,小红书也经历了火-》不火-》最近又挺火,三个阶段。很多公司或者赛道,都会经历三个阶段,比如 p2p,知识付费,不过小红书能挺过来还是挺不错的。第一个阶段之后谷歌的 Tiger 加入了小红书,之后貌似又离开了,可见小红书确实经历过发展不好的阶段,不然 Tiger 也不会走的。最近小红书又搞什么社区吧,貌似又开始火起来…不知道能持续多久…当然,这个跟我们做技术也关系不大,创业是大佬的事情,跟我们无关。
2. 京东云说实话确实不怎么了解,之前有个百度 T10 还是 T11 的大佬,在百度很有名气,去了京东云,搞了没多久就走了,又去了阿里,可以京东云也发展的不好。不过,还是那句话,跟我们程序员没关系。还是看你感不感兴趣,希不希望在云这块长期发展。
3. 实际上,对于两个差不多的公司,我们选择的时候,要看参与的项目哪个好,好项目、核心项目、感兴趣的项目,带来的个人技术上的成长、履历的积累、职场的发展,要远大于边缘项目。这点你没提供具体的信息,我不好给你具体的建议。
4. 小红书主要在上海,北京应该是分公司吧,一般 remote office 都不怎么做核心的东西,你要考虑好这点。
5. 是要来上海还是留北京,一定要考虑清楚。因为一旦在某个城市呆久了,离开的成本是很大的,几乎不可能。而北京的就业几乎要比上海多,建议留北京。
5. 小红书加班很严重的…京东貌似好点…这点也要想清楚啊,要是最近有谈女朋友…老婆要生孩子…建议考虑下加班的事情…
Q8:问下争哥,关于技术和产品,争哥是如何看待它们之间的关系的?究竟有没有技术驱动的公司?很多时候大家会说,为了业务的快速迭代,技术上能实现就行,但这样会不会就留下了隐患?例如米聊和微信,当年米聊技术架构无法扩展,限制了业务增长,最终失败。
王争:有技术驱动的公司,比如谷歌、大疆、华为…但是即便被外界认为是技术驱动的公司,里面也并不是每个部门、每个项目都是技术驱动的,只有个别核心部门,比如 google 里的搜索,是真正技术驱动产品、业务,剩下的 90%可能都是业务、产品驱动。业务快跑,技术跟不上,留下隐患,一点都没问题。除非你做的是技术驱动的产品。否则,公司发展大了,投资人投钱进来,找些牛逼的技术人把代码重新写一遍就是了。滴滴的 CTO 原来是百度的 T5,也没影响公司发展的如此大啊。
Q9:争哥,既然你说真心话大冒险,请问一般您几点下班,下班后、周末的时间怎么安排的,有什么高效的管理时间的方法吗?对于面试您觉得准备多久合适,最一个五年左右的后台开发工程师,算法数据结构、网络编程、系统设计等应该怎样分配精力准备面试。
王争:1. 我工作这么多年来,几乎没加过班,我工作、生活分得很开;
2. 周末基本上是带孩子到处玩;从来不工作、不学习。不过,最近有时候会在家写写稿子;
3. 面试的话,准备多久看你自己的😂,总之你觉得准备充分了、信心满满,有跃跃欲试的感觉是最好的了。
4. 都五年了的话,建议根据简历做过的项目来准备,你做过网络编程相关的项目,你就多看看网络编程的知识,没做过,完全不需要准备啊。
Q10:您是如何平衡生活,工作,学习之间的关系呢,我总是感觉没时间学习,陪伴家人,技术成长的慢,好迷茫。
王争:如果工作比较忙的,确实会这样。所以,有人才会说 996 忙到没时间成长,就是这个道理。要么提高自己的能力,能够快速的搞定工作的事情,然后就有多余的时间学习了;要么就换个稍微不那么忙的工作。
Q11:创业如何开始呢?有个好点子还是有个好团队呢?
王争:创业要找个自己擅长的领域,并且做好 3-5 年慢慢摸索的心理准备,3-5 年不挣钱也能养活自己和家庭的能力。然后再考虑去创业。至于点子和团队,那都是最基础的,没有点子、没有团队,谈何创业呢。
2 年时间,极客时间已经为用户交付了 94 门课程,涵盖产品、架构、测试、运维、人工智能、管理、编程语言、运营等多个领域。9 月「部落」上线后,用户又有了新的思考和讨论的聚集地。欢迎你加入「部落」,和大咖们共同探讨技术问题,和我们一起探索新的学习方式。
相关文章:
《这六个真实软件开发中的算法问题,你都能解决吗?|极客时间》
《Google 工程师:如何看待程序员普遍缺乏数据结构和算法知识?》
评论