如何通过编程挑战成为一个更好的开发者

来源:互联网 发布:请各位知悉还是悉知 编辑:程序博客网 时间:2024/05/22 01:45

原文
作者: Antonio Bello on August 19, 2016


如果你曾经尝试过挑战编程,你就会知道它们多么有趣,让人着迷。
但它们不仅仅只是有趣——它们也能让你成为一个更好的开发者。
过去几年里,我面对过许许多多的挑战编程。我注意到有规律性的练习使我成为一个更聪明、更快、更牛逼的开发者。
这里写图片描述
这篇文章中,我将会解释如何做同样的事情:

  1. 为什么挑战编程能使你成为一个更好的开发者?
  2. 如何开始挑战编程?
  3. 一些技巧总结

准备好挑战吧!

为什么挑战编程有效

要想知道为什么编程挑战有效,首先你需要了解肌肉记忆。

肌肉记忆

回想你刚开始学开车的时候。首先,你需要完全地集中精神,你必须考虑车速,停车和交通并线时的担忧等。但现在,你可以一边开车一边和别人聊天甚至哼你最喜欢的歌曲!

这里写图片描述

首先,执行一个不熟悉的动作,你需要注意力集中。但如果通过足够多的练习,几乎不用思考就能完成那个动作。
这就是肌肉记忆:知道如何不自觉地努力去做一个动作。你也可以把肌肉记忆引入到你的编程任务中来!

让编程成为一种肌肉记忆

回想你刚开始在一个新平台上编程的时候,你一定做过很多的尝试,对吧?你需要经常查找方法名,阅读文档等等。
但是一段时间后,演变成肌肉记忆,现在你可以脱离你的大脑去写代码。

这里写图片描述

思考一些其他的日常编程任务:

  • 创建单例
  • 减少使用将数组转换成标量
  • 错误和异常处理

当你第一次尝试这些事情的时候,可能会浪费很多时间或者充满疑惑。但是如果你做了足够的练习,你就会把解决方案都建立起肌肉记忆。

这是,你再也不需要思考如何解决这些问题,当你编写代码时,它将成为一个正常的程序。

这就解释了为什么编程挑战有效,它们给了很多机会去建立肌肉记忆,通过许多日常的开发挑战。

那样的话,下一次你需要解决一个相似的问题,你已经有了一个解决方案了!这会帮助你更有效率,把你的精力放在更大的困难上,而不是小的细节。

这里写图片描述

如何开始挑战编程

准备好开始建立肌肉记忆了吗?幸运的是,有一些不错的社区提供挑战编程。

这里有一些我个人认为最好的社区,我建议你选择一个感兴趣的去试一试!

注意:排序部分先后

HackerRank

这里写图片描述
HackerRank,以前以Interview Street著称,一个在线的编程挑战平台,通常是以算法补充的形式,我很喜欢它的口号:“你最富成效的分心”。

在HackerRank,你会发现:

领域:待解决问题区,按照类型(算法,数学,AI等)或语言分类。

竞赛:限时挑战,必须在规定时间内完成由一些同一主题组成的题目。

排名和排行榜统计:看到你跟别人对比取得的进步,以及你获得的成就。排名是排行榜的一个很棒的点,按照复杂度(O(1), O(logn), O(n)等)分组,计算出每个用户的平均复杂度。

Big O记法:是什么?它用于衡量算法的复杂度,它以前用来根据问题的大小来计算预处理时间。

算法执行时通常是有意义的一个或多个循环,根据输入大小严格控制迭代次数。

详情请参考Swift 数据结构集

面试官用HackerRank上的限时挑战来评估应聘者的编程能力和使用不同语言解决问题的能力。

值得注意的是面试官会减少可用的编程语言——我推测公司想找一个Android工程师,不会对一个擅长Swift的应聘者感兴趣。好吧,至少现在是这样。将来,谁知道呢?:]

最近亚马逊邀请我参加了一个筛选过程,是的,就是亚马逊:]编码过程非常好,时间安排也非常合理。我花了1小时58分完成,距离规定的两小时仅仅提前了两分钟。

虽然开发环境包括一个可以编写代码并调试的基于web的编辑器,但是我更喜欢本地的桌面IDE。在这种情况下,我选择了CodeRunner,一个支持多种语言的代码编辑器,能够从IDE直接编译运行。

在某种程度上,它和Swift playgrounds有些相似,可用的语言和环境清单非常之多——总共有45个——包括新的、旧的、面向对象的、功能性的、命令式的、shell、数据库等等,这里给出一部分:

  • Swift
  • Objective-C
  • Pascal
  • Cobol
  • C#
  • F#
  • Haskell
  • Go
  • OCaml
  • R

Math Fights

本文提到的所有社区,Math Fights是唯一一个不需要写代码的。事实上,它甚至不是关于编程。顾名思义,它通常是关于数学挑战的双人对战。

为什么是数学?是的,这篇文章是关于如何使你的大脑保持敏锐,结束数学问题可以做到这一点,练习数学可以让你拥有灵活的头脑。

而且,作为开发者我们每天都在使用数学,在日常生活中可以帮助你更快的做计算。

如何使用

点击按钮开始对战,系统随机匹配一个对手给你之后,对战开始!

你和对手将同时被提出一个选择题。你的挑战就是在用最短的时间选出正确答案,保持在预定时间内。

每个问题都有一个赢家和一个输家,选出正确答案并且用时最少的人为赢家。每一轮,你和对手都获得相应分数。对战结束后,总分最高的人获胜。

技巧:放一些纸,一支笔,一个计算器(如果可能的话)在身边,因为你需要计算

数学问题有不同复杂度,因此Math Fights根据难度对问题进行分类。类别1主要是最简单的入门题。通过一定的胜利局数,你将会被提升到下一个类别。注意:如果输了太多次你将会被降级。

你也可以发起一些公开的或者非公开的比赛,当你的朋友想参加智力友谊赛的时候就非常方便。

最后,它有一个练习场,你可以在哪答题,没有真实的对手给你压力,你只是在跟你自己和时间比赛。

就我个人观点,Math Fights无疑是非常有用并让人着迷。我在上面花了很多的时间,有一天,我发现它是我分心,因此在我达到第7分区之后我决定停止。顺便说一下,我并不知道我会有这么大的进步,保持不降级真的真的非常难。

TopCoder

TopCoder是最早的提供编码挑战的社区。

而类似的服务向客户提供明确的招聘服务,或者没有一个商业模式,TopCoder有几个模式在这个行业里是标新立异的。

作为一个开发者,你不仅可以解决很多编程挑战,还可以参加竞赛或者有偿的技术支持。事实上,有很多公司开发项目,当他们需要新鲜的想法的时候会提供很多的机会。例如:

  • 用户界面/用户体验设计
  • 应用开发
  • 算法

申请者通过竞争赢得公司给的报酬,正如你所料,竞争非常激烈,并且一个项目通常只有一个人获胜。往好的方面想,这绝对是一个很棒的机会,让你在真实存在的项目中检验你的能力。

那些你可能会为其效力的公司,如下:

  • NASA
  • IBM
  • eBay
  • Honeywell
0 0