Joanna: Peter,你在哪工作呢?
Peter: Initech.
Joanna: 在哪……?好吧,你在那里做什么呢?
Peter: 我在一个小黑屋里,给银行的2000台交换机更新软件。
Joanna: 那是啥?
Peter: 明显的问题,他们写这些银行软件,额,为了节省空间,他们使用两个数字替代4个数字来表示日期。比如,用98表示1998?啊!让我去看这些成千上万行的代码,额。。。这还没什么关系。我,额,我不喜欢我的工作,并且,额,我不会再去那里了。*
好吧,尽管在我的办公室里没有这么沉闷,但是我依然喜欢在工作空余的时间里给大脑一些刺激。像大多数程序猿一样,我喜欢练习那些有趣的代码问题和逻辑谜题。这比每周的办公室娱乐活动便宜的多了,而且同样有趣。我收集了以下我喜欢的程序和逻辑谜题网站,就是他们帮我的大脑一直处于活跃状态,大家一起来看看吧:
1. Project Euler – 大量的数学逻辑程序,可以使用任何你喜欢的语言解答。很多问题根本不用编程就可以解决,但是大多数还是需要一台电脑的。一旦你解决了一个问题之后,你就可以看到其他人的一些解决方案。这些解决方案往往有助于解决类似主题的其他一些问题。
2. The Python Challenge – 专门针对学习Python语言的一系列程序设计挑战。尽管任何语言都可以解决这些谜题,但是如果你用Python,解决这些问题会更简单一些。
3. Ruby Quiz – 一个可以使用任何语言解决程序挑战问题的集合,但是如果你想查看这些问题的评价,他们会默认的使用Ruby来解决。相对应的还会有一本书,《 最好的Ruby问答题》,讨论所选择问题可能的解决方案。
4. Top Coder – 定期的不同类别(算法,测试,设计,组装以及其他很多)程序设计比赛,同时会有来自微软和NSA等赞助商为获胜者提供的奖金。解决方案可以使用JAVA,C++,C#,或者VB。来看看比赛内容,感受一下你在比赛中可能遇到什么样类型的难题吧。同样这里还有大量,高水平的参赛者写的不错的指导教程。
5. UVa Online Judge – 数以百计来自过去编程比赛的问题,例如ACM国际编程大赛的题目。可以使用C,C++,Java或者Pascal提交解决方案。一定要看看这本书,《Programming Challenges | 挑战编程:程序设计竞赛训练手册 》,除此之外还有一本新书《From Baylor to Baylor》,收集了1991年到2006年期间 ,ACM-ICPC比赛决赛中所有的问题。
6. Sphere Online Judge – 数以百计的各种在线编程竞赛中的问题。最好的地方在于,你可以使用十几种不同的语言提交解决方案(参见网站难题列表的顶端,看看你最喜欢的语言是否包括在内)。
7. C Puzzles – 在这个页面上的谜题都是关于C语言常见的陷阱和常犯错误等。C语言的专家型人才可能会在很短的时间内漂亮的完成这些问题,但如果你不知道C语言的本质,这些问题可能会有点挑战。
8. Facebook Puzzles – 一个小型的编程问题网站,Facebook用来评估潜在雇员们的能力。你可以使用 C++、Erlang、Haskell、Java、OCaml、Perl、PHP、Python或者Ruby来提交解决方案。
9. Google Code Jam – 一个定期的编程比赛,参赛者使用指定的语言解决算法问题。我不确定Google有没有在2009年举办比赛的计划,不过你可以看看2008年比赛中的问题,掂量掂量一下自己。
10. Microsoft Interview Questions – 首先,我先说明,我完全反对在面试中使用这类谜题。很多问题都需要“灵光一现”来解决,而不需要现实世界中的逻辑思考能力。如果你使用这类问题面试应聘者,需要警告你的是,你可能要先看看这个人以前看没看过类似的问题。说到底,这些问题在面试之外做一做还是很有趣的。
11. wu:riddles – 数百个具有挑战的逻辑谜题,各种各样的难题。这些问题都标记了可能需要任何特殊的知识,例如:数学,物理,计算机科学或者国际象棋。
我忘记了什么了没?如果你在上边的列表中没看到你最喜欢的编程挑战或逻辑谜题网站,可以给我在留言里告诉我网站地址,我总是喜欢新的挑战!
来自留言的更新
非常感谢大家留言让我知道了新的谜题网站。下面这些是我以后会定期浏览的网站:
Programming Praxis 看起来是一个有希望的新博客,充满了编程练习让你“磨刀不误砍柴工”。看起来新的问题将会在二月份定期发布。我已经收藏了网站的RSS。
Code Kata 是Dave Thomas在2007年发行的《The Pragmatic Programmer | 程序员修炼之道》这本书中的一系列简短的问题。代码器是“简单的实际练习,让我们的试验和学习更简单的一个环境。”正是我要找的。
所有语言的程序员都将会想看看编程比赛的10大Prolog问题(免费的PDF电子书),还有99大Prolog问题。 (如果你不喜欢Prolog,你也可以用Haskell, Python, Scala, 或 Lisp做这99个题目。)
如果你对组织编程比赛感兴趣,可能需要看看美国计算机奥林匹克或者ACM编程竞赛题(在这里能看到的问题你也能在前面提到的UVA在线中找到。)
Al Zimmermann’s Programming Contests (竞赛名单) 目前比较经典的计算机编程问题,而且还有奖品哦。看起来竞赛刚刚启动几个月不到一年,还有足够时间参加本届比赛。
Anarchy Golf 这里有几百个问题,还有一个服务器,可以使用69种不同的语言提交解决方案。这个提醒了我,我忘记了Code Golf。跟任何其他网站不同,code golf是一个看谁的解决方案最短并且正确。JAVA编程人员可以去玩,但是Python和Perl在code golf更多一些。
最后,提醒一些读者,不仅仅有编程和逻辑类的谜题。国际象棋和围棋同样可以非常有趣。Chess.com有一个每日一题,适合休闲玩家进行挑战, GoGrinder是围棋问题中一个优秀的开源程序练习网站。
再次感谢那些花费时间分享他们的谜题网站的人们。希望不会影响到下周大家的工作状态。:)
*如果你不知道Office Space的那种感觉,跑出去到最近的磁带店**直接拿起一份拷贝看吧。
(译者注:Office Space是一部描写在Initech公司上班的一位电脑工程师,在办公室的那种崩溃的状态的电影。 )
** 哈哈哈, “音像店”! 我怎么了,像60岁嘛?看这里吧 Netflix.