本文最初发表在 Towards Data Science 博客,经原作者 Benedict Neo 授权,InfoQ 中文站翻译并分享。
本文是作者 Benedict Neo 列出的最好网站的列表,涵盖了编程挑战和竞赛。
现在是 2020 年,它标志着一个十年的结束,另一个十年的开始。在这十年里,人类社会欣欣向荣、蓬勃发展,我们在科技领域取得了惊人的突破。我仅举几个例子:2012 年,好奇号火星车首次登陆火星;2015 年,探测到来自深空的引力波;2018 年,人类拥有了编辑基因的超级能力 CRISPR;2019 年,“事件视界望远镜”(Event Horizon Telescope,EHT)拍摄到有史以来的第一张黑洞照片。
同样,2010 年代最重大的突破是人工智能的崛起,或者说人工智能更广为人知。有了人工智能,那些科幻小说就成了现实。机器学习赋予了机器学习的能力,而深度学习(利用人工神经网络重现人脑的复杂性)则让机器拥有了思维,这是一项繁重的工作。随着技术的不断进步,深度学习专家们都倾向于一个目标,那就是创造一种通用人工智能:一种类似人脑的机器,能够执行任何形式的操作。
你在上面所见到的每一个巨大突破,都是拜计算机编程所赐。举个例子,好奇号火星车事先经过预编程,可以做到在没有人为干预的情况下自行探索火星;生成黑洞的图像,需要通过算法从地球表面的卫星网络收集图像数据。这种与计算机沟通的媒介,才造就了我们今天看到的许多科学突破。而如果没有计算机编程,我们的社会将停滞不前。
人人皆可编程
在这个数据呈指数级增长的时代,我相信,每个人都应该掌握编程艺术。无论是创始人、首席执行官、商业领袖、风险投资人,甚至老年人和年轻人,都应如此。随着经济差距继续扩大,不平等现象的持续存在,编程技能将是不可或缺的,对生存至关重要。
好消息是,任何人都可以学习编程!那么,坏消息呢?那就是:编程很难。但是,只要你拥有好奇心、决心和意志力,你就能做到。编程也是为了解决问题。这就是编程背后的基本理念。它通常用于自动执行单调的任务。
此外,学习编程的最好方法之一就是通过练习,大量的练习,让编程成为一种习惯。那么,在学习编程时,还有什么比通过编程挑战和竞赛更好的方法来提高技能呢?
我收集了 20 个网站,这些网站可以帮助你练习编程,并为你提供解决复杂算法问题的机会。
这份列表中网站的排名不分先后。所以,请阅读本文,尽情享受吧!
我评点网站的模板
介绍:
特色:
亮点:
编程网站列表
1. HackerEarth
HackerEarth 是一个流行的编程平台,有 8000 多个问题、2000 个挑战和 1000 个黑客松活动。它也受到 1000 多家公司招聘经理的信任。这个平台有一个蓬勃发展的社区,社区拥有 300 多万名开发人员。
特色:
练习(基本编程问题)
竞赛(从初学者到为期一周的黑客松活动)
黑客松(解决现实问题和商业挑战)
数据科学竞赛(测试你的数据科学技能)
亮点 :这家网站会显示出竞赛的剩余天数,它有一个开发者评估软件,可用于显示你的进度。还有一个远程面试功能,再加上分析功能,公司可以看到你的统计数据。
2. HackerRank
HackerRank 是一个招聘平台,实际上,它是评估全世界 2000 多家公司开发人员技能的平台。通过让科技招聘人员和招聘经理在招聘过程中的每个阶段都能客观地评估人才,HackerRank 帮助公司招聘到熟练的开发人员,并加快创新。
特色:
编程实践
面试准备
亮点 :HackerRank 是世界顶级的编程实践网站之一。它以为开发人员与优秀公司牵线搭桥而闻名。对雇主和员工双方都很有用。
3. Exercism
Exercism 信奉这句口号:“让每个人都能编程实践,让每个人都有良师益友”( Code practice and mentorship for everyone )。它有 3173 个练习,横跨 51 种语言,可以提高你的编程技能,并与他们敬业的导师团队进入深入的讨论。最棒的是,它永远是 100% 免费的。
特色 :
语言轨迹
个人指导
实践模式
亮点 :Exercism 从语言轨迹开始,允许用户选择他们喜欢的语言。此外,还有人类导师会检查你的代码,并帮助你在进步中提高。这使得该平台非常适合那些想加深对一门新编程语言理解的初学者。
4. SPOJ
SPOJ 是一家简单的网站,却有着大量的编程挑战。这些挑战可以帮助你成为真正的编程高手,让你掌握构建高效算法的技能。
特色 :
竞赛
算法
等级
状态
讨论页面
亮点 :SPOJ 有着大量令人难以置信的编程挑战,这些挑战将真正考验你的技能。你也可以参加一些比赛来展示你的技能。
5. Programmr
http://www.programmr.com/exercises
Programmr 是一个在线互动平台,任何人都可以在上面学习和练习编程。他们认为最好的学习方式,是在自学的环境中按照自己的节奏学习。Programmr 宣称要做世界上最好的编程模拟器,你可以在那里进行编程并运行各种程序。
特色:
挑战赛
项目
竞赛
证书
亮点 :Programmr 有一个惊人的在线编程模拟器和 B2B API,任何人都可以将编程小部件集成到网站中。
6. TopCoder 挑战赛
https://www.topcoder.com/challenges
Topcoder 是一个极具竞争力的编程平台。它提供了一些列算法挑战,你可以在自己的个人代码编辑器中解决这些挑战。网站上总是有各种各样的挑战,只要你愿意,你随时都可以参与进来。
特色:
挑战赛
零工
亮点 :这些挑战都有明确的截止日期,并且每个挑战都有明确的奖励。它们还显示需要什么类型的语言或库。虽然这些挑战并不是为初学者准备的,但它们已经做得非常好了。
7. CodeForces
CodeForces 是一个协作平台,在这个平台上,编程者可以参与“回合”竞赛,在“回合”中设定时间限制,并将积分分配给参与者。CodeForces 还设有竞赛、问题集以及供编程人员可以参加的小组。
特色 :
竞赛
Gym
问题集
小组
亮点 :对于那些寻求有趣挑战的程序员来说,CodeForces 非常棒,可以锻炼自己的技能,还可以加入满足自己需求的团体。Gym 的功能也很有特色,在这里,程序员们可以在特定的挑战中训练自己的技能,并在最后看到自己的排名。
8. CodeWars
https://www.codewars.com/users/sign_in
Codewars 是一个精心设计的平台,用户们可以在这个平台上共同创造挑战。有两类人可以使用这个平台:创建者授权 Kata 教授各种技术,用启发他人的解决方案解决 Kata,用建设性的反馈进行评论,领导者则负责协调内容和社区。
特色:
Kata(编程实践)
对打(一对一挑战)
论坛
Wiki
亮点 :CodeWars 有一个吸引人的界面,以独特的方式呈现挑战,将其命名为 Kata,程序员可以在此获得技能并在对打(Kumite)中挑战其他程序员。它是学习编程和娱乐的最佳场所之一。
9. CodeChef
CodeChef 是一个竞争性编程平台,旨在帮助程序员提升他们在算法、编程和竞赛领域的技能。他们通过一个由问题管理员组成的庞大社区来促进学习和友好编程的文化。
特色:
实践
竞争
讨论
举办比赛
校园会社
亮点 :CodeChef 是最具竞争力的编程平台之一。平台向所有人开放,任何人都可以举办编程比赛,还有一个叫做校园会社(Campus Chapter)的功能,作为编程俱乐部使用的工具。他们每个月还举办三场比赛,并颁发奖品。
10. CodeGym
CodeGym 是一个在线的 Java 编程,其 80%的内容是以实践为主。任何想学习 Java 的人,都可以来这里学习。
特色:
课程
任务
游戏
聊天室
论坛
亮点 :CodeGym 为 Java 初学者提供了一些实用的任务,让他们了解所有需要知道的知识。它们还具有即时解决方案验证的功能,可以立即发现错误。CodeGym 还采用了最新的教学技术,以及令人惊叹的视觉效果和游戏。
11. CodePen 挑战赛
CodePen 是一个很酷的在线 IDE,它允许你在浏览器中编写代码,并在构建代码时即可看到结果。CodePen 挑战赛是一个通过构建来提高技能的地方。每个礼拜都会有新的挑战等着你去解决。最好的 Pen(译者注,Pen 即 CodePen 的会员) 也会被挑选出来。
特色:
团队
播客
教育
亮点 :CodePen 挑战赛超级有趣,它是一个充满创意和合作的地方。这里根本没有什么竞争,因为没有什么可输的,但通过这些挑战,你确实获得了技能。
12. CodinGame
CodinGame 的目标是让程序员通过世界上最具挑战性的问题,学习新概念,并从最佳开发人员那里汲取灵感,从而不断提高自己的编程技能。
特色:
实践
竞争
贡献
学习
亮点 :CodinGame 以游戏的形式帮助人们学习编程,让他们以有趣的方式学习。开发人员还可以向导师寻求帮助,以检查他们的代码并相互比较解决方案。
13. LeetCode(力扣)
https://leetcode.com/problemset/all/
LeetCode 是帮助你提升技能、拓展知识面、准备技术面试的最佳平台。它被成千上万的程序员使用,因为它收集了 Amazon、Facebook、Google、LinkedIn 等公司大量的算法练习题,令人惊叹。有超过 1400 个问题需要实践。(译者注:该网站有官网中文版)
特色:
算法
数据库
Shell
并发性
竞赛
亮点 :LeetCode 有一个探索工具,可以帮助程序员在他们的编程生涯中迈入下一个阶段。LeetCode 为他们的技术面试做准备,并参与帮助公司招聘顶尖人才。
14. GeekForGeeks
https://www.geeksforgeeks.org/puzzles/
GeekForGeeks 是极客的网站。它有大量关于编程和算法的资源。还有一个面试部分,帮助程序员赢得他们梦寐以求的工作。还有一个优秀的 C 和 C++难题集供程序员解决。
特色:
算法
面试
学生
测验
亮点 :GeeksForGeeks 上有无数篇教学主题的文章,如数据结构、算法、计算机科学,以及测试知识和理解的小测验。这是一个学习计算机科学知识的好地方。
15. ProjectEuler
https://projecteuler.net/archives
如果你正在学习算法和计算机编程,那么你有可能听说过 Project Euler(欧拉计划)。这是一个为有兴趣将数学和变成相结合的接替者而制作的数学问题集合,Project Euler 需要利用数学形成算法并得出有效的解法,而计算机编程则需要利用数学来实际解决。这些问题很难,不是轻而易举就能解决的。
特色:
存档问题
新闻
亮点 :虽然该网站没有内置代码编辑器或解决方案检查器,但这将是程序员下载 IDE 并在其上编写代码的好机会。此外,解决这些问题可以有助于培养你作为程序员不可或缺的技能,因为数学是算法和数据结构的底层基础。
16. URI Online Judge
https://www.urionlinejudge.com.br/judge/en/login
URI Online Judge 是由 URI 大学计算机科学系开发的。该项目的主要目标是提供编程实践和知识共享。他们的网站有一个友好的用户界面,包含了 1000 多个问题,分成八大类,并用十一种语言解决。
特色:
问题库
论坛
竞争与排名
学术
竞赛
亮点 :URI 是由大学生们开发的,这意味着他们具有初学者心态,希望以有趣的方式学习编程。此外,这些问题的结构也很好,并进行了相应的划分,从初学者的类别开始,逐渐进入计算几何、图形等更复杂的主题。
17. Reply 挑战赛
https://challenges.reply.com/tamtamy/home.action
Reply 挑战赛是由 Replyer (译注:Replyer 即 Reply 的会员)设计的一系列挑战,面向所有热爱科技和网络竞赛的人。Reply 挑战赛的目的就是为了让大家玩得开心,展示自己在编程、网络安全、创意和投资等领域的才华。每个挑战赛都有丰厚的奖品:MacBook Pro 16、AirPods Pro 等。挑战赛对学生和专业人士开放。
特色:
投资挑战
编程挑战标准赛
编程挑战少年赛
网络安全挑战赛(即将推出)
创意赛(即将推出)
亮点 :Reply 挑战赛是有趣的挑战,奖品很诱人。这个网站非常多元化,任何人都可以自由加入。
18. KickStart:Google 编程竞赛
https://codingcompetitions.withgoogle.com/kickstart/about
KickStart 是由 Google 举办的一项竞赛,通过在线竞赛的方式,为全球的程序员提供了一个发展自己技能的机会。每轮比赛持续 3 个小时,他们的特色是由 Google 工程师开发的算法挑战,让你体验到在 Google 工作的感受。他们的比赛会定期举行,让每个人都有机会参赛。
特色:
无
亮点 :排名靠前的程序员有机会接受面试,甚至有可能在 Google 找到一份工作。
HashCode是 Google 举办的另一项伟大的编程竞赛。
19. Code Jam
https://codingcompetitions.withgoogle.com/codejam
Code Jam 是 Google 历史最悠久的全球编程竞赛,各种水平的程序员都可以在这里挑战自己的技能。参赛者必须通过解决一系列的算法难题来赢得世界总决赛的名额,从而有机会成为冠军,并赢得高达 15000 美元的奖金。
特色:
无
亮点 :Code Jam 向世界各地的程序员发起挑战,要求他们通过 4 轮在线比赛来解决复杂的算法问题,一年一度的 Code Jam World Finals(世界总决赛)每年都会在 Google 不同的国际办公室举行。这项宏大的挑战赛让不同水平的程序员都能积累经验,并激励他们提高自己的技能,争取在总决赛中获得一席之地。
20. Kaggle Learn
https://www.kaggle.com/learn/overview
Kaggle 以数据科学家相互合作和竞争而闻名。但它们也有一个名为 Kaggle Learn 的平台,在这个平台上提供微课程。在这些微课程中,数据科学家可以在其中学习到能够立即应用的实用数据技能。他们认为这是成为一名数据科学家或提高自己当前技能的最快(也是最有趣)的方法。目前可用的课程包括:Python、Pandas、SQL 和数据可视化。
特色:
教程
习题
亮点 :这些微课程将复杂的主题归结为关键的组成部分,帮助初学者学习重要的主题,并在短时间内获得必要的技能。它们内置的代码编辑器内核,易于使用,对初学者来说特别好。
行动呼吁
在这个时代,编程是一项重要的技能,其重要性不亚于原始时代的钻木生火和猎捕食物一样重要。但这并不是说,没有这种技能的人就会注定被淘汰,这只是意味着拥有这项技能的人将会独领风骚并取得成功。这就好比喝了一种神奇的药水,能给你带来神奇的力量,或者被闪电击中后获得超高速度。编程应像一个超级大国一样被对待,因为它给我们的世界带来了影响,使技术成为可能。
行动计划
如果你是完全的初学者,请先选择一种编程语言。
参加诸如 #100DaysofCode 这样的挑战,它可以让你用动力从一个完全的初学者开始编程,并继续下去。或者你可以找个朋友和一起结对编程。
从上面的列表中选择一两个,找到适合你的,坚持到底。
当你陷入困境时,不要急着去看答案,否则,你将什么也学不到。相反,要确保你掌握了正确的基础知识,然后再次尝试挑战。
加入 Reddit、Discord 等社区,提出问题。
安装一个 IDE 来解决一些问题,或者使用 Jupyter Notebook。
现在开始编程,永远不会太晚。如果你已经是一名程序员,或者是这个领域的专家,那么恭喜你,我希望你能在职业生涯中茁壮成长!
希望这份列表对你有用!
作者介绍:
Benedict Neo,数据科学和机器学习爱好者。博客写手,撰写有关自我发展和数据科学的文章。
原文链接:
评论