为什么说编程也要讲究路数
编程套路(Code Kata)这个概念是《程序员修炼之道:从小工到专家》的作者之一 Dave Thomas 提出的。Ruby 开始盛行的时候,Dave 也成为了该语言的最重要的传播者之一。
编程套路(Code Kata)这个概念是《程序员修炼之道:从小工到专家》的作者之一 Dave Thomas 提出的。Ruby 开始盛行的时候,Dave 也成为了该语言的最重要的传播者之一。那时他写了很多关于 Ruby 和 Rails 起源的哲学和市场语境的文章。他也因此学习了很多敏捷方法和概念。正是在这种背景下,Dave 提出了编程套路的代码学习技巧,并开始推广。
这个概念主要指的是,针对某一种特定技术或技能进行重复性的练习,从而将其熟练掌握。套路(Kata)这个概念借鉴于武术,指的是可以独自或多人共同练习的一系列动作、招式。当然,这个词还可以用来描述武术中的其他动作,比如高度模拟实战的练习等。
据维基百科介绍:
起初,套路是教授和练习武术的方法,通过这种途径得以保存和传承许多成功的战斗技巧。练习套路,可以让一组人通过系统的方式,而不是单人、无序的方式,进行艰苦的武术训练。
武术中使用套路(Kata)的主要目的,在于传递行之有效的技巧,并且重复地训练。这可以让学习者练成条件反射式地、自然而然地做出这些动作。而要达到这个目的,关键不在于系统地练习,而是将动作和技巧内化,做到根据不同的需要进行变化。
武术套路图
对编程套路的态度
关于用这个方法来练习编程技巧,人们对此有三种看法:鄙视,中立,赞成欣赏。中立的人群认为并不能从这种反复编写同样一个问题的方法中学到什么,鄙视这种方法的人们也这么认为,不过反对的程度更深。剩下来的便是欣赏这种方法的人了,他们认为反复编写同一个问题,或者编写很多小的代码程序例子,是有一定用处的。
我也赞成这种方法。我从去年开始断断续续学习编程,中间犯的一个错误就是练习少,没有及早的认识到这是一门要在“干中学”的学科。第一次了解编程套路,还是在 codewars 网站,而接触这种技巧的时候,我已经磕磕碰碰学习编程有大半年的时间了。
练习的重要性
练习,作为一种学习方法是适用各个领域的,不仅仅限于武术,还包括弹奏乐器、提升体育竞技水平、准备演讲和提升对语法和书写的掌握。业界知名程序员、《程序员的呐喊》的作者 Steve Yegge,就曾经在一篇文章中提到了练习(锻炼)的重要性。
我认识很多杰出的程序员——这是在亚马逊工作最好的额外“福利”之一。如果仔细观察他们,你会发现他们时时都在锻炼。他们已经很优秀了,但他们仍然不忘锻炼。他们锻炼的方法林林总总,而我在这篇文章中只会介绍其中的几种。据我了解,这些杰出程序员之所以如此成功,就是因为他们一直在锻炼。完美的身材要靠定期的锻炼才能获得,而且必须坚持锻炼才能保持,否则身材就会走形。对于编程和软件工程来说,道理是一样的。
如何练习编程套路
Dave Thomas 认为可以将套路作为学习编程的一种技巧。方法很简单:每一个编程套路,都是一个简单的编程难题,容易解决,可以让练习者不断的尝试,直到完美。这样做的目的,就是帮助练习者每一次都能够找到更好的解决方法。练习者甚至可以对套路定下各种限制,比如说要使用一种自己不常用的语言。
帮助编程学习者进行套路练习的网站有很多。知道这类编程练习网站之后,我做了一些搜索,收藏了一些国外程序员推荐的站点,在这里推荐给大家。
- Codewars
- codeforces
- HackerRank
- Project Euler
- LeetCode
- SPOJ:Quora 上的朋友说,这个网站的难度最高。
练习编程套路,贵在坚持、专注。当然,练习到了一定的水平之后,确实再做一些简单的题目,很难有较大的提高。建议高水平的朋友,往人工智能、大数据、自然语言处理这些高阶话题练习。
编程派会怎么做
我还是一个初学者,所以我会继续坚持做编程套路练习。每一个我觉得有一定难度、可以延伸的套路,我都会详细记录下我的解法,或者找到网络上更好的解法,与大家分享,一同学习编程,一起进步,争取能够成为黑段高手。这也是我在个人站点开设练习板块的初衷。
武术高手






















发表回复