我研究了最热门的200种AI工具
大学生涯中,我印象最深的事情就是人们对竞争性编程的狂热。第一年参加代码俱乐部培训时,有人告诉我,如果想进入像谷歌这样的公司,就必须在竞争性编程领域表现出色。于是后来我做了竞争性编程,主要是线上编程平台Codechef的每月定期挑战,持续了大约6个月。 现在我的大学生活快结束了,也成功入职谷歌成为一名软件工程师。我想谈谈我对竞争性编程的看法,准备面试时应该关注什么,以及竞争性编程是否真的是入职FAANG顶级科技公司的关键。 本文并非阻拦大家做竞争性编程,相反,我鼓励那些不喜欢竞争性编程但希望提高自己解决问题能力的人申请大公司软件开发人员职位。 什么是竞争性编程? 维基百科是这样解释的:竞争性编程是一种常通过互联网或本地网络进行的智力运动,参与者按照既定的规范编写程序。 有很多求职心切的程序员为了面试而参加竞争性编程。作为大一学生,最初我和大多数朋友所听说的竞争性编程都是这样的:“进入谷歌或脸书这样的公司的秘诀”。这听起来太有吸引力了。 然而,直到我亲身准备过这些公司的面试之后,才认识到这些想法中的谬误。我会告诉你它为什么不是实际的解决方案。但首先,让我们深入研究一下竞争性编程对大家有什么好处。 为什么竞争性编程这么有魅力! 在我短暂的竞争性编程旅程中,有一点是无法否认的,没有什么能取代那种你的解决方案被采纳的感觉。无论是旷日持久的Codechef比赛,还是Codeforces的回合赛,这种感觉都是不可替代的。 我刚上大学便开始做竞争性编程,几乎立刻就上瘾了。各种各样的问题,棘手的优化以及随之而来的肾上腺素激增,足以让我六个月完全对它全情投入。 竞争性编程真正帮助到我的,是理解不同的数据结构和算法的细微差别,以及基于不同语言的优化如何让自己走得远。还有最重要的,明白耐心对解决问题的关键意义。如果有人一起做竞争性编程你会收获更多,因为你们可以互相学习,让这个过程更快速、更有趣。 此外,对于像脸书黑客杯(Facebook Hackercup )和谷歌全球编程挑战赛(Google’s Code Jam)这样的竞赛,熟悉竞争性编程是一大优势。然而,除此之外也无太多实际作用了。毕竟,竞争性编程归根结底是一项旨在更快解决更棘手问题的运动。 到底有什么问题? 在Codechef推出了自己的分工体系后几个月,我暂别了竞争性编程。虽然分工体系本身并不是我退出的根本原因,但它确实是一个导火索。 对于一个刚开始编程的人来说,竞争性编程能带来的学习经验绝对是惊人的。然而,初学者所能学到的特质并不是竞争性编程所独有的,而是在这个过程中广泛地练习数据结构和算法所带来的。 我最终意识到了这点,也意识到整项运动会转向以数学为重。到了一定难度后,这项运动终会转向数学密集型领域,需要我们深入钻研数论和几何学,门槛很高。 此时,这些题目不仅对我的面试准备或软件开发经验没有帮助,而且作为一个竞争性编程程序员,仅仅为了保持我的等级和表现分数而去付出额外的努力,会给我带来损失。虽然竞争性编程本身很有趣,但它非常耗时,并且收益严重递减。 那我如何备战谷歌面试的呢? “你必须通过Codechef来搞定谷歌和脸书的面试”,这样的想法已经影响了很多人。我认识的一些人,尽管他们解决问题的能力很优秀,但因为不是竞争性编程的忠实拥趸,所以他们甚至都不会试着申请这些公司。 作为一个很早以前就放弃竞争性编程但成功通过了面试的人,相信我,即便你不深入竞争性编程的牢笼也能通过面试,很多真实成功的例子都能证明这一点。 如上文所述,竞争性编程真正帮助到我的,是我对数据结构和算法的基础理解与亲身实践。然而,竞争性编程的目的并不集中于此。
像HackerRank和Leetcode这样的资源拥有大量有价值的练习题,题目根据难度适当排序,也根据概念进行了标记,方便大家了解并练习所需的主题。我就是主要用这些资源来准备谷歌编码面试的。 (编辑:鞍山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |